wakame-dolphin 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ed5802b5b504f438ce7596102702118fd3c66285
4
+ data.tar.gz: 91ae217a6baad856c0b41e08efef0fb40d8ee0dd
5
+ SHA512:
6
+ metadata.gz: c1d2b450bcf024c52d91e493bda81a7583c788f7f50617679d0c564e4665d55c3b7dd705084f0ca996b1cdfed9fe92ace77948ccba6b470175eb6c75ba7cd127
7
+ data.tar.gz: e6ab15f45ab3468d290b8df5f95be44a9b80e4b248f22dd635d8d451fbba5abbb6ef3ef4b9ca1c0a88b92f6ee83fc999fa5025b49ee6eaf2f904a47bd7a44edc
@@ -57,6 +57,9 @@ module Dolphin
57
57
 
58
58
  def self.run(options)
59
59
 
60
+ # Default env is production.
61
+ ENV['RACK_ENV'] ||= 'production'
62
+
60
63
  # init config_file
61
64
  Dolphin.load_setting(options[:config_file])
62
65
 
@@ -18,7 +18,13 @@ module Dolphin
18
18
  Celluloid::Actor[:request_handler_rack_pool] = ::Reel::RackWorker.pool(size: options[:workers], args: [self])
19
19
 
20
20
  ::Reel::Server.supervise_as(:request_handler, options[:host], options[:port]) do |connection|
21
- Celluloid::Actor[:request_handler_rack_pool].handle(connection.detach)
21
+ begin
22
+ Celluloid::Actor[:request_handler_rack_pool].handle(connection.detach)
23
+ rescue => e
24
+
25
+ # Doesn't ouput error log because log output from reel.
26
+ connection.close
27
+ end
22
28
  end
23
29
  logger :info, "Running on ruby #{RUBY_VERSION} with selected #{Celluloid::task_class}"
24
30
  logger :info, "Listening on http://#{options[:host]}:#{options[:port]}"
@@ -29,15 +35,44 @@ module Dolphin
29
35
  Celluloid::Actor[:request_handler_rack_pool].terminate!
30
36
  end
31
37
  end
32
-
38
+
33
39
  class RequestApp < Sinatra::Base
34
40
  include Dolphin::Util
35
41
  helpers Dolphin::Helpers::RequestHelper
36
42
  register Sinatra::RespondWith
37
-
38
43
  respond_to :json
44
+ set :show_exceptions, false
45
+
46
+ # Rack middleware that rejects the request with unsupported content type.
47
+ # Returns 415 (Unsupported Media Type) for the unsupported request.
48
+ #
49
+ # Rack's nested param parser gets crashed from the request of
50
+ # incompatible header and body pair. so this middleware validates the request
51
+ # earlier than the parser runs.
52
+ class ValidateContentType
53
+ def initialize(app, content_types=[])
54
+ @app = app
55
+ @content_types = content_types
56
+ end
57
+
58
+ def call(env)
59
+ if env['REQUEST_METHOD'] == 'POST'
60
+ unless @content_types.find{ |c| c.downcase == env['CONTENT_TYPE'].downcase }
61
+ return [415,
62
+ {'Content-Type'=>'application/json'},
63
+ [MultiJson.dump({
64
+ "message" => "Unsupported Content Type: #{env['CONTENT_TYPE']}"
65
+ })]
66
+ ]
67
+ end
68
+ end
69
+ @app.call(env)
70
+ end
71
+ end
72
+ use ValidateContentType, ['application/json', 'text/json'].freeze
73
+
39
74
  GET_EVENT_LIMIT = 3000.freeze
40
-
75
+
41
76
  before do
42
77
  logger :info, {
43
78
  :host => request.host,
@@ -48,27 +83,34 @@ module Dolphin
48
83
 
49
84
  if request.post?
50
85
  v = request.body
51
- @params = MultiJson.load(v)
86
+ begin
87
+ @params = MultiJson.load(v)
88
+ rescue => e
89
+ raise e.message.split(':')[1].strip!
90
+ end
52
91
  elsif request.get?
53
92
  @params = request.params
54
93
  end
55
94
  end
56
95
 
57
- error(RuntimeError) do
96
+ error(RuntimeError) do |e|
58
97
  status(400)
59
- respond_with {message:'Failed'}
98
+ response_params = {
99
+ :message => e.message
100
+ }
101
+ respond_with response_params
60
102
  end
61
103
 
62
104
  post '/events' do
63
105
  raise 'Nothing parameters.' if @params.blank?
64
-
106
+
65
107
  event = {}
66
108
  event[:notification_id] = @notification_id
67
109
  event[:message_type] = @message_type
68
110
  event[:messages] = @params
69
-
111
+
70
112
  events = worker.future.put_event(event)
71
-
113
+
72
114
  # always success because put_event is async action.
73
115
  response_params = {
74
116
  :message => 'OK'
@@ -79,15 +121,15 @@ module Dolphin
79
121
  get '/events' do
80
122
  limit = @params['limit'].blank? ? GET_EVENT_LIMIT : @params['limit'].to_i
81
123
  raise "Requested over the limit. Limited to #{GET_EVENT_LIMIT}" if limit > GET_EVENT_LIMIT
82
-
124
+
83
125
  event = {}
84
126
  event[:count] = limit
85
127
  event[:start_time] = parse_time(@params['start_time']) unless @params['start_time'].blank?
86
128
  event[:start_id] = @params['start_id'] unless @params['start_id'].blank?
87
-
129
+
88
130
  events = worker.get_event(event)
89
131
  raise events.message if events.fail?
90
-
132
+
91
133
  response_params = {
92
134
  :results => events.message,
93
135
  :message => 'OK'
@@ -98,14 +140,14 @@ module Dolphin
98
140
 
99
141
  get '/notifications' do
100
142
  required 'notification_id'
101
-
143
+
102
144
  notification = {}
103
145
  notification[:id] = @notification_id
104
-
146
+
105
147
  result = worker.get_notification(notification)
106
148
  raise result.message if result.fail?
107
149
  raise "Not found notification id" if result.message.nil?
108
-
150
+
109
151
  response_params = {
110
152
  :results => result.message,
111
153
  :message => 'OK'
@@ -116,16 +158,16 @@ module Dolphin
116
158
  post '/notifications' do
117
159
  required 'notification_id'
118
160
  raise 'Nothing parameters.' if @params.blank?
119
-
161
+
120
162
  unsupported_sender_types = @params.keys - Sender::TYPES
121
163
  raise "Unsuppoted sender types: #{unsupported_sender_types.join(',')}" unless unsupported_sender_types.blank?
122
-
164
+
123
165
  notification = {}
124
166
  notification[:id] = @notification_id
125
167
  notification[:methods] = @params
126
168
  result = worker.put_notification(notification)
127
169
  raise result.message if result.fail?
128
-
170
+
129
171
  response_params = {
130
172
  :message => 'OK'
131
173
  }
@@ -134,13 +176,13 @@ module Dolphin
134
176
 
135
177
  delete '/notifications' do
136
178
  required 'notification_id'
137
-
179
+
138
180
  notification = {}
139
181
  notification[:id] = @notification_id
140
-
182
+
141
183
  result = worker.delete_notification(notification)
142
184
  raise result.message if result.fail?
143
-
185
+
144
186
  response_params = {
145
187
  :message => 'OK'
146
188
  }
@@ -1,3 +1,3 @@
1
1
  module Dolphin
2
- VERSION = '0.0.4'
2
+ VERSION = '0.0.5'
3
3
  end
@@ -117,7 +117,19 @@ describe 'Event API' do
117
117
  expect(res['message']).to eql 'OK'
118
118
  end
119
119
 
120
+ it 'expect to post sending content-type missing' do
121
+ content_type = 'application/x-www-form-urlencoded'
122
+ res = post('/events',
123
+ :headers => {
124
+ 'Content-Type' => content_type,
125
+ },
126
+ :body => {
127
+ 'message' => 'Alert!!!!'
128
+ }.to_json)
129
+
130
+ expect(res['message']).to eql "Unsupported Content Type: #{content_type}"
131
+ end
120
132
  before(:all) do
121
133
  FileUtils.rm(@temporary_mail) if File.exists?(@temporary_mail)
122
134
  end
123
- end
135
+ end
@@ -38,4 +38,5 @@ Gem::Specification.new do |spec|
38
38
  spec.add_runtime_dependency 'celluloid', '= 0.12.4'
39
39
  spec.add_runtime_dependency 'celluloid-io', '= 0.12.1'
40
40
  spec.add_runtime_dependency 'nio4r', '= 0.4.3'
41
+ spec.add_runtime_dependency 'http', '= 0.4.0'
41
42
  end
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wakame-dolphin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
5
- prerelease:
4
+ version: 0.0.5
6
5
  platform: ruby
7
6
  authors:
8
7
  - axsh Ltd.
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-09-11 00:00:00.000000000 Z
11
+ date: 2013-09-20 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: reel
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - '='
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - '='
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: actionmailer
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - '='
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - '='
44
39
  - !ruby/object:Gem::Version
@@ -46,7 +41,6 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: ltsv
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - '='
52
46
  - !ruby/object:Gem::Version
@@ -54,7 +48,6 @@ dependencies:
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - '='
60
53
  - !ruby/object:Gem::Version
@@ -62,7 +55,6 @@ dependencies:
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: extlib
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
59
  - - ~>
68
60
  - !ruby/object:Gem::Version
@@ -70,7 +62,6 @@ dependencies:
70
62
  type: :runtime
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
66
  - - ~>
76
67
  - !ruby/object:Gem::Version
@@ -78,7 +69,6 @@ dependencies:
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: multi_json
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
73
  - - '='
84
74
  - !ruby/object:Gem::Version
@@ -86,7 +76,6 @@ dependencies:
86
76
  type: :runtime
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
80
  - - '='
92
81
  - !ruby/object:Gem::Version
@@ -94,7 +83,6 @@ dependencies:
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: rake
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
87
  - - '='
100
88
  - !ruby/object:Gem::Version
@@ -102,7 +90,6 @@ dependencies:
102
90
  type: :runtime
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
94
  - - '='
108
95
  - !ruby/object:Gem::Version
@@ -110,7 +97,6 @@ dependencies:
110
97
  - !ruby/object:Gem::Dependency
111
98
  name: parseconfig
112
99
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
100
  requirements:
115
101
  - - '='
116
102
  - !ruby/object:Gem::Version
@@ -118,7 +104,6 @@ dependencies:
118
104
  type: :runtime
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
107
  requirements:
123
108
  - - '='
124
109
  - !ruby/object:Gem::Version
@@ -126,7 +111,6 @@ dependencies:
126
111
  - !ruby/object:Gem::Dependency
127
112
  name: erubis
128
113
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
114
  requirements:
131
115
  - - '='
132
116
  - !ruby/object:Gem::Version
@@ -134,7 +118,6 @@ dependencies:
134
118
  type: :runtime
135
119
  prerelease: false
136
120
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
121
  requirements:
139
122
  - - '='
140
123
  - !ruby/object:Gem::Version
@@ -142,7 +125,6 @@ dependencies:
142
125
  - !ruby/object:Gem::Dependency
143
126
  name: mail-iso-2022-jp
144
127
  requirement: !ruby/object:Gem::Requirement
145
- none: false
146
128
  requirements:
147
129
  - - '='
148
130
  - !ruby/object:Gem::Version
@@ -150,7 +132,6 @@ dependencies:
150
132
  type: :runtime
151
133
  prerelease: false
152
134
  version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
135
  requirements:
155
136
  - - '='
156
137
  - !ruby/object:Gem::Version
@@ -158,7 +139,6 @@ dependencies:
158
139
  - !ruby/object:Gem::Dependency
159
140
  name: simple_uuid
160
141
  requirement: !ruby/object:Gem::Requirement
161
- none: false
162
142
  requirements:
163
143
  - - '='
164
144
  - !ruby/object:Gem::Version
@@ -166,7 +146,6 @@ dependencies:
166
146
  type: :runtime
167
147
  prerelease: false
168
148
  version_requirements: !ruby/object:Gem::Requirement
169
- none: false
170
149
  requirements:
171
150
  - - '='
172
151
  - !ruby/object:Gem::Version
@@ -174,7 +153,6 @@ dependencies:
174
153
  - !ruby/object:Gem::Dependency
175
154
  name: sinatra
176
155
  requirement: !ruby/object:Gem::Requirement
177
- none: false
178
156
  requirements:
179
157
  - - ~>
180
158
  - !ruby/object:Gem::Version
@@ -182,7 +160,6 @@ dependencies:
182
160
  type: :runtime
183
161
  prerelease: false
184
162
  version_requirements: !ruby/object:Gem::Requirement
185
- none: false
186
163
  requirements:
187
164
  - - ~>
188
165
  - !ruby/object:Gem::Version
@@ -190,7 +167,6 @@ dependencies:
190
167
  - !ruby/object:Gem::Dependency
191
168
  name: sinatra-contrib
192
169
  requirement: !ruby/object:Gem::Requirement
193
- none: false
194
170
  requirements:
195
171
  - - ~>
196
172
  - !ruby/object:Gem::Version
@@ -198,7 +174,6 @@ dependencies:
198
174
  type: :runtime
199
175
  prerelease: false
200
176
  version_requirements: !ruby/object:Gem::Requirement
201
- none: false
202
177
  requirements:
203
178
  - - ~>
204
179
  - !ruby/object:Gem::Version
@@ -206,7 +181,6 @@ dependencies:
206
181
  - !ruby/object:Gem::Dependency
207
182
  name: celluloid
208
183
  requirement: !ruby/object:Gem::Requirement
209
- none: false
210
184
  requirements:
211
185
  - - '='
212
186
  - !ruby/object:Gem::Version
@@ -214,7 +188,6 @@ dependencies:
214
188
  type: :runtime
215
189
  prerelease: false
216
190
  version_requirements: !ruby/object:Gem::Requirement
217
- none: false
218
191
  requirements:
219
192
  - - '='
220
193
  - !ruby/object:Gem::Version
@@ -222,7 +195,6 @@ dependencies:
222
195
  - !ruby/object:Gem::Dependency
223
196
  name: celluloid-io
224
197
  requirement: !ruby/object:Gem::Requirement
225
- none: false
226
198
  requirements:
227
199
  - - '='
228
200
  - !ruby/object:Gem::Version
@@ -230,7 +202,6 @@ dependencies:
230
202
  type: :runtime
231
203
  prerelease: false
232
204
  version_requirements: !ruby/object:Gem::Requirement
233
- none: false
234
205
  requirements:
235
206
  - - '='
236
207
  - !ruby/object:Gem::Version
@@ -238,7 +209,6 @@ dependencies:
238
209
  - !ruby/object:Gem::Dependency
239
210
  name: nio4r
240
211
  requirement: !ruby/object:Gem::Requirement
241
- none: false
242
212
  requirements:
243
213
  - - '='
244
214
  - !ruby/object:Gem::Version
@@ -246,11 +216,24 @@ dependencies:
246
216
  type: :runtime
247
217
  prerelease: false
248
218
  version_requirements: !ruby/object:Gem::Requirement
249
- none: false
250
219
  requirements:
251
220
  - - '='
252
221
  - !ruby/object:Gem::Version
253
222
  version: 0.4.3
223
+ - !ruby/object:Gem::Dependency
224
+ name: http
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - '='
228
+ - !ruby/object:Gem::Version
229
+ version: 0.4.0
230
+ type: :runtime
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - '='
235
+ - !ruby/object:Gem::Version
236
+ version: 0.4.0
254
237
  description: notification service
255
238
  email:
256
239
  - dev@axsh.net
@@ -319,27 +302,26 @@ files:
319
302
  homepage: https://github.com/axsh/wakame-dolphin
320
303
  licenses:
321
304
  - LGPL 3.0
305
+ metadata: {}
322
306
  post_install_message:
323
307
  rdoc_options: []
324
308
  require_paths:
325
309
  - - lib
326
310
  required_ruby_version: !ruby/object:Gem::Requirement
327
- none: false
328
311
  requirements:
329
- - - ! '>='
312
+ - - '>='
330
313
  - !ruby/object:Gem::Version
331
314
  version: 1.9.3
332
315
  required_rubygems_version: !ruby/object:Gem::Requirement
333
- none: false
334
316
  requirements:
335
- - - ! '>='
317
+ - - '>='
336
318
  - !ruby/object:Gem::Version
337
319
  version: 1.3.6
338
320
  requirements: []
339
321
  rubyforge_project:
340
- rubygems_version: 1.8.23
322
+ rubygems_version: 2.0.3
341
323
  signing_key:
342
- specification_version: 3
324
+ specification_version: 4
343
325
  summary: notification service
344
326
  test_files:
345
327
  - spec/files/cassandra_models_spec.rb