flatware 0.3.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +83 -39
  3. data/lib/flatware-cucumber.rb +1 -0
  4. data/lib/flatware-rspec.rb +1 -0
  5. data/lib/flatware.rb +2 -10
  6. data/lib/flatware/broadcaster.rb +15 -0
  7. data/lib/flatware/cli.rb +10 -34
  8. data/lib/flatware/cucumber.rb +37 -12
  9. data/lib/flatware/cucumber/checkpoint.rb +28 -0
  10. data/lib/flatware/cucumber/cli.rb +22 -0
  11. data/lib/flatware/cucumber/formatter.rb +36 -84
  12. data/lib/flatware/{formatters/cucumber → cucumber/formatters}/console.rb +5 -3
  13. data/lib/flatware/{formatters/cucumber → cucumber/formatters}/console/summary.rb +3 -3
  14. data/lib/flatware/cucumber/result.rb +27 -0
  15. data/lib/flatware/cucumber/scenario_result.rb +38 -0
  16. data/lib/flatware/cucumber/step_result.rb +30 -0
  17. data/lib/flatware/poller.rb +2 -2
  18. data/lib/flatware/rspec.rb +28 -0
  19. data/lib/flatware/rspec/checkpoint.rb +29 -0
  20. data/lib/flatware/rspec/cli.rb +16 -0
  21. data/lib/flatware/rspec/example_notification.rb +21 -0
  22. data/lib/flatware/rspec/examples_notification.rb +24 -0
  23. data/lib/flatware/rspec/formatter.rb +50 -0
  24. data/lib/flatware/rspec/formatters/console.rb +33 -0
  25. data/lib/flatware/rspec/summary.rb +40 -0
  26. data/lib/flatware/serialized_exception.rb +12 -8
  27. data/lib/flatware/sink.rb +43 -33
  28. data/lib/flatware/socket.rb +89 -25
  29. data/lib/flatware/version.rb +1 -1
  30. data/lib/flatware/worker.rb +16 -9
  31. metadata +27 -55
  32. data/lib/flatware/checkpoint.rb +0 -28
  33. data/lib/flatware/checkpoint_handler.rb +0 -45
  34. data/lib/flatware/dispatcher.rb +0 -31
  35. data/lib/flatware/fireable.rb +0 -34
  36. data/lib/flatware/formatters.rb +0 -27
  37. data/lib/flatware/formatters/cucumber/http.rb +0 -83
  38. data/lib/flatware/result.rb +0 -25
  39. data/lib/flatware/scenario_decorator.rb +0 -22
  40. data/lib/flatware/scenario_result.rb +0 -36
  41. data/lib/flatware/step_result.rb +0 -27
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flatware
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Dunn
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-27 00:00:00.000000000 Z
11
+ date: 2017-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi-rzmq
@@ -38,40 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0.13'
41
- - !ruby/object:Gem::Dependency
42
- name: cucumber
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: 1.3.0
48
- - - "<"
49
- - !ruby/object:Gem::Version
50
- version: '2.0'
51
- type: :runtime
52
- prerelease: false
53
- version_requirements: !ruby/object:Gem::Requirement
54
- requirements:
55
- - - ">="
56
- - !ruby/object:Gem::Version
57
- version: 1.3.0
58
- - - "<"
59
- - !ruby/object:Gem::Version
60
- version: '2.0'
61
41
  - !ruby/object:Gem::Dependency
62
42
  name: aruba
63
43
  requirement: !ruby/object:Gem::Requirement
64
44
  requirements:
65
45
  - - "~>"
66
46
  - !ruby/object:Gem::Version
67
- version: 0.5.1
47
+ version: '0.14'
68
48
  type: :development
69
49
  prerelease: false
70
50
  version_requirements: !ruby/object:Gem::Requirement
71
51
  requirements:
72
52
  - - "~>"
73
53
  - !ruby/object:Gem::Version
74
- version: 0.5.1
54
+ version: '0.14'
75
55
  - !ruby/object:Gem::Dependency
76
56
  name: rake
77
57
  requirement: !ruby/object:Gem::Requirement
@@ -86,21 +66,7 @@ dependencies:
86
66
  - - "~>"
87
67
  - !ruby/object:Gem::Version
88
68
  version: 10.1.0
89
- - !ruby/object:Gem::Dependency
90
- name: rspec
91
- requirement: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - "~>"
94
- - !ruby/object:Gem::Version
95
- version: 2.14.0
96
- type: :development
97
- prerelease: false
98
- version_requirements: !ruby/object:Gem::Requirement
99
- requirements:
100
- - - "~>"
101
- - !ruby/object:Gem::Version
102
- version: 2.14.0
103
- description: A distributed cucumber runner
69
+ description: A distributed cucumber and rspec runner
104
70
  email: brian@hashrocket.com
105
71
  executables:
106
72
  - flatware
@@ -112,30 +78,36 @@ files:
112
78
  - LICENSE.txt
113
79
  - README.md
114
80
  - bin/flatware
81
+ - lib/flatware-cucumber.rb
82
+ - lib/flatware-rspec.rb
115
83
  - lib/flatware.rb
116
- - lib/flatware/checkpoint.rb
117
- - lib/flatware/checkpoint_handler.rb
84
+ - lib/flatware/broadcaster.rb
118
85
  - lib/flatware/cli.rb
119
86
  - lib/flatware/cucumber.rb
87
+ - lib/flatware/cucumber/checkpoint.rb
88
+ - lib/flatware/cucumber/cli.rb
120
89
  - lib/flatware/cucumber/formatter.rb
90
+ - lib/flatware/cucumber/formatters/console.rb
91
+ - lib/flatware/cucumber/formatters/console/summary.rb
92
+ - lib/flatware/cucumber/result.rb
121
93
  - lib/flatware/cucumber/runtime.rb
122
- - lib/flatware/dispatcher.rb
123
- - lib/flatware/fireable.rb
124
- - lib/flatware/formatters.rb
125
- - lib/flatware/formatters/cucumber/console.rb
126
- - lib/flatware/formatters/cucumber/console/summary.rb
127
- - lib/flatware/formatters/cucumber/http.rb
94
+ - lib/flatware/cucumber/scenario_result.rb
95
+ - lib/flatware/cucumber/step_result.rb
128
96
  - lib/flatware/pids.rb
129
97
  - lib/flatware/poller.rb
130
98
  - lib/flatware/processor_info.rb
131
- - lib/flatware/result.rb
132
- - lib/flatware/scenario_decorator.rb
133
- - lib/flatware/scenario_result.rb
99
+ - lib/flatware/rspec.rb
100
+ - lib/flatware/rspec/checkpoint.rb
101
+ - lib/flatware/rspec/cli.rb
102
+ - lib/flatware/rspec/example_notification.rb
103
+ - lib/flatware/rspec/examples_notification.rb
104
+ - lib/flatware/rspec/formatter.rb
105
+ - lib/flatware/rspec/formatters/console.rb
106
+ - lib/flatware/rspec/summary.rb
134
107
  - lib/flatware/serialized_exception.rb
135
108
  - lib/flatware/sink.rb
136
109
  - lib/flatware/sink/client.rb
137
110
  - lib/flatware/socket.rb
138
- - lib/flatware/step_result.rb
139
111
  - lib/flatware/version.rb
140
112
  - lib/flatware/worker.rb
141
113
  homepage: http://github.com/briandunn/flatware
@@ -148,9 +120,9 @@ require_paths:
148
120
  - lib
149
121
  required_ruby_version: !ruby/object:Gem::Requirement
150
122
  requirements:
151
- - - ">="
123
+ - - "~>"
152
124
  - !ruby/object:Gem::Version
153
- version: '0'
125
+ version: '2.1'
154
126
  required_rubygems_version: !ruby/object:Gem::Requirement
155
127
  requirements:
156
128
  - - ">="
@@ -158,8 +130,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
158
130
  version: '0'
159
131
  requirements: []
160
132
  rubyforge_project:
161
- rubygems_version: 2.4.6
133
+ rubygems_version: 2.6.8
162
134
  signing_key:
163
135
  specification_version: 4
164
- summary: A distributed cucumber runner
136
+ summary: A distributed cucumber and rspec runner
165
137
  test_files: []
@@ -1,28 +0,0 @@
1
- require 'flatware/scenario_result'
2
- module Flatware
3
- class Checkpoint
4
- attr_reader :steps, :scenarios
5
- def initialize(steps, scenarios)
6
- @steps, @scenarios = serialize_steps(steps), serialize_scenarios(scenarios)
7
- end
8
-
9
- def failures?
10
- scenarios.any? &:failed?
11
- end
12
-
13
- private
14
-
15
- def serialize_steps(steps)
16
- steps.map do |step|
17
- StepResult.new step.status, step.exception
18
- end
19
- end
20
-
21
- def serialize_scenarios(scenarios)
22
- scenarios.map do |scenario|
23
- ScenarioResult.new scenario.status, scenario.file_colon_line, scenario.name, scenario.exception
24
- end
25
- end
26
-
27
- end
28
- end
@@ -1,45 +0,0 @@
1
- module Flatware
2
- class CheckpointHandler
3
- attr_reader :formatter, :checkpoints
4
-
5
- def initialize(formatter, fails_fast)
6
- @fail_fast = fails_fast
7
- @formatter = formatter
8
- @checkpoints = []
9
- end
10
-
11
- def handle!(checkpoint)
12
- checkpoints << checkpoint
13
- if checkpoint.failures? && fail_fast?
14
- Fireable::kill # Killing everybody
15
- @done = true
16
- end
17
- end
18
-
19
- def done?
20
- @done
21
- end
22
-
23
- def fail_fast?
24
- @fail_fast
25
- end
26
-
27
- def summarize
28
- formatter.summarize(steps, scenarios)
29
- end
30
-
31
- def had_failures?
32
- checkpoints.any? &:failures?
33
- end
34
-
35
- private
36
-
37
- def steps
38
- checkpoints.map(&:steps).flatten
39
- end
40
-
41
- def scenarios
42
- checkpoints.map(&:scenarios).flatten
43
- end
44
- end
45
- end
@@ -1,31 +0,0 @@
1
- module Flatware
2
- class Dispatcher
3
- def self.spawn(jobs, endpoint)
4
- fork do
5
- $0 = 'flatware dispatcher'
6
- trap('INT') { exit 1 }
7
- new(jobs, endpoint).dispatch!
8
- end
9
- end
10
-
11
- def initialize(jobs, endpoint)
12
- @jobs = jobs
13
- @fireable = Fireable.new
14
- @dispatch = Flatware.socket ZMQ::REP, bind: endpoint
15
- end
16
-
17
- def dispatch!
18
- fireable.until_fired dispatch do |request|
19
- if job = jobs.shift
20
- dispatch.send job
21
- else
22
- dispatch.send 'seppuku'
23
- end
24
- end
25
- end
26
-
27
- private
28
-
29
- attr_reader :jobs, :fireable, :dispatch
30
- end
31
- end
@@ -1,34 +0,0 @@
1
- require 'flatware/poller'
2
-
3
- module Flatware
4
- class Fireable
5
- PORT = 'ipc://die'
6
-
7
- def self.bind
8
- @kill = Flatware.socket(ZMQ::PUB, bind: PORT)
9
- end
10
-
11
- def self.kill
12
- @kill.send 'seppuku'
13
- end
14
-
15
- def initialize
16
- @die = Flatware.socket(ZMQ::SUB, connect: PORT).tap do |die|
17
- die.setsockopt ZMQ::SUBSCRIBE, ''
18
- end
19
- end
20
-
21
- attr_reader :die
22
-
23
- def until_fired(socket, &block)
24
- poller = Poller.new socket, die
25
- poller.each do |s|
26
- message = s.recv
27
- break if message == 'seppuku'
28
- block.call message
29
- end
30
- ensure
31
- Flatware.close
32
- end
33
- end
34
- end
@@ -1,27 +0,0 @@
1
- module Flatware
2
- module Formatters
3
- def self.load_by_name(runner, names)
4
- formatters = names.map do |name|
5
- require "flatware/formatters/#{runner}/#{name}"
6
- namespace = const_get({cucumber: 'Cucumber'}.fetch(runner))
7
- klass = namespace.const_get name.capitalize
8
- klass.new $stdout, $stderr
9
- end
10
- Broadcaster.new formatters
11
- end
12
- end
13
-
14
- class Broadcaster
15
- attr_reader :formatters
16
-
17
- def initialize(formatters)
18
- @formatters = formatters
19
- end
20
-
21
- def method_missing(name, *args)
22
- formatters.each do |formatter|
23
- formatter.send name, *args if formatter.respond_to? name
24
- end
25
- end
26
- end
27
- end
@@ -1,83 +0,0 @@
1
- require 'net/http'
2
- require 'pathname'
3
-
4
- module Flatware
5
- module Formatters
6
- class Http
7
- attr_reader :out, :client, :server_pid
8
- def initialize(out, err)
9
- @out = out
10
- @client = Client.new
11
- end
12
-
13
- def jobs(jobs)
14
- client.send_message [:jobs, jobs.map {|job| {id: job.id}}]
15
- end
16
-
17
- def started(job)
18
- client.send_message [:started, job: job.id, worker: job.worker]
19
- end
20
-
21
- def finished(job)
22
- client.send_message [:finished, job: job.id, worker: job.worker]
23
- end
24
-
25
- def progress(result)
26
- client.send_message [:progress, status: result.progress, worker: result.worker]
27
- end
28
-
29
- def summarize(steps, scenarios)
30
- client.send_message [
31
- :summarize, {
32
- steps: steps.map(&method(:step_as_json)),
33
- scenarios: scenarios.map(&method(:scenario_as_json))
34
- }
35
- ]
36
- end
37
-
38
- private
39
-
40
- def step_as_json(step)
41
- { status: step.status }.tap do |h|
42
- h.merge(exception: {
43
- class: step.exception.class,
44
- message: step.exception.message,
45
- backtrace: step.exception.backtrace
46
- }) if step.exception
47
- end
48
- end
49
-
50
- def scenario_as_json(scenario)
51
- {
52
- status: scenario.status,
53
- file_colon_line: scenario.file_colon_line,
54
- name: scenario.name
55
- }
56
- end
57
-
58
- class Client
59
- attr_reader :uri
60
- include Net
61
-
62
- def initialize
63
- @uri = URI ENV['FLATWARE_URL']
64
- end
65
-
66
- def send_message(message)
67
- send_request uri.path, JSON.dump(message)
68
- end
69
-
70
- private
71
-
72
- def send_request(path, body=nil)
73
- req = HTTP::Post.new path
74
- req.body = body
75
- res = HTTP.start uri.hostname, uri.port do |http|
76
- http.request req
77
- end
78
- end
79
- end
80
- end
81
- end
82
- end
83
-
@@ -1,25 +0,0 @@
1
- module Flatware
2
- class Result
3
- attr_reader :progress, :worker
4
-
5
- def initialize(progress)
6
- @progress = progress
7
- @worker = ENV['TEST_ENV_NUMBER'].to_i
8
- end
9
-
10
- class << self
11
- def step(*args)
12
- step = StepResult.new *args
13
- new step.progress, [step]
14
- end
15
-
16
- def status(status)
17
- new status
18
- end
19
-
20
- def background(status, exception)
21
- new '', [StepResult.new(status, exception)]
22
- end
23
- end
24
- end
25
- end
@@ -1,22 +0,0 @@
1
- require 'forwardable'
2
- module Flatware
3
- class ScenarioDecorator
4
- extend Forwardable
5
- def_delegators :scenario, :name, :file_colon_line
6
-
7
- attr_reader :status, :exception
8
-
9
- def initialize(scenario)
10
- @scenario, @status, @exception = scenario, scenario.status, scenario.exception
11
- @scenario, @exception = scenario.scenario_outline, scenario.exception if example_row?
12
- end
13
-
14
- private
15
-
16
- attr_reader :scenario
17
-
18
- def example_row?
19
- scenario.respond_to? :scenario_outline
20
- end
21
- end
22
- end