backbone_sync-rails 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -7,6 +7,12 @@ system is Faye http://faye.jcoglan.com/.
7
7
 
8
8
  This assumes you already have a Backbone.js + Rails app.
9
9
 
10
+ 0. Install the gem, say in your `Gemfile`:
11
+
12
+ ```ruby
13
+ gem 'backbone_sync-rails', '~> 0.0.1'
14
+ ```
15
+
10
16
  1. Run a Faye server. It's pretty straightforward, check out `example_faye/run.sh` in this repo.
11
17
 
12
18
  2. Tell your app where the faye server is. This may differ per Rails.env.
@@ -31,7 +37,7 @@ This assumes you already have a Backbone.js + Rails app.
31
37
  <script type="text/javascript" src="<%= BackboneSync::Rails::Faye.root_address %>/faye.js"></script>
32
38
  ```
33
39
 
34
- 5. Observe model changes in Rails, and broadcast them. We provide the guts of
40
+ 5. Observe model changes in Rails, and broadcast them. The gem provides the guts of
35
41
  an observer for you, so add a file like `app/models/user_observer.rb`:
36
42
 
37
43
  ```ruby
@@ -61,9 +67,9 @@ This assumes you already have a Backbone.js + Rails app.
61
67
 
62
68
  ```javascript
63
69
  // For simplicitly, here it is in a router, or app bootstrap
64
- this.users = new MyApp.Collections.UsersCollection()
65
- new BackboneSync.RailsFayeSubscriber(this.users, channel: 'users')
66
- this.wizards.reset options.users
70
+ this.users = new MyApp.Collections.UsersCollection();
71
+ new BackboneSync.RailsFayeSubscriber(this.users, channel: 'users');
72
+ this.wizards.reset(options.users);
67
73
  ```
68
74
 
69
75
  7. Check it out! Open two browsers, do some stuff in one, and see your changes
@@ -76,6 +82,13 @@ If you're on a version of Rails < 3.1, you'll probably have to copy some files
76
82
  into your app by hand, like the `vendor/assets` files. You'll probably have to
77
83
  require the `lib/backbone_sync-rails/faye.rb` file yourself, too.
78
84
 
85
+ ## Example app
86
+
87
+ I wrote an untested example application that uses CoffeeScript and the
88
+ backbone-rails generators:
89
+
90
+ https://github.com/jasonm/wizards
91
+
79
92
  ## Caveats
80
93
 
81
94
  In short, I augment the `Backbone.Collection.prototype._add` function so
@@ -1,3 +1,3 @@
1
1
  module BackboneSyncRails
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -0,0 +1,80 @@
1
+ // Original CoffeeScript:
2
+ //
3
+ // window.BackboneSync = {}
4
+ //
5
+ // class BackboneSync.RailsFayeSubscriber
6
+ // constructor: (collection, options) ->
7
+ // @collection = collection
8
+ // @client = new Faye.Client('<%= BackboneSync::Rails::Faye.root_address %>/faye')
9
+ // @channel = options.channel
10
+ //
11
+ // @subscribe()
12
+ //
13
+ // subscribe: =>
14
+ // @client.subscribe "/sync/#{@channel}", @receive
15
+ //
16
+ // receive: (message) =>
17
+ // $.each message, (event, eventArguments) =>
18
+ // @[event](eventArguments)
19
+ //
20
+ // update: (params) =>
21
+ // $.each params, (id, attributes) =>
22
+ // model = @collection.get(id)
23
+ // model.set(attributes)
24
+ //
25
+ // create: (params) =>
26
+ // $.each params, (id, attributes) =>
27
+ // model = new @collection.model(attributes)
28
+ // @collection.add(model)
29
+ //
30
+ // destroy: (params) =>
31
+ // $.each params, (id, attributes) =>
32
+ // model = @collection.get(id)
33
+ // @collection.remove(model)
34
+
35
+ (function() {
36
+ var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
37
+ window.BackboneSync = {};
38
+ BackboneSync.RailsFayeSubscriber = (function() {
39
+ function RailsFayeSubscriber(collection, options) {
40
+ this.destroy = __bind(this.destroy, this);
41
+ this.create = __bind(this.create, this);
42
+ this.update = __bind(this.update, this);
43
+ this.receive = __bind(this.receive, this);
44
+ this.subscribe = __bind(this.subscribe, this); this.collection = collection;
45
+ this.client = new Faye.Client('<%= BackboneSync::Rails::Faye.root_address %>/faye');
46
+ this.channel = options.channel;
47
+ this.subscribe();
48
+ }
49
+ RailsFayeSubscriber.prototype.subscribe = function() {
50
+ return this.client.subscribe("/sync/" + this.channel, this.receive);
51
+ };
52
+ RailsFayeSubscriber.prototype.receive = function(message) {
53
+ return $.each(message, __bind(function(event, eventArguments) {
54
+ return this[event](eventArguments);
55
+ }, this));
56
+ };
57
+ RailsFayeSubscriber.prototype.update = function(params) {
58
+ return $.each(params, __bind(function(id, attributes) {
59
+ var model;
60
+ model = this.collection.get(id);
61
+ return model.set(attributes);
62
+ }, this));
63
+ };
64
+ RailsFayeSubscriber.prototype.create = function(params) {
65
+ return $.each(params, __bind(function(id, attributes) {
66
+ var model;
67
+ model = new this.collection.model(attributes);
68
+ return this.collection.add(model);
69
+ }, this));
70
+ };
71
+ RailsFayeSubscriber.prototype.destroy = function(params) {
72
+ return $.each(params, __bind(function(id, attributes) {
73
+ var model;
74
+ model = this.collection.get(id);
75
+ return this.collection.remove(model);
76
+ }, this));
77
+ };
78
+ return RailsFayeSubscriber;
79
+ })();
80
+ }).call(this);
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: backbone_sync-rails
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.1
5
+ version: 0.0.2
6
6
  platform: ruby
7
7
  authors:
8
8
  - Jason Morrison
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-08-28 00:00:00 -04:00
13
+ date: 2011-09-06 00:00:00 -04:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -52,7 +52,7 @@ files:
52
52
  - lib/backbone_sync-rails/version.rb
53
53
  - lib/backbone_sync-rails.rb
54
54
  - lib/tasks/backbone_sync-rails_tasks.rake
55
- - vendor/assets/javascripts/backbone_sync-rails/rails_faye_subscriber.js.coffee.erb
55
+ - vendor/assets/javascripts/backbone_sync-rails/rails_faye_subscriber.js.erb
56
56
  - vendor/assets/javascripts/extensions/backbone.collection.idempotent.js
57
57
  - MIT-LICENSE
58
58
  - Rakefile
@@ -1,31 +0,0 @@
1
- window.BackboneSync = {}
2
-
3
- class BackboneSync.RailsFayeSubscriber
4
- constructor: (collection, options) ->
5
- @collection = collection
6
- @client = new Faye.Client('<%= BackboneSync::Rails::Faye.root_address %>/faye')
7
- @channel = options.channel
8
-
9
- @subscribe()
10
-
11
- subscribe: =>
12
- @client.subscribe "/sync/#{@channel}", @receive
13
-
14
- receive: (message) =>
15
- $.each message, (event, eventArguments) =>
16
- @[event](eventArguments)
17
-
18
- update: (params) =>
19
- $.each params, (id, attributes) =>
20
- model = @collection.get(id)
21
- model.set(attributes)
22
-
23
- create: (params) =>
24
- $.each params, (id, attributes) =>
25
- model = new @collection.model(attributes)
26
- @collection.add(model)
27
-
28
- destroy: (params) =>
29
- $.each params, (id, attributes) =>
30
- model = @collection.get(id)
31
- @collection.remove(model)