process_handler 0.1.0 → 0.1.1

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: 2530d6f931ed0ff1a7f617c7e04fdbf4be28a4ee
4
- data.tar.gz: fb6d3c7f5e79fb988df866084dfc0ea116ca4c6c
3
+ metadata.gz: 3025924d4d9d6aabf01d20bb1fe3517f3d20ef1d
4
+ data.tar.gz: 55fb26289828ad292043ae2eb2ca1657d59286b4
5
5
  SHA512:
6
- metadata.gz: 1781ed0ee1cf6fa992a64c1a0cb4bf49a4ed002346b8b705df2de9013ce0c8390c16249af2ed4e5da07f01030bc75060760caeaff32d9b8d1657086dd84e2c4a
7
- data.tar.gz: 40e9b2d747eadfe6f423ca37667c802e79a441eecb7bbc7ffe5c06abc6d2dbdeb01cc6bd2e60d6e2333fa5625d6d8536a47a1633e83ce1d0ab512b0151035b3a
6
+ metadata.gz: 9907397cf94e2c1e5c92881645bb6efd826bf0ccbcd831f59c5b964ac6f723dbfaf39c4e59d27c8b6f3b42287a737eead053f9924b710983db1c31321f5eb6c0
7
+ data.tar.gz: 745805dfd41786a6d69b5c1aaa667fa13e99bb1a76676b0abd53905bc5b32848e02b7d6d58b0f626259af24582fa1adaca528f89e77a05b42ce8475c302acce2
data/.travis.yml ADDED
@@ -0,0 +1,6 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1.0
4
+ before_script:
5
+ - bundle
6
+ script: bundle exec rspec
data/README.md CHANGED
@@ -1,5 +1,6 @@
1
1
  # ProcessHandler
2
2
 
3
+ [![Build Status](https://travis-ci.org/salemove/process_handler.svg?branch=master)](https://travis-ci.org/salemove/process_handler)
3
4
  [![Code Climate](https://codeclimate.com/github/salemove/process_handler/badges/gpa.svg)](https://codeclimate.com/github/salemove/process_handler)
4
5
 
5
6
  ProcessHandler helps to spawn and manage services. There are multiple types of processes. Every process knows how to handle `SIGINT` and `SIGTERM` signals.
@@ -7,6 +7,8 @@ module Salemove
7
7
  module ProcessHandler
8
8
  class PivotProcess
9
9
 
10
+ DEFAULT_FULFILLABLE_TIMEOUT = 3
11
+
10
12
  attr_reader :process_monitor, :exception_notifier
11
13
 
12
14
  def self.logger
@@ -57,13 +59,34 @@ module Salemove
57
59
  def spawn
58
60
  @messenger.respond_to(@service.class::QUEUE) do |input, handler|
59
61
  response = handle_request(input)
60
-
61
- if response.is_a?(Hash) && (response[:success] == false || response[:error])
62
- handler.error(response)
62
+ if response.respond_to?(:fulfilled?)
63
+ handle_fulfillable_response(handler, response)
63
64
  else
64
- handler.success(response)
65
+ handle_response(handler, response)
66
+ end
67
+ end
68
+ end
69
+
70
+ def handle_fulfillable_response(handler, response)
71
+ timeout = response.respond_to?(:timeout) && response.timeout || DEFAULT_FULFILLABLE_TIMEOUT
72
+ Timeout::timeout(timeout) do
73
+ while true
74
+ if response.fulfilled?
75
+ return handle_response(handler, response.value)
76
+ end
77
+ sleep 0.001
65
78
  end
66
79
  end
80
+ rescue Timeout::Error
81
+ handle_response(handler, success: false, error: "Fulfillable response was not fulfilled")
82
+ end
83
+
84
+ def handle_response(handler, response)
85
+ if response.is_a?(Hash) && (response[:success] == false || response[:error])
86
+ handler.error(response)
87
+ else
88
+ handler.success(response)
89
+ end
67
90
  end
68
91
 
69
92
  def handle_request(input)
@@ -1,5 +1,5 @@
1
1
  module Salemove
2
2
  module ProcessHandler
3
- VERSION = '0.1.0'
3
+ VERSION = '0.1.1'
4
4
  end
5
5
  end
@@ -134,4 +134,52 @@ describe ProcessHandler::PivotProcess do
134
134
 
135
135
  end
136
136
 
137
+ describe 'when result is fulfillable' do
138
+ let(:result) { double }
139
+
140
+ context 'and its already fulfilled' do
141
+ let(:value) { { success: true, output: { result: 'R'} } }
142
+
143
+ before do
144
+ allow(result).to receive(:fulfilled?) { true }
145
+ allow(result).to receive(:value) { value }
146
+ end
147
+
148
+ it 'responds immediately' do
149
+ expect(handler).to receive(:success).with(value)
150
+ subject()
151
+ end
152
+ end
153
+
154
+ context 'and its fulfilled later' do
155
+ let(:value) { { success: true, output: { result: 'R'} } }
156
+
157
+ before do
158
+ allow(result).to receive(:fulfilled?) { false }
159
+ Thread.new do
160
+ sleep 0.005
161
+ allow(result).to receive(:fulfilled?) { true }
162
+ allow(result).to receive(:value) { value }
163
+ end
164
+ end
165
+
166
+ it 'responds when fulfilled' do
167
+ expect(handler).to receive(:success).with(value)
168
+ subject()
169
+ end
170
+ end
171
+
172
+ context 'and its never fulfilled' do
173
+ before do
174
+ allow(result).to receive(:fulfilled?) { false }
175
+ allow(result).to receive(:timeout) { 0.001 }
176
+ end
177
+
178
+ it 'responds with timeout error' do
179
+ expect(handler).to receive(:error).with(success: false, error: "Fulfillable response was not fulfilled")
180
+ subject
181
+ end
182
+ end
183
+ end
184
+
137
185
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: process_handler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Indrek Juhkam
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-08 00:00:00.000000000 Z
11
+ date: 2015-05-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: airbrake
@@ -47,6 +47,7 @@ extra_rdoc_files: []
47
47
  files:
48
48
  - ".ruby-gemset"
49
49
  - ".ruby-version"
50
+ - ".travis.yml"
50
51
  - Gemfile
51
52
  - Gemfile.lock
52
53
  - README.md
@@ -87,7 +88,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
87
88
  version: '0'
88
89
  requirements: []
89
90
  rubyforge_project:
90
- rubygems_version: 2.2.2
91
+ rubygems_version: 2.4.2
91
92
  signing_key:
92
93
  specification_version: 4
93
94
  summary: ''