finite_machine 0.11.2 → 0.14.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGELOG.md +80 -0
- data/LICENSE.txt +1 -1
- data/README.md +679 -624
- data/lib/finite_machine.rb +35 -45
- data/lib/finite_machine/async_call.rb +5 -21
- data/lib/finite_machine/callable.rb +4 -4
- data/lib/finite_machine/catchable.rb +24 -14
- data/lib/finite_machine/choice_merger.rb +20 -20
- data/lib/finite_machine/const.rb +16 -0
- data/lib/finite_machine/definition.rb +3 -3
- data/lib/finite_machine/dsl.rb +98 -151
- data/lib/finite_machine/env.rb +4 -2
- data/lib/finite_machine/event_definition.rb +7 -15
- data/lib/finite_machine/{events_chain.rb → events_map.rb} +40 -53
- data/lib/finite_machine/hook_event.rb +60 -61
- data/lib/finite_machine/hooks.rb +44 -36
- data/lib/finite_machine/listener.rb +2 -2
- data/lib/finite_machine/logger.rb +5 -4
- data/lib/finite_machine/{event_queue.rb → message_queue.rb} +76 -32
- data/lib/finite_machine/observer.rb +71 -34
- data/lib/finite_machine/safety.rb +16 -14
- data/lib/finite_machine/state_definition.rb +3 -5
- data/lib/finite_machine/state_machine.rb +93 -76
- data/lib/finite_machine/state_parser.rb +55 -83
- data/lib/finite_machine/subscribers.rb +2 -2
- data/lib/finite_machine/threadable.rb +3 -1
- data/lib/finite_machine/transition.rb +34 -34
- data/lib/finite_machine/transition_builder.rb +23 -32
- data/lib/finite_machine/transition_event.rb +12 -11
- data/lib/finite_machine/two_phase_lock.rb +8 -6
- data/lib/finite_machine/undefined_transition.rb +5 -6
- data/lib/finite_machine/version.rb +2 -2
- metadata +58 -142
- data/.gitignore +0 -18
- data/.rspec +0 -5
- data/.ruby-gemset +0 -1
- data/.ruby-version +0 -1
- data/.travis.yml +0 -26
- data/Gemfile +0 -15
- data/Rakefile +0 -8
- data/assets/finite_machine_logo.png +0 -0
- data/examples/atm.rb +0 -45
- data/examples/bug_system.rb +0 -145
- data/finite_machine.gemspec +0 -23
- data/lib/finite_machine/async_proxy.rb +0 -30
- data/spec/integration/system_spec.rb +0 -95
- data/spec/spec_helper.rb +0 -33
- data/spec/unit/alias_target_spec.rb +0 -108
- data/spec/unit/async_events_spec.rb +0 -138
- data/spec/unit/callable/call_spec.rb +0 -113
- data/spec/unit/callbacks_spec.rb +0 -942
- data/spec/unit/can_spec.rb +0 -98
- data/spec/unit/choice_spec.rb +0 -331
- data/spec/unit/define_spec.rb +0 -55
- data/spec/unit/definition_spec.rb +0 -115
- data/spec/unit/event_names_spec.rb +0 -19
- data/spec/unit/event_queue_spec.rb +0 -52
- data/spec/unit/events_chain/add_spec.rb +0 -25
- data/spec/unit/events_chain/cancel_transitions_spec.rb +0 -22
- data/spec/unit/events_chain/choice_transition_spec.rb +0 -28
- data/spec/unit/events_chain/clear_spec.rb +0 -15
- data/spec/unit/events_chain/events_spec.rb +0 -18
- data/spec/unit/events_chain/inspect_spec.rb +0 -24
- data/spec/unit/events_chain/match_transition_spec.rb +0 -37
- data/spec/unit/events_chain/move_to_spec.rb +0 -48
- data/spec/unit/events_chain/states_for_spec.rb +0 -17
- data/spec/unit/events_spec.rb +0 -459
- data/spec/unit/handlers_spec.rb +0 -152
- data/spec/unit/hook_event/build_spec.rb +0 -15
- data/spec/unit/hook_event/eql_spec.rb +0 -36
- data/spec/unit/hook_event/infer_default_name_spec.rb +0 -13
- data/spec/unit/hook_event/initialize_spec.rb +0 -25
- data/spec/unit/hook_event/notify_spec.rb +0 -14
- data/spec/unit/hooks/call_spec.rb +0 -24
- data/spec/unit/hooks/clear_spec.rb +0 -16
- data/spec/unit/hooks/inspect_spec.rb +0 -17
- data/spec/unit/hooks/register_spec.rb +0 -22
- data/spec/unit/if_unless_spec.rb +0 -353
- data/spec/unit/initial_spec.rb +0 -222
- data/spec/unit/inspect_spec.rb +0 -17
- data/spec/unit/is_spec.rb +0 -55
- data/spec/unit/log_transitions_spec.rb +0 -30
- data/spec/unit/logger_spec.rb +0 -38
- data/spec/unit/respond_to_spec.rb +0 -38
- data/spec/unit/state_parser/inspect_spec.rb +0 -25
- data/spec/unit/state_parser/parse_spec.rb +0 -59
- data/spec/unit/states_spec.rb +0 -34
- data/spec/unit/subscribers_spec.rb +0 -42
- data/spec/unit/target_spec.rb +0 -225
- data/spec/unit/terminated_spec.rb +0 -95
- data/spec/unit/transition/check_conditions_spec.rb +0 -54
- data/spec/unit/transition/inspect_spec.rb +0 -25
- data/spec/unit/transition/matches_spec.rb +0 -23
- data/spec/unit/transition/states_spec.rb +0 -31
- data/spec/unit/transition/to_state_spec.rb +0 -27
- data/spec/unit/trigger_spec.rb +0 -22
- data/spec/unit/undefined_transition/eql_spec.rb +0 -17
- data/tasks/console.rake +0 -11
- data/tasks/coverage.rake +0 -11
- data/tasks/spec.rake +0 -29
@@ -1,25 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
RSpec.describe FiniteMachine::Transition, '#inspect' do
|
6
|
-
let(:machine) { double(:machine) }
|
7
|
-
|
8
|
-
subject(:transition) { described_class.new(machine, attrs) }
|
9
|
-
|
10
|
-
context 'when inspecting' do
|
11
|
-
let(:attrs) { {name: :start, states: { :foo => :bar, :baz => :daz } } }
|
12
|
-
|
13
|
-
it "displays name and transitions" do
|
14
|
-
expect(transition.inspect).to eql("<#FiniteMachine::Transition @name=start, @transitions=foo -> bar, baz -> daz, @when=[]>")
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
context 'when converting to string' do
|
19
|
-
let(:attrs) { {name: :start, states: { :foo => :bar } } }
|
20
|
-
|
21
|
-
it "displays name and transitions" do
|
22
|
-
expect(transition.to_s).to eql("start")
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
RSpec.describe FiniteMachine::Transition, '.matches?' do
|
6
|
-
let(:machine) { double(:machine) }
|
7
|
-
|
8
|
-
it "matches from state" do
|
9
|
-
states = {:green => :red}
|
10
|
-
transition = described_class.new(machine, states: states)
|
11
|
-
|
12
|
-
expect(transition.matches?(:green)).to eq(true)
|
13
|
-
expect(transition.matches?(:red)).to eq(false)
|
14
|
-
end
|
15
|
-
|
16
|
-
it "matches any state" do
|
17
|
-
states = {:any => :red}
|
18
|
-
transition = described_class.new(machine, states: states)
|
19
|
-
|
20
|
-
expect(transition.matches?(:green)).to eq(true)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
@@ -1,31 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
RSpec.describe FiniteMachine::Transition, '.states' do
|
6
|
-
let(:machine) { double(:machine) }
|
7
|
-
|
8
|
-
it "groups states with :to key only" do
|
9
|
-
attrs = {states: {:any => :red}}
|
10
|
-
transition = FiniteMachine::Transition.new(machine, attrs)
|
11
|
-
expect(transition.states).to eql({any: :red})
|
12
|
-
end
|
13
|
-
|
14
|
-
it "groups states when from array" do
|
15
|
-
attrs = {states: { :green => :red, :yellow => :red}}
|
16
|
-
transition = FiniteMachine::Transition.new(machine, attrs)
|
17
|
-
expect(transition.states.keys).to match_array([:green, :yellow])
|
18
|
-
expect(transition.states.values).to eql([:red, :red])
|
19
|
-
end
|
20
|
-
|
21
|
-
|
22
|
-
it "groups states when hash of states" do
|
23
|
-
attrs = {states: {
|
24
|
-
:initial => :low,
|
25
|
-
:low => :medium,
|
26
|
-
:medium => :high }}
|
27
|
-
transition = FiniteMachine::Transition.new(machine, attrs)
|
28
|
-
expect(transition.states.keys).to match_array([:initial, :low, :medium])
|
29
|
-
expect(transition.states.values).to eql([:low, :medium, :high])
|
30
|
-
end
|
31
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
RSpec.describe FiniteMachine::Transition, '.to_state' do
|
6
|
-
let(:machine) { double(:machine) }
|
7
|
-
|
8
|
-
it "finds to state" do
|
9
|
-
states = {:green => :red}
|
10
|
-
transition = described_class.new(machine, states: states)
|
11
|
-
|
12
|
-
expect(transition.to_state(:green)).to eq(:red)
|
13
|
-
end
|
14
|
-
|
15
|
-
it "finds to state for transition from any state" do
|
16
|
-
states = {:any => :red}
|
17
|
-
transition = described_class.new(machine, states: states)
|
18
|
-
|
19
|
-
expect(transition.to_state(:green)).to eq(:red)
|
20
|
-
end
|
21
|
-
|
22
|
-
it "returns from state for cancelled transition" do
|
23
|
-
transition = described_class.new(machine, cancelled: true)
|
24
|
-
|
25
|
-
expect(transition.to_state(:green)).to eq(:green)
|
26
|
-
end
|
27
|
-
end
|
data/spec/unit/trigger_spec.rb
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
RSpec.describe FiniteMachine::StateMachine, '.trigger' do
|
6
|
-
it "triggers event manually" do
|
7
|
-
called = []
|
8
|
-
fsm = FiniteMachine.define do
|
9
|
-
initial :red
|
10
|
-
|
11
|
-
events {
|
12
|
-
event :start, :red => :green, if: proc { |_, name| called << name; true }
|
13
|
-
event :stop, :green => :red
|
14
|
-
}
|
15
|
-
end
|
16
|
-
|
17
|
-
expect(fsm.current).to eq(:red)
|
18
|
-
fsm.trigger(:start, 'Piotr')
|
19
|
-
expect(fsm.current).to eq(:green)
|
20
|
-
expect(called).to eq(['Piotr'])
|
21
|
-
end
|
22
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
RSpec.describe FiniteMachine::UndefinedTransition, '#==' do
|
6
|
-
it "is true with the same name" do
|
7
|
-
expect(described_class.new(:go)).to eq(described_class.new(:go))
|
8
|
-
end
|
9
|
-
|
10
|
-
it "is false with a different name" do
|
11
|
-
expect(described_class.new(:go)).to_not eq(described_class.new(:other))
|
12
|
-
end
|
13
|
-
|
14
|
-
it "is false with another object" do
|
15
|
-
expect(described_class.new(:go)).to_not eq(:other)
|
16
|
-
end
|
17
|
-
end
|
data/tasks/console.rake
DELETED
data/tasks/coverage.rake
DELETED
data/tasks/spec.rake
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
begin
|
4
|
-
require 'rspec/core/rake_task'
|
5
|
-
|
6
|
-
desc 'Run all specs'
|
7
|
-
RSpec::Core::RakeTask.new(:spec) do |task|
|
8
|
-
task.pattern = 'spec/{unit,integration}{,/*/**}/*_spec.rb'
|
9
|
-
end
|
10
|
-
|
11
|
-
namespace :spec do
|
12
|
-
desc 'Run unit specs'
|
13
|
-
RSpec::Core::RakeTask.new(:unit) do |task|
|
14
|
-
task.pattern = 'spec/unit{,/*/**}/*_spec.rb'
|
15
|
-
end
|
16
|
-
|
17
|
-
desc 'Run integration specs'
|
18
|
-
RSpec::Core::RakeTask.new(:integration) do |task|
|
19
|
-
task.pattern = 'spec/integration{,/*/**}/*_spec.rb'
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
rescue LoadError
|
24
|
-
%w[spec spec:unit spec:integration].each do |name|
|
25
|
-
task name do
|
26
|
-
$stderr.puts "In order to run #{name}, do `gem install rspec`"
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|