pusher_rails 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +1 -0
- data/CHANGELOG.md +8 -0
- data/README.md +30 -3
- data/pusher_rails.gemspec +15 -8
- data/vendor/assets/javascripts/backpusher.js +157 -0
- metadata +25 -9
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
*.gem
|
data/CHANGELOG.md
ADDED
data/README.md
CHANGED
@@ -1,9 +1,36 @@
|
|
1
|
-
Pusher for Rails 3.1+
|
1
|
+
[Pusher](https://pusher.com) for Rails 3.1+
|
2
2
|
=====================
|
3
3
|
|
4
|
-
Adds
|
4
|
+
Adds:
|
5
|
+
- [pusher-gem v0.8.2](https://github.com/pusher/pusher-gem/tree/v0.8.2)
|
6
|
+
- [pusher.js v1.9.1](https://github.com/pusher/pusher-js/tree/v1.9.1)
|
7
|
+
- [backpusher.js](https://github.com/pusher/backpusher/commit/e61c9d7a761fcb48f312416408d1bf4ed418735b#diff-1)
|
8
|
+
|
9
|
+
This pulls in the *pusher-gem* as well as adding *pusher.js* and *backpusher.js* to the assets pipeline of your rails 3.1 app.
|
5
10
|
|
6
11
|
Add this to your app/assets/javascripts/application.js:
|
7
12
|
|
8
|
-
|
13
|
+
// if you want to use pusher.js
|
14
|
+
//= require pusher
|
15
|
+
|
16
|
+
// if you are using pusher.js + backbone.js
|
17
|
+
//= require backpusher
|
18
|
+
|
19
|
+
|
20
|
+
Licenses
|
21
|
+
========
|
9
22
|
|
23
|
+
/*
|
24
|
+
* Pusher JavaScript Library v1.9.1
|
25
|
+
* http://pusherapp.com/
|
26
|
+
*
|
27
|
+
* Copyright 2011, Pusher
|
28
|
+
* Released under the MIT licence.
|
29
|
+
*/
|
30
|
+
|
31
|
+
// Backpusher.js 0.0.1
|
32
|
+
// (c) 2011 Pusher.
|
33
|
+
// Backpusher may be freely distributed under the MIT license.
|
34
|
+
// For all details and documentation:
|
35
|
+
// http://github.com/pusher/backpusher
|
36
|
+
|
data/pusher_rails.gemspec
CHANGED
@@ -1,11 +1,18 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
|
1
4
|
Gem::Specification.new do |s|
|
2
|
-
s.name
|
3
|
-
s.version
|
4
|
-
s.
|
5
|
-
s.
|
6
|
-
s.
|
7
|
-
s.
|
8
|
-
s.
|
5
|
+
s.name = 'pusher_rails'
|
6
|
+
s.version = '0.1.2'
|
7
|
+
s.platform = Gem::Platform::RUBY
|
8
|
+
s.authors = ["David Grandinetti"]
|
9
|
+
s.email = ["dave@wegoto12.com"]
|
10
|
+
s.summary = 'Pusher integration for Rails 3.1+'
|
11
|
+
s.description = 'Adds pusher.js/backpusher.js to the asset pipeline and pusher-gemto to your app.'
|
12
|
+
s.homepage = 'https://github.com/dbgrandi/pusher_rails'
|
13
|
+
|
14
|
+
s.add_dependency "pusher", "~> 0.8.2"
|
9
15
|
|
10
|
-
s.files
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.require_paths = ["lib"]
|
11
18
|
end
|
@@ -0,0 +1,157 @@
|
|
1
|
+
// Backpusher.js 0.0.1
|
2
|
+
// (c) 2011 Pusher.
|
3
|
+
// Backpusher may be freely distributed under the MIT license.
|
4
|
+
// For all details and documentation:
|
5
|
+
// http://github.com/pusher/backpusher
|
6
|
+
|
7
|
+
;(function(exports, undefined){
|
8
|
+
// The top-level namespace. All public Backbone classes and modules will
|
9
|
+
// be attached to this. Exported for both CommonJS and the browser.
|
10
|
+
var Backpusher = function(channel, collection, options) {
|
11
|
+
if (!(this instanceof Backpusher)) {
|
12
|
+
return new Backpusher(channel, collection, options);
|
13
|
+
}
|
14
|
+
|
15
|
+
// Bind for the connection established, so
|
16
|
+
// we can setup the socket_id param.
|
17
|
+
if (channel.pusher.connection) {
|
18
|
+
channel.pusher.connection.bind('connected', function() {
|
19
|
+
Backbone.pusher_socket_id = channel.pusher.socket_id;
|
20
|
+
});
|
21
|
+
} else {
|
22
|
+
channel.pusher.bind('pusher:connection_established', function() {
|
23
|
+
Backbone.pusher_socket_id = channel.pusher.socket_id;
|
24
|
+
});
|
25
|
+
}
|
26
|
+
|
27
|
+
// Options is currently unused:
|
28
|
+
this.options = (options || {});
|
29
|
+
this.channel = channel;
|
30
|
+
this.collection = collection;
|
31
|
+
|
32
|
+
if (this.options.events) {
|
33
|
+
this.events = this.options.events;
|
34
|
+
} else {
|
35
|
+
this.events = Backpusher.defaultEvents;
|
36
|
+
}
|
37
|
+
|
38
|
+
this._bindEvents();
|
39
|
+
this.initialize(channel, collection, options);
|
40
|
+
};
|
41
|
+
|
42
|
+
_.extend(Backpusher.prototype, Backbone.Events, {
|
43
|
+
initialize: function() {},
|
44
|
+
|
45
|
+
_bindEvents: function() {
|
46
|
+
if (!this.events) return;
|
47
|
+
|
48
|
+
for (var event in this.events) {
|
49
|
+
this.channel.bind(event, _.bind(this.events[event], this));
|
50
|
+
}
|
51
|
+
},
|
52
|
+
|
53
|
+
_add: function(model) {
|
54
|
+
var Collection = this.collection;
|
55
|
+
model = new Collection.model(model);
|
56
|
+
|
57
|
+
Collection.add(model);
|
58
|
+
this.trigger('remote_create', model);
|
59
|
+
|
60
|
+
return model;
|
61
|
+
}
|
62
|
+
});
|
63
|
+
|
64
|
+
Backpusher.defaultEvents = {
|
65
|
+
created: function(pushed_model) {
|
66
|
+
return this._add(pushed_model);
|
67
|
+
},
|
68
|
+
|
69
|
+
updated: function(pushed_model) {
|
70
|
+
var model = this.collection.get(pushed_model);
|
71
|
+
|
72
|
+
if (model) {
|
73
|
+
model = model.set(pushed_model);
|
74
|
+
|
75
|
+
this.trigger('remote_update', model);
|
76
|
+
|
77
|
+
return model;
|
78
|
+
} else {
|
79
|
+
return this._add(pushed_model);
|
80
|
+
}
|
81
|
+
},
|
82
|
+
|
83
|
+
destroyed: function(pushed_model) {
|
84
|
+
var model = this.collection.get(pushed_model);
|
85
|
+
|
86
|
+
if (model) {
|
87
|
+
this.collection.remove(model);
|
88
|
+
this.trigger('remote_destroy', model);
|
89
|
+
|
90
|
+
return model;
|
91
|
+
}
|
92
|
+
}
|
93
|
+
};
|
94
|
+
|
95
|
+
// Map from CRUD to HTTP for our default `Backbone.sync` implementation.
|
96
|
+
var methodMap = {
|
97
|
+
'create': 'POST',
|
98
|
+
'update': 'PUT',
|
99
|
+
'delete': 'DELETE',
|
100
|
+
'read' : 'GET'
|
101
|
+
};
|
102
|
+
|
103
|
+
// Backpusher's Backbone.sync method:
|
104
|
+
// -------------
|
105
|
+
Backbone.sync = function(method, model, success, error) {
|
106
|
+
var type = methodMap[method];
|
107
|
+
var modelJSON = null;
|
108
|
+
|
109
|
+
if (method === 'create' || method === 'update') {
|
110
|
+
modelJSON = JSON.stringify(model.toJSON());
|
111
|
+
}
|
112
|
+
|
113
|
+
if (!(model && model.url)) {
|
114
|
+
throw new Error("A 'url' property or function must be specified");
|
115
|
+
}
|
116
|
+
|
117
|
+
var modelUrl = _.isFunction(model.url) ? model.url() : model.url;
|
118
|
+
modelUrl += '?socket_id=' + Backbone.pusher_socket_id;
|
119
|
+
|
120
|
+
// Default JSON-request options.
|
121
|
+
var params = {
|
122
|
+
url: modelUrl,
|
123
|
+
type: type,
|
124
|
+
contentType: 'application/json',
|
125
|
+
data: modelJSON,
|
126
|
+
dataType: 'json',
|
127
|
+
processData: false,
|
128
|
+
success: success,
|
129
|
+
error: error
|
130
|
+
};
|
131
|
+
|
132
|
+
// For older servers, emulate JSON by encoding the request into an HTML-form.
|
133
|
+
if (Backbone.emulateJSON) {
|
134
|
+
params.contentType = 'application/x-www-form-urlencoded';
|
135
|
+
params.processData = true;
|
136
|
+
params.data = modelJSON ? {model : modelJSON} : {};
|
137
|
+
}
|
138
|
+
|
139
|
+
// For older servers, emulate HTTP by mimicking the HTTP method with `_method`
|
140
|
+
// And an `X-HTTP-Method-Override` header.
|
141
|
+
if (Backbone.emulateHTTP) {
|
142
|
+
if (type === 'PUT' || type === 'DELETE') {
|
143
|
+
if (Backbone.emulateJSON) params.data._method = type;
|
144
|
+
params.type = 'POST';
|
145
|
+
params.beforeSend = function(xhr) {
|
146
|
+
xhr.setRequestHeader("X-HTTP-Method-Override", type);
|
147
|
+
};
|
148
|
+
}
|
149
|
+
}
|
150
|
+
|
151
|
+
// Make the request.
|
152
|
+
$.ajax(params);
|
153
|
+
};
|
154
|
+
|
155
|
+
// Export:
|
156
|
+
exports.Backpusher = Backpusher;
|
157
|
+
})((typeof exports !== 'undefined' ? exports : this));
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pusher_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,18 +9,34 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-07-
|
13
|
-
dependencies:
|
14
|
-
|
15
|
-
|
12
|
+
date: 2011-07-28 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: pusher
|
16
|
+
requirement: &2156325720 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 0.8.2
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *2156325720
|
25
|
+
description: Adds pusher.js/backpusher.js to the asset pipeline and pusher-gemto to
|
26
|
+
your app.
|
27
|
+
email:
|
28
|
+
- dave@wegoto12.com
|
16
29
|
executables: []
|
17
30
|
extensions: []
|
18
31
|
extra_rdoc_files: []
|
19
32
|
files:
|
20
|
-
-
|
21
|
-
-
|
22
|
-
-
|
23
|
-
-
|
33
|
+
- .gitignore
|
34
|
+
- CHANGELOG.md
|
35
|
+
- README.md
|
36
|
+
- lib/pusher_rails.rb
|
37
|
+
- pusher_rails.gemspec
|
38
|
+
- vendor/assets/javascripts/backpusher.js
|
39
|
+
- vendor/assets/javascripts/pusher.js
|
24
40
|
homepage: https://github.com/dbgrandi/pusher_rails
|
25
41
|
licenses: []
|
26
42
|
post_install_message:
|