routemaster-client 0.0.2 → 0.0.3

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/Gemfile CHANGED
@@ -5,3 +5,10 @@ gemspec
5
5
 
6
6
  # just here to avoid a safety warning
7
7
  gem 'psych'
8
+
9
+ gem 'bundler'
10
+ gem 'rake'
11
+ gem 'guard-rspec'
12
+ gem 'webmock'
13
+ gem 'pry-nav'
14
+ gem 'rack-test'
data/Gemfile.lock CHANGED
@@ -1,10 +1,10 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- routemaster-client (0.0.2)
4
+ routemaster-client (0.0.3)
5
5
  faraday
6
6
  net-http-persistent
7
- sinatra
7
+ wisper (>= 1.4.0)
8
8
 
9
9
  GEM
10
10
  remote: http://eu.yarp.io/
@@ -26,14 +26,14 @@ GEM
26
26
  lumberjack (~> 1.0)
27
27
  pry (>= 0.9.12)
28
28
  thor (>= 0.18.1)
29
- guard-rspec (4.2.10)
29
+ guard-rspec (4.3.1)
30
30
  guard (~> 2.1)
31
31
  rspec (>= 2.14, < 4.0)
32
- listen (2.7.8)
32
+ listen (2.7.9)
33
33
  celluloid (>= 0.15.2)
34
34
  rb-fsevent (>= 0.9.3)
35
35
  rb-inotify (>= 0.9)
36
- lumberjack (1.0.6)
36
+ lumberjack (1.0.9)
37
37
  method_source (0.8.2)
38
38
  multipart-post (2.0.0)
39
39
  net-http-persistent (2.9.4)
@@ -45,8 +45,6 @@ GEM
45
45
  pry (~> 0.9.10)
46
46
  psych (2.0.5)
47
47
  rack (1.5.2)
48
- rack-protection (1.5.3)
49
- rack
50
48
  rack-test (0.6.2)
51
49
  rack (>= 1.0)
52
50
  rake (10.3.2)
@@ -57,37 +55,32 @@ GEM
57
55
  rspec-core (~> 3.0.0)
58
56
  rspec-expectations (~> 3.0.0)
59
57
  rspec-mocks (~> 3.0.0)
60
- rspec-core (3.0.1)
58
+ rspec-core (3.0.3)
61
59
  rspec-support (~> 3.0.0)
62
- rspec-expectations (3.0.1)
60
+ rspec-expectations (3.0.3)
63
61
  diff-lcs (>= 1.2.0, < 2.0)
64
62
  rspec-support (~> 3.0.0)
65
- rspec-mocks (3.0.1)
63
+ rspec-mocks (3.0.3)
66
64
  rspec-support (~> 3.0.0)
67
- rspec-support (3.0.0)
65
+ rspec-support (3.0.3)
68
66
  safe_yaml (1.0.3)
69
- sinatra (1.4.5)
70
- rack (~> 1.4)
71
- rack-protection (~> 1.4)
72
- tilt (~> 1.3, >= 1.3.4)
73
- slop (3.5.0)
67
+ slop (3.6.0)
74
68
  thor (0.19.1)
75
- tilt (1.4.1)
76
69
  timers (1.1.0)
77
70
  webmock (1.18.0)
78
71
  addressable (>= 2.3.6)
79
72
  crack (>= 0.3.2)
73
+ wisper (1.4.0)
80
74
 
81
75
  PLATFORMS
82
76
  ruby
83
77
 
84
78
  DEPENDENCIES
85
- bundler (~> 1.5)
79
+ bundler
86
80
  guard-rspec
87
81
  pry-nav
88
82
  psych
89
83
  rack-test
90
84
  rake
91
85
  routemaster-client!
92
- rspec
93
86
  webmock
data/README.md CHANGED
@@ -1,8 +1,15 @@
1
- # routemaster_client
1
+ # routemaster-client
2
2
 
3
3
  A Ruby API for the [Routemaster](https://github.com/HouseTrip/routemaster) event
4
4
  bus.
5
5
 
6
+ [![Version](https://badge.fury.io/rb/routemaster-client.svg)](https://rubygems.org/gems/routemaster-client)
7
+ &nbsp;
8
+ [![Build](https://travis-ci.org/HouseTrip/routemaster-client.svg?branch=master)](https://travis-ci.org/HouseTrip/routemaster-client)
9
+ &nbsp;
10
+ [![Docs](http://img.shields.io/badge/API%20docs-rubydoc.info-blue.svg)](http://rubydoc.info/github/HouseTrip/routemaster-client/frames/file/README.md)
11
+
12
+
6
13
  ## Installation
7
14
 
8
15
  Add this line to your application's Gemfile:
@@ -67,21 +74,25 @@ client.subscribe(
67
74
  ```ruby
68
75
  require 'routemaster/receiver'
69
76
 
70
- class Handler
71
- def on_events(batch)
77
+ class Listener
78
+ def on_events_received(batch)
72
79
  batch.each do |event|
73
80
  puts event['url']
74
81
  end
75
82
  end
76
83
  end
77
84
 
85
+ Wisper.subscribe(Listener.new, :prefix => true)
86
+
78
87
  use Routemaster::Receiver, {
79
88
  path: '/events',
80
- uuid: 'demo',
81
- handler: Handler.new
89
+ uuid: 'demo'
82
90
  }
83
91
  ```
84
92
 
93
+ This relies on the excellent event bus from the [wisper
94
+ gem](https://github.com/krisleech/wisper#wisper).
95
+
85
96
 
86
97
  **Monitor** the status of topics and subscriptions:
87
98
 
@@ -100,7 +111,7 @@ client.monitor_subscriptions
100
111
 
101
112
  ## Contributing
102
113
 
103
- 1. Fork it ( http://github.com/<my-github-username>/routemaster_client/fork )
114
+ 1. Fork it ( http://github.com/HouseTrip/routemaster-client/fork )
104
115
  2. Create your feature branch (`git checkout -b my-new-feature`)
105
116
  3. Commit your changes (`git commit -am 'Add some feature'`)
106
117
  4. Push to the branch (`git push origin my-new-feature`)
@@ -1,5 +1,5 @@
1
1
  module Routemaster
2
2
  class Client
3
- VERSION = '0.0.2'
3
+ VERSION = '0.0.3'
4
4
  end
5
5
  end
@@ -1,15 +1,21 @@
1
- require 'sinatra'
2
1
  require 'rack/auth/basic'
3
2
  require 'base64'
4
3
  require 'json'
4
+ require 'wisper'
5
5
 
6
6
  module Routemaster
7
7
  class Receiver
8
+ include Wisper::Publisher
9
+
8
10
  def initialize(app, options = {})
9
11
  @app = app
10
12
  @path = options[:path]
11
13
  @uuid = options[:uuid]
12
- @handler = options[:handler]
14
+
15
+ if options[:handler]
16
+ warn 'the :handler option is deprecated, listen to the :events_received event instead'
17
+ @handler = options[:handler]
18
+ end
13
19
  end
14
20
 
15
21
  def call(env)
@@ -19,7 +25,8 @@ module Routemaster
19
25
  return [403, {}, []] unless _valid_auth?(env)
20
26
  return [400, {}, []] unless payload = _extract_payload(env)
21
27
 
22
- @handler.on_events(payload)
28
+ @handler.on_events(payload) if @handler
29
+ publish(:events_received, payload)
23
30
  return [204, {}, []]
24
31
  end
25
32
  @app.call(env)
@@ -16,15 +16,7 @@ Gem::Specification.new do |spec|
16
16
  spec.test_files = spec.files.grep(%r{^spec/})
17
17
  spec.require_paths = %w(.)
18
18
 
19
- spec.add_development_dependency 'bundler', '~> 1.5'
20
- spec.add_development_dependency 'rake'
21
- spec.add_development_dependency 'rspec'
22
- spec.add_development_dependency 'guard-rspec'
23
- spec.add_development_dependency 'webmock'
24
- spec.add_development_dependency 'pry-nav'
25
- spec.add_development_dependency 'rack-test'
26
-
27
19
  spec.add_runtime_dependency 'faraday'
28
20
  spec.add_runtime_dependency 'net-http-persistent'
29
- spec.add_runtime_dependency 'sinatra'
21
+ spec.add_runtime_dependency 'wisper', '>= 1.4.0'
30
22
  end
@@ -3,7 +3,7 @@ require 'spec/support/rack_test'
3
3
  require 'routemaster/receiver'
4
4
 
5
5
  describe Routemaster::Receiver do
6
- let(:handler) { double 'handler', on_events: nil }
6
+ let(:handler) { double 'handler', on_events: nil, on_events_received: true }
7
7
  let(:app) { described_class.new(fake_app, options) }
8
8
 
9
9
 
@@ -14,8 +14,7 @@ describe Routemaster::Receiver do
14
14
  let(:options) do
15
15
  {
16
16
  path: '/events',
17
- uuid: 'demo',
18
- handler: handler
17
+ uuid: 'demo'
19
18
  }
20
19
  end
21
20
 
@@ -59,15 +58,51 @@ describe Routemaster::Receiver do
59
58
  expect(last_response.status).to eq(501)
60
59
  end
61
60
 
62
- it 'calls the handler when receiving an avent' do
63
- authorize 'demo', 'x'
64
- expect(handler).to receive(:on_events).exactly(:once)
65
- perform
61
+ context 'with the deprecated :handler option' do
62
+ let(:options) {{
63
+ path: '/events',
64
+ uuid: 'demo',
65
+ handler: handler
66
+ }}
67
+
68
+ it 'calls the handler when receiving an avent' do
69
+ authorize 'demo', 'x'
70
+ expect(handler).to receive(:on_events).exactly(:once)
71
+ perform
72
+ end
73
+
74
+ it 'calls the handler multiple times' do
75
+ authorize 'demo', 'x'
76
+ expect(handler).to receive(:on_events).exactly(3).times
77
+ 3.times { perform }
78
+ end
79
+
80
+ it 'warns about deprecation' do
81
+ expect_any_instance_of(described_class).to receive(:warn).with(/deprecated/)
82
+ app
83
+ end
66
84
  end
67
85
 
68
- it 'calls the handler multiple times' do
69
- authorize 'demo', 'x'
70
- expect(handler).to receive(:on_events).exactly(3).times
71
- 3.times { perform }
86
+ context 'with a listener' do
87
+ let(:handler) { double }
88
+ before { Wisper.subscribe(handler, scope: 'Routemaster::Receiver', prefix: true) }
89
+ after { Wisper::GlobalListeners.clear }
90
+
91
+ it 'broadcasts :events_received' do
92
+ authorize 'demo', 'x'
93
+
94
+ expect(handler).to receive(:on_events_received).exactly(:once)
95
+ # TODO:
96
+ # we'll be able to say this with a more recent wisper (and skip the
97
+ # handler):
98
+ # expect(app).to publish_event(:events_received)
99
+ perform
100
+ end
101
+
102
+ it 'can broadcast multiple times' do
103
+ authorize 'demo', 'x'
104
+ expect(handler).to receive(:on_events_received).exactly(3).times
105
+ 3.times { perform }
106
+ end
72
107
  end
73
108
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: routemaster-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,120 +9,8 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-07-24 00:00:00.000000000 Z
12
+ date: 2014-09-17 00:00:00.000000000 Z
13
13
  dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: bundler
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - "~>"
20
- - !ruby/object:Gem::Version
21
- version: '1.5'
22
- type: :development
23
- prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - "~>"
28
- - !ruby/object:Gem::Version
29
- version: '1.5'
30
- - !ruby/object:Gem::Dependency
31
- name: rake
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ">="
36
- - !ruby/object:Gem::Version
37
- version: '0'
38
- type: :development
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ">="
44
- - !ruby/object:Gem::Version
45
- version: '0'
46
- - !ruby/object:Gem::Dependency
47
- name: rspec
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ">="
52
- - !ruby/object:Gem::Version
53
- version: '0'
54
- type: :development
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- - !ruby/object:Gem::Dependency
63
- name: guard-rspec
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - ">="
68
- - !ruby/object:Gem::Version
69
- version: '0'
70
- type: :development
71
- prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ">="
76
- - !ruby/object:Gem::Version
77
- version: '0'
78
- - !ruby/object:Gem::Dependency
79
- name: webmock
80
- requirement: !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - ">="
84
- - !ruby/object:Gem::Version
85
- version: '0'
86
- type: :development
87
- prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ">="
92
- - !ruby/object:Gem::Version
93
- version: '0'
94
- - !ruby/object:Gem::Dependency
95
- name: pry-nav
96
- requirement: !ruby/object:Gem::Requirement
97
- none: false
98
- requirements:
99
- - - ">="
100
- - !ruby/object:Gem::Version
101
- version: '0'
102
- type: :development
103
- prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - ">="
108
- - !ruby/object:Gem::Version
109
- version: '0'
110
- - !ruby/object:Gem::Dependency
111
- name: rack-test
112
- requirement: !ruby/object:Gem::Requirement
113
- none: false
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
- requirements:
123
- - - ">="
124
- - !ruby/object:Gem::Version
125
- version: '0'
126
14
  - !ruby/object:Gem::Dependency
127
15
  name: faraday
128
16
  requirement: !ruby/object:Gem::Requirement
@@ -156,13 +44,13 @@ dependencies:
156
44
  - !ruby/object:Gem::Version
157
45
  version: '0'
158
46
  - !ruby/object:Gem::Dependency
159
- name: sinatra
47
+ name: wisper
160
48
  requirement: !ruby/object:Gem::Requirement
161
49
  none: false
162
50
  requirements:
163
51
  - - ">="
164
52
  - !ruby/object:Gem::Version
165
- version: '0'
53
+ version: 1.4.0
166
54
  type: :runtime
167
55
  prerelease: false
168
56
  version_requirements: !ruby/object:Gem::Requirement
@@ -170,7 +58,7 @@ dependencies:
170
58
  requirements:
171
59
  - - ">="
172
60
  - !ruby/object:Gem::Version
173
- version: '0'
61
+ version: 1.4.0
174
62
  description:
175
63
  email:
176
64
  - julien.letessier@gmail.com
@@ -214,7 +102,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
214
102
  version: '0'
215
103
  segments:
216
104
  - 0
217
- hash: -3992781914019292519
105
+ hash: -2540830957177487143
218
106
  required_rubygems_version: !ruby/object:Gem::Requirement
219
107
  none: false
220
108
  requirements:
@@ -223,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
223
111
  version: '0'
224
112
  segments:
225
113
  - 0
226
- hash: -3992781914019292519
114
+ hash: -2540830957177487143
227
115
  requirements: []
228
116
  rubyforge_project:
229
117
  rubygems_version: 1.8.23.2