cascadence 0.4.3 → 0.4.4
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.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/cascadence.gemspec +3 -2
- data/lib/cascadence/class_methods.rb +10 -0
- data/lib/cascadence/helper.rb +5 -0
- data/lib/cascadence/stateful.rb +18 -1
- data/spec/cascadence/advanced_class_methods_spec.rb +86 -0
- data/spec/cascadence/helper_spec.rb +10 -0
- data/spec/cascadence/runner_spec.rb +0 -3
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 04c26bca2741dbf5fa943285f82ebb719b3a1d5b
|
4
|
+
data.tar.gz: d095ded07ffac12d8a6d0acbe6b757ab4d19242e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: edb4e6d22e1ee2d3c58c52711572ae90d0de42b974f74cffc79012c600c80865aca274aa385a8bf571b3c81a324abed0c05e62bf34afa0566e5016ad71c96c9b
|
7
|
+
data.tar.gz: bc1b92863af80dd96e623d6303a1de9581081c1e82c416edd575ae72e2edcc52f4ef9c595f93420d321137484ba518cd529280cedbea61c221a0ae38a4951fc4
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.4
|
data/cascadence.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "cascadence"
|
8
|
-
s.version = "0.4.
|
8
|
+
s.version = "0.4.4"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Thomas Chen"]
|
12
|
-
s.date = "2013-05-
|
12
|
+
s.date = "2013-05-10"
|
13
13
|
s.description = "Organizational helper for writing serializations for use with threading. The biggest use case of this would be in selenium / capybara based integration testing as this allows you to run flows in parallel."
|
14
14
|
s.email = "foxnewsnetwork@gmail.com"
|
15
15
|
s.executables = ["cascadence"]
|
@@ -56,6 +56,7 @@ Gem::Specification.new do |s|
|
|
56
56
|
"lib/cascadence/templates/%project_name%/base_flow.rb.tt",
|
57
57
|
"lib/cascadence/templates/flow_helper.rb.tt",
|
58
58
|
"lib/cascadence/writer.rb",
|
59
|
+
"spec/cascadence/advanced_class_methods_spec.rb",
|
59
60
|
"spec/cascadence/advanced_fork_merge_spec.rb",
|
60
61
|
"spec/cascadence/class_methods_spec.rb",
|
61
62
|
"spec/cascadence/commander/flow_spec.rb",
|
@@ -44,6 +44,16 @@ module Cascadence
|
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
|
+
def cascadence_rescuers
|
48
|
+
@cascadence_rescuers ||= {}
|
49
|
+
end
|
50
|
+
|
51
|
+
def rescue_from(error_class, with: "method_missing")
|
52
|
+
@cascadence_rescuers ||= {}
|
53
|
+
@cascadence_rescuers[error_class] = with
|
54
|
+
raise NoMethodError.new("Okay you tool, you can't rescue with nothing") if "method_missing" == with
|
55
|
+
end
|
56
|
+
|
47
57
|
end
|
48
58
|
|
49
59
|
end
|
data/lib/cascadence/helper.rb
CHANGED
data/lib/cascadence/stateful.rb
CHANGED
@@ -39,7 +39,11 @@ module Cascadence
|
|
39
39
|
_debug_helper
|
40
40
|
|
41
41
|
unless next_step_name.nil?
|
42
|
-
|
42
|
+
begin
|
43
|
+
send next_step_name
|
44
|
+
rescue => e
|
45
|
+
_consider_rescuing(e)
|
46
|
+
end
|
43
47
|
_increment_cascadence
|
44
48
|
end
|
45
49
|
self
|
@@ -57,6 +61,19 @@ module Cascadence
|
|
57
61
|
|
58
62
|
private
|
59
63
|
|
64
|
+
def _my_rescuers
|
65
|
+
@_my_rescuers ||= Helper.collect_superclasses(self.class).select do |klass|
|
66
|
+
klass.respond_to? :cascadence_rescuers
|
67
|
+
end.inject({}) do |rescuers, klass|
|
68
|
+
rescuers.merge klass.cascadence_rescuers
|
69
|
+
end
|
70
|
+
end
|
71
|
+
def _consider_rescuing(e)
|
72
|
+
raise e if _my_rescuers.nil?
|
73
|
+
raise e if _my_rescuers[e.class].nil?
|
74
|
+
send _my_rescuers[e.class]
|
75
|
+
end
|
76
|
+
|
60
77
|
def _cascadence_end?
|
61
78
|
return false if cascadence_position.nil?
|
62
79
|
cascadence_position >= self.class.cascadence_order.count - 1
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Cascadence::ClassMethods do
|
4
|
+
describe "::rescue_from" do
|
5
|
+
class RapeDungeon < ::StandardError; end
|
6
|
+
let(:fairytale) do
|
7
|
+
Class.new( Cascadence::Flow ) do
|
8
|
+
cascading_order :once_upon_a_time, :fair_princess, :evil_jealous_queen, :get_locked_up, :raped_repeatedly_by_trolls
|
9
|
+
rescue_from RapeDungeon, with: "_white_knight"
|
10
|
+
def initialize
|
11
|
+
self.state = "Disney Presents: "
|
12
|
+
end
|
13
|
+
|
14
|
+
def once_upon_a_time
|
15
|
+
self.state += "In a land far far away (say Japan) "
|
16
|
+
end
|
17
|
+
|
18
|
+
def fair_princess
|
19
|
+
self.state += "there lived a fair princess "
|
20
|
+
end
|
21
|
+
|
22
|
+
def evil_jealous_queen
|
23
|
+
self.state += "who was too fair for the queen "
|
24
|
+
end
|
25
|
+
|
26
|
+
def get_locked_up
|
27
|
+
self.state += "so into the rape dungeon she goes "
|
28
|
+
end
|
29
|
+
|
30
|
+
def raped_repeatedly_by_trolls
|
31
|
+
raise RapeDungeon.new "Your princess is about to get raped by trolls and orcs"
|
32
|
+
self.states += "where she gets raped by trolls and orcs until she likes it."
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
def _white_knight
|
37
|
+
self.state += ". But then some white knight (say Ryan Gosling or Ryan Reynolds) comes along, "
|
38
|
+
self.state += " saves her and they live happily ever after"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
context "standard usage" do
|
43
|
+
let(:storytime) { fairytale.new.run_states.state }
|
44
|
+
it "should have the white knight rescue the fair princess from the rape dungeon before the trolls and orcs get to her" do
|
45
|
+
storytime.should_not =~ /raped by trolls/
|
46
|
+
storytime.should =~ /happily ever after/
|
47
|
+
end
|
48
|
+
end
|
49
|
+
context "fork-inheritance" do
|
50
|
+
let(:modern_twist) do
|
51
|
+
Class.new(fairytale) do
|
52
|
+
fork_after :evil_jealous_queen
|
53
|
+
merge_before :raped_repeatedly_by_trolls
|
54
|
+
cascading_order :hard_ass_queen, :tough_tiger_mom
|
55
|
+
|
56
|
+
def hard_ass_queen
|
57
|
+
self.state += ". Some say the queen was jealous, but queen was an iron lady who lead her country to victory and prosperty through two wars and a recession "
|
58
|
+
end
|
59
|
+
|
60
|
+
def tough_tiger_mom
|
61
|
+
self.state += ". The queen would not let a ditsy spoiled weak-willed girl next in line to rule would lead the nation to ruin. This girl needed to be tough"
|
62
|
+
end
|
63
|
+
|
64
|
+
def raped_repeatedly_by_trolls
|
65
|
+
super.raped_repeatedly_by_trolls
|
66
|
+
self.state += "but these trolls and orcs are naught by her future subjects - subjects she must rule over."
|
67
|
+
self.state += "through trial and tribulation, she comes out stronger and smarter, a fitting successor to her mother."
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
def _white_knight
|
72
|
+
self.state += ". But then some white knight (say Ryan Gosling or Ryan Reynolds) comes along, "
|
73
|
+
self.state += "and she too happily abandons her responsibilities and runs off with this guy."
|
74
|
+
self.state += "The queen is bitterly disappointed, decides to turn the country into a democracy."
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
let(:starring_julia_roberts) { modern_twist.new.run_states.state }
|
79
|
+
it "should have the princess neglecting her responsibilities and running off with the white knight somewhere to fuck" do
|
80
|
+
starring_julia_roberts.should_not =~ /stronger and smarter/
|
81
|
+
starring_julia_roberts.should_not =~ /happily ever after/
|
82
|
+
starring_julia_roberts.should =~ /bitterly disappointed/
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -3,6 +3,16 @@ require 'spec_helper'
|
|
3
3
|
describe Cascadence::Helper do
|
4
4
|
let(:api) { Cascadence::Helper }
|
5
5
|
|
6
|
+
describe "::collect_superclasses" do
|
7
|
+
let(:flow) { Class.new(Cascadence::Flow) }
|
8
|
+
before :each do
|
9
|
+
@expected = [BasicObject, Object, Cascadence::Flow, flow]
|
10
|
+
end
|
11
|
+
it "should give me all the superclasses in an array with the most basic being first" do
|
12
|
+
api.collect_superclasses(flow).should eq @expected
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
6
16
|
describe "#generate_tributary" do
|
7
17
|
context "standard usage" do
|
8
18
|
before :each do
|
@@ -6,8 +6,6 @@ describe Cascadence::Runner do
|
|
6
6
|
Class.new do
|
7
7
|
def call
|
8
8
|
sleep 2
|
9
|
-
make_sure_this_gets_called!
|
10
|
-
puts "thread exiting"
|
11
9
|
return 13
|
12
10
|
end
|
13
11
|
end
|
@@ -15,7 +13,6 @@ describe Cascadence::Runner do
|
|
15
13
|
|
16
14
|
context "running tasks" do
|
17
15
|
before :each do
|
18
|
-
task.any_instance.should_receive(:make_sure_this_gets_called!)
|
19
16
|
@tasks = 1.upto(7).map { |a| task.new }.to_enum
|
20
17
|
end
|
21
18
|
context "public api" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cascadence
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thomas Chen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-05-
|
11
|
+
date: 2013-05-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -143,6 +143,7 @@ files:
|
|
143
143
|
- lib/cascadence/templates/%project_name%/base_flow.rb.tt
|
144
144
|
- lib/cascadence/templates/flow_helper.rb.tt
|
145
145
|
- lib/cascadence/writer.rb
|
146
|
+
- spec/cascadence/advanced_class_methods_spec.rb
|
146
147
|
- spec/cascadence/advanced_fork_merge_spec.rb
|
147
148
|
- spec/cascadence/class_methods_spec.rb
|
148
149
|
- spec/cascadence/commander/flow_spec.rb
|