entangled 0.0.7 → 0.0.8

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.
@@ -0,0 +1,266 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'Inclusion/exclusion' do
4
+ let(:stub_redis) do
5
+ mock("redis").tap do |redis|
6
+ redis.stubs(:publish)
7
+ Redis.stubs(:new).returns(redis)
8
+ end
9
+ end
10
+
11
+ describe 'Foo, only: :create' do
12
+ let(:foo) { Foo.create(body: 'foo') }
13
+
14
+ it 'publishes creation' do
15
+ redis = stub_redis
16
+
17
+ # Publishing to collection channel
18
+ expect(redis).to have_received(:publish).with(
19
+ 'foos', {
20
+ action: :create,
21
+ resource: foo
22
+ }.to_json
23
+ )
24
+
25
+ # Publishing to member channel
26
+ expect(redis).to have_received(:publish).with(
27
+ "foos/#{foo.to_param}", {
28
+ action: :create,
29
+ resource: foo
30
+ }.to_json
31
+ )
32
+ end
33
+
34
+ it 'does not publish update' do
35
+ redis = stub_redis
36
+
37
+ foo.update(body: 'bar')
38
+
39
+ expect(redis).to have_received(:publish).with(
40
+ 'foos', {
41
+ action: :update,
42
+ resource: foo
43
+ }.to_json
44
+ ).never
45
+
46
+ expect(redis).to have_received(:publish).with(
47
+ "foos/#{foo.to_param}", {
48
+ action: :update,
49
+ resource: foo
50
+ }.to_json
51
+ ).never
52
+ end
53
+
54
+ it 'does not publish destruction' do
55
+ redis = stub_redis
56
+
57
+ foo.destroy
58
+
59
+ expect(redis).to have_received(:publish).with(
60
+ 'foos', {
61
+ action: :destroy,
62
+ resource: foo
63
+ }.to_json
64
+ ).never
65
+
66
+ expect(redis).to have_received(:publish).with(
67
+ "foos/#{foo.to_param}", {
68
+ action: :destroy,
69
+ resource: foo
70
+ }.to_json
71
+ ).never
72
+ end
73
+ end
74
+
75
+ describe 'Bar, only: [:create, :update]' do
76
+ let(:bar) { Bar.create(body: 'bar') }
77
+
78
+ it 'publishes creation' do
79
+ redis = stub_redis
80
+
81
+ # Publishing to collection channel
82
+ expect(redis).to have_received(:publish).with(
83
+ 'bars', {
84
+ action: :create,
85
+ resource: bar
86
+ }.to_json
87
+ )
88
+
89
+ # Publishing to member channel
90
+ expect(redis).to have_received(:publish).with(
91
+ "bars/#{bar.to_param}", {
92
+ action: :create,
93
+ resource: bar
94
+ }.to_json
95
+ )
96
+ end
97
+
98
+ it 'publishes the update' do
99
+ redis = stub_redis
100
+
101
+ bar.update(body: 'bar')
102
+
103
+ expect(redis).to have_received(:publish).with(
104
+ 'bars', {
105
+ action: :update,
106
+ resource: bar
107
+ }.to_json
108
+ )
109
+
110
+ expect(redis).to have_received(:publish).with(
111
+ "bars/#{bar.to_param}", {
112
+ action: :update,
113
+ resource: bar
114
+ }.to_json
115
+ )
116
+ end
117
+
118
+ it 'does not publish destruction' do
119
+ redis = stub_redis
120
+
121
+ bar.destroy
122
+
123
+ expect(redis).to have_received(:publish).with(
124
+ 'bars', {
125
+ action: :destroy,
126
+ resource: bar
127
+ }.to_json
128
+ ).never
129
+
130
+ expect(redis).to have_received(:publish).with(
131
+ "bars/#{bar.to_param}", {
132
+ action: :destroy,
133
+ resource: bar
134
+ }.to_json
135
+ ).never
136
+ end
137
+ end
138
+
139
+ describe 'Foobar, except: :create' do
140
+ let(:foobar) { Foobar.create(body: 'foobar') }
141
+
142
+ it 'does not publish the creation' do
143
+ redis = stub_redis
144
+
145
+ # Publishing to collection channel
146
+ expect(redis).to have_received(:publish).with(
147
+ 'foobars', {
148
+ action: :create,
149
+ resource: foobar
150
+ }.to_json
151
+ ).never
152
+
153
+ # Publishing to member channel
154
+ expect(redis).to have_received(:publish).with(
155
+ "foobars/#{foobar.to_param}", {
156
+ action: :create,
157
+ resource: foobar
158
+ }.to_json
159
+ ).never
160
+ end
161
+
162
+ it 'publishes the update' do
163
+ redis = stub_redis
164
+
165
+ foobar.update(body: 'foobar')
166
+
167
+ expect(redis).to have_received(:publish).with(
168
+ 'foobars', {
169
+ action: :update,
170
+ resource: foobar
171
+ }.to_json
172
+ )
173
+
174
+ expect(redis).to have_received(:publish).with(
175
+ "foobars/#{foobar.to_param}", {
176
+ action: :update,
177
+ resource: foobar
178
+ }.to_json
179
+ )
180
+ end
181
+
182
+ it 'publishes the destruction' do
183
+ redis = stub_redis
184
+
185
+ foobar.destroy
186
+
187
+ expect(redis).to have_received(:publish).with(
188
+ 'foobars', {
189
+ action: :destroy,
190
+ resource: foobar
191
+ }.to_json
192
+ )
193
+
194
+ expect(redis).to have_received(:publish).with(
195
+ "foobars/#{foobar.to_param}", {
196
+ action: :destroy,
197
+ resource: foobar
198
+ }.to_json
199
+ )
200
+ end
201
+ end
202
+
203
+ describe 'Barfoo, except: [:update, :destroy]' do
204
+ let(:barfoo) { Barfoo.create(body: 'barfoo') }
205
+
206
+ it 'publishes the creation' do
207
+ redis = stub_redis
208
+
209
+ # Publishing to collection channel
210
+ expect(redis).to have_received(:publish).with(
211
+ 'barfoos', {
212
+ action: :create,
213
+ resource: barfoo
214
+ }.to_json
215
+ )
216
+
217
+ # Publishing to member channel
218
+ expect(redis).to have_received(:publish).with(
219
+ "barfoos/#{barfoo.to_param}", {
220
+ action: :create,
221
+ resource: barfoo
222
+ }.to_json
223
+ )
224
+ end
225
+
226
+ it 'dpes not publish the update' do
227
+ redis = stub_redis
228
+
229
+ barfoo.update(body: 'barfoo')
230
+
231
+ expect(redis).to have_received(:publish).with(
232
+ 'barfoos', {
233
+ action: :update,
234
+ resource: barfoo
235
+ }.to_json
236
+ ).never
237
+
238
+ expect(redis).to have_received(:publish).with(
239
+ "barfoos/#{barfoo.to_param}", {
240
+ action: :update,
241
+ resource: barfoo
242
+ }.to_json
243
+ ).never
244
+ end
245
+
246
+ it 'does not publish the destruction' do
247
+ redis = stub_redis
248
+
249
+ barfoo.destroy
250
+
251
+ expect(redis).to have_received(:publish).with(
252
+ 'barfoos', {
253
+ action: :destroy,
254
+ resource: barfoo
255
+ }.to_json
256
+ ).never
257
+
258
+ expect(redis).to have_received(:publish).with(
259
+ "barfoos/#{barfoo.to_param}", {
260
+ action: :destroy,
261
+ resource: barfoo
262
+ }.to_json
263
+ ).never
264
+ end
265
+ end
266
+ end
@@ -0,0 +1,110 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Message, type: :model do
4
+ describe 'Attributes' do
5
+ it { is_expected.to respond_to :body }
6
+ end
7
+
8
+ describe 'Methods' do
9
+ describe '.inferred_channel_name' do
10
+ it 'is the underscore, pluralized model name' do
11
+ expect(Message.inferred_channel_name).to eq 'messages'
12
+ end
13
+ end
14
+
15
+ describe '#entangle' do
16
+ let(:stub_redis) do
17
+ mock("redis").tap do |redis|
18
+ redis.stubs(:publish)
19
+ Redis.stubs(:new).returns(redis)
20
+ end
21
+ end
22
+
23
+ describe 'creation' do
24
+ let(:message) { Message.create(body: 'foo') }
25
+
26
+ it 'broadcasts the creation to the collection channel' do
27
+ redis = stub_redis
28
+
29
+ expect(redis).to have_received(:publish).with(
30
+ 'messages', {
31
+ action: :create,
32
+ resource: message
33
+ }.to_json
34
+ )
35
+ end
36
+
37
+ it 'broadcasts the creation to the member channel' do
38
+ redis = stub_redis
39
+
40
+ expect(redis).to have_received(:publish).with(
41
+ "messages/#{message.to_param}", {
42
+ action: :create,
43
+ resource: message
44
+ }.to_json
45
+ )
46
+ end
47
+ end
48
+
49
+ describe 'update' do
50
+ let!(:message) { Message.create(body: 'foo') }
51
+
52
+ it 'broadcasts the update to the collection channel' do
53
+ redis = stub_redis
54
+
55
+ message.update(body: 'bar')
56
+
57
+ expect(redis).to have_received(:publish).with(
58
+ 'messages', {
59
+ action: :update,
60
+ resource: message
61
+ }.to_json
62
+ )
63
+ end
64
+
65
+ it 'broadcasts the update to the member channel' do
66
+ redis = stub_redis
67
+
68
+ message.update(body: 'bar')
69
+
70
+ expect(redis).to have_received(:publish).with(
71
+ "messages/#{message.to_param}", {
72
+ action: :update,
73
+ resource: message
74
+ }.to_json
75
+ )
76
+ end
77
+ end
78
+
79
+ describe 'destruction' do
80
+ let!(:message) { Message.create(body: 'foo') }
81
+
82
+ it 'broadcasts the destruction to the collection channel' do
83
+ redis = stub_redis
84
+
85
+ message.destroy
86
+
87
+ expect(redis).to have_received(:publish).with(
88
+ 'messages', {
89
+ action: :destroy,
90
+ resource: message
91
+ }.to_json
92
+ )
93
+ end
94
+
95
+ it 'broadcasts the destruction to the member channel' do
96
+ redis = stub_redis
97
+
98
+ message.destroy
99
+
100
+ expect(redis).to have_received(:publish).with(
101
+ "messages/#{message.to_param}", {
102
+ action: :destroy,
103
+ resource: message
104
+ }.to_json
105
+ )
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end
@@ -1,7 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
- RSpec.describe "Inclusion/exclusion", type: :routing do
3
+ RSpec.describe 'Inclusion/exclusion', type: :routing do
4
4
  before(:context) do
5
+ # Create arbitrary controllers here rather than
6
+ # having a separate file for each in app/controllers
5
7
  class FoosController < ApplicationController; end
6
8
  class BarsController < ApplicationController; end
7
9
  class FoobarsController < ApplicationController; end
data/spec/spec_helper.rb CHANGED
@@ -1,29 +1,15 @@
1
- # require 'rspec'
2
- # require 'entangled'
3
-
4
- # ENV["RAILS_ENV"] ||= 'test'
5
- # require File.expand_path("../dummy/config/environment", __FILE__)
6
-
7
- # RSpec.configure do |config|
8
- # config.include RSpec::Rails::RequestExampleGroup, type: :routing
9
- # end
10
-
11
1
  ENV['RAILS_ENV'] ||= 'test'
12
2
 
13
3
  require File.expand_path("../dummy/config/environment.rb", __FILE__)
14
4
  require 'rspec/rails'
5
+ require 'bourne'
15
6
  require 'byebug'
16
- # require 'rspec/autorun'
17
7
  # require 'factory_girl_rails'
18
8
 
19
- Rails.backtrace_cleaner.remove_silencers!
20
-
21
9
  # Load support files
22
10
  Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
23
11
 
12
+ # For bourne mocking
24
13
  RSpec.configure do |config|
25
- config.mock_with :rspec
26
- config.use_transactional_fixtures = true
27
- config.infer_base_class_for_anonymous_controllers = false
28
- config.order = "random"
14
+ config.mock_with :mocha
29
15
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: entangled
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dennis Charles Hackethal
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-22 00:00:00.000000000 Z
11
+ date: 2015-02-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -56,30 +56,44 @@ dependencies:
56
56
  name: sqlite3
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '1.3'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: '1.3'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: byebug
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.5'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.5'
83
+ - !ruby/object:Gem::Dependency
84
+ name: bourne
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
74
88
  - !ruby/object:Gem::Version
75
- version: '0'
89
+ version: '1.6'
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
- - - ">="
94
+ - - "~>"
81
95
  - !ruby/object:Gem::Version
82
- version: '0'
96
+ version: '1.6'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: tubesock
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -108,6 +122,20 @@ dependencies:
108
122
  - - "~>"
109
123
  - !ruby/object:Gem::Version
110
124
  version: '4.2'
125
+ - !ruby/object:Gem::Dependency
126
+ name: redis
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '3.2'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '3.2'
111
139
  description: Makes Rails real time through websockets. Check out the JavaScript counterpart
112
140
  for the front end.
113
141
  email:
@@ -121,12 +149,7 @@ files:
121
149
  - LICENSE.txt
122
150
  - README.md
123
151
  - Rakefile
124
- - entangled-0.0.1.gem
125
- - entangled-0.0.2.gem
126
- - entangled-0.0.3.gem
127
- - entangled-0.0.4.gem
128
- - entangled-0.0.5.gem
129
- - entangled-0.0.6.gem
152
+ - dump.rdb
130
153
  - entangled.gemspec
131
154
  - lib/entangled.rb
132
155
  - lib/entangled/controller.rb
@@ -139,12 +162,16 @@ files:
139
162
  - spec/dummy/app/assets/stylesheets/application.css
140
163
  - spec/dummy/app/controllers/application_controller.rb
141
164
  - spec/dummy/app/controllers/concerns/.keep
142
- - spec/dummy/app/controllers/foo_controller.rb
143
165
  - spec/dummy/app/controllers/messages_controller.rb
144
166
  - spec/dummy/app/helpers/application_helper.rb
145
167
  - spec/dummy/app/mailers/.keep
146
168
  - spec/dummy/app/models/.keep
169
+ - spec/dummy/app/models/bar.rb
170
+ - spec/dummy/app/models/barfoo.rb
147
171
  - spec/dummy/app/models/concerns/.keep
172
+ - spec/dummy/app/models/foo.rb
173
+ - spec/dummy/app/models/foobar.rb
174
+ - spec/dummy/app/models/message.rb
148
175
  - spec/dummy/app/views/layouts/application.html.erb
149
176
  - spec/dummy/bin/bundle
150
177
  - spec/dummy/bin/rails
@@ -169,15 +196,25 @@ files:
169
196
  - spec/dummy/config/locales/en.yml
170
197
  - spec/dummy/config/routes.rb
171
198
  - spec/dummy/config/secrets.yml
199
+ - spec/dummy/db/development.sqlite3
200
+ - spec/dummy/db/migrate/20150222083608_create_messages.rb
201
+ - spec/dummy/db/migrate/20150223004816_create_foos.rb
202
+ - spec/dummy/db/migrate/20150223004834_create_bars.rb
203
+ - spec/dummy/db/migrate/20150223004841_create_foobars.rb
204
+ - spec/dummy/db/migrate/20150223004852_create_barfoos.rb
205
+ - spec/dummy/db/schema.rb
172
206
  - spec/dummy/db/test.sqlite3
173
207
  - spec/dummy/lib/assets/.keep
174
208
  - spec/dummy/log/.keep
209
+ - spec/dummy/log/development.log
175
210
  - spec/dummy/log/test.log
176
211
  - spec/dummy/public/404.html
177
212
  - spec/dummy/public/422.html
178
213
  - spec/dummy/public/500.html
179
214
  - spec/dummy/public/favicon.ico
180
- - spec/routing/foo_routing_spec.rb
215
+ - spec/models/inclusion_exclusion_spec.rb
216
+ - spec/models/message_spec.rb
217
+ - spec/routing/inclusion_exclusion_routing_spec.rb
181
218
  - spec/routing/messages_routing_spec.rb
182
219
  - spec/spec_helper.rb
183
220
  homepage: https://github.com/so-entangled/rails
@@ -208,9 +245,13 @@ test_files:
208
245
  - spec/dummy/app/assets/javascripts/application.js
209
246
  - spec/dummy/app/assets/stylesheets/application.css
210
247
  - spec/dummy/app/controllers/application_controller.rb
211
- - spec/dummy/app/controllers/foo_controller.rb
212
248
  - spec/dummy/app/controllers/messages_controller.rb
213
249
  - spec/dummy/app/helpers/application_helper.rb
250
+ - spec/dummy/app/models/bar.rb
251
+ - spec/dummy/app/models/barfoo.rb
252
+ - spec/dummy/app/models/foo.rb
253
+ - spec/dummy/app/models/foobar.rb
254
+ - spec/dummy/app/models/message.rb
214
255
  - spec/dummy/app/views/layouts/application.html.erb
215
256
  - spec/dummy/bin/bundle
216
257
  - spec/dummy/bin/rails
@@ -235,7 +276,15 @@ test_files:
235
276
  - spec/dummy/config/routes.rb
236
277
  - spec/dummy/config/secrets.yml
237
278
  - spec/dummy/config.ru
279
+ - spec/dummy/db/development.sqlite3
280
+ - spec/dummy/db/migrate/20150222083608_create_messages.rb
281
+ - spec/dummy/db/migrate/20150223004816_create_foos.rb
282
+ - spec/dummy/db/migrate/20150223004834_create_bars.rb
283
+ - spec/dummy/db/migrate/20150223004841_create_foobars.rb
284
+ - spec/dummy/db/migrate/20150223004852_create_barfoos.rb
285
+ - spec/dummy/db/schema.rb
238
286
  - spec/dummy/db/test.sqlite3
287
+ - spec/dummy/log/development.log
239
288
  - spec/dummy/log/test.log
240
289
  - spec/dummy/public/404.html
241
290
  - spec/dummy/public/422.html
@@ -243,6 +292,8 @@ test_files:
243
292
  - spec/dummy/public/favicon.ico
244
293
  - spec/dummy/Rakefile
245
294
  - spec/dummy/README.rdoc
246
- - spec/routing/foo_routing_spec.rb
295
+ - spec/models/inclusion_exclusion_spec.rb
296
+ - spec/models/message_spec.rb
297
+ - spec/routing/inclusion_exclusion_routing_spec.rb
247
298
  - spec/routing/messages_routing_spec.rb
248
299
  - spec/spec_helper.rb