pusherable 1.0.4 → 1.1.0
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/.travis.yml +3 -1
- data/Gemfile +3 -3
- data/README.md +15 -9
- data/Rakefile +2 -2
- data/lib/pusherable/version.rb +1 -1
- data/lib/pusherable.rb +37 -29
- data/pusherable.gemspec +17 -16
- data/spec/mongoid_pusherable_spec.rb +60 -0
- data/spec/spec_helper.rb +17 -27
- data/spec/sqlite_pusherable_spec.rb +60 -0
- data/spec/support/models/mongoid.rb +13 -0
- data/spec/support/{models.rb → models/sqlite.rb} +1 -1
- metadata +69 -50
- data/spec/pusherable_spec.rb +0 -62
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
[](https://travis-ci.org/tonycoco/pusherable)
|
4
4
|
|
5
|
-
Adds callback hooks for your
|
5
|
+
Adds callback hooks for your _ActiveModel_ models for sending messages to a _Pusher_ channel.
|
6
6
|
|
7
7
|
## Installation
|
8
8
|
|
@@ -10,7 +10,7 @@ Install and configure _Pusher_ to work on your application by following the [pus
|
|
10
10
|
|
11
11
|
Then, add this line to your application's _Gemfile_:
|
12
12
|
|
13
|
-
gem
|
13
|
+
gem "pusherable"
|
14
14
|
|
15
15
|
And then execute:
|
16
16
|
|
@@ -22,17 +22,17 @@ Or install it yourself as:
|
|
22
22
|
|
23
23
|
## Usage
|
24
24
|
|
25
|
-
Add in the following lines to any
|
25
|
+
Add in the following lines to any _ActiveModel_ model class:
|
26
26
|
|
27
|
-
pusherable(
|
27
|
+
pusherable("some_channel")
|
28
28
|
|
29
29
|
_Pusherable_ has a default channel of `test_channel`, just like the _Pusher_ example docs, that it will publish to.
|
30
30
|
|
31
|
-
On your subscribed client(s), events will be triggered by _Pusher_ reflecting your
|
31
|
+
On your subscribed client(s), events will be triggered by _Pusher_ reflecting your ActiveModel_ create/update/destroy actions.
|
32
32
|
|
33
|
-
Here is a list of the
|
33
|
+
Here is a list of the _ActiveModel_ callbacks that trigger _Pusher_ events...
|
34
34
|
|
35
|
-
|
35
|
+
ActiveModel Callback => Triggered Event
|
36
36
|
----------------------------------------
|
37
37
|
after_create => "model.create"
|
38
38
|
after_update => "model.update"
|
@@ -40,17 +40,23 @@ Here is a list of the _ActiveRecord_ callbacks that trigger _Pusher_ events...
|
|
40
40
|
|
41
41
|
### Example
|
42
42
|
|
43
|
-
If you have an
|
43
|
+
If you have an _ActiveModel_ model called, _Post_, and you create a new record, _Pusher_ will receive an event called, "post.create".
|
44
44
|
It will also carry a payload of data containing a _JSON_ representation of the record (literally calling `to_json` on the record).
|
45
45
|
|
46
46
|
The following callbacks that trigger _Pusher_ events in this _Post_ example will then be...
|
47
47
|
|
48
|
-
|
48
|
+
ActiveModel Callback => Triggered Event
|
49
49
|
----------------------------------------
|
50
50
|
after_create => "post.create"
|
51
51
|
after_update => "post.update"
|
52
52
|
before_destroy => "post.destroy"
|
53
53
|
|
54
|
+
Currently this gem extends `ActiveRecord::Base` and `Mongoid::Document` if defined.
|
55
|
+
|
56
|
+
`ActiveRecord::Base.extend Pusherable`
|
57
|
+
|
58
|
+
For any other `ActiveModel` compliant "Data store", simply mirror this statement.
|
59
|
+
|
54
60
|
## Contributing
|
55
61
|
|
56
62
|
1. Fork it
|
data/Rakefile
CHANGED
data/lib/pusherable/version.rb
CHANGED
data/lib/pusherable.rb
CHANGED
@@ -1,46 +1,54 @@
|
|
1
|
-
require
|
1
|
+
require "pusherable/version"
|
2
2
|
|
3
3
|
module Pusherable
|
4
|
-
|
5
|
-
false
|
6
|
-
end
|
4
|
+
extend ActiveSupport::Concern
|
7
5
|
|
8
|
-
|
9
|
-
|
6
|
+
module ClassMethods
|
7
|
+
def pusherable?
|
8
|
+
false
|
9
|
+
end
|
10
10
|
|
11
|
-
|
12
|
-
|
11
|
+
def pusherable(pusherable_channel = "test_channel")
|
12
|
+
raise "Please `gem install pusher` and configure it to run in your app!" if Pusher.app_id.blank? || Pusher.key.blank? || Pusher.secret.blank?
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
after_update :pusherable_trigger_update
|
17
|
-
before_destroy :pusherable_trigger_destroy
|
14
|
+
class_attribute :pusherable_channel
|
15
|
+
self.pusherable_channel = pusherable_channel
|
18
16
|
|
19
|
-
|
20
|
-
|
21
|
-
|
17
|
+
class_eval do
|
18
|
+
after_create :pusherable_trigger_create
|
19
|
+
after_update :pusherable_trigger_update
|
20
|
+
before_destroy :pusherable_trigger_destroy
|
22
21
|
|
23
|
-
|
22
|
+
def self.pusherable?
|
23
|
+
true
|
24
|
+
end
|
24
25
|
|
25
|
-
|
26
|
-
self.class.name.underscore
|
27
|
-
end
|
26
|
+
private
|
28
27
|
|
29
|
-
|
30
|
-
|
31
|
-
|
28
|
+
def pusherable_class_name
|
29
|
+
self.class.name.underscore
|
30
|
+
end
|
32
31
|
|
33
|
-
|
34
|
-
|
35
|
-
|
32
|
+
def pusherable_trigger_create
|
33
|
+
Pusher.trigger(pusherable_channel, "#{pusherable_class_name}.create", self.to_json)
|
34
|
+
end
|
35
|
+
|
36
|
+
def pusherable_trigger_update
|
37
|
+
Pusher.trigger(pusherable_channel, "#{pusherable_class_name}.update", self.to_json)
|
38
|
+
end
|
36
39
|
|
37
|
-
|
38
|
-
|
40
|
+
def pusherable_trigger_destroy
|
41
|
+
Pusher.trigger(pusherable_channel, "#{pusherable_class_name}.destroy", self.to_json)
|
42
|
+
end
|
39
43
|
end
|
40
44
|
end
|
41
45
|
end
|
42
46
|
end
|
43
47
|
|
44
|
-
if defined?(ActiveRecord::Base)
|
45
|
-
ActiveRecord::Base.
|
48
|
+
if defined?(ActiveRecord) && defined?(ActiveRecord::Base)
|
49
|
+
ActiveRecord::Base.send :include, Pusherable
|
50
|
+
end
|
51
|
+
|
52
|
+
if defined?(Mongoid) && defined?(Mongoid::Document)
|
53
|
+
Mongoid::Document.send :include, Pusherable
|
46
54
|
end
|
data/pusherable.gemspec
CHANGED
@@ -1,27 +1,28 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
lib = File.expand_path(
|
2
|
+
lib = File.expand_path("../lib", __FILE__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require
|
4
|
+
require "pusherable/version"
|
5
5
|
|
6
6
|
Gem::Specification.new do |gem|
|
7
|
-
gem.name =
|
7
|
+
gem.name = "pusherable"
|
8
8
|
gem.version = Pusherable::VERSION
|
9
|
-
gem.authors = [
|
10
|
-
gem.email = [
|
11
|
-
gem.description = %q{Adds callback hooks for your
|
12
|
-
gem.summary = %q{Adds callback hooks
|
13
|
-
gem.homepage =
|
9
|
+
gem.authors = ["Tony Coconate"]
|
10
|
+
gem.email = ["me@tonycoconate.com"]
|
11
|
+
gem.description = %q{Adds callback hooks for your ActiveModel models for sending messages to a Pusher channel.}
|
12
|
+
gem.summary = %q{Adds callback hooks to your models for sending messages to a Pusher channel.}
|
13
|
+
gem.homepage = "https://github.com/tonycoco/pusherable"
|
14
14
|
|
15
15
|
gem.files = `git ls-files`.split($/)
|
16
16
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
17
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
|
-
gem.require_paths = [
|
18
|
+
gem.require_paths = ["lib"]
|
19
19
|
|
20
|
-
gem.add_development_dependency
|
21
|
-
gem.add_development_dependency
|
22
|
-
gem.add_development_dependency
|
23
|
-
gem.add_development_dependency
|
24
|
-
gem.add_development_dependency
|
25
|
-
gem.add_development_dependency
|
26
|
-
gem.add_development_dependency
|
20
|
+
gem.add_development_dependency "activerecord", ">= 3.2.0"
|
21
|
+
gem.add_development_dependency "activesupport", ">= 3.2.0"
|
22
|
+
gem.add_development_dependency "mongoid", ">= 3"
|
23
|
+
gem.add_development_dependency "mongoid-rspec", ">= 1.6"
|
24
|
+
gem.add_development_dependency "pusher", "~> 0.11.0"
|
25
|
+
gem.add_development_dependency "rake"
|
26
|
+
gem.add_development_dependency "rspec", ">= 2.12.0"
|
27
|
+
gem.add_development_dependency "sqlite3"
|
27
28
|
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Pusherable do
|
4
|
+
before do
|
5
|
+
Pusher.stub(:trigger).and_return true
|
6
|
+
end
|
7
|
+
|
8
|
+
describe "mongoid setup" do
|
9
|
+
it "should make Mongoid::Document models pusherable" do
|
10
|
+
expect(MongoidNonPusherableModel.pusherable?).to be_false
|
11
|
+
expect(MongoidPusherableModel.pusherable?).to be_true
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "callbacks" do
|
16
|
+
let(:pusherable_model) { MongoidPusherableModel.new }
|
17
|
+
let(:non_pusherable_model) { MongoidNonPusherableModel.new }
|
18
|
+
|
19
|
+
it "should trigger after create" do
|
20
|
+
pusherable_model.should_receive(:pusherable_trigger_create).once
|
21
|
+
pusherable_model.save
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should trigger after update" do
|
25
|
+
pusherable_model.should_receive(:pusherable_trigger_create).once
|
26
|
+
pusherable_model.save
|
27
|
+
pusherable_model.should_receive(:pusherable_trigger_update).once
|
28
|
+
pusherable_model.save!
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should trigger after update" do
|
32
|
+
pusherable_model.should_receive(:pusherable_trigger_create).once
|
33
|
+
pusherable_model.save
|
34
|
+
pusherable_model.should_receive(:pusherable_trigger_destroy).once
|
35
|
+
pusherable_model.destroy
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should not trigger events on a regular Mongoid model" do
|
39
|
+
non_pusherable_model.should_not_receive(:pusherable_trigger_create)
|
40
|
+
non_pusherable_model.save
|
41
|
+
non_pusherable_model.should_not_receive(:pusherable_trigger_update)
|
42
|
+
non_pusherable_model.save
|
43
|
+
non_pusherable_model.should_not_receive(:pusherable_trigger_destroy)
|
44
|
+
non_pusherable_model.destroy
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe "channels" do
|
49
|
+
let(:default_model) { MongoidDefaultedPusherableModel.new }
|
50
|
+
let(:setup_model) { MongoidPusherableModel.new }
|
51
|
+
|
52
|
+
it "should get and set the channel to push to" do
|
53
|
+
expect(MongoidDefaultedPusherableModel.pusherable_channel).to eq("test_channel")
|
54
|
+
expect(MongoidPusherableModel.pusherable_channel).to eq("our_channel")
|
55
|
+
|
56
|
+
expect(default_model.pusherable_channel).to eq("test_channel")
|
57
|
+
expect(setup_model.pusherable_channel).to eq("our_channel")
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,31 +1,21 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
1
|
+
require "rubygems"
|
2
|
+
require "bundler/setup"
|
3
|
+
require "pusher"
|
4
|
+
require "mongoid"
|
5
|
+
require "mongoid-rspec"
|
6
|
+
require "active_record"
|
6
7
|
|
7
|
-
Pusher.app_id =
|
8
|
-
Pusher.secret =
|
9
|
-
Pusher.key
|
8
|
+
Pusher.app_id = "123456"
|
9
|
+
Pusher.secret = "FAKE"
|
10
|
+
Pusher.key = "FAKE"
|
10
11
|
|
11
|
-
require
|
12
|
+
require "pusherable"
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
load File.dirname(__FILE__) + '/support/schema.rb'
|
16
|
-
load File.dirname(__FILE__) + '/support/models.rb'
|
17
|
-
|
18
|
-
RSpec.configure do |config|
|
19
|
-
config.before(:suite) do
|
20
|
-
DatabaseCleaner.strategy = :transaction
|
21
|
-
DatabaseCleaner.clean_with(:truncation)
|
22
|
-
end
|
23
|
-
|
24
|
-
config.before(:each) do
|
25
|
-
DatabaseCleaner.start
|
26
|
-
end
|
27
|
-
|
28
|
-
config.after(:each) do
|
29
|
-
DatabaseCleaner.clean
|
30
|
-
end
|
14
|
+
Mongoid.configure do |config|
|
15
|
+
config.connect_to("pusherable_test")
|
31
16
|
end
|
17
|
+
load File.dirname(__FILE__) + "/support/models/mongoid.rb"
|
18
|
+
|
19
|
+
ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:")
|
20
|
+
load File.dirname(__FILE__) + "/support/schema.rb"
|
21
|
+
load File.dirname(__FILE__) + "/support/models/sqlite.rb"
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Pusherable do
|
4
|
+
before do
|
5
|
+
Pusher.stub(:trigger).and_return true
|
6
|
+
end
|
7
|
+
|
8
|
+
describe "setup" do
|
9
|
+
it "should make ActiveRecord models pusherable" do
|
10
|
+
expect(NonPusherableModel.pusherable?).to be_false
|
11
|
+
expect(PusherableModel.pusherable?).to be_true
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "callbacks" do
|
16
|
+
let(:pusherable_model) { PusherableModel.new }
|
17
|
+
let(:non_pusherable_model) { NonPusherableModel.new }
|
18
|
+
|
19
|
+
it "should trigger after create" do
|
20
|
+
pusherable_model.should_receive(:pusherable_trigger_create).once
|
21
|
+
pusherable_model.save
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should trigger after update" do
|
25
|
+
pusherable_model.should_receive(:pusherable_trigger_create).once
|
26
|
+
pusherable_model.save
|
27
|
+
pusherable_model.should_receive(:pusherable_trigger_update).once
|
28
|
+
pusherable_model.save!
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should trigger after update" do
|
32
|
+
pusherable_model.should_receive(:pusherable_trigger_create).once
|
33
|
+
pusherable_model.save
|
34
|
+
pusherable_model.should_receive(:pusherable_trigger_destroy).once
|
35
|
+
pusherable_model.destroy
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should not trigger events on a regular ActiveRecord model" do
|
39
|
+
non_pusherable_model.should_not_receive(:pusherable_trigger_create)
|
40
|
+
non_pusherable_model.save
|
41
|
+
non_pusherable_model.should_not_receive(:pusherable_trigger_update)
|
42
|
+
non_pusherable_model.save
|
43
|
+
non_pusherable_model.should_not_receive(:pusherable_trigger_destroy)
|
44
|
+
non_pusherable_model.destroy
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe "channels" do
|
49
|
+
let(:default_model) { DefaultedPusherableModel.new }
|
50
|
+
let(:setup_model) { PusherableModel.new }
|
51
|
+
|
52
|
+
it "should get and set the channel to push to" do
|
53
|
+
expect(DefaultedPusherableModel.pusherable_channel).to eq("test_channel")
|
54
|
+
expect(PusherableModel.pusherable_channel).to eq("our_channel")
|
55
|
+
|
56
|
+
expect(default_model.pusherable_channel).to eq("test_channel")
|
57
|
+
expect(setup_model.pusherable_channel).to eq("our_channel")
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
metadata
CHANGED
@@ -2,128 +2,144 @@
|
|
2
2
|
name: pusherable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 1.0
|
5
|
+
version: 1.1.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Tony Coconate
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-05-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
16
|
+
type: :development
|
16
17
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ! '>='
|
20
20
|
- !ruby/object:Gem::Version
|
21
21
|
version: 3.2.0
|
22
|
-
type: :development
|
23
|
-
version_requirements: !ruby/object:Gem::Requirement
|
24
22
|
none: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
24
|
requirements:
|
26
|
-
- -
|
25
|
+
- - ! '>='
|
27
26
|
- !ruby/object:Gem::Version
|
28
27
|
version: 3.2.0
|
28
|
+
none: false
|
29
29
|
prerelease: false
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
|
-
name:
|
31
|
+
name: activesupport
|
32
|
+
type: :development
|
32
33
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
34
|
requirements:
|
35
|
-
- -
|
35
|
+
- - ! '>='
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version:
|
38
|
-
type: :development
|
39
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
version: 3.2.0
|
40
38
|
none: false
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
40
|
requirements:
|
42
|
-
- -
|
41
|
+
- - ! '>='
|
43
42
|
- !ruby/object:Gem::Version
|
44
|
-
version:
|
43
|
+
version: 3.2.0
|
44
|
+
none: false
|
45
45
|
prerelease: false
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
|
-
name:
|
47
|
+
name: mongoid
|
48
|
+
type: :development
|
48
49
|
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '3'
|
49
54
|
none: false
|
55
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
56
|
requirements:
|
51
57
|
- - ! '>='
|
52
58
|
- !ruby/object:Gem::Version
|
53
|
-
version: '
|
59
|
+
version: '3'
|
60
|
+
none: false
|
61
|
+
prerelease: false
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: mongoid-rspec
|
54
64
|
type: :development
|
55
|
-
|
65
|
+
requirement: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '1.6'
|
56
70
|
none: false
|
71
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
72
|
requirements:
|
58
73
|
- - ! '>='
|
59
74
|
- !ruby/object:Gem::Version
|
60
|
-
version: '
|
75
|
+
version: '1.6'
|
76
|
+
none: false
|
61
77
|
prerelease: false
|
62
78
|
- !ruby/object:Gem::Dependency
|
63
|
-
name:
|
79
|
+
name: pusher
|
80
|
+
type: :development
|
64
81
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
82
|
requirements:
|
67
83
|
- - ~>
|
68
84
|
- !ruby/object:Gem::Version
|
69
|
-
version:
|
70
|
-
type: :development
|
71
|
-
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
version: 0.11.0
|
72
86
|
none: false
|
87
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
88
|
requirements:
|
74
89
|
- - ~>
|
75
90
|
- !ruby/object:Gem::Version
|
76
|
-
version:
|
91
|
+
version: 0.11.0
|
92
|
+
none: false
|
77
93
|
prerelease: false
|
78
94
|
- !ruby/object:Gem::Dependency
|
79
|
-
name:
|
95
|
+
name: rake
|
96
|
+
type: :development
|
80
97
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
98
|
requirements:
|
83
99
|
- - ! '>='
|
84
100
|
- !ruby/object:Gem::Version
|
85
101
|
version: '0'
|
86
|
-
type: :development
|
87
|
-
version_requirements: !ruby/object:Gem::Requirement
|
88
102
|
none: false
|
103
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
104
|
requirements:
|
90
105
|
- - ! '>='
|
91
106
|
- !ruby/object:Gem::Version
|
92
107
|
version: '0'
|
108
|
+
none: false
|
93
109
|
prerelease: false
|
94
110
|
- !ruby/object:Gem::Dependency
|
95
|
-
name:
|
111
|
+
name: rspec
|
112
|
+
type: :development
|
96
113
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
114
|
requirements:
|
99
115
|
- - ! '>='
|
100
116
|
- !ruby/object:Gem::Version
|
101
|
-
version:
|
102
|
-
type: :development
|
103
|
-
version_requirements: !ruby/object:Gem::Requirement
|
117
|
+
version: 2.12.0
|
104
118
|
none: false
|
119
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
120
|
requirements:
|
106
121
|
- - ! '>='
|
107
122
|
- !ruby/object:Gem::Version
|
108
|
-
version:
|
123
|
+
version: 2.12.0
|
124
|
+
none: false
|
109
125
|
prerelease: false
|
110
126
|
- !ruby/object:Gem::Dependency
|
111
|
-
name:
|
127
|
+
name: sqlite3
|
128
|
+
type: :development
|
112
129
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
130
|
requirements:
|
115
131
|
- - ! '>='
|
116
132
|
- !ruby/object:Gem::Version
|
117
133
|
version: '0'
|
118
|
-
type: :development
|
119
|
-
version_requirements: !ruby/object:Gem::Requirement
|
120
134
|
none: false
|
135
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
136
|
requirements:
|
122
137
|
- - ! '>='
|
123
138
|
- !ruby/object:Gem::Version
|
124
139
|
version: '0'
|
140
|
+
none: false
|
125
141
|
prerelease: false
|
126
|
-
description: Adds callback hooks for your
|
142
|
+
description: Adds callback hooks for your ActiveModel models for sending messages
|
127
143
|
to a Pusher channel.
|
128
144
|
email:
|
129
145
|
- me@tonycoconate.com
|
@@ -140,9 +156,11 @@ files:
|
|
140
156
|
- lib/pusherable.rb
|
141
157
|
- lib/pusherable/version.rb
|
142
158
|
- pusherable.gemspec
|
143
|
-
- spec/
|
159
|
+
- spec/mongoid_pusherable_spec.rb
|
144
160
|
- spec/spec_helper.rb
|
145
|
-
- spec/
|
161
|
+
- spec/sqlite_pusherable_spec.rb
|
162
|
+
- spec/support/models/mongoid.rb
|
163
|
+
- spec/support/models/sqlite.rb
|
146
164
|
- spec/support/schema.rb
|
147
165
|
homepage: https://github.com/tonycoco/pusherable
|
148
166
|
licenses: []
|
@@ -151,32 +169,33 @@ rdoc_options: []
|
|
151
169
|
require_paths:
|
152
170
|
- lib
|
153
171
|
required_ruby_version: !ruby/object:Gem::Requirement
|
154
|
-
none: false
|
155
172
|
requirements:
|
156
173
|
- - ! '>='
|
157
174
|
- !ruby/object:Gem::Version
|
158
175
|
segments:
|
159
176
|
- 0
|
160
|
-
hash:
|
177
|
+
hash: 3897461447202856770
|
161
178
|
version: '0'
|
162
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
163
179
|
none: false
|
180
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
164
181
|
requirements:
|
165
182
|
- - ! '>='
|
166
183
|
- !ruby/object:Gem::Version
|
167
184
|
segments:
|
168
185
|
- 0
|
169
|
-
hash:
|
186
|
+
hash: 3897461447202856770
|
170
187
|
version: '0'
|
188
|
+
none: false
|
171
189
|
requirements: []
|
172
190
|
rubyforge_project:
|
173
191
|
rubygems_version: 1.8.23
|
174
192
|
signing_key:
|
175
193
|
specification_version: 3
|
176
|
-
summary: Adds callback hooks
|
177
|
-
a Pusher channel.
|
194
|
+
summary: Adds callback hooks to your models for sending messages to a Pusher channel.
|
178
195
|
test_files:
|
179
|
-
- spec/
|
196
|
+
- spec/mongoid_pusherable_spec.rb
|
180
197
|
- spec/spec_helper.rb
|
181
|
-
- spec/
|
198
|
+
- spec/sqlite_pusherable_spec.rb
|
199
|
+
- spec/support/models/mongoid.rb
|
200
|
+
- spec/support/models/sqlite.rb
|
182
201
|
- spec/support/schema.rb
|
data/spec/pusherable_spec.rb
DELETED
@@ -1,62 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Pusherable do
|
4
|
-
before do
|
5
|
-
Pusher.stub(:trigger).and_return true
|
6
|
-
end
|
7
|
-
|
8
|
-
describe 'setup' do
|
9
|
-
it 'should make ActiveRecord models pusherable' do
|
10
|
-
NonPusherableModel.pusherable?.should == false
|
11
|
-
PusherableModel.pusherable?.should == true
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
describe 'callbacks' do
|
16
|
-
before(:each) do
|
17
|
-
@pusherable_model = PusherableModel.new
|
18
|
-
@non_pusherable_model = NonPusherableModel.new
|
19
|
-
end
|
20
|
-
|
21
|
-
it 'should trigger after create' do
|
22
|
-
@pusherable_model.should_receive(:pusherable_trigger_create).once
|
23
|
-
@pusherable_model.save
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'should trigger after update' do
|
27
|
-
@pusherable_model.should_receive(:pusherable_trigger_create).once
|
28
|
-
@pusherable_model.save
|
29
|
-
@pusherable_model.should_receive(:pusherable_trigger_update).once
|
30
|
-
@pusherable_model.save!
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'should trigger after update' do
|
34
|
-
@pusherable_model.should_receive(:pusherable_trigger_create).once
|
35
|
-
@pusherable_model.save
|
36
|
-
@pusherable_model.should_receive(:pusherable_trigger_destroy).once
|
37
|
-
@pusherable_model.destroy
|
38
|
-
end
|
39
|
-
|
40
|
-
it 'should not trigger events on a regular ActiveRecord model' do
|
41
|
-
@non_pusherable_model.should_not_receive(:pusherable_trigger_create)
|
42
|
-
@non_pusherable_model.save
|
43
|
-
@non_pusherable_model.should_not_receive(:pusherable_trigger_update)
|
44
|
-
@non_pusherable_model.save
|
45
|
-
@non_pusherable_model.should_not_receive(:pusherable_trigger_destroy)
|
46
|
-
@non_pusherable_model.destroy
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
describe 'channels' do
|
51
|
-
it 'should get and set the channel to push to' do
|
52
|
-
DefaultedPusherableModel.pusherable_channel.should == 'test_channel'
|
53
|
-
PusherableModel.pusherable_channel.should == 'our_channel'
|
54
|
-
|
55
|
-
default_model = DefaultedPusherableModel.new
|
56
|
-
setup_model = PusherableModel.new
|
57
|
-
|
58
|
-
default_model.pusherable_channel.should == 'test_channel'
|
59
|
-
setup_model.pusherable_channel.should == 'our_channel'
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|