sync_client 0.0.14 → 0.1.7
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.
- checksums.yaml +15 -0
- data/README.md +91 -22
- data/app/models/sync_client/pub_message.rb +1 -1
- data/app/models/sync_client/service_resource/base.rb +4 -0
- data/app/models/sync_client/sub_message.rb +2 -2
- data/lib/generators/templates/sync_client.rb +3 -3
- data/lib/sync_client/configurator.rb +1 -0
- data/lib/sync_client/publisher/active_record_publisher.rb +20 -0
- data/lib/sync_client/publisher/base_publisher.rb +39 -0
- data/lib/sync_client/publisher/mongoid_publisher.rb +28 -0
- data/lib/sync_client/publisher/poro_publisher.rb +33 -0
- data/lib/sync_client/publisher.rb +9 -41
- data/lib/sync_client/queue_publisher.rb +2 -2
- data/lib/sync_client/sync_queue.rb +2 -2
- data/lib/sync_client/task_queue/sidekiq.rb +7 -0
- data/lib/sync_client/version.rb +1 -1
- data/test/dummy/app/models/stat.rb +11 -0
- data/test/dummy/app/services/game_publisher.rb +6 -0
- data/test/dummy/config/initializers/sync_client.rb +3 -3
- data/test/dummy/log/test.log +8048 -0
- data/test/lib/publisher/active_record_publisher_test.rb +82 -0
- data/test/lib/publisher/mongoid_publisher_test.rb +84 -0
- data/test/lib/publisher/poro_publisher_test.rb +84 -0
- data/test/lib/publisher_test.rb +14 -3
- data/test/lib/queue_publisher_test.rb +9 -0
- data/test/lib/sync_queue_test.rb +7 -0
- data/test/test_helper.rb +5 -3
- metadata +99 -84
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class ActiveRecordClass < ActiveRecord::Base
|
4
|
+
include SyncClient::Publisher
|
5
|
+
|
6
|
+
self.table_name = :players
|
7
|
+
publish_changes_of :name, :to => :test
|
8
|
+
end
|
9
|
+
|
10
|
+
class ActiveRecordPublisherTest < ActiveSupport::TestCase
|
11
|
+
context "ActiveRecord::Publisher" do
|
12
|
+
context "ClassMethods" do
|
13
|
+
subject { ActiveRecordClass }
|
14
|
+
|
15
|
+
should "respond to queue_publisher with defined resource" do
|
16
|
+
assert_not_nil subject.queue_publisher.sync_queues
|
17
|
+
end
|
18
|
+
|
19
|
+
should "setup an after_create callback" do
|
20
|
+
assert subject._create_callbacks.any? {|cb| cb.filter == :publish_create and cb.kind == :after },
|
21
|
+
'after_create :publish_create was not added'
|
22
|
+
end
|
23
|
+
|
24
|
+
should "setup a before_update callback" do
|
25
|
+
assert subject._update_callbacks.any? {|cb| cb.filter == :publish_update and cb.kind == :before },
|
26
|
+
'after_create :publish_update was not added'
|
27
|
+
end
|
28
|
+
|
29
|
+
should "setup an after_destroy callback" do
|
30
|
+
assert subject._destroy_callbacks.any? {|cb| cb.filter == :publish_destroy and cb.kind == :after },
|
31
|
+
'after_destroy :publish_destroy was not added'
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context "InstanceMethods" do
|
36
|
+
subject { ActiveRecordClass.new }
|
37
|
+
|
38
|
+
setup do
|
39
|
+
@publisher = SyncClient::QueuePublisher.new
|
40
|
+
subject.stubs(:queue_publisher).returns(@publisher)
|
41
|
+
end
|
42
|
+
|
43
|
+
context "#publish_create" do
|
44
|
+
should 'send #publish to queue_publisher with :create' do
|
45
|
+
@publisher.expects(:publish).with(:create, subject, {}).returns(true)
|
46
|
+
subject.publish_create
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context "#publish_update" do
|
51
|
+
should 'send #publish to queue_publisher with :update' do
|
52
|
+
@publisher.expects(:publish).with(:update, subject, {}).returns(true)
|
53
|
+
subject.publish_update
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
context "#publish_destroy" do
|
58
|
+
should 'send #publish to queue_publisher with :destroy' do
|
59
|
+
@publisher.expects(:publish).with(:destroy, subject, {}).returns(true)
|
60
|
+
subject.publish_destroy
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
context "#any_attributes_changed?" do
|
65
|
+
should 'return true if an attribute has changed' do
|
66
|
+
subject.name = 'Nick'
|
67
|
+
assert_equal true, subject.any_attributes_changed?([:name])
|
68
|
+
end
|
69
|
+
|
70
|
+
should 'return false if no attributes have changed' do
|
71
|
+
assert_equal false, subject.any_attributes_changed?([:name])
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
context "#publisher_attributes" do
|
76
|
+
should 'return the attributes hash' do
|
77
|
+
assert_equal subject.attributes, subject.publisher_attributes
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class MongoidPublisherTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
context "Mongoid::Publisher" do
|
6
|
+
context "ClassMethods" do
|
7
|
+
subject { Stat }
|
8
|
+
|
9
|
+
should "respond to queue_publisher with defined resource" do
|
10
|
+
assert_not_nil subject.queue_publisher.sync_queues
|
11
|
+
end
|
12
|
+
|
13
|
+
should "setup an after_create callback" do
|
14
|
+
assert subject._create_callbacks.any? {|cb| cb.filter == :publish_create and cb.kind == :after },
|
15
|
+
'after_create :publish_create was not added'
|
16
|
+
end
|
17
|
+
|
18
|
+
should "setup a before_update callback" do
|
19
|
+
assert subject._update_callbacks.any? {|cb| cb.filter == :publish_update and cb.kind == :before },
|
20
|
+
'after_create :publish_update was not added'
|
21
|
+
end
|
22
|
+
|
23
|
+
should "setup an after_destroy callback" do
|
24
|
+
assert subject._destroy_callbacks.any? {|cb| cb.filter == :publish_destroy and cb.kind == :after },
|
25
|
+
'after_destroy :publish_destroy was not added'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context "InstanceMethods" do
|
30
|
+
subject { Stat.new }
|
31
|
+
|
32
|
+
setup do
|
33
|
+
@publisher = SyncClient::QueuePublisher.new
|
34
|
+
Stat.stubs(:queue_publisher).returns(@publisher)
|
35
|
+
end
|
36
|
+
|
37
|
+
context "#publish_create" do
|
38
|
+
should 'send #publish to queue_publisher with :create' do
|
39
|
+
@publisher.expects(:publish).with(:create, subject, {}).returns(true)
|
40
|
+
subject.publish_create
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
context "#publish_update" do
|
45
|
+
should 'send #publish to queue_publisher with :update' do
|
46
|
+
@publisher.expects(:publish).with(:update, subject, {}).returns(true)
|
47
|
+
subject.publish_update
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
context "#publish_destroy" do
|
52
|
+
should 'send #publish to queue_publisher with :destroy' do
|
53
|
+
@publisher.expects(:publish).with(:destroy, subject, {}).returns(true)
|
54
|
+
subject.publish_destroy
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
context "#any_attributes_changed?" do
|
59
|
+
should 'return true if an attribute has changed' do
|
60
|
+
subject.values = {:goals => 9001}
|
61
|
+
assert_equal true, subject.any_attributes_changed?([:values])
|
62
|
+
end
|
63
|
+
|
64
|
+
should 'return false if no attributes have changed' do
|
65
|
+
assert_equal false, subject.any_attributes_changed?([:values])
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
context "#publisher_attributes" do
|
70
|
+
should 'format the attributes correctly' do
|
71
|
+
subject.player_id = 42
|
72
|
+
subject.values = {:goals => 9001}
|
73
|
+
|
74
|
+
assert_equal({
|
75
|
+
'id' => subject._id,
|
76
|
+
'player_id' => subject.pid,
|
77
|
+
'values' => subject.values,
|
78
|
+
}, subject.publisher_attributes)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class PoroPublisherTest < ActiveSupport::TestCase
|
4
|
+
context "Poro::Publisher" do
|
5
|
+
context "ClassMethods" do
|
6
|
+
subject { GamePublisher }
|
7
|
+
|
8
|
+
context "#publish_to" do
|
9
|
+
should "create a publisher if one doesn't exist" do
|
10
|
+
subject.publish_to :test
|
11
|
+
assert_not_nil subject.queue_publisher
|
12
|
+
end
|
13
|
+
|
14
|
+
context "with an existing publisher" do
|
15
|
+
setup do
|
16
|
+
@publisher = SyncClient::QueuePublisher.new
|
17
|
+
subject.instance_variable_set(:@queue_publisher, @publisher)
|
18
|
+
end
|
19
|
+
|
20
|
+
should 'add a publisher to the queue_publisher' do
|
21
|
+
@publisher.expects(:add_publisher).with([], {:to => :test, :for => :sync})
|
22
|
+
subject.publish_to :test
|
23
|
+
end
|
24
|
+
|
25
|
+
should 'add a publisher to the queue_publisher with custom :for' do
|
26
|
+
@publisher.expects(:add_publisher).with([], {:to => :test, :for => [:create, :sync]})
|
27
|
+
subject.publish_to :test, :for => [:create, :sync]
|
28
|
+
end
|
29
|
+
|
30
|
+
should 'add multiple publishers to the queue_publisher' do
|
31
|
+
@publisher.expects(:add_publisher).with([], {:to => :test1, :for => :sync})
|
32
|
+
@publisher.expects(:add_publisher).with([], {:to => :test2, :for => :sync})
|
33
|
+
subject.publish_to :test1
|
34
|
+
subject.publish_to :test2
|
35
|
+
end
|
36
|
+
|
37
|
+
should 'add multiple publishers in the same line' do
|
38
|
+
@publisher.expects(:add_publisher).with([], {:to => :test1, :for => :sync})
|
39
|
+
@publisher.expects(:add_publisher).with([], {:to => :test2, :for => :sync})
|
40
|
+
subject.publish_to :test1, :test2
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
should "respond to queue_publisher with defined resource" do
|
46
|
+
assert_not_nil subject.queue_publisher.sync_queues
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
context "InstanceMethods" do
|
52
|
+
subject { GamePublisher.new }
|
53
|
+
|
54
|
+
setup do
|
55
|
+
@publisher = SyncClient::QueuePublisher.new
|
56
|
+
GamePublisher.stubs(:queue_publisher).returns(@publisher)
|
57
|
+
end
|
58
|
+
|
59
|
+
context "#sync" do
|
60
|
+
should 'send #publish to queue_publisher with :sync' do
|
61
|
+
@publisher.expects(:publish).with(:sync, subject).returns(true)
|
62
|
+
subject.sync
|
63
|
+
end
|
64
|
+
|
65
|
+
should 'send #publish to queue_publisher with :create if action is passed in' do
|
66
|
+
@publisher.expects(:publish).with(:create, subject).returns(true)
|
67
|
+
subject.sync(:create)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
context "publisher_attributes" do
|
72
|
+
should 'include all of the instance variables' do
|
73
|
+
subject.instance_variable_set(:@game_id, 123)
|
74
|
+
subject.score = "12-21"
|
75
|
+
|
76
|
+
assert_equal({
|
77
|
+
'game_id' => 123,
|
78
|
+
'score' => '12-21',
|
79
|
+
},subject.publisher_attributes)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
data/test/lib/publisher_test.rb
CHANGED
@@ -22,22 +22,33 @@ class PublisherTest < ActiveSupport::TestCase
|
|
22
22
|
|
23
23
|
should "publish on create" do
|
24
24
|
@new_player.stubs(:queue_publisher).returns(@publisher)
|
25
|
-
@publisher.expects(:publish).with(:create, @new_player).returns(true)
|
25
|
+
@publisher.expects(:publish).with(:create, @new_player, {}).returns(true)
|
26
26
|
@new_player.save
|
27
27
|
end
|
28
28
|
|
29
29
|
should "publish on destoy" do
|
30
30
|
@player.stubs(:queue_publisher).returns(@publisher)
|
31
|
-
@publisher.expects(:publish).with(:destroy, @player).returns(true)
|
31
|
+
@publisher.expects(:publish).with(:destroy, @player, {}).returns(true)
|
32
32
|
@player.destroy
|
33
33
|
end
|
34
34
|
|
35
35
|
should "publish on update" do
|
36
36
|
@player.stubs(:queue_publisher).returns(@publisher)
|
37
|
-
@publisher.expects(:publish).with(:update, @player).returns(true)
|
37
|
+
@publisher.expects(:publish).with(:update, @player, {}).returns(true)
|
38
38
|
@player.save
|
39
39
|
end
|
40
40
|
|
41
|
+
context "#any_attributes_changed" do
|
42
|
+
should "return false if no attributes changed" do
|
43
|
+
assert_equal false, @player.any_attributes_changed?([:id, :name])
|
44
|
+
end
|
45
|
+
|
46
|
+
should "return true if any attribute changed" do
|
47
|
+
@player.stubs(:name_changed? => true)
|
48
|
+
assert_equal true, @player.any_attributes_changed?([:id, :name])
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
41
52
|
end
|
42
53
|
end
|
43
54
|
end
|
@@ -29,6 +29,15 @@ class QueuePublisherTest < ActiveSupport::TestCase
|
|
29
29
|
|
30
30
|
@publisher.publish(:create, @player)
|
31
31
|
end
|
32
|
+
|
33
|
+
should "queue message on publish if force=true" do
|
34
|
+
@sync_queue = @publisher.sync_queues.first
|
35
|
+
@sync_queue.stubs(:publishable?).returns(:false)
|
36
|
+
@publisher.expects(:queue_message).with(:create, @player, 'foo').returns(@message)
|
37
|
+
@message.expects(:publish).returns(true)
|
38
|
+
|
39
|
+
@publisher.publish(:create, @player, {force: true})
|
40
|
+
end
|
32
41
|
end
|
33
42
|
end
|
34
43
|
end
|
data/test/lib/sync_queue_test.rb
CHANGED
@@ -2,6 +2,13 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
class SyncQueueTest < ActiveSupport::TestCase
|
4
4
|
context "SyncQueue" do
|
5
|
+
context "Initialize" do
|
6
|
+
should 'force callbacks into an array' do
|
7
|
+
sync_queue = SyncClient::SyncQueue.new([:name], :to => :test, :for => :create)
|
8
|
+
assert_equal [:create], sync_queue.callbacks
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
5
12
|
context "Methods" do
|
6
13
|
setup do
|
7
14
|
@attributes = [:name]
|
data/test/test_helper.rb
CHANGED
@@ -1,13 +1,16 @@
|
|
1
1
|
# Configure Rails Environment
|
2
2
|
ENV["RAILS_ENV"] = "test"
|
3
3
|
|
4
|
+
require 'simplecov'
|
5
|
+
require 'simplecov-gem-adapter'
|
6
|
+
|
7
|
+
SimpleCov.start 'gem'
|
8
|
+
|
4
9
|
require File.expand_path("../dummy/config/environment.rb", __FILE__)
|
5
10
|
require "rails/test_help"
|
6
11
|
require 'test/unit'
|
7
12
|
require 'shoulda'
|
8
|
-
require 'simplecov'
|
9
13
|
require 'sync_client'
|
10
|
-
SimpleCov.start 'rails'
|
11
14
|
|
12
15
|
Rails.backtrace_cleaner.remove_silencers!
|
13
16
|
|
@@ -36,4 +39,3 @@ class ActiveSupport::TestCase
|
|
36
39
|
::SyncClient.logger.stubs(:info).returns(:true)
|
37
40
|
end
|
38
41
|
end
|
39
|
-
|