boxxspring-workers 1.1.4 → 1.1.5

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: 5a8ab0b25057afe43c90af53902ec1410d5230c2
4
- data.tar.gz: f57b1b142e88bac02e52d893f1824fd63e19cacf
3
+ metadata.gz: 28d891511f5e9885528269e401d43946f8eab6e9
4
+ data.tar.gz: 7c4d7828f39a16ccecc075387792ca63eba21879
5
5
  SHA512:
6
- metadata.gz: 141d7d76f6209efe1b7beb56673094e1ed549dbf572dfef923524b4ab295ea35741b6961e4b655a612b91b0f52dabd8f81c47674fc74ca565b3f1c884e7d0e0a
7
- data.tar.gz: 3f135b6596edf3a741e9df12d2870a9eafa8a3aded85205c198e17e94a2f651056452de89213be800bf81a54ed5bcfbb0ab38df2cb665786d91cb847b3a43abc
6
+ metadata.gz: 5e6b1079cc3a9b932f4d44ae19b584ea77e414a2929e193e2e4ff3cb1330dca72bd59eff298222aad07456435da083af7b518a286ee3a728ddbd2ca342e0bc9b
7
+ data.tar.gz: 94ba8c40b9ef4bbb5e2f04074acfefecd3f0376f2d8217fd6966f89ab36a6d6eb03fa3ca74b116bbb4c98baf679868e5cf5e34f8fc65eddff4e1129e19903c9c
@@ -13,6 +13,10 @@ module Boxxspring
13
13
  return @attributes
14
14
  end
15
15
 
16
+ def include?( name )
17
+ @attributes.include?( name )
18
+ end
19
+
16
20
  def method_missing( method, *arguments, &block )
17
21
  result = nil
18
22
  if arguments.length == 0
@@ -27,8 +27,15 @@ module Boxxspring
27
27
  true : false
28
28
  end
29
29
 
30
- def read( key )
31
- @provider.get( key )
30
+ def read( key, options = {} )
31
+ range = options[ :range ]
32
+ if range
33
+ range_start = range[ :start ] || 0
34
+ range_end = range[ :end ] || -1
35
+ @provider.lrange( key, range_start, range_end )
36
+ else
37
+ @provider.get( key )
38
+ end
32
39
  end
33
40
 
34
41
  def write( key, value, options = {} )
@@ -8,8 +8,8 @@ module Boxxspring
8
8
  @name = name
9
9
  end
10
10
 
11
- def read
12
- @orchestrator.read( @name )
11
+ def read( options={} )
12
+ @orchestrator.read( @name, options )
13
13
  end
14
14
 
15
15
  def write( value, options={} )
@@ -1,4 +1,4 @@
1
- module Boxxspring
1
+ module Boxxspring
2
2
 
3
3
  module Worker
4
4
 
@@ -7,16 +7,22 @@ module Boxxspring
7
7
 
8
8
  class Base
9
9
 
10
+ #------------------------------------------------------------------------
11
+ # modules
12
+
13
+ include Logging
14
+
10
15
  #------------------------------------------------------------------------
11
16
  # class attributes
12
17
 
13
18
  class_attribute :queue_name
14
19
  class_attribute :processor
20
+ class_attribute :environment
15
21
 
16
22
  #------------------------------------------------------------------------
17
23
  # class methods
18
24
 
19
- class << self
25
+ class << self
20
26
 
21
27
  public; def process( &block )
22
28
  self.processor = block
@@ -27,25 +33,27 @@ module Boxxspring
27
33
  end
28
34
 
29
35
  def queue_url
30
- unless @queue_url.present?
31
- response = self.queue_interface.create_queue(
32
- queue_name: self.full_queue_name
36
+ @queue_url ||= begin
37
+ response = self.queue_interface.create_queue(
38
+ queue_name: self.full_queue_name
33
39
  )
34
- @queue_url = response[ :queue_url ]
40
+ response[ :queue_url ]
41
+ end
42
+ end
43
+
44
+ def environment
45
+ @environment ||= begin
46
+ Worker.env == 'development' ?
47
+ ( ENV[ 'USER' ].underscore || 'development' ) :
48
+ Worker.env
35
49
  end
36
- @queue_url
37
50
  end
38
51
 
39
52
  protected; def full_queue_name
40
- name = ( Worker.env == 'development' ) ?
41
- ( ENV[ 'USER' ] || 'development' ) :
42
- Worker.env
43
- name += '-' +
44
- ( self.queue_name ||
45
- self.name.
46
- underscore.
47
- gsub( /[\/]/, '-' ).
48
- gsub( /_worker\Z/, '' ) )
53
+ queue_name = self.queue_name ||
54
+ self.name.underscore.gsub( /[\/]/, '-' ).
55
+ gsub( /_worker\Z/, '' )
56
+ self.environment + '-' + queue_name
49
57
  end
50
58
 
51
59
  end
@@ -53,11 +61,12 @@ module Boxxspring
53
61
  #------------------------------------------------------------------------
54
62
  # operations
55
63
 
56
- def process
57
- messages = self.receive_messages() || []
64
+ def process
65
+ messages = self.receive_messages() || []
58
66
  messages.each do | message |
59
67
  if message.present?
60
68
  payload = self.payload_from_message( message )
69
+
61
70
  if payload.present?
62
71
  begin
63
72
  result = self.process_payload( payload )
@@ -65,43 +74,37 @@ module Boxxspring
65
74
  self.delete_message( message ) unless result == false
66
75
  rescue StandardError => error
67
76
  self.logger.error(
68
- "The #{ self.human_name } worker failed to process the " +
69
- "payload. "
77
+ "The #{ self.human_name } failed to process the payload."
70
78
  )
71
79
  self.logger.error( error.message )
72
- self.logger.error( error.backtrace.join( "\n" ) )
80
+ self.logger.info( error.backtrace.join( "\n" ) )
73
81
  end
74
82
  else
75
- # note: messages with invalid payloads are deleted
76
83
  self.delete_message( message )
77
84
  self.logger.error(
78
- "The #{ self.human_name } worker received an invalid payload."
85
+ "The #{ self.human_name } received an invalid payload."
79
86
  )
80
87
  end
81
88
  end
82
89
  end
83
90
  end
84
91
 
85
- protected; def logger
86
- @logger ||= Boxxspring::Worker.configuration.logger
87
- end
88
-
89
92
  #------------------------------------------------------------------------
90
93
  # implementation
91
94
 
92
95
  protected; def receive_messages
93
96
  messages = nil
94
97
  begin
95
- response = self.class.queue_interface.receive_message(
98
+ response = self.class.queue_interface.receive_message(
96
99
  queue_url: self.class.queue_url,
97
100
  max_number_of_messages: QUEUE_MESSAGE_REQUEST_COUNT,
98
- wait_time_seconds: QUEUE_MESSAGE_WAIT_IN_SECONDS
101
+ wait_time_seconds: QUEUE_MESSAGE_WAIT_IN_SECONDS
99
102
  )
100
103
  messages = response[ :messages ]
101
104
  rescue StandardError => error
102
- raise RuntimeError.new(
103
- "The #{ self.human_name } worker is unable to receive a message " +
104
- "from the queue. #{error.message}."
105
+ raise RuntimeError.new(
106
+ "The #{ self.human_name } is unable to receive a message " +
107
+ "from the queue. #{ error.message }."
105
108
  )
106
109
  end
107
110
  messages
@@ -109,54 +112,59 @@ module Boxxspring
109
112
 
110
113
  protected; def delete_message( message )
111
114
  begin
112
- self.class.queue_interface.delete_message(
115
+ self.class.queue_interface.delete_message(
113
116
  queue_url: self.class.queue_url,
114
117
  receipt_handle: message[ :receipt_handle ]
115
118
  )
116
119
  rescue StandardError => error
117
- raise RuntimeError.new(
118
- "The #{ self.human_name } worker is unable to delete the " +
119
- "message from the queue. #{error.message}."
120
+ raise RuntimeError.new(
121
+ "The #{ self.human_name } is unable to delete the " +
122
+ "message from the queue. #{ error.message }."
120
123
  )
121
124
  end
125
+
122
126
  message
123
127
  end
124
128
 
125
129
  protected; def payload_from_message( message )
130
+
126
131
  payload = message.body
127
- if ( payload.present? )
128
- payload = JSON.parse( payload ) rescue payload
129
- if ( payload.is_a?( Hash ) &&
130
- payload.include?( 'Type' ) &&
131
- payload[ 'Type' ] == 'Notification' )
132
+
133
+ if payload.present?
134
+ payload = JSON.parse( payload ) rescue payload
135
+ if payload.is_a?( Hash ) && payload.include?( 'Type' ) &&
136
+ payload[ 'Type' ] == 'Notification'
132
137
  payload = payload[ 'Message' ]
133
- payload = payload.present? ?
134
- ( JSON.parse( payload ) rescue payload ) :
138
+ payload = payload.present? ?
139
+ ( JSON.parse( payload ) rescue payload ) :
135
140
  payload
136
- end
141
+ end
142
+ else
143
+ logger.error( "The message lacks a payload." )
144
+ logger.debug( message.inspect )
137
145
  end
138
146
  payload
139
147
  end
140
148
 
141
149
  protected; def process_payload( payload )
142
- if self.class.processor.present?
150
+ if self.class.processor.present?
143
151
  self.class.processor.call( payload )
144
152
  else
145
- raise RuntimeError.new(
153
+ raise RuntimeError.new(
146
154
  "The worker lacks a processor"
147
155
  )
148
156
  end
149
157
  end
150
158
 
151
159
  protected; def delegate_payload( queue_name, payload )
152
- queue_name_prefix = ( Worker.env == 'development' ) ?
153
- ( ENV[ 'USER' ] || 'development' ) : Worker.env
154
- queue_name = queue_name_prefix + '-' + queue_name
160
+ queue_name = self.class.environment + '-' + queue_name
161
+
155
162
  begin
156
- response = self.class.queue_interface.create_queue(
157
- queue_name: queue_name
163
+ response = self.class.queue_interface.create_queue(
164
+ queue_name: queue_name
158
165
  )
159
- queue_url = response[ :queue_url ]
166
+ queue_url = response[ :queue_url ]
167
+
160
168
  if queue_url.present?
161
169
  self.class.queue_interface.send_message(
162
170
  queue_url: queue_url,
@@ -164,18 +172,43 @@ module Boxxspring
164
172
  )
165
173
  end
166
174
  rescue StandardError => error
167
- raise RuntimeError.new(
168
- "The #{ self.human_name } worker was unable to delegate the " +
169
- "payload to the queue name '#{ queue_name }'. #{error.message}."
175
+ raise RuntimeError.new(
176
+ "The #{ self.human_name } was unable to delegate the " +
177
+ "payload to the '#{ queue_name }' queue. #{ error.message }."
170
178
  )
171
179
  end
172
180
  end
173
181
 
182
+ # Meta API read & error handling
183
+ protected; def read_object( property_id=nil, type, id, includes )
184
+ if property_id.present?
185
+ endpoint = "/properties/#{ property_id }/#{ type.pluralize }/#{ id }"
186
+ else
187
+ endpoint = "/properties/#{ id }"
188
+ end
189
+
190
+ object = operation( endpoint ).include( *includes ).read
191
+ if error?( object, type.capitalize ) && object.is_a?( Array )
192
+ object.first
193
+ else
194
+ object
195
+ end
196
+ end
197
+
198
+ protected; def error?( object, object_class )
199
+ class_name = "Boxxspring::#{ object_class }".constantize
200
+ !object.is_a?( class_name ) || object.send( :errors ).present?
201
+ end
202
+
203
+ protected; def operation( endpoint )
204
+ Boxxspring::Operation.new(
205
+ endpoint,
206
+ Boxxspring::Worker.configuration.api_credentials.to_hash
207
+ )
208
+ end
209
+
174
210
  protected; def human_name
175
- self.class.name.
176
- underscore.
177
- gsub( /[\/]/, ' ' ).
178
- gsub( /_worker\Z/, '' )
211
+ self.class.name.underscore.gsub('_', ' ')
179
212
  end
180
213
 
181
214
  end
@@ -4,26 +4,10 @@ module Boxxspring
4
4
 
5
5
  module Worker
6
6
 
7
- def self.configuration( &block )
8
- Configuration.instance().instance_eval( &block ) unless block.nil?
9
- Configuration.instance()
10
- end
11
-
12
- def self.env
13
- self.configuration.env
14
- end
15
-
16
7
  class Configuration < Abstract
17
8
 
18
9
  include Singleton
19
10
 
20
- def initialize
21
- super( {
22
- env: ENV[ 'WORKERS_ENV' ] || 'development',
23
- logger: Logger.new( STDOUT )
24
- } )
25
- end
26
-
27
11
  def self.reloadable?
28
12
  false
29
13
  end
@@ -32,10 +16,31 @@ module Boxxspring
32
16
  configuration.each_pair do | name, value |
33
17
  self.send( "@#{name}", value )
34
18
  end
35
- end
19
+ end
20
+
21
+ def get_token( options = {} )
22
+
23
+ token_details = Unimatrix::Authorization::ClientCredentialsGrant.new(
24
+ client_id: ENV[ 'KEYMAKER_CLIENT' ],
25
+ client_secret: ENV[ 'KEYMAKER_SECRET' ]
26
+ ).request_token( options )
27
+
28
+ if token_details.include?( 'error' )
29
+ puts "ERROR: #{ token_details }"
30
+ end
36
31
 
32
+ if token_details.is_a?( Hash )
33
+ token_details.symbolize_keys!
34
+ token_details.update( expires_in: Time.now + token_details[ :expires_in ] ) if token_details[ :expires_in ]
35
+ api_credentials.access_token = token_details[ :access_token ]
36
+ api_credentials.token_expiry = token_details[ :expires_in ]
37
+ result = api_credentials
38
+ else
39
+ result = token_details
40
+ end
41
+ result
42
+ end
37
43
  end
38
-
39
44
  end
40
45
 
41
46
  end
@@ -0,0 +1,95 @@
1
+ module Boxxspring
2
+
3
+ module Worker
4
+
5
+ module Logging
6
+
7
+ PWD = Dir.pwd.freeze
8
+
9
+ def logger
10
+
11
+ @logger ||= begin
12
+
13
+ workers_env = ENV[ 'WORKERS_ENV' ]
14
+
15
+ if Worker.configuration.include?( 'logger' )
16
+
17
+ logger = Worker.configuration.logger
18
+
19
+ else
20
+
21
+ if self.log_local? || workers_env == 'test'
22
+
23
+ logger = Logger.new( STDOUT )
24
+
25
+ else
26
+
27
+ group_name = self.log_group_name
28
+ raise 'A logging group is required. You may need to set LOG_GROUP.' \
29
+ unless group_name.present?
30
+
31
+ worker_name = self.human_name.gsub( ' ','_' )
32
+
33
+ if workers_env == 'development'
34
+ username = ENV[ 'USER' ] || ENV[ 'USERNAME' ]
35
+ username = username.underscore.dasherize
36
+
37
+ group_name = "#{ username }.#{ group_name }"
38
+ elsif workers_env != 'production'
39
+ group_name = "#{ workers_env }.#{ group_name }"
40
+ end
41
+
42
+ logger = CloudWatchLogger.new(
43
+ {
44
+ access_key_id: ENV[ 'AWS_ACCESS_KEY_ID' ],
45
+ secret_access_key: ENV[ 'AWS_SECRET_ACCESS_KEY' ]
46
+ },
47
+ group_name,
48
+ worker_name
49
+ )
50
+
51
+ end
52
+
53
+
54
+ end
55
+
56
+ logger.level = self.log_level
57
+ logger
58
+
59
+ end
60
+
61
+ end
62
+
63
+ protected; def log_group_name
64
+ group_name = ENV[ 'LOG_GROUP' ]
65
+ group_name ||= begin
66
+ File.open( File.join( PWD, 'GROUP' ), &:readline ) rescue nil
67
+ end
68
+ group_name ||= begin
69
+ name = `git config --get remote.origin.url` rescue nil
70
+ name.present? ? File.basename( name, '.*' ) : nil
71
+ end
72
+ group_name.strip
73
+ end
74
+
75
+ protected; def log_level
76
+ level = Logger::WARN
77
+ if ENV[ 'LOG_LEVEL' ].present?
78
+ level = ENV[ 'LOG_LEVEL' ].upcase
79
+ raise "An unkown log level was specificed by LOG_LEVEL." \
80
+ unless [ "INFO", "WARN", "ERROR", "DEBUG", "FATAL" ].include?( level )
81
+ level = "Logger::#{ level }".constantize
82
+ end
83
+ level
84
+ end
85
+
86
+ protected; def log_local?
87
+ log_local = ENV[ 'LOG_LOCAL' ] || 'false'
88
+ ( log_local.to_s =~ /^true$/i ) == 0
89
+ end
90
+
91
+ end
92
+
93
+ end
94
+
95
+ end
@@ -18,7 +18,7 @@ module Boxxspring
18
18
  self.class.processor.call( task )
19
19
  else
20
20
  raise RuntimeError.new(
21
- "The #{self.human_name} worker lacks a task processor"
21
+ "The #{ self.human_name } lacks a task processor"
22
22
  )
23
23
  end
24
24
  end
@@ -27,56 +27,49 @@ module Boxxspring
27
27
  # implementation
28
28
 
29
29
  protected; def process_payload( payload )
30
-
31
30
  result = true
32
31
  type_names = self.task_type_name.blank? ?
33
- nil :
34
- [ self.task_type_name ].flatten
32
+ nil : [ self.task_type_name ].flatten
35
33
  states = self.task_state.blank? ?
36
- nil :
37
- [ self.task_state ].flatten
38
-
34
+ nil : [ self.task_state ].flatten
39
35
  tasks = payload[ 'tasks' ]
40
- if ( tasks.present? && tasks.respond_to?( :each ) )
36
+
37
+ if tasks.present? && tasks.respond_to?( :each )
41
38
  tasks.each do | task |
42
39
  task_id = task[ 'id' ]
43
- if ( type_names.blank? || type_names.include?( task[ 'type_name' ] ) )
40
+ if type_names.blank? || type_names.include?( task[ 'type_name' ] )
44
41
  task = task_read( task[ 'property_id' ], task_id )
42
+
45
43
  if task.is_a?( Boxxspring::Task )
46
- if ( states.blank? || states.include?( task.state ) )
44
+ if states.blank? || states.include?( task.state )
47
45
  self.logger.info(
48
- "The task (id: #{task.id}) processing has started."
46
+ "Task #{ task.id } processing has started."
49
47
  )
50
48
  begin
51
49
  result = self.process_task( task )
52
- message = "The task (id: #{task.id}) processing has ended"
53
- message += " and the message has been retained." if result == false
54
- self.logger.info(
55
- message
56
- )
50
+ message = "Task #{ task.id } processing has ended"
51
+ message += " and the message was retained." if result == false
52
+ self.logger.info( message )
57
53
  rescue SignalException, StandardError => error
58
54
  if error.is_a?( SignalException )
59
55
  task_state = 'idle'
60
- task_message = "The task (id: #{task.id}) has restarted."
56
+ task_message = "Task #{ task.id } has restarted."
61
57
  else
62
58
  task_state = 'failed'
63
- task_message = "The task (id: #{task.id}) processing has failed."
59
+ task_message = "Task #{ task.id } processing has failed."
64
60
  end
65
- task = task_write_state(task,
66
- task_state,
67
- task_message)
61
+ task = task_write_state( task, task_state, task_message )
68
62
  self.logger.error( error.message )
69
- self.logger.error( error.backtrace.join( "\n" ) )
63
+ self.logger.info( error.backtrace.join( "\n" ) )
70
64
  raise error if error.is_a?( SignalException )
71
65
  end
72
66
  end
73
- elsif task.is_a?(Array) &&
74
- task.first.is_a?(Boxxspring::ForbiddenError)
75
- self.logger.error(task.first.message)
67
+ elsif task.is_a?( Array ) && task.first.respond_to?( :message )
68
+ self.logger.error( task.first.message )
76
69
  else
77
70
  self.logger.error(
78
- "The #{self.human_name} worker is unable to retrieve the " +
79
- "task with the id #{task_id}."
71
+ "The #{self.human_name} is unable to retrieve the " +
72
+ "task with the id #{task_id}. #{task.inspect}"
80
73
  )
81
74
  end
82
75
  end
@@ -84,14 +77,13 @@ module Boxxspring
84
77
  end
85
78
 
86
79
  result
87
-
88
80
  end
89
81
 
90
82
  protected; def task_read( property_id, task_id )
91
83
  # why did this not work?
92
84
  # self.task_operation( property_id ).where( id: task_id ).read
93
85
  Boxxspring::Operation.new(
94
- "/properties/#{property_id}/tasks/#{task_id}",
86
+ "/properties/#{ property_id }/tasks/#{ task_id }",
95
87
  Worker.configuration.api_credentials.to_hash
96
88
  ).read
97
89
  end
@@ -137,15 +129,8 @@ module Boxxspring
137
129
  self.delegate_payload( queue_name, payload )
138
130
  end
139
131
 
140
- protected; def operation(endpoint)
141
- Boxxspring::Operation.new(
142
- endpoint,
143
- Boxxspring::Worker.configuration.api_credentials.to_hash
144
- )
145
- end
146
-
147
132
  end
148
133
 
149
134
  end
150
135
 
151
- end
136
+ end
@@ -0,0 +1,23 @@
1
+ module Boxxspring
2
+
3
+ module Worker
4
+
5
+ def self.configuration( &block )
6
+ Configuration.instance().instance_eval( &block ) unless block.nil?
7
+ Configuration.instance()
8
+ end
9
+
10
+ def self.env
11
+ @environment ||= ENV[ 'WORKERS_ENV' ] || 'development'
12
+ end
13
+
14
+ def self.root
15
+ @root ||= begin
16
+ specification = Gem::Specification.find_by_name( 'boxxspring-workers' )
17
+ Pathname.new( specification.gem_dir )
18
+ end
19
+ end
20
+
21
+ end
22
+
23
+ end
@@ -1,5 +1,5 @@
1
1
  module Boxxspring
2
2
  module Worker
3
- VERSION = '1.1.4'
3
+ VERSION = '1.1.5'
4
4
  end
5
5
  end
@@ -4,6 +4,8 @@ require 'active_support/all'
4
4
  $LOAD_PATH.unshift( File.expand_path( '..', File.dirname( __FILE__ ) ) )
5
5
  require 'lib/boxxspring/abstract'
6
6
  require 'lib/boxxspring/journal'
7
+ require 'lib/boxxspring/worker'
8
+ require 'lib/boxxspring/worker/logging'
7
9
  require 'lib/boxxspring/worker/configuration'
8
10
  require 'lib/boxxspring/worker/base'
9
11
  require 'lib/boxxspring/worker/task_base'
@@ -1,38 +1,34 @@
1
+ require 'boxxspring-worker'
2
+
1
3
  namespace :worker do
2
4
 
3
5
  descendants = Boxxspring::Worker::Base.descendants
4
-
5
- # remove base class workers
6
6
  descendants.delete( Boxxspring::Worker::TaskBase )
7
7
 
8
8
  descendants.each do | worker_class |
9
+ worker_name = worker_class.name.underscore.gsub(/_worker\Z/, '')
10
+ human_name = worker_class.name.underscore.gsub('_', ' ')
9
11
 
10
- worker_name = worker_class.
11
- name.
12
- underscore.
13
- gsub( /[\/]/, '-' ).
14
- gsub( /_worker\Z/, '' )
15
-
16
- desc "#{worker_name.humanize.downcase} worker."
12
+ desc "#{ human_name }"
17
13
  task worker_name.to_sym do
18
- spinner = %w{| / - \\}
19
14
  worker = worker_class.new
15
+ logger = worker.logger
16
+
17
+ spinner = %w{| / - \\}
20
18
  print 'working... '
21
- Boxxspring::Worker.configuration.logger.info(
22
- "The #{worker_name.humanize.downcase} worker has started."
23
- )
19
+ logger.info( "The #{ human_name } has started." )
20
+
24
21
  begin
25
22
  loop do
26
23
  print "\b" + spinner.rotate!.first
27
24
  worker.process
28
25
  end
29
26
  rescue SystemExit, Interrupt
30
- Boxxspring::Worker.configuration.logger.info(
31
- "The #{worker_name.humanize.downcase} worker has stopped."
32
- )
27
+ logger.info( "The #{ human_name } has stopped." )
33
28
  puts 'stopped'
34
29
  exit 130
35
30
  end
36
31
  end
37
32
  end
38
- end
33
+
34
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: boxxspring-workers
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.4
4
+ version: 1.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kristoph Cichocki-Romanov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-15 00:00:00.000000000 Z
11
+ date: 2017-09-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk
@@ -111,8 +111,10 @@ files:
111
111
  - lib/boxxspring/synchronization/operations.rb
112
112
  - lib/boxxspring/synchronization/orchestrator.rb
113
113
  - lib/boxxspring/synchronization/variable.rb
114
+ - lib/boxxspring/worker.rb
114
115
  - lib/boxxspring/worker/base.rb
115
116
  - lib/boxxspring/worker/configuration.rb
117
+ - lib/boxxspring/worker/logging.rb
116
118
  - lib/boxxspring/worker/task_base.rb
117
119
  - lib/tasks/workers.rake
118
120
  homepage: http://bedrocket.com
@@ -135,7 +137,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
135
137
  version: '0'
136
138
  requirements: []
137
139
  rubyforge_project:
138
- rubygems_version: 2.2.2
140
+ rubygems_version: 2.4.8
139
141
  signing_key:
140
142
  specification_version: 4
141
143
  summary: Bedrocket Media Ventrures Boxxspring Worker framework.