ellington 0.1.4 → 0.2.0

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: d975b4f434d7239d4a483522d694c8b420767a8e
4
- data.tar.gz: 61411d8204a5a16ef7856d8d98924516d888a953
3
+ metadata.gz: 1047c36cb4128e723415dcd5e7b74f00a38da00b
4
+ data.tar.gz: 8077a60871b70d5530847a5f78a653ca9236a11e
5
5
  SHA512:
6
- metadata.gz: 843468642085243d43bd505000039e5f6ceff8cf45f19d9ac87894443c828beb6070620d6e08ebe0481eb6bda4a122a0839977b790a1cef414582122e108e2ed
7
- data.tar.gz: be076bb1dcaf14e7e21e96cd3e157f915024fe42ba6d979ac070d45bae5764487ae2e5e0e5e7309e9212505b81a03aec87807b97799aec48d0e53e8e00f93180
6
+ metadata.gz: 5f78a52f1504888e376e61e788eb9bb5ac3aafe5e2b2285ba346bb0d9bfed999ebd1c0c8a860befb9d223520c5adef146852cbd012dc8258aae4079cb4e2d3b9
7
+ data.tar.gz: 44c136a470a26cb649a78285d45728eefd5e4d8dd95197beb4f73182f0c106f5364f67442ca9b962b8bf9a07d48c83395b63eef6506a2c0ae22ff079daebfa90
data/Gemfile.lock CHANGED
@@ -1,57 +1,60 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ellington (0.1.3)
5
- hero (~> 0.1.9)
6
- ruby-graphviz (~> 1.0.8)
7
- state_jacket (~> 0.1.0)
4
+ ellington (0.2.0)
5
+ hero (~> 0.2.0)
6
+ ruby-graphviz (~> 1.2.1)
7
+ state_jacket (~> 0.1.1)
8
8
 
9
9
  GEM
10
10
  remote: https://rubygems.org/
11
11
  specs:
12
- awesome_print (1.1.0)
12
+ awesome_print (1.2.0)
13
13
  binding_of_caller (0.7.2)
14
14
  debug_inspector (>= 0.0.1)
15
- coderay (1.0.9)
16
- colorize (0.5.8)
17
- coveralls (0.6.7)
18
- colorize
15
+ coderay (1.1.0)
16
+ coveralls (0.7.2)
19
17
  multi_json (~> 1.3)
20
- rest-client
18
+ rest-client (= 1.6.7)
21
19
  simplecov (>= 0.7)
22
- thor
20
+ term-ansicolor (= 1.2.2)
21
+ thor (= 0.18.1)
23
22
  debug_inspector (0.0.2)
24
- hero (0.1.9)
25
- interception (0.3)
23
+ docile (1.1.5)
24
+ hero (0.2.0)
25
+ interception (0.5)
26
26
  method_source (0.8.2)
27
- micro_mock (1.1.0)
28
- micro_test (0.4.0)
29
- os
30
- mime-types (1.24)
31
- multi_json (1.7.9)
27
+ mime-types (2.4.3)
28
+ multi_json (1.10.1)
32
29
  os (0.9.6)
33
- pry (0.9.12.2)
34
- coderay (~> 1.0.5)
35
- method_source (~> 0.8)
30
+ pry (0.10.1)
31
+ coderay (~> 1.1.0)
32
+ method_source (~> 0.8.1)
36
33
  slop (~> 3.4)
37
- pry-rescue (1.1.1)
38
- interception (>= 0.3)
34
+ pry-rescue (1.4.1)
35
+ interception (>= 0.5)
39
36
  pry
40
37
  pry-stack_explorer (0.4.9.1)
41
38
  binding_of_caller (>= 0.7)
42
39
  pry (>= 0.9.11)
43
- rake (10.1.0)
40
+ pry-test (0.5.5)
41
+ os
42
+ rake (10.4.2)
44
43
  rest-client (1.6.7)
45
44
  mime-types (>= 1.16)
46
- ruby-graphviz (1.0.9)
47
- simplecov (0.7.1)
45
+ ruby-graphviz (1.2.1)
46
+ simplecov (0.9.1)
47
+ docile (~> 1.1.0)
48
48
  multi_json (~> 1.0)
49
- simplecov-html (~> 0.7.1)
50
- simplecov-html (0.7.1)
51
- slop (3.4.6)
52
- state_jacket (0.1.0)
49
+ simplecov-html (~> 0.8.0)
50
+ simplecov-html (0.8.0)
51
+ slop (3.6.0)
52
+ spoof (2.0.1)
53
+ state_jacket (0.1.1)
54
+ term-ansicolor (1.2.2)
55
+ tins (~> 0.8)
53
56
  thor (0.18.1)
54
- yell (1.4.0)
57
+ tins (0.13.2)
55
58
 
56
59
  PLATFORMS
57
60
  ruby
@@ -60,10 +63,10 @@ DEPENDENCIES
60
63
  awesome_print
61
64
  coveralls
62
65
  ellington!
63
- micro_mock
64
- micro_test
66
+ pry
65
67
  pry-rescue
66
68
  pry-stack_explorer
69
+ pry-test
67
70
  rake
68
71
  simplecov
69
- yell
72
+ spoof
data/README.md CHANGED
@@ -1,9 +1,11 @@
1
- # Ellington
1
+ [![Lines of Code](http://img.shields.io/badge/lines_of_code-932-brightgreen.svg?style=flat)](http://blog.codinghorror.com/the-best-code-is-no-code-at-all/)
2
+ [![Code Status](http://img.shields.io/codeclimate/github/hopsoft/ellington.svg?style=flat)](https://codeclimate.com/github/hopsoft/ellington)
3
+ [![Dependency Status](http://img.shields.io/gemnasium/hopsoft/ellington.svg?style=flat)](https://gemnasium.com/hopsoft/ellington)
4
+ [![Build Status](http://img.shields.io/travis/hopsoft/ellington.svg?style=flat)](https://travis-ci.org/hopsoft/ellington)
5
+ [![Coverage Status](https://img.shields.io/coveralls/hopsoft/ellington.svg?style=flat)](https://coveralls.io/r/hopsoft/ellington?branch=master)
6
+ [![Downloads](http://img.shields.io/gem/dt/ellington.svg?style=flat)](http://rubygems.org/gems/ellington)
2
7
 
3
- [![Build Status](https://travis-ci.org/hopsoft/ellington.png)](https://travis-ci.org/hopsoft/ellington)
4
- [![Dependency Status](https://gemnasium.com/hopsoft/ellington.png)](https://gemnasium.com/hopsoft/ellington)
5
- [![Code Climate](https://codeclimate.com/github/hopsoft/ellington.png)](https://codeclimate.com/github/hopsoft/ellington)
6
- [![Coverage Status](https://coveralls.io/repos/hopsoft/ellington/badge.png?branch=master)](https://coveralls.io/r/hopsoft/ellington?branch=master)
8
+ # Ellington
7
9
 
8
10
  Named after [Duke Ellington](http://www.dukeellington.com/) whose signature tune was ["Take the 'A' Train"](http://en.wikipedia.org/wiki/Take_the_%22A%22_Train).
9
11
  The song was written about [New York City's A train](http://en.wikipedia.org/wiki/A_%28New_York_City_Subway_service%29).
@@ -12,7 +14,7 @@ The song was written about [New York City's A train](http://en.wikipedia.org/wik
12
14
 
13
15
  #### Ellington is an architecture for modeling complex business processes.
14
16
 
15
- Ellington is a collection of simple concepts designed to bring discipline, organization, and modularity to a project.
17
+ Ellington brings discipline, organization, and modularity to a project.
16
18
 
17
19
  The nomenclature is taken from [New York's subway system](http://en.wikipedia.org/wiki/New_York_City_Subway).
18
20
  We've found that using consistent and cohesive physical metaphors helps people reason more clearly about the complexities of software.
data/Rakefile CHANGED
@@ -3,5 +3,5 @@ require "bundler/gem_tasks"
3
3
  task :default => [:test]
4
4
 
5
5
  task :test do
6
- exec "bundle exec mt"
6
+ exec "bundle exec pry-test --disable-pry"
7
7
  end
@@ -1,22 +1,9 @@
1
1
  module Ellington
2
- class ListAlreadyContainsType < StandardError
3
- end
4
-
5
- class AttendantDisapproves < StandardError
6
- end
7
-
8
- class InvalidStateTransition < StandardError
9
- end
10
-
11
- class NotImplementedError < StandardError
12
- end
13
-
14
- class NoStationsDeclared < StandardError
15
- end
16
-
17
- class NoLinesDeclared < StandardError
18
- end
19
-
20
- class NoGoalDeclared < StandardError
21
- end
2
+ class ListAlreadyContainsType < StandardError; end
3
+ class AttendantDisapproves < StandardError; end
4
+ class InvalidStateTransition < StandardError; end
5
+ class NotImplementedError < StandardError; end
6
+ class NoStationsDeclared < StandardError; end
7
+ class NoLinesDeclared < StandardError; end
8
+ class NoGoalDeclared < StandardError; end
22
9
  end
@@ -46,8 +46,8 @@ module Ellington
46
46
  stations.first.initial_states
47
47
  end
48
48
 
49
- def board(passenger, options={})
50
- formula.run passenger, options
49
+ def board(passenger)
50
+ formula.run passenger
51
51
  end
52
52
 
53
53
  def boarded?(passenger)
@@ -94,24 +94,21 @@ module Ellington
94
94
  return complete_line(line_info)
95
95
  end
96
96
 
97
- log line_info, :station_completed => true
98
- if line_info.passenger.current_state == line_info.station.errored
99
- Ellington.logger.info "\n" if Ellington.logger
100
- end
97
+ log line_info.station_completed_message # TODO: add *passenger_attrs
101
98
  end
102
99
 
103
100
  protected
104
101
 
105
102
  def complete_line(line_info)
106
- log line_info, :station_completed => true
107
- log line_info, :line_completed => true
103
+ log line_info.station_completed_message # TODO: add *passenger_attrs
104
+ log line_info.line_completed_message # TODO: add *passenger_attrs
108
105
  changed
109
106
  notify_observers line_info
110
107
  end
111
108
 
112
- def log(line_info, options={})
109
+ def log(message)
113
110
  return unless Ellington.logger
114
- Ellington.logger.info line_info.log_message(options)
111
+ Ellington.logger.info message
115
112
  end
116
113
 
117
114
  end
@@ -14,25 +14,31 @@ module Ellington
14
14
  @station_full_name ||= "#{line.route.name} #{line.class.name} #{station.class.name}"
15
15
  end
16
16
 
17
- def log_message(options={})
17
+ def station_completed_message
18
18
  message = []
19
- if options[:line_completed]
20
- message << "[LINE COMPLETED]"
21
- message << "[#{line.state(passenger)}]"
22
- message << "[#{line.name}]"
23
- end
24
- if options[:station_completed]
25
- message << "[STATION COMPLETED]"
26
- message << "[#{station.state(passenger)}]"
27
- message << "[#{station_full_name}]"
28
- end
29
- line.route.log_options[:passenger].each do |attr|
30
- message << "[#{attr}:#{passenger.send(attr)}]"
31
- end
32
- line.route.log_options[:options].each do |attr|
33
- message << "[#{attr}:#{self.options[attr]}]"
34
- end
19
+ message << "[STATION COMPLETED]"
20
+ message << "[#{station.state(passenger)}]"
21
+ message << "[#{station_full_name}]"
22
+ message.concat passenger_message
23
+ message.join " "
24
+ end
25
+
26
+ def line_completed_message
27
+ message = []
28
+ message << "[LINE COMPLETED]"
29
+ message << "[#{line.state(passenger)}]"
30
+ message << "[#{line.name}]"
31
+ message.concat passenger_message
35
32
  message.join " "
36
33
  end
34
+
35
+ def passenger_message
36
+ line.route.passenger_attrs_to_log.reduce([]) do |memo, attr|
37
+ value = passenger.send(attr) rescue nil
38
+ memo << "[#{attr}:#{value}]" unless value.nil?
39
+ memo
40
+ end
41
+ end
42
+
37
43
  end
38
44
  end
@@ -6,11 +6,11 @@ module Ellington
6
6
  attr_accessor :context, :ticket
7
7
  attr_reader :route, :state_history
8
8
 
9
- def initialize(context, route, options={})
9
+ def initialize(context, route: route, ticket: Ellington::Ticket.new, state_history: [])
10
10
  @context = context
11
11
  @route = route
12
- @ticket = options[:ticket] || Ellington::Ticket.new
13
- @state_history = options[:state_history] || []
12
+ @ticket = ticket
13
+ @state_history = state_history
14
14
  super context
15
15
  end
16
16
 
@@ -47,8 +47,8 @@ module Ellington
47
47
  @initialized
48
48
  end
49
49
 
50
- def board(passenger, options={})
51
- lines.first.board passenger, options
50
+ def board(passenger)
51
+ lines.first.board passenger
52
52
  end
53
53
 
54
54
  def lines
@@ -92,18 +92,17 @@ module Ellington
92
92
  @connections ||= Ellington::ConnectionList.new
93
93
  end
94
94
 
95
- def connect_to(line, options)
96
- type = options.keys.first
97
- states = options[type]
98
- connections << Ellington::Connection.new(line, type, states)
95
+ def connect_to(line, if_any: [], if_all: [])
96
+ connections << Ellington::Connection.new(line, :if_any, if_any) unless if_any.empty?
97
+ connections << Ellington::Connection.new(line, :if_all, if_all) unless if_all.empty?
99
98
  end
100
99
 
101
- def log_options(options={})
102
- @log_options ||= begin
103
- options[:passenger] ||= []
104
- options[:options] ||= []
105
- options
106
- end
100
+ def passenger_attrs_to_log
101
+ @passenger_attrs_to_log ||= []
102
+ end
103
+
104
+ def set_passenger_attrs_to_log(*attrs)
105
+ @passenger_attrs_to_log = attrs
107
106
  end
108
107
 
109
108
  def line_completed(line_info)
@@ -111,7 +110,7 @@ module Ellington
111
110
  connections = required_connections(route_info.passenger)
112
111
  return complete_route(route_info) if connections.empty?
113
112
  connections.each do |connection|
114
- connection.line.board route_info.passenger, route_info.options
113
+ connection.line.board route_info.passenger
115
114
  end
116
115
  end
117
116
 
@@ -119,11 +118,10 @@ module Ellington
119
118
 
120
119
  def complete_route(route_info)
121
120
  if passed.satisfied?(route_info.passenger) || failed.satisfied?(route_info.passenger)
122
- log route_info
121
+ log route_info.route_completed_message
123
122
  changed
124
123
  notify_observers route_info
125
124
  end
126
- Ellington.logger.info "\n" if Ellington.logger
127
125
  end
128
126
 
129
127
  def required_connections(passenger)
@@ -132,9 +130,9 @@ module Ellington
132
130
  end
133
131
  end
134
132
 
135
- def log(route_info)
133
+ def log(message)
136
134
  return unless Ellington.logger
137
- Ellington.logger.info route_info.log_message
135
+ Ellington.logger.info message
138
136
  end
139
137
 
140
138
  end
@@ -10,19 +10,22 @@ module Ellington
10
10
  super line_info
11
11
  end
12
12
 
13
- def log_message(options={})
13
+ def route_completed_message
14
14
  message = []
15
15
  message << "[ROUTE COMPLETED]"
16
16
  message << "[#{route.state(passenger)}]"
17
17
  message << "[#{route.name}]"
18
- route.log_options[:passenger].each do |attr|
19
- message << "[#{attr}:#{passenger.send(attr)}]"
20
- end
21
- route.log_options[:options].each do |attr|
22
- message << "[#{attr}:#{self.options[attr]}]"
23
- end
18
+ message.concat passenger_message
24
19
  message.join " "
25
20
  end
21
+
22
+ def passenger_message
23
+ route.passenger_attrs_to_log.reduce([]) do |memo, attr|
24
+ value = passenger.send(attr) rescue nil
25
+ memo << "[#{attr}:#{value}]" unless value.nil?
26
+ memo
27
+ end
28
+ end
26
29
  end
27
30
  end
28
31
 
@@ -46,25 +46,38 @@ module Ellington
46
46
  end
47
47
  end
48
48
 
49
- def can_engage?(passenger, options={})
49
+ def can_engage?(passenger)
50
50
  return false unless route.states.can_transition?(passenger.current_state => states.keys)
51
51
  return false if passenger.state_history_includes?(passed)
52
52
  true
53
53
  end
54
54
 
55
- def engage(passenger, options={})
55
+ def engage(passenger)
56
56
  raise Ellington::NotImplementedError
57
57
  end
58
58
 
59
- def call(passenger, options={})
59
+ def engage_and_transition(passenger)
60
+ begin
61
+ if !!engage(passenger)
62
+ pass_passenger passenger
63
+ else
64
+ fail_passenger passenger
65
+ end
66
+ rescue StandardError => e
67
+ Ellington.logger.error "Failure while engaging passenger! #{e}" if Ellington.logger
68
+ error_passenger passenger
69
+ end
70
+ end
71
+
72
+ def call(passenger, _=nil)
60
73
  if can_engage?(passenger)
61
74
  attendant = Ellington::Attendant.new(self)
62
75
  passenger.add_observer attendant
63
- engage passenger, options
76
+ engage_and_transition passenger
64
77
  passenger.delete_observer attendant
65
78
  raise Ellington::AttendantDisapproves unless attendant.approve?
66
79
  changed
67
- notify_observers Ellington::StationInfo.new(self, passenger, attendant.passenger_transitions.first, options)
80
+ notify_observers Ellington::StationInfo.new(self, passenger, attendant.passenger_transitions.first)
68
81
  end
69
82
 
70
83
  passenger
@@ -1,11 +1,10 @@
1
1
  module Ellington
2
2
  class StationInfo
3
- attr_reader :station, :passenger, :transition, :options
4
- def initialize(station, passenger, transition, options)
3
+ attr_reader :station, :passenger, :transition
4
+ def initialize(station, passenger, transition)
5
5
  @station = station
6
6
  @passenger = passenger
7
7
  @transition = transition
8
- @options = options
9
8
  end
10
9
  end
11
10
  end
@@ -1,3 +1,3 @@
1
1
  module Ellington
2
- VERSION = "0.1.4"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -1,12 +1,12 @@
1
1
  require_relative "test_helper"
2
2
 
3
- class AttendantTest < MicroTest::Test
3
+ class AttendantTest < PryTest::Test
4
4
 
5
5
  before do
6
6
  route = BasicMath.new
7
7
  line = route.lines.first
8
8
  @station = line.stations.first
9
- @passenger = Ellington::Passenger.new(NumberWithHistory.new(0), route)
9
+ @passenger = Ellington::Passenger.new(NumberWithHistory.new(0), route: route)
10
10
  @passenger.current_state = route.initial_state
11
11
  @attendant = Ellington::Attendant.new(@station)
12
12
  @passenger.add_observer @attendant
@@ -1,11 +1,11 @@
1
1
  require_relative "test_helper"
2
2
 
3
- class ConductorTest < MicroTest::Test
3
+ class ConductorTest < PryTest::Test
4
4
 
5
5
  before do
6
6
  @route = BasicMath.new
7
7
  @conductor = Ellington::Conductor.new(@route)
8
- @passenger = Ellington::Passenger.new(NumberWithHistory.new(0), @route)
8
+ @passenger = Ellington::Passenger.new(NumberWithHistory.new(0), route: @route)
9
9
  @passenger.current_state = @route.initial_state
10
10
  end
11
11
 
@@ -1,6 +1,6 @@
1
1
  require_relative "test_helper"
2
2
 
3
- class ConnectionTest < MicroTest::Test
3
+ class ConnectionTest < PryTest::Test
4
4
 
5
5
  before do
6
6
  @route = BasicMath.new
data/test/example.rb CHANGED
@@ -1,12 +1,6 @@
1
1
  require "logger"
2
2
  require_relative "../lib/ellington"
3
3
 
4
- #require "yell"
5
- #Ellington.logger = Yell.new do |logger|
6
- # logger.adapter STDOUT, :level => [:info], :format => "%m"
7
- #end
8
- #Ellington.logger = Logger.new($stdout)
9
-
10
4
  class NumberWithHistory
11
5
  attr_reader :original_value, :current_value, :history
12
6
  def initialize(value)
@@ -25,128 +19,65 @@ end
25
19
 
26
20
  # stations -----------------------------------------------------------------
27
21
  class Add10 < Ellington::Station
28
- def engage(number, options)
22
+ def engage(number)
29
23
  raise if rand(100) == 0
30
- if rand(100) > 5
31
- number.calc :+, 10
32
- pass_passenger number
33
- else
34
- fail_passenger number
35
- end
36
- rescue
37
- error_passenger number
24
+ number.calc :+, 10 if rand(100) > 5
38
25
  end
39
26
  end
40
27
 
41
28
  class Add100 < Ellington::Station
42
- def engage(number, options)
29
+ def engage(number)
43
30
  raise if rand(100) == 0
44
- if rand(100) > 5
45
- number.calc :+, 100
46
- pass_passenger number
47
- else
48
- fail_passenger number
49
- end
50
- rescue
51
- error_passenger number
31
+ number.calc :+, 100 if rand(100) > 5
52
32
  end
53
33
  end
54
34
 
55
35
  class Add1000 < Ellington::Station
56
- def engage(number, options)
36
+ def engage(number)
57
37
  raise if rand(100) == 0
58
- if rand(100) > 5
59
- number.calc :+, 1000
60
- pass_passenger number
61
- else
62
- fail_passenger number
63
- end
64
- rescue
65
- error_passenger number
38
+ number.calc :+, 1000 if rand(100) > 5
66
39
  end
67
40
  end
68
41
 
69
42
  class MultiplyBy10 < Ellington::Station
70
- def engage(number, options)
43
+ def engage(number)
71
44
  raise if rand(100) == 0
72
- if rand(100) > 5
73
- number.calc :*, 10
74
- pass_passenger number
75
- else
76
- fail_passenger number
77
- end
78
- rescue
79
- error_passenger number
45
+ number.calc :*, 10 if rand(100) > 5
80
46
  end
81
47
  end
82
48
 
83
49
  class MultiplyBy100 < Ellington::Station
84
- def engage(number, options)
50
+ def engage(number)
85
51
  raise if rand(100) == 0
86
- if rand(100) > 5
87
- number.calc :*, 100
88
- pass_passenger number
89
- else
90
- fail_passenger number
91
- end
92
- rescue
93
- error_passenger number
52
+ number.calc :*, 100 if rand(100) > 5
94
53
  end
95
54
  end
96
55
 
97
56
  class MultiplyBy1000 < Ellington::Station
98
- def engage(number, options)
57
+ def engage(number)
99
58
  raise if rand(100) == 0
100
- if rand(100) > 5
101
- number.calc :*, 1000
102
- pass_passenger number
103
- else
104
- fail_passenger number
105
- end
106
- rescue
107
- error_passenger number
59
+ number.calc :*, 1000 if rand(100) > 5
108
60
  end
109
61
  end
110
62
 
111
63
  class DivideBy10 < Ellington::Station
112
- def engage(number, options)
64
+ def engage(number)
113
65
  raise if rand(100) == 0
114
- if rand(100) > 5
115
- number.calc :/, 10.0
116
- pass_passenger number
117
- else
118
- fail_passenger number
119
- end
120
- rescue
121
- error_passenger number
66
+ number.calc :/, 10.0 if rand(100) > 5
122
67
  end
123
68
  end
124
69
 
125
70
  class DivideBy100 < Ellington::Station
126
- def engage(number, options)
71
+ def engage(number)
127
72
  raise if rand(100) == 0
128
- if rand(100) > 5
129
- number.calc :/, 100.0
130
- pass_passenger number
131
- else
132
- fail_passenger number
133
- end
134
- rescue
135
- error_passenger number
73
+ number.calc :/, 100.0 if rand(100) > 5
136
74
  end
137
75
  end
138
76
 
139
77
  class DivideBy1000 < Ellington::Station
140
- def engage(number, options)
78
+ def engage(number)
141
79
  raise if rand(100) == 0
142
- if rand(100) > 5
143
- number.calc :/, 1000.0
144
- pass_passenger number
145
- else
146
- fail_passenger number
147
- end
148
- rescue
149
- error_passenger number
80
+ number.calc :/, 1000.0 if rand(100) > 5
150
81
  end
151
82
  end
152
83
 
@@ -174,9 +105,9 @@ end
174
105
 
175
106
  # route -------------------------------------------------------------------
176
107
  class BasicMath < Ellington::Route
177
- addition = Addition.new
108
+ addition = Addition.new
178
109
  multiplication = Multiplication.new
179
- division = Division.new
110
+ division = Division.new
180
111
 
181
112
  lines << addition
182
113
  lines << division
@@ -187,6 +118,6 @@ class BasicMath < Ellington::Route
187
118
  connect_to division, :if_any => addition.passed
188
119
  connect_to multiplication, :if_any => addition.failed
189
120
 
190
- log_options :passenger => [:original_value, :current_value]
121
+ set_passenger_attrs_to_log :original_value, :current_value
191
122
  end
192
123