es-readmodel 0.1.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 12ed03ded9ef3fbcf44ebd93b4c36cb59c757032
4
- data.tar.gz: a70370261a0d7d14650d2efa3731dd2b38efe118
3
+ metadata.gz: c07024ef0f57f993a1a7473791442ee8f1e98f97
4
+ data.tar.gz: f31b63a404a62e6a2abbef01bd99a943e554232d
5
5
  SHA512:
6
- metadata.gz: 2fdf091962a187dec7d5e2dbb47daccd45047dcfc25e2305d76224b311c7a3bf0a2a90f196eb8a630c22f4e209f1a3aa18c4e1d6074c58828a86df118ad3141e
7
- data.tar.gz: f56c0bd38141d11381cee702a24a2b9e4af70e90681d6edf0ed767a911101fe32984888c9811f2454e523d53a36550c8ef2eb115e8dd6d43250cba30eb0c7871
6
+ metadata.gz: 8cdfb4cd8853e515c6311476a9181a6e07900201dcca1f60b96d8d8bd240015ebd41f605bcadb3ef01ac05870cd4a200b96ad9de6707991810976f6e4960c71a
7
+ data.tar.gz: abe9a2419936c0b428c4b99274b1d96caaf24969038f8bbe6c2ae0e597e73de0f218b47e7d65931391b5ab21e1f789b317888f3b6b611f75185cdd712d123109
data/README.md CHANGED
@@ -4,7 +4,7 @@ An opinionated read model framework for EventStore.
4
4
 
5
5
  Your reducer can be anything that responds to #call.
6
6
  It will receive two arguments -- the current state and the event.
7
- The current state will be nil if no events have bee processed yet.
7
+ The current state will be nil if no events have been processed yet.
8
8
  The reducer function must return the new state.
9
9
 
10
10
  ## Routes
@@ -31,9 +31,8 @@ use Rack::Cors do
31
31
  end
32
32
  end
33
33
 
34
- use EsReadModel::Subscriber,
35
- es_host: ENV['ES_HOST'],
36
- es_port: ENV['ES_PORT'],
34
+ use EsReadModel::RackSubscriber,
35
+ es_url: 'http://localhost:2113',
37
36
  es_username: ENV['ES_USERNAME'],
38
37
  es_password: ENV['ES_PASSWORD'],
39
38
  reducer: ActiveUsers.new,
data/es-readmodel.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = 'es-readmodel'
5
- spec.version = '0.1.0'
5
+ spec.version = '1.0.0'
6
6
  spec.licenses = ['MIT']
7
7
  spec.authors = ['Kevin Rutherford']
8
8
  spec.email = ['kevin@rutherford-software.com']
@@ -0,0 +1,54 @@
1
+ require 'rack'
2
+ require 'json'
3
+
4
+ module EsReadModel
5
+
6
+ class RackSubscriber
7
+
8
+ attr_reader :status
9
+
10
+ def initialize(app, options)
11
+ @app = app
12
+ @listener = options[:listener]
13
+ @subscriber = Subscriber.new(options)
14
+ Thread.new { @subscriber.subscribe }
15
+ end
16
+
17
+ def call(env)
18
+ @request = Rack::Request.new(env)
19
+ if env['PATH_INFO'] == '/status'
20
+ status, headers, body = json_response(200, @subscriber.status)
21
+ else
22
+ env['readmodel.state'] = @subscriber.state
23
+ env['readmodel.available'] = @subscriber.status[:available]
24
+ env['readmodel.status'] = 'OK'
25
+ status, headers, body = @app.call(env)
26
+ end
27
+ @listener.call({
28
+ level: 'info',
29
+ tag: 'http.request',
30
+ msg: "#{env['REQUEST_METHOD']} #{@request.fullpath}",
31
+ status: status
32
+ })
33
+ [status, headers, body]
34
+ end
35
+
36
+ private
37
+
38
+ def json_response(status_code, body)
39
+ result = body.merge({
40
+ _links: { self: @request.fullpath }
41
+ })
42
+ [
43
+ status_code,
44
+ {
45
+ 'Content-Type' => 'application/json'
46
+ },
47
+ [result.to_json]
48
+ ]
49
+ end
50
+
51
+ end
52
+
53
+ end
54
+
@@ -1,5 +1,3 @@
1
- require 'rack'
2
- require 'json'
3
1
  require_relative './connection'
4
2
  require_relative './stream'
5
3
 
@@ -7,13 +5,12 @@ module EsReadModel
7
5
 
8
6
  class Subscriber
9
7
 
10
- attr_reader :status
8
+ attr_reader :status, :state
11
9
 
12
- def initialize(app, options)
13
- @app = app
10
+ def initialize(options)
14
11
  @listener = options[:listener]
15
12
  @initial_state = options[:initial]
16
- url = "http://#{options[:es_host]}:#{options[:es_port]}"
13
+ url = options[:es_url]
17
14
  @status = {
18
15
  available: false,
19
16
  startedAt: Time.now,
@@ -26,30 +23,8 @@ module EsReadModel
26
23
  }
27
24
  @connection = Connection.new(url, options[:es_username], options[:es_password])
28
25
  @reducer = options[:reducer]
29
- Thread.new { subscribe }
30
26
  end
31
27
 
32
- def call(env)
33
- @request = Rack::Request.new(env)
34
- if env['PATH_INFO'] == '/status'
35
- status, headers, body = json_response(200, @status)
36
- else
37
- env['readmodel.state'] = @state
38
- env['readmodel.available'] = @status[:available]
39
- env['readmodel.status'] = 'OK'
40
- status, headers, body = @app.call(env)
41
- end
42
- @listener.call({
43
- level: 'info',
44
- tag: 'http.request',
45
- msg: "#{env['REQUEST_METHOD']} #{@request.fullpath}",
46
- status: status
47
- })
48
- [status, headers, body]
49
- end
50
-
51
- private
52
-
53
28
  def subscribe
54
29
  loop do
55
30
  begin
@@ -72,6 +47,8 @@ module EsReadModel
72
47
  end
73
48
  end
74
49
 
50
+ private
51
+
75
52
  def subscribe_to_all_events
76
53
  loop do
77
54
  @status[:available] = true
@@ -100,19 +77,6 @@ module EsReadModel
100
77
  end
101
78
  end
102
79
 
103
- def json_response(status_code, body)
104
- result = body.merge({
105
- _links: { self: @request.fullpath }
106
- })
107
- [
108
- status_code,
109
- {
110
- 'Content-Type' => 'application/json'
111
- },
112
- [result.to_json]
113
- ]
114
- end
115
-
116
80
  end
117
81
 
118
82
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: es-readmodel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Rutherford
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-23 00:00:00.000000000 Z
11
+ date: 2018-05-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -126,6 +126,7 @@ files:
126
126
  - lib/es_readmodel/event.rb
127
127
  - lib/es_readmodel/logger.rb
128
128
  - lib/es_readmodel/page.rb
129
+ - lib/es_readmodel/rack_subscriber.rb
129
130
  - lib/es_readmodel/stream.rb
130
131
  - lib/es_readmodel/subscriber.rb
131
132
  homepage: https://github.com/kevinrutherford/es-readmodel