Single Page Apps with Breeze and Ruby. //github.com/johnpapa/PluralsightSpaJumpStartFinal

Preview:

Citation preview

Single Page Apps with

Breeze and Ruby

http://pluralsight.com/training/Courses/TableOfContents/single-page-apps-jumpstart https://github.com/johnpapa/PluralsightSpaJumpStartFinal

John Papa’s Code Camper Jumpstart

Features

• Multi-entity model• Navigation properties / cached lookup lists• Projections / partial entities• Change notification• Dirty checking• Validation• Save• Local storage

Keys

• Client app is server agnostic (almost)• Ruby on Rails (RoR) server• Straight rails; no breeze.ruby components• “REST” API• Python web server• No MS

Not anti-Microsoft

If it works in Rubyit can work for you

Run it1. Download from GitHub2. Setup install gems and create sample MySQL database

3. Start rails server bundle exec rails s

4. Start client application server python –m http.server

5. Launch in browser http://localhost:8000

~\ccjs_ruby\rails>bundle exec rails s

Demo

Web Server

HTML, JavaScript, CSS, images

Code Tour

RoR Server

RoR Server – Configuration

Locate the My SQL database

RoR Server – ConfigurationBreeze Metadata

RoR Server – Model View Controller

RoR Server – Controllers

Cross Origin Resource Sharing

RoR Server – Models

RoR Server - ControllersSessions Controller

GET by id

GET all

PUT

POST

DELETE

Sessions Controller – Index (get all)

Partial entity if $select in query

Default sort order is time_slot_idbut client typically wants by ‘timeslot, track, speaker name’

Make speaker available in case sorting on speaker name

Projection (selected fields)

RoR Server – Session Views

RoR Server – Controllers

RoR Server - Views

API Differences

Rails serialization vs JSON.NET serialization

Rails Session

JSON.NET Session

• Rails-style entity property_names

• No $id node property

• $type node property is readable (v. anonymous type)

Rails REST update vs Breeze “save changes”

PUT to resource w/ id=1

Send only the changed values

POST to SaveChanges

Send entire entity

Adjust breeze clientfor Rails API

Configure adapters

Inject with RequireJS

Breeze extension points

AjaxRestInterceptorTweak the breeze ajax adapter to convert OData id-query into a REST URL

e.g., /breeze/Sessions/?$filter=id eq 1 /breeze/Sessions/1

DataServiceAdapterReplace POST to “SaveChanges” with RESTPUT/POST/DELETE to entity type controllers

JsonResultsAdapterIdentify “partial entity” JSON data nodes

NamingConvention Convert property namese.g., timeSlotId time_slot_id

Thank you, RubyTribe

Recommended