bumbleworks-api 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.rspec +3 -0
  4. data/.ruby-version +1 -0
  5. data/Gemfile +3 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +25 -0
  8. data/Rakefile +9 -0
  9. data/bumbleworks-api.gemspec +32 -0
  10. data/config.ru +13 -0
  11. data/lib/bumbleworks/api.rb +15 -0
  12. data/lib/bumbleworks/api/config/application.rb +10 -0
  13. data/lib/bumbleworks/api/config/routes.rb +34 -0
  14. data/lib/bumbleworks/api/controllers/application_controller.rb +6 -0
  15. data/lib/bumbleworks/api/controllers/entities_controller.rb +25 -0
  16. data/lib/bumbleworks/api/controllers/errors_controller.rb +32 -0
  17. data/lib/bumbleworks/api/controllers/expressions_controller.rb +29 -0
  18. data/lib/bumbleworks/api/controllers/processes_controller.rb +29 -0
  19. data/lib/bumbleworks/api/controllers/tasks_controller.rb +43 -0
  20. data/lib/bumbleworks/api/controllers/trackers_controller.rb +13 -0
  21. data/lib/bumbleworks/api/controllers/workers_controller.rb +51 -0
  22. data/lib/bumbleworks/api/lib/presenter.rb +32 -0
  23. data/lib/bumbleworks/api/lib/presenters/entity_class_presenter.rb +19 -0
  24. data/lib/bumbleworks/api/lib/presenters/entity_presenter.rb +13 -0
  25. data/lib/bumbleworks/api/lib/presenters/error_presenter.rb +15 -0
  26. data/lib/bumbleworks/api/lib/presenters/expression_presenter.rb +17 -0
  27. data/lib/bumbleworks/api/lib/presenters/process_presenter.rb +32 -0
  28. data/lib/bumbleworks/api/lib/presenters/task_presenter.rb +15 -0
  29. data/lib/bumbleworks/api/lib/presenters/tracker_presenter.rb +16 -0
  30. data/lib/bumbleworks/api/lib/presenters/worker_presenter.rb +30 -0
  31. data/lib/bumbleworks/api/lib/time_support.rb +23 -0
  32. data/lib/bumbleworks/api/version.rb +5 -0
  33. data/playground_setup.rb +30 -0
  34. data/spec/controllers/entities_controller_spec.rb +32 -0
  35. data/spec/controllers/errors_controller_spec.rb +42 -0
  36. data/spec/controllers/expressions_controller_spec.rb +40 -0
  37. data/spec/controllers/processes_controller_spec.rb +50 -0
  38. data/spec/controllers/tasks_controller_spec.rb +82 -0
  39. data/spec/controllers/trackers_controller_spec.rb +25 -0
  40. data/spec/controllers/workers_controller_spec.rb +113 -0
  41. data/spec/fixtures/bumbleworks_config.rb +10 -0
  42. data/spec/fixtures/entities/mock_entity.rb +38 -0
  43. data/spec/fixtures/entities/widget.rb +9 -0
  44. data/spec/fixtures/entities/widgety_fidget.rb +5 -0
  45. data/spec/fixtures/participants.rb +3 -0
  46. data/spec/fixtures/participants/naughty_participant.rb +16 -0
  47. data/spec/fixtures/processes/error_process.rb +3 -0
  48. data/spec/fixtures/processes/task_process.rb +9 -0
  49. data/spec/fixtures/processes/waiting_process.rb +8 -0
  50. data/spec/lib/presenter_spec.rb +29 -0
  51. data/spec/lib/presenters/entity_class_presenter_spec.rb +17 -0
  52. data/spec/lib/presenters/entity_presenter_spec.rb +15 -0
  53. data/spec/lib/presenters/error_presenter_spec.rb +18 -0
  54. data/spec/lib/presenters/expression_presenter_spec.rb +33 -0
  55. data/spec/lib/presenters/process_presenter_spec.rb +42 -0
  56. data/spec/lib/presenters/task_presenter_spec.rb +18 -0
  57. data/spec/lib/presenters/tracker_presenter_spec.rb +18 -0
  58. data/spec/lib/presenters/worker_presenter_spec.rb +30 -0
  59. data/spec/lib/time_support_spec.rb +42 -0
  60. data/spec/spec_helper.rb +39 -0
  61. data/spec/support/api_helper.rb +23 -0
  62. data/spec/support/process_helpers.rb +11 -0
  63. metadata +261 -0
@@ -0,0 +1,30 @@
1
+ describe Bumbleworks::Api::WorkerPresenter do
2
+ let(:presented) { Bumbleworks::Worker::Info.all.first }
3
+ subject { described_class.new(presented) }
4
+
5
+ describe "#to_hash" do
6
+ it "returns hash representation of worker" do
7
+ Bumbleworks.start_worker!
8
+ allow(presented).to receive(:uptime).and_return(:fake_uptime)
9
+ allow(subject).to receive(:uptime_in_words).and_return(:fake_words)
10
+ expect(subject.to_hash).to eq({
11
+ :id => presented.id,
12
+ :pid => presented.pid,
13
+ :name => presented.name,
14
+ :state => presented.state,
15
+ :ip => presented.ip,
16
+ :hostname => presented.hostname,
17
+ :system => presented.system,
18
+ :launched_at => presented.launched_at,
19
+ :updated_at => presented.updated_at,
20
+ :worker_class => presented.worker_class_name,
21
+ :uptime => :fake_uptime,
22
+ :uptime_in_words => :fake_words,
23
+ :processed_last_minute => presented.processed_last_minute,
24
+ :wait_time_last_minute => presented.wait_time_last_minute,
25
+ :processed_last_hour => presented.processed_last_hour,
26
+ :wait_time_last_hour => presented.wait_time_last_hour
27
+ })
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,42 @@
1
+ describe TimeSupport do
2
+ describe '.seconds_to_units' do
3
+ it 'returns hash of subdivided units for given seconds' do
4
+ described_class.seconds_to_units(33924.5).should eq({
5
+ :hours => 9,
6
+ :minutes => 25,
7
+ :seconds => 24
8
+ })
9
+ end
10
+
11
+ it 'includes zero units if requested' do
12
+ described_class.seconds_to_units(33924.5, include_zeros: true).should eq({
13
+ :days => 0,
14
+ :hours => 9,
15
+ :minutes => 25,
16
+ :seconds => 24
17
+ })
18
+ end
19
+
20
+ it 'does not round seconds if switched off' do
21
+ described_class.seconds_to_units(33924.5, round_seconds: false).should eq({
22
+ :hours => 9,
23
+ :minutes => 25,
24
+ :seconds => 24.5
25
+ })
26
+ end
27
+ end
28
+
29
+ describe '.seconds_to_units_in_words' do
30
+ it 'wordifies response from seconds_to_units' do
31
+ allow(described_class).to receive(:seconds_to_units).
32
+ with(90210.5, foo: 'bar').
33
+ and_return({
34
+ :days => 2,
35
+ :minutes => 5,
36
+ :spinachios => 42
37
+ })
38
+ expect(described_class.seconds_to_units_in_words(90210.5, foo: 'bar')).
39
+ to eq("2 days, 5 minutes, 42 spinachios")
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,39 @@
1
+ require 'simplecov'
2
+ SimpleCov.start
3
+
4
+ require 'capybara/rspec'
5
+ require 'bumbleworks/api'
6
+
7
+ # Requires supporting ruby files with custom matchers and macros, etc,
8
+ # in spec/support/ and its subdirectories.
9
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
10
+
11
+ require_relative 'fixtures/bumbleworks_config.rb'
12
+
13
+ RSpec.configure do |config|
14
+ config.include ApiHelper
15
+ config.include ProcessHelpers
16
+
17
+ config.treat_symbols_as_metadata_keys_with_true_values = true
18
+ config.run_all_when_everything_filtered = true
19
+
20
+ # Run specs in random order to surface order dependencies. If you find an
21
+ # order dependency and want to debug it, you can fix the order by providing
22
+ # the seed, which is printed after each run.
23
+ # --seed 1234
24
+ config.order = 'random'
25
+
26
+ config.before(:suite, :type => :features) do
27
+ Bumbleworks.start_worker!
28
+ end
29
+
30
+ config.before(:each) do
31
+ Bumbleworks.kill_all_processes!
32
+ Widget.truncate!
33
+ WidgetyFidget.truncate!
34
+ end
35
+
36
+ config.after(:suite, :type => :features) do
37
+ Bumbleworks::Worker.shutdown_all
38
+ end
39
+ end
@@ -0,0 +1,23 @@
1
+ module ApiHelper
2
+ include Rack::Test::Methods
3
+
4
+ def app
5
+ Bumbleworks::Api::Application
6
+ end
7
+
8
+ def json_presentation_of(object, as: nil)
9
+ as ||= infer_class_name(object)
10
+ presentation_class = Rory::Support.constantize("Bumbleworks::Api::#{as}Presenter")
11
+ presented = presentation_class.present(object)
12
+ Rory::Support.encode_as_json(presented)
13
+ end
14
+
15
+ def infer_class_name(object)
16
+ reference_object = object.is_a?(Array) ? object.first : object
17
+ if reference_object.is_a?(Class)
18
+ "EntityClass"
19
+ else
20
+ reference_object.class.name.split('::').last
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,11 @@
1
+ module ProcessHelpers
2
+ def wait_until(options = {}, &block)
3
+ options[:timeout] ||= 5
4
+
5
+ start_time = Time.now
6
+ until block.call
7
+ raise "The block never returned: \n#{block.to_source}" if (Time.now - start_time) > options[:timeout]
8
+ sleep 0.1
9
+ end
10
+ end
11
+ end
metadata ADDED
@@ -0,0 +1,261 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bumbleworks-api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Ravi Gadad
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-03-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bumbleworks
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 0.0.91
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 0.0.91
27
+ - !ruby/object:Gem::Dependency
28
+ name: rory
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 0.5.2
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 0.5.2
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.3'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.3'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: shotgun
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: capybara
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: simplecov
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: pry
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ description: Bumbleworks JSON API
140
+ email:
141
+ - ravi@renewfund.com
142
+ executables: []
143
+ extensions: []
144
+ extra_rdoc_files: []
145
+ files:
146
+ - ".gitignore"
147
+ - ".rspec"
148
+ - ".ruby-version"
149
+ - Gemfile
150
+ - LICENSE.txt
151
+ - README.md
152
+ - Rakefile
153
+ - bumbleworks-api.gemspec
154
+ - config.ru
155
+ - lib/bumbleworks/api.rb
156
+ - lib/bumbleworks/api/config/application.rb
157
+ - lib/bumbleworks/api/config/routes.rb
158
+ - lib/bumbleworks/api/controllers/application_controller.rb
159
+ - lib/bumbleworks/api/controllers/entities_controller.rb
160
+ - lib/bumbleworks/api/controllers/errors_controller.rb
161
+ - lib/bumbleworks/api/controllers/expressions_controller.rb
162
+ - lib/bumbleworks/api/controllers/processes_controller.rb
163
+ - lib/bumbleworks/api/controllers/tasks_controller.rb
164
+ - lib/bumbleworks/api/controllers/trackers_controller.rb
165
+ - lib/bumbleworks/api/controllers/workers_controller.rb
166
+ - lib/bumbleworks/api/lib/presenter.rb
167
+ - lib/bumbleworks/api/lib/presenters/entity_class_presenter.rb
168
+ - lib/bumbleworks/api/lib/presenters/entity_presenter.rb
169
+ - lib/bumbleworks/api/lib/presenters/error_presenter.rb
170
+ - lib/bumbleworks/api/lib/presenters/expression_presenter.rb
171
+ - lib/bumbleworks/api/lib/presenters/process_presenter.rb
172
+ - lib/bumbleworks/api/lib/presenters/task_presenter.rb
173
+ - lib/bumbleworks/api/lib/presenters/tracker_presenter.rb
174
+ - lib/bumbleworks/api/lib/presenters/worker_presenter.rb
175
+ - lib/bumbleworks/api/lib/time_support.rb
176
+ - lib/bumbleworks/api/version.rb
177
+ - playground_setup.rb
178
+ - spec/controllers/entities_controller_spec.rb
179
+ - spec/controllers/errors_controller_spec.rb
180
+ - spec/controllers/expressions_controller_spec.rb
181
+ - spec/controllers/processes_controller_spec.rb
182
+ - spec/controllers/tasks_controller_spec.rb
183
+ - spec/controllers/trackers_controller_spec.rb
184
+ - spec/controllers/workers_controller_spec.rb
185
+ - spec/fixtures/bumbleworks_config.rb
186
+ - spec/fixtures/entities/mock_entity.rb
187
+ - spec/fixtures/entities/widget.rb
188
+ - spec/fixtures/entities/widgety_fidget.rb
189
+ - spec/fixtures/participants.rb
190
+ - spec/fixtures/participants/naughty_participant.rb
191
+ - spec/fixtures/processes/error_process.rb
192
+ - spec/fixtures/processes/task_process.rb
193
+ - spec/fixtures/processes/waiting_process.rb
194
+ - spec/lib/presenter_spec.rb
195
+ - spec/lib/presenters/entity_class_presenter_spec.rb
196
+ - spec/lib/presenters/entity_presenter_spec.rb
197
+ - spec/lib/presenters/error_presenter_spec.rb
198
+ - spec/lib/presenters/expression_presenter_spec.rb
199
+ - spec/lib/presenters/process_presenter_spec.rb
200
+ - spec/lib/presenters/task_presenter_spec.rb
201
+ - spec/lib/presenters/tracker_presenter_spec.rb
202
+ - spec/lib/presenters/worker_presenter_spec.rb
203
+ - spec/lib/time_support_spec.rb
204
+ - spec/spec_helper.rb
205
+ - spec/support/api_helper.rb
206
+ - spec/support/process_helpers.rb
207
+ homepage: ''
208
+ licenses:
209
+ - MIT
210
+ metadata: {}
211
+ post_install_message:
212
+ rdoc_options: []
213
+ require_paths:
214
+ - lib
215
+ required_ruby_version: !ruby/object:Gem::Requirement
216
+ requirements:
217
+ - - ">="
218
+ - !ruby/object:Gem::Version
219
+ version: '0'
220
+ required_rubygems_version: !ruby/object:Gem::Requirement
221
+ requirements:
222
+ - - ">="
223
+ - !ruby/object:Gem::Version
224
+ version: '0'
225
+ requirements: []
226
+ rubyforge_project:
227
+ rubygems_version: 2.2.2
228
+ signing_key:
229
+ specification_version: 4
230
+ summary: This gem implements a headless Rory application (mountable in your own app)
231
+ for interacting with a Bumbleworks instance.
232
+ test_files:
233
+ - spec/controllers/entities_controller_spec.rb
234
+ - spec/controllers/errors_controller_spec.rb
235
+ - spec/controllers/expressions_controller_spec.rb
236
+ - spec/controllers/processes_controller_spec.rb
237
+ - spec/controllers/tasks_controller_spec.rb
238
+ - spec/controllers/trackers_controller_spec.rb
239
+ - spec/controllers/workers_controller_spec.rb
240
+ - spec/fixtures/bumbleworks_config.rb
241
+ - spec/fixtures/entities/mock_entity.rb
242
+ - spec/fixtures/entities/widget.rb
243
+ - spec/fixtures/entities/widgety_fidget.rb
244
+ - spec/fixtures/participants.rb
245
+ - spec/fixtures/participants/naughty_participant.rb
246
+ - spec/fixtures/processes/error_process.rb
247
+ - spec/fixtures/processes/task_process.rb
248
+ - spec/fixtures/processes/waiting_process.rb
249
+ - spec/lib/presenter_spec.rb
250
+ - spec/lib/presenters/entity_class_presenter_spec.rb
251
+ - spec/lib/presenters/entity_presenter_spec.rb
252
+ - spec/lib/presenters/error_presenter_spec.rb
253
+ - spec/lib/presenters/expression_presenter_spec.rb
254
+ - spec/lib/presenters/process_presenter_spec.rb
255
+ - spec/lib/presenters/task_presenter_spec.rb
256
+ - spec/lib/presenters/tracker_presenter_spec.rb
257
+ - spec/lib/presenters/worker_presenter_spec.rb
258
+ - spec/lib/time_support_spec.rb
259
+ - spec/spec_helper.rb
260
+ - spec/support/api_helper.rb
261
+ - spec/support/process_helpers.rb