cascadence 0.4.3 → 0.4.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|