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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 75b18f4ad7c3ed38714640e2d2a8a59afd42e0b2
4
- data.tar.gz: 8234a4f5dd614b3ae1445fb7ad71f2d3e56e295a
3
+ metadata.gz: 04c26bca2741dbf5fa943285f82ebb719b3a1d5b
4
+ data.tar.gz: d095ded07ffac12d8a6d0acbe6b757ab4d19242e
5
5
  SHA512:
6
- metadata.gz: e943d1c67f1586159d1a24987c32dc07910d2499f3c4918840484b2b81832f756f942a7aff4484dc05fa886c647309ee658bd7aaa7064edbb03035624d0cce24
7
- data.tar.gz: 38ccd794478be80b096b0b6a90f90fed78ca68c325bc887bf1961cb6838b6a45c92c8e11acd3816c250eee8d9fc76050486127c75bb17baa24609cbe4ecfcee3
6
+ metadata.gz: edb4e6d22e1ee2d3c58c52711572ae90d0de42b974f74cffc79012c600c80865aca274aa385a8bf571b3c81a324abed0c05e62bf34afa0566e5016ad71c96c9b
7
+ data.tar.gz: bc1b92863af80dd96e623d6303a1de9581081c1e82c416edd575ae72e2edcc52f4ef9c595f93420d321137484ba518cd529280cedbea61c221a0ae38a4951fc4
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.3
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.3"
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-08"
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
@@ -17,5 +17,10 @@ module Cascadence
17
17
  return result
18
18
  end
19
19
 
20
+ def self.collect_superclasses(base, classes=[])
21
+ return classes if base.nil?
22
+ collect_superclasses(base.superclass, classes.unshift(base))
23
+ end
24
+
20
25
  end
21
26
  end
@@ -39,7 +39,11 @@ module Cascadence
39
39
  _debug_helper
40
40
 
41
41
  unless next_step_name.nil?
42
- send next_step_name
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.3
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-08 00:00:00.000000000 Z
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