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 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