wakame-dolphin 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/.travis.yml CHANGED
@@ -1,10 +1,11 @@
1
1
  language: ruby
2
2
 
3
3
  env:
4
- - DB=mysql CONFIG_FILE=dolphin-mysql.conf.travis
4
+ - DB=mysql CONFIG_FILE=./config/dolphin-mysql.conf.travis
5
5
 
6
6
  rvm:
7
7
  - 1.9.3
8
+ - 2.0.0
8
9
 
9
10
  before_install:
10
11
  - gem update bundler
@@ -12,10 +13,10 @@ before_install:
12
13
  before_script:
13
14
  - mysql -e 'create database dolphin;'
14
15
  - bundle exec rake db:mysql:init
15
- - bundle exec ./bin/dolphin_server -c "./config/${CONFIG_FILE}" &
16
+ - bundle exec ./bin/dolphin_server &
16
17
 
17
18
  script:
18
- - bundle exec rspec ./spec/files/endpoint/
19
+ - bundle exec rake spec
19
20
 
20
21
  after_script:
21
22
  - bundle exec rake db:mysql:drop
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Dolphin
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/wakame-dolphin.png)](http://badge.fury.io/rb/wakame-dolphin) [![Build Status](https://travis-ci.org/axsh/wakame-dolphin.png?branch=master)](https://travis-ci.org/axsh/wakame-dolphin) [![Code Climate](https://codeclimate.com/github/axsh/wakame-dolphin.png)](https://codeclimate.com/github/axsh/wakame-dolphin)
4
+
3
5
  Dolphin is notification service.
4
6
 
5
7
  ### Install for production
@@ -68,10 +70,6 @@ $ ls ./tmp/mails
68
70
  $ bundle exec rake spec
69
71
  ```
70
72
 
71
- ### Code Status
72
-
73
- [![Build Status](https://travis-ci.org/axsh/wakame-dolphin.png?branch=master)](https://travis-ci.org/axsh/wakame-dolphin)
74
-
75
73
  ### License
76
74
 
77
75
  Copyright (c) Axsh Co. Components are included distribution under LGPL 3.0 and Apache 2.0
data/Rakefile CHANGED
@@ -3,11 +3,10 @@
3
3
  require "rubygems"
4
4
  require "bundler/setup"
5
5
 
6
- require File.join(File.expand_path('../', __FILE__), 'lib/dolphin')
6
+ $LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
7
+ require 'dolphin'
7
8
 
8
- unless ENV['CONFIG_FILE'].blank?
9
- Dolphin.settings(File.join(Dolphin.config_path, ENV['CONFIG_FILE']))
10
- end
9
+ Dolphin.load_setting
11
10
 
12
11
  require "rspec/core/rake_task"
13
12
  desc 'Run rspec'
data/bin/dolphin_server CHANGED
@@ -31,6 +31,8 @@ rescue => e
31
31
  exit!
32
32
  end
33
33
 
34
+ Signal.trap(:INT, "EXIT")
35
+
34
36
  require 'ltsv'
35
37
  require 'celluloid'
36
38
 
@@ -56,7 +58,7 @@ module Dolphin
56
58
  def self.run(options)
57
59
 
58
60
  # init config_file
59
- Dolphin.settings(options[:config_file])
61
+ Dolphin.load_setting(options[:config_file])
60
62
 
61
63
  if RUBY_VERSION.to_f >= 2
62
64
  # Celluloid::TaskFiber by default
@@ -88,7 +90,7 @@ module Dolphin
88
90
  # TODO: Chanage to rackup
89
91
 
90
92
  server_settings = Dolphin.settings['server']
91
- RequestHandler.new(server_settings['host'], server_settings['port'])
93
+ RequestHandler.new(server_settings['host'], server_settings['port']).start
92
94
 
93
95
  Manager.run
94
96
  end
@@ -24,3 +24,10 @@ type = file
24
24
  [logger]
25
25
  format = human_readable
26
26
  # format = ltsv
27
+
28
+ [template]
29
+ template_path = ''
30
+ helper_module_path = ''
31
+
32
+ [template_variables]
33
+ # foo = bar
@@ -6,43 +6,6 @@ module Dolphin
6
6
  module Helpers
7
7
  module RequestHelper
8
8
 
9
- def attach_request_params(request)
10
- raise "Unsuppoted Content-Type: #{request.env['Content-Type']}" unless request.env['Content-Type'] === 'application/json'
11
- @params = {}
12
- @notification_id = request.env['X-Notification-Id']
13
- @message_type = request.env['X-Message-Type']
14
- case request.method
15
- when "POST"
16
- v = request.input.to_a[0]
17
- @params = MultiJson.load(v)
18
- when "GET"
19
- @params = parse_query_string(request.env["QUERY_STRING"])
20
- end
21
- @params
22
- end
23
-
24
- def run(request, &blk)
25
- begin
26
- attach_request_params(request)
27
- logger :info, @params
28
- blk.call
29
- rescue LoadError => e
30
- logger :error, e
31
- [400, {}, MultiJson.dump({
32
- :message => 'Request faild.'
33
- })]
34
- rescue => e
35
- logger :error, e
36
- [400, {}, MultiJson.dump({
37
- :message => e.message
38
- })]
39
- end
40
- end
41
-
42
- def respond_with(data)
43
- [200, {}, MultiJson.dump(data)]
44
- end
45
-
46
9
  def required(name)
47
10
  case name
48
11
  when 'notification_id'
@@ -50,19 +13,6 @@ module Dolphin
50
13
  end
51
14
  end
52
15
 
53
- private
54
- def parse_query_string(query_string)
55
- params = {}
56
- unless query_string.blank?
57
- parts = query_string.split('&')
58
- parts.collect do |part|
59
- key, value = part.split('=')
60
- params.store(key, value)
61
- end
62
- end
63
- params
64
- end
65
-
66
16
  def parse_time(time)
67
17
  return nil if time.blank? || !time.is_a?(String)
68
18
  Time.parse(URI.decode(time)).to_time
@@ -8,6 +8,17 @@ module Dolphin
8
8
 
9
9
  include Dolphin::Helpers::Message::ZabbixHelper
10
10
 
11
+ # Load plugable helpers
12
+ if Dolphin.settings['template']
13
+ Dir.glob(File.join(Dolphin.settings['template']['helper_module_path'], '*_helper.rb')).each {|f|
14
+ require f
15
+ }
16
+ end
17
+
18
+ Dolphin::Helpers::Message.constants.each {|c|
19
+ include Dolphin::Helpers::Message.const_get(c)
20
+ }
21
+
11
22
  def build(template_str, params)
12
23
  template = Erubis::Eruby.new(template_str)
13
24
  if params.is_a? Hash
@@ -77,13 +88,22 @@ module Dolphin
77
88
 
78
89
  private
79
90
  def template(template_id)
80
- file_path = File.join(template_path, template_file(template_id))
81
- if File.exists? file_path
82
- File.read(file_path, :encoding => Encoding::UTF_8)
83
- else
84
- logger :warn, "File not found #{file_path}"
85
- nil
91
+ load_target_templates = []
92
+
93
+ if Dolphin.settings['template']
94
+ load_target_templates << File.join(Dolphin.settings['template']['template_path'], 'email')
86
95
  end
96
+
97
+ load_target_templates << template_path
98
+ load_target_templates.each {|path|
99
+ file_path = File.join(path, template_file(template_id))
100
+ if File.exists? file_path
101
+ return File.read(file_path, :encoding => Encoding::UTF_8)
102
+ else
103
+ logger :warn, "File not found #{file_path}"
104
+ return nil
105
+ end
106
+ }
87
107
  end
88
108
 
89
109
  def template_file(template_id)
@@ -95,4 +115,4 @@ module Dolphin
95
115
  end
96
116
  end
97
117
  end
98
- end
118
+ end
@@ -7,7 +7,9 @@ module Dolphin::Models
7
7
  class Notification < Base
8
8
  def get(id)
9
9
  res = db.find(:uuid => id)
10
- MultiJson.load(res.value)
10
+ if res
11
+ MultiJson.load(res.value)
12
+ end
11
13
  end
12
14
 
13
15
  def put(id, methods)
@@ -1,145 +1,150 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
- require 'reel/app'
3
+ require 'reel'
4
4
  require 'extlib/blank'
5
+ require 'sinatra/base'
6
+ require 'sinatra/respond_with'
5
7
 
6
8
  module Dolphin
7
- class RequestHandler
8
- include Reel::App
9
+ class RequestHandler < Rack::Handler::Reel
9
10
  include Dolphin::Util
10
- include Dolphin::Helpers::RequestHelper
11
-
12
- GET_EVENT_LIMIT = 30.freeze
13
11
 
14
12
  def initialize(host, port)
15
-
16
- # TODO: Fix Celluloid.logger loading order.
13
+ super({:host=>host, :port=>port, :app=>RequestApp.new})
17
14
  logger :info, "Load settings in #{Dolphin.config}"
15
+ end
18
16
 
19
- @server = Reel::Server.supervise_as(:reques_handler, host, port) do |connection|
17
+ def start
18
+ Celluloid::Actor[:request_handler_rack_pool] = ::Reel::RackWorker.pool(size: options[:workers], args: [self])
20
19
 
21
- while request = connection.request
22
- begin
23
- logger :info, {
24
- :host => request.headers["Host"],
25
- :user_agent => request.headers["User-Agent"]
26
- }
27
- options = {
28
- :method => request.method,
29
- :input => request.body
30
- }
31
- options.merge!(request.headers)
32
- status, headers_or_body, body = call Rack::MockRequest.env_for(request.url, options)
33
- connection.respond status_symbol(status), headers_or_body, body.to_s
34
- rescue => e
35
- logger :error, e
36
- break
37
- end
38
- end
20
+ ::Reel::Server.supervise_as(:request_handler, options[:host], options[:port]) do |connection|
21
+ Celluloid::Actor[:request_handler_rack_pool].handle(connection.detach)
39
22
  end
40
23
  logger :info, "Running on ruby #{RUBY_VERSION} with selected #{Celluloid::task_class}"
41
- logger :info, "Listening on http://#{host}:#{port}"
42
- @server
24
+ logger :info, "Listening on http://#{options[:host]}:#{options[:port]}"
43
25
  end
44
26
 
45
- post '/events' do |request|
46
- run(request) do
47
-
48
- raise 'Nothing parameters.' if @params.blank?
49
-
50
- event = {}
51
- event[:notification_id] = @notification_id
52
- event[:message_type] = @message_type
53
- event[:messages] = @params
54
-
55
- events = worker.future.put_event(event)
56
-
57
- # always success because put_event is async action.
58
- response_params = {
59
- :message => 'OK'
60
- }
61
- respond_with response_params
62
- end
27
+ def stop
28
+ Celluloid::Actor[:request_handler].terminate!
29
+ Celluloid::Actor[:request_handler_rack_pool].terminate!
63
30
  end
64
-
65
- get '/events' do |request|
66
- run(request) do
67
-
68
- limit = @params['limit'].blank? ? GET_EVENT_LIMIT : @params['limit'].to_i
69
- raise "Requested over the limit. Limited to #{GET_EVENT_LIMIT}" if limit > GET_EVENT_LIMIT
70
-
71
- params = {}
72
- params[:count] = limit
73
- params[:start_time] = parse_time(@params['start_time']) unless @params['start_time'].blank?
74
- params[:start_id] = @params['start_id'] unless @params['start_id'].blank?
75
-
76
- events = worker.get_event(params)
77
- raise events.message if events.fail?
78
-
79
- response_params = {
80
- :results => events.message,
81
- :message => 'OK'
82
- }
83
- response_params[:start_time] = @params['start_time'] unless @params['start_time'].blank?
84
- respond_with response_params
31
+ end
32
+
33
+ class RequestApp < Sinatra::Base
34
+ include Dolphin::Util
35
+ helpers Dolphin::Helpers::RequestHelper
36
+ register Sinatra::RespondWith
37
+
38
+ respond_to :json
39
+ GET_EVENT_LIMIT = 3000.freeze
40
+
41
+ before do
42
+ logger :info, {
43
+ :host => request.host,
44
+ :user_agent => request.user_agent
45
+ }
46
+ @notification_id = request.env['HTTP_X_NOTIFICATION_ID']
47
+ @message_type = request.env['HTTP_X_MESSAGE_TYPE']
48
+
49
+ if request.post?
50
+ v = request.body
51
+ @params = MultiJson.load(v)
52
+ elsif request.get?
53
+ @params = request.params
85
54
  end
86
55
  end
87
56
 
88
- get '/notifications' do |request|
89
- run(request) do
90
- required 'notification_id'
91
-
92
- notification = {}
93
- notification[:id] = @notification_id
94
-
95
- result = worker.get_notification(notification)
96
- raise result.message if result.fail?
97
- raise "Not found notification id" if result.message.nil?
98
-
99
- response_params = {
100
- :results => result.message,
101
- :message => 'OK'
102
- }
103
- respond_with response_params
104
- end
57
+ error(RuntimeError) do
58
+ status(400)
59
+ respond_with {message:'Failed'}
105
60
  end
106
61
 
107
- post '/notifications' do |request|
108
- run(request) do
109
- required 'notification_id'
110
- raise 'Nothing parameters.' if @params.blank?
111
-
112
- unsupported_sender_types = @params.keys - Sender::TYPES
113
- raise "Unsuppoted sender types: #{unsupported_sender_types.join(',')}" unless unsupported_sender_types.blank?
114
-
115
- notification = {}
116
- notification[:id] = @notification_id
117
- notification[:methods] = @params
118
- result = worker.put_notification(notification)
119
- raise result.message if result.fail?
120
-
121
- response_params = {
122
- :message => 'OK'
123
- }
124
- respond_with response_params
125
- end
62
+ post '/events' do
63
+ raise 'Nothing parameters.' if @params.blank?
64
+
65
+ event = {}
66
+ event[:notification_id] = @notification_id
67
+ event[:message_type] = @message_type
68
+ event[:messages] = @params
69
+
70
+ events = worker.future.put_event(event)
71
+
72
+ # always success because put_event is async action.
73
+ response_params = {
74
+ :message => 'OK'
75
+ }
76
+ respond_with response_params
126
77
  end
127
78
 
128
- delete '/notifications' do |request|
129
- run(request) do
130
- required 'notification_id'
79
+ get '/events' do
80
+ limit = @params['limit'].blank? ? GET_EVENT_LIMIT : @params['limit'].to_i
81
+ raise "Requested over the limit. Limited to #{GET_EVENT_LIMIT}" if limit > GET_EVENT_LIMIT
82
+
83
+ event = {}
84
+ event[:count] = limit
85
+ event[:start_time] = parse_time(@params['start_time']) unless @params['start_time'].blank?
86
+ event[:start_id] = @params['start_id'] unless @params['start_id'].blank?
87
+
88
+ events = worker.get_event(event)
89
+ raise events.message if events.fail?
90
+
91
+ response_params = {
92
+ :results => events.message,
93
+ :message => 'OK'
94
+ }
95
+ response_params[:start_time] = @params['start_time'] unless @params['start_time'].blank?
96
+ respond_with response_params
97
+ end
131
98
 
132
- notification = {}
133
- notification[:id] = @notification_id
99
+ get '/notifications' do
100
+ required 'notification_id'
101
+
102
+ notification = {}
103
+ notification[:id] = @notification_id
104
+
105
+ result = worker.get_notification(notification)
106
+ raise result.message if result.fail?
107
+ raise "Not found notification id" if result.message.nil?
108
+
109
+ response_params = {
110
+ :results => result.message,
111
+ :message => 'OK'
112
+ }
113
+ respond_with response_params
114
+ end
134
115
 
135
- result = worker.delete_notification(notification)
136
- raise result.message if result.fail?
116
+ post '/notifications' do
117
+ required 'notification_id'
118
+ raise 'Nothing parameters.' if @params.blank?
119
+
120
+ unsupported_sender_types = @params.keys - Sender::TYPES
121
+ raise "Unsuppoted sender types: #{unsupported_sender_types.join(',')}" unless unsupported_sender_types.blank?
122
+
123
+ notification = {}
124
+ notification[:id] = @notification_id
125
+ notification[:methods] = @params
126
+ result = worker.put_notification(notification)
127
+ raise result.message if result.fail?
128
+
129
+ response_params = {
130
+ :message => 'OK'
131
+ }
132
+ respond_with response_params
133
+ end
137
134
 
138
- response_params = {
139
- :message => 'OK'
140
- }
141
- respond_with response_params
142
- end
135
+ delete '/notifications' do
136
+ required 'notification_id'
137
+
138
+ notification = {}
139
+ notification[:id] = @notification_id
140
+
141
+ result = worker.delete_notification(notification)
142
+ raise result.message if result.fail?
143
+
144
+ response_params = {
145
+ :message => 'OK'
146
+ }
147
+ respond_with response_params
143
148
  end
144
149
 
145
150
  private
@@ -1,3 +1,3 @@
1
1
  module Dolphin
2
- VERSION = '0.0.1'
3
- end
2
+ VERSION = '0.0.3'
3
+ end
@@ -59,13 +59,13 @@ module Dolphin
59
59
  end
60
60
 
61
61
  message = build_message(sender_type, message_template_id, build_params)
62
- message.event_id = event_id
63
-
64
62
  if message.nil?
65
- log_message = "Failed to build message: #{message}"
63
+ log_message = "Failed to build message: #{build_params}"
66
64
  logger :error, log_message
67
65
  # Does not do response to Request Handler.
68
66
  next
67
+ else
68
+ message.event_id = event_id
69
69
  end
70
70
 
71
71
  logger :info, "Send notification from Worker #{message}"
data/lib/dolphin.rb CHANGED
@@ -4,31 +4,23 @@ require 'parseconfig'
4
4
  require 'ostruct'
5
5
  require 'extlib/blank'
6
6
 
7
- Signal.trap(:INT, "EXIT")
8
-
9
7
  $LOAD_PATH.unshift File.expand_path('../', __FILE__)
10
8
 
11
9
  module Dolphin
12
- def self.settings(config='')
13
-
14
- if @settings.nil?
15
-
16
- # overwrite
17
- if !ENV['CONFIG_FILE'].blank?
18
- config = File.join(Dolphin.config_path, ENV['CONFIG_FILE'])
19
- elsif config.blank?
20
- config = File.join(Dolphin.config_path, 'dolphin.conf')
21
- end
22
-
23
- if !File.exists?(config)
24
- puts "File not found #{config}"
25
- exit!
26
- end
27
-
28
- # TODO:validation
29
- @config = config
30
- @settings = ParseConfig.new(config)
10
+ def self.load_setting(path=nil)
11
+ path ||= ENV['CONFIG_FILE'] || File.join(Dolphin.config_path, 'dolphin.conf')
12
+
13
+ if !File.exists?(path)
14
+ STDERR.puts "Not found configuration file: #{path}"
15
+ exit!
31
16
  end
17
+
18
+ @config = path
19
+ @settings = ParseConfig.new(path)
20
+ end
21
+
22
+ def self.settings
23
+ raise "Configuration file is not loaded yet." if @settings.nil?
32
24
  @settings
33
25
  end
34
26
 
data/spec/spec_helper.rb CHANGED
@@ -1,13 +1,17 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
3
  require 'rubygems'
4
- require 'rspec'
5
- require File.join(File.expand_path('../../', __FILE__), 'lib/dolphin')
6
4
 
7
5
  # Setup Bundler
8
6
  ENV['BUNDLE_GEMFILE'] ||= File.expand_path(File.dirname(__FILE__) + '/Gemfile')
9
7
  require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])
10
8
  Bundler.require :default if defined?(Bundler)
9
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
10
+
11
+ require 'rspec'
12
+ require 'dolphin'
13
+
14
+ Dolphin.load_setting
11
15
 
12
16
  # Load helper files
13
17
  Dir.glob('./spec/helpers/*_helper.rb').each {|f| require File.expand_path(f) }
@@ -1,9 +1,9 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  $:.push File.expand_path('../lib', __FILE__)
3
-
3
+ require 'dolphin/version'
4
4
  Gem::Specification.new do |spec|
5
5
  spec.name = 'wakame-dolphin'
6
- spec.version = '0.0.2'
6
+ spec.version = Dolphin::VERSION
7
7
  spec.platform = Gem::Platform::RUBY
8
8
  spec.summary = 'notification service'
9
9
  spec.description = 'notification service'
@@ -27,11 +27,12 @@ Gem::Specification.new do |spec|
27
27
  spec.add_runtime_dependency 'extlib', '~> 0.9.16'
28
28
  spec.add_runtime_dependency 'multi_json', '1.6.1'
29
29
  spec.add_runtime_dependency 'rake', '= 10.0.3'
30
- spec.add_runtime_dependency 'octarine', '= 0.0.3'
31
30
  spec.add_runtime_dependency 'parseconfig', '= 1.0.2'
32
31
  spec.add_runtime_dependency 'erubis', '= 2.7.0'
33
32
  spec.add_runtime_dependency 'mail-iso-2022-jp', '= 2.0.1'
34
33
  spec.add_runtime_dependency 'simple_uuid', '= 0.2.0'
34
+ spec.add_runtime_dependency 'sinatra', '~> 1.4.0'
35
+ spec.add_runtime_dependency 'sinatra-contrib', '~> 1.4.0'
35
36
 
36
37
  # Fixed version for reel
37
38
  spec.add_runtime_dependency 'celluloid', '= 0.12.4'
metadata CHANGED
@@ -1,18 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wakame-dolphin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - axsh Ltd.
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2013-07-03 00:00:00.000000000 Z
12
+ date: 2013-08-16 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: reel
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
19
  - - '='
18
20
  - !ruby/object:Gem::Version
@@ -20,6 +22,7 @@ dependencies:
20
22
  type: :runtime
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
27
  - - '='
25
28
  - !ruby/object:Gem::Version
@@ -27,6 +30,7 @@ dependencies:
27
30
  - !ruby/object:Gem::Dependency
28
31
  name: actionmailer
29
32
  requirement: !ruby/object:Gem::Requirement
33
+ none: false
30
34
  requirements:
31
35
  - - '='
32
36
  - !ruby/object:Gem::Version
@@ -34,6 +38,7 @@ dependencies:
34
38
  type: :runtime
35
39
  prerelease: false
36
40
  version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
37
42
  requirements:
38
43
  - - '='
39
44
  - !ruby/object:Gem::Version
@@ -41,6 +46,7 @@ dependencies:
41
46
  - !ruby/object:Gem::Dependency
42
47
  name: ltsv
43
48
  requirement: !ruby/object:Gem::Requirement
49
+ none: false
44
50
  requirements:
45
51
  - - '='
46
52
  - !ruby/object:Gem::Version
@@ -48,6 +54,7 @@ dependencies:
48
54
  type: :runtime
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
51
58
  requirements:
52
59
  - - '='
53
60
  - !ruby/object:Gem::Version
@@ -55,6 +62,7 @@ dependencies:
55
62
  - !ruby/object:Gem::Dependency
56
63
  name: extlib
57
64
  requirement: !ruby/object:Gem::Requirement
65
+ none: false
58
66
  requirements:
59
67
  - - ~>
60
68
  - !ruby/object:Gem::Version
@@ -62,6 +70,7 @@ dependencies:
62
70
  type: :runtime
63
71
  prerelease: false
64
72
  version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
65
74
  requirements:
66
75
  - - ~>
67
76
  - !ruby/object:Gem::Version
@@ -69,6 +78,7 @@ dependencies:
69
78
  - !ruby/object:Gem::Dependency
70
79
  name: multi_json
71
80
  requirement: !ruby/object:Gem::Requirement
81
+ none: false
72
82
  requirements:
73
83
  - - '='
74
84
  - !ruby/object:Gem::Version
@@ -76,6 +86,7 @@ dependencies:
76
86
  type: :runtime
77
87
  prerelease: false
78
88
  version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
79
90
  requirements:
80
91
  - - '='
81
92
  - !ruby/object:Gem::Version
@@ -83,6 +94,7 @@ dependencies:
83
94
  - !ruby/object:Gem::Dependency
84
95
  name: rake
85
96
  requirement: !ruby/object:Gem::Requirement
97
+ none: false
86
98
  requirements:
87
99
  - - '='
88
100
  - !ruby/object:Gem::Version
@@ -90,27 +102,15 @@ dependencies:
90
102
  type: :runtime
91
103
  prerelease: false
92
104
  version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
93
106
  requirements:
94
107
  - - '='
95
108
  - !ruby/object:Gem::Version
96
109
  version: 10.0.3
97
- - !ruby/object:Gem::Dependency
98
- name: octarine
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - '='
102
- - !ruby/object:Gem::Version
103
- version: 0.0.3
104
- type: :runtime
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - '='
109
- - !ruby/object:Gem::Version
110
- version: 0.0.3
111
110
  - !ruby/object:Gem::Dependency
112
111
  name: parseconfig
113
112
  requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
114
  requirements:
115
115
  - - '='
116
116
  - !ruby/object:Gem::Version
@@ -118,6 +118,7 @@ dependencies:
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
121
122
  requirements:
122
123
  - - '='
123
124
  - !ruby/object:Gem::Version
@@ -125,6 +126,7 @@ dependencies:
125
126
  - !ruby/object:Gem::Dependency
126
127
  name: erubis
127
128
  requirement: !ruby/object:Gem::Requirement
129
+ none: false
128
130
  requirements:
129
131
  - - '='
130
132
  - !ruby/object:Gem::Version
@@ -132,6 +134,7 @@ dependencies:
132
134
  type: :runtime
133
135
  prerelease: false
134
136
  version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
135
138
  requirements:
136
139
  - - '='
137
140
  - !ruby/object:Gem::Version
@@ -139,6 +142,7 @@ dependencies:
139
142
  - !ruby/object:Gem::Dependency
140
143
  name: mail-iso-2022-jp
141
144
  requirement: !ruby/object:Gem::Requirement
145
+ none: false
142
146
  requirements:
143
147
  - - '='
144
148
  - !ruby/object:Gem::Version
@@ -146,6 +150,7 @@ dependencies:
146
150
  type: :runtime
147
151
  prerelease: false
148
152
  version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
149
154
  requirements:
150
155
  - - '='
151
156
  - !ruby/object:Gem::Version
@@ -153,6 +158,7 @@ dependencies:
153
158
  - !ruby/object:Gem::Dependency
154
159
  name: simple_uuid
155
160
  requirement: !ruby/object:Gem::Requirement
161
+ none: false
156
162
  requirements:
157
163
  - - '='
158
164
  - !ruby/object:Gem::Version
@@ -160,13 +166,47 @@ dependencies:
160
166
  type: :runtime
161
167
  prerelease: false
162
168
  version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
163
170
  requirements:
164
171
  - - '='
165
172
  - !ruby/object:Gem::Version
166
173
  version: 0.2.0
174
+ - !ruby/object:Gem::Dependency
175
+ name: sinatra
176
+ requirement: !ruby/object:Gem::Requirement
177
+ none: false
178
+ requirements:
179
+ - - ~>
180
+ - !ruby/object:Gem::Version
181
+ version: 1.4.0
182
+ type: :runtime
183
+ prerelease: false
184
+ version_requirements: !ruby/object:Gem::Requirement
185
+ none: false
186
+ requirements:
187
+ - - ~>
188
+ - !ruby/object:Gem::Version
189
+ version: 1.4.0
190
+ - !ruby/object:Gem::Dependency
191
+ name: sinatra-contrib
192
+ requirement: !ruby/object:Gem::Requirement
193
+ none: false
194
+ requirements:
195
+ - - ~>
196
+ - !ruby/object:Gem::Version
197
+ version: 1.4.0
198
+ type: :runtime
199
+ prerelease: false
200
+ version_requirements: !ruby/object:Gem::Requirement
201
+ none: false
202
+ requirements:
203
+ - - ~>
204
+ - !ruby/object:Gem::Version
205
+ version: 1.4.0
167
206
  - !ruby/object:Gem::Dependency
168
207
  name: celluloid
169
208
  requirement: !ruby/object:Gem::Requirement
209
+ none: false
170
210
  requirements:
171
211
  - - '='
172
212
  - !ruby/object:Gem::Version
@@ -174,6 +214,7 @@ dependencies:
174
214
  type: :runtime
175
215
  prerelease: false
176
216
  version_requirements: !ruby/object:Gem::Requirement
217
+ none: false
177
218
  requirements:
178
219
  - - '='
179
220
  - !ruby/object:Gem::Version
@@ -181,6 +222,7 @@ dependencies:
181
222
  - !ruby/object:Gem::Dependency
182
223
  name: celluloid-io
183
224
  requirement: !ruby/object:Gem::Requirement
225
+ none: false
184
226
  requirements:
185
227
  - - '='
186
228
  - !ruby/object:Gem::Version
@@ -188,6 +230,7 @@ dependencies:
188
230
  type: :runtime
189
231
  prerelease: false
190
232
  version_requirements: !ruby/object:Gem::Requirement
233
+ none: false
191
234
  requirements:
192
235
  - - '='
193
236
  - !ruby/object:Gem::Version
@@ -195,6 +238,7 @@ dependencies:
195
238
  - !ruby/object:Gem::Dependency
196
239
  name: nio4r
197
240
  requirement: !ruby/object:Gem::Requirement
241
+ none: false
198
242
  requirements:
199
243
  - - '='
200
244
  - !ruby/object:Gem::Version
@@ -202,6 +246,7 @@ dependencies:
202
246
  type: :runtime
203
247
  prerelease: false
204
248
  version_requirements: !ruby/object:Gem::Requirement
249
+ none: false
205
250
  requirements:
206
251
  - - '='
207
252
  - !ruby/object:Gem::Version
@@ -274,26 +319,27 @@ files:
274
319
  homepage: https://github.com/axsh/wakame-dolphin
275
320
  licenses:
276
321
  - LGPL 3.0
277
- metadata: {}
278
322
  post_install_message:
279
323
  rdoc_options: []
280
324
  require_paths:
281
325
  - - lib
282
326
  required_ruby_version: !ruby/object:Gem::Requirement
327
+ none: false
283
328
  requirements:
284
- - - '>='
329
+ - - ! '>='
285
330
  - !ruby/object:Gem::Version
286
331
  version: 1.9.3
287
332
  required_rubygems_version: !ruby/object:Gem::Requirement
333
+ none: false
288
334
  requirements:
289
- - - '>='
335
+ - - ! '>='
290
336
  - !ruby/object:Gem::Version
291
337
  version: 1.3.6
292
338
  requirements: []
293
339
  rubyforge_project:
294
- rubygems_version: 2.0.3
340
+ rubygems_version: 1.8.23
295
341
  signing_key:
296
- specification_version: 4
342
+ specification_version: 3
297
343
  summary: notification service
298
344
  test_files:
299
345
  - spec/files/cassandra_models_spec.rb
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 1083fcd12c989df0d9878212ca88dd1e9799d3a0
4
- data.tar.gz: 064f9d4865ff443cb3d0a1abc6e7b687e8fcc9e8
5
- SHA512:
6
- metadata.gz: 0cc6b3984d0c446b8fe8acc8cbd8d8794c0142774f3a87e762616985e3ba50b80c1a6a17f9c99b7732da3366218b789844f4ad00be41efa25c30a440d60cc47c
7
- data.tar.gz: 68faacea3a90b3b3277fb06251dcc8b69632bfef277d6c0cfd7c975277704bda759969c514072f4ce6831c74d7560cd3ed3c7db8a1ae4cdeb1b0b8febf0bffb8