simple_state_machine 0.6.1 → 0.6.2
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 +4 -4
- data/Changelog.rdoc +7 -0
- data/lib/simple_state_machine/version.rb +1 -1
- metadata +2 -41
- data/.github/workflows/build.yml +0 -46
- data/.gitignore +0 -4
- data/.rspec +0 -3
- data/.travis.yml +0 -17
- data/Gemfile +0 -11
- data/Rakefile +0 -28
- data/examples/conversation.rb +0 -33
- data/examples/lamp.rb +0 -21
- data/examples/relationship.rb +0 -87
- data/examples/traffic_light.rb +0 -17
- data/examples/user.rb +0 -41
- data/gemfiles/Gemfile.activerecord-5.2.x +0 -9
- data/gemfiles/Gemfile.activerecord-6.0.x +0 -9
- data/gemfiles/Gemfile.activerecord-6.1.x +0 -8
- data/gemfiles/Gemfile.activerecord-main.x +0 -9
- data/gemfiles/Gemfile.basic +0 -6
- data/lib/simple_state_machine/.DS_Store +0 -0
- data/simple_state_machine.gemspec +0 -21
- data/spec/.DS_Store +0 -0
- data/spec/active_record_spec.rb +0 -250
- data/spec/decorator/default_spec.rb +0 -195
- data/spec/examples_spec.rb +0 -60
- data/spec/mountable_spec.rb +0 -36
- data/spec/simple_state_machine_spec.rb +0 -165
- data/spec/spec_helper.rb +0 -20
- data/spec/state_machine_definition_spec.rb +0 -103
- data/spec/state_machine_spec.rb +0 -60
- data/spec/tools/graphviz_spec.rb +0 -30
- data/spec/tools/inspector_spec.rb +0 -70
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 03d0976fcf4c2dccd328f82cb00f8b5050f2cc052b578ae98d0227aca37afb5b
|
4
|
+
data.tar.gz: 193ae0211b9f82a386317032a2fe3ee245d263801cfab69981c3c6d9cfbe2053
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4e31fd218c64886a4e5fba9334d4b5b71c9bdcbc1fd3216df488a3edc25d6d9a846336887c700623c84b401fc89a6a4afdaa02a0a7ad0d7e3e9456c6bcfdba2e
|
7
|
+
data.tar.gz: 4659c64c0b4422967418ca9289ce97e259defd2c4bcbd621e51e37422b2d036b2c8bede71b8b59c97a81137aa076a11403d47c6de2231314272b611b0d7cc08a
|
data/Changelog.rdoc
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
== 0.6.1
|
2
|
+
- Run against latest rubies and activerecord
|
3
|
+
- Remove old rubygems version requirement
|
4
|
+
- Remove some trailing whitespace [Petrik]
|
5
|
+
- Use `expect` instead if old `should` notation [Petrik]
|
6
|
+
- Drop support for Ruby 1.9 [Petrik]
|
7
|
+
|
1
8
|
== 0.6.0
|
2
9
|
=== Enhancements
|
3
10
|
- Define decorated methods as #{event_name}_with_managed_state instead of with_managed_state_#{event_name} [Petrik]
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_state_machine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marek de Heus
|
@@ -20,27 +20,10 @@ extra_rdoc_files:
|
|
20
20
|
- LICENSE
|
21
21
|
- README.rdoc
|
22
22
|
files:
|
23
|
-
- ".github/workflows/build.yml"
|
24
|
-
- ".gitignore"
|
25
|
-
- ".rspec"
|
26
|
-
- ".travis.yml"
|
27
23
|
- Changelog.rdoc
|
28
|
-
- Gemfile
|
29
24
|
- LICENSE
|
30
25
|
- README.rdoc
|
31
|
-
- Rakefile
|
32
|
-
- examples/conversation.rb
|
33
|
-
- examples/lamp.rb
|
34
|
-
- examples/relationship.rb
|
35
|
-
- examples/traffic_light.rb
|
36
|
-
- examples/user.rb
|
37
|
-
- gemfiles/Gemfile.activerecord-5.2.x
|
38
|
-
- gemfiles/Gemfile.activerecord-6.0.x
|
39
|
-
- gemfiles/Gemfile.activerecord-6.1.x
|
40
|
-
- gemfiles/Gemfile.activerecord-main.x
|
41
|
-
- gemfiles/Gemfile.basic
|
42
26
|
- lib/simple_state_machine.rb
|
43
|
-
- lib/simple_state_machine/.DS_Store
|
44
27
|
- lib/simple_state_machine/active_record.rb
|
45
28
|
- lib/simple_state_machine/decorator/active_record.rb
|
46
29
|
- lib/simple_state_machine/decorator/default.rb
|
@@ -54,18 +37,6 @@ files:
|
|
54
37
|
- lib/simple_state_machine/transition.rb
|
55
38
|
- lib/simple_state_machine/version.rb
|
56
39
|
- lib/tasks/graphviz.rake
|
57
|
-
- simple_state_machine.gemspec
|
58
|
-
- spec/.DS_Store
|
59
|
-
- spec/active_record_spec.rb
|
60
|
-
- spec/decorator/default_spec.rb
|
61
|
-
- spec/examples_spec.rb
|
62
|
-
- spec/mountable_spec.rb
|
63
|
-
- spec/simple_state_machine_spec.rb
|
64
|
-
- spec/spec_helper.rb
|
65
|
-
- spec/state_machine_definition_spec.rb
|
66
|
-
- spec/state_machine_spec.rb
|
67
|
-
- spec/tools/graphviz_spec.rb
|
68
|
-
- spec/tools/inspector_spec.rb
|
69
40
|
homepage: http://github.com/mdh/ssm
|
70
41
|
licenses: []
|
71
42
|
metadata: {}
|
@@ -89,14 +60,4 @@ rubygems_version: 3.1.6
|
|
89
60
|
signing_key:
|
90
61
|
specification_version: 4
|
91
62
|
summary: A simple DSL to decorate existing methods with logic that guards state transitions.
|
92
|
-
test_files:
|
93
|
-
- spec/active_record_spec.rb
|
94
|
-
- spec/decorator/default_spec.rb
|
95
|
-
- spec/examples_spec.rb
|
96
|
-
- spec/mountable_spec.rb
|
97
|
-
- spec/simple_state_machine_spec.rb
|
98
|
-
- spec/spec_helper.rb
|
99
|
-
- spec/state_machine_definition_spec.rb
|
100
|
-
- spec/state_machine_spec.rb
|
101
|
-
- spec/tools/graphviz_spec.rb
|
102
|
-
- spec/tools/inspector_spec.rb
|
63
|
+
test_files: []
|
data/.github/workflows/build.yml
DELETED
@@ -1,46 +0,0 @@
|
|
1
|
-
name: Build
|
2
|
-
on:
|
3
|
-
- push
|
4
|
-
- pull_request
|
5
|
-
|
6
|
-
jobs:
|
7
|
-
build:
|
8
|
-
name: Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }}
|
9
|
-
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository
|
10
|
-
strategy:
|
11
|
-
fail-fast: false
|
12
|
-
matrix:
|
13
|
-
ruby:
|
14
|
-
- "3.0"
|
15
|
-
- "2.7"
|
16
|
-
- "2.6"
|
17
|
-
- "2.5"
|
18
|
-
rails:
|
19
|
-
- "5.2"
|
20
|
-
- "6.0"
|
21
|
-
- "6.1"
|
22
|
-
- main
|
23
|
-
exclude:
|
24
|
-
- ruby: 2.5
|
25
|
-
rails: main
|
26
|
-
- ruby: 2.6
|
27
|
-
rails: main
|
28
|
-
- ruby: 3.0
|
29
|
-
rails: "5.1"
|
30
|
-
- ruby: 3.0
|
31
|
-
rails: "5.2"
|
32
|
-
|
33
|
-
runs-on: 'ubuntu-latest'
|
34
|
-
|
35
|
-
env:
|
36
|
-
BUNDLE_GEMFILE: gemfiles/Gemfile.activerecord-${{ matrix.rails }}.x
|
37
|
-
|
38
|
-
steps:
|
39
|
-
- uses: actions/checkout@v2
|
40
|
-
- uses: ruby/setup-ruby@v1
|
41
|
-
with:
|
42
|
-
ruby-version: ${{ matrix.ruby }}
|
43
|
-
- name: Setup project
|
44
|
-
run: bundle install
|
45
|
-
- name: Run test
|
46
|
-
run: bundle exec rspec spec
|
data/.gitignore
DELETED
data/.rspec
DELETED
data/.travis.yml
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
rvm:
|
3
|
-
- 2.5
|
4
|
-
- 2.7
|
5
|
-
- 3.0
|
6
|
-
- jruby-9.2.16.0
|
7
|
-
script: bundle exec rspec spec
|
8
|
-
|
9
|
-
gemfile:
|
10
|
-
- gemfiles/Gemfile.activerecord-6.0.x
|
11
|
-
- gemfiles/Gemfile.activerecord-6.1.x
|
12
|
-
- gemfiles/Gemfile.basic
|
13
|
-
|
14
|
-
matrix:
|
15
|
-
exclude:
|
16
|
-
- rvm: jruby
|
17
|
-
gemfile: gemfiles/Gemfile.activerecord-4.2.x
|
data/Gemfile
DELETED
@@ -1,11 +0,0 @@
|
|
1
|
-
# A sample Gemfile
|
2
|
-
source "http://rubygems.org"
|
3
|
-
|
4
|
-
gemspec
|
5
|
-
|
6
|
-
group :test do
|
7
|
-
gem "rspec", "~> 3.0"
|
8
|
-
gem "activerecord", ">= 5.2.0"
|
9
|
-
gem "sqlite3", :platform => [:ruby, :mswin, :mingw]
|
10
|
-
gem "activerecord-jdbcsqlite3-adapter", :platform => :jruby
|
11
|
-
end
|
data/Rakefile
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
require 'bundler'
|
2
|
-
Bundler::GemHelper.install_tasks
|
3
|
-
|
4
|
-
#require 'spec/rake/spectask'
|
5
|
-
#Spec::Rake::SpecTask.new(:spec) do |spec|
|
6
|
-
# spec.libs << 'lib' << 'spec'
|
7
|
-
# spec.spec_files = FileList['spec/**/*_spec.rb']
|
8
|
-
#end
|
9
|
-
#
|
10
|
-
#Spec::Rake::SpecTask.new(:rcov) do |spec|
|
11
|
-
# spec.libs << 'lib' << 'spec'
|
12
|
-
# spec.pattern = 'spec/**/*_spec.rb'
|
13
|
-
# spec.rcov = true
|
14
|
-
#end
|
15
|
-
#
|
16
|
-
#task :spec => :check_dependencies
|
17
|
-
#
|
18
|
-
#task :default => :spec
|
19
|
-
|
20
|
-
require 'rake/rdoctask'
|
21
|
-
Rake::RDocTask.new do |rdoc|
|
22
|
-
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
23
|
-
|
24
|
-
rdoc.rdoc_dir = 'rdoc'
|
25
|
-
rdoc.title = "simple_state_machine #{version}"
|
26
|
-
rdoc.rdoc_files.include('README*')
|
27
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
28
|
-
end
|
data/examples/conversation.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
# Implementation of the AASM Conversation
|
2
|
-
#
|
3
|
-
# class Conversation
|
4
|
-
# include AASM
|
5
|
-
#
|
6
|
-
# aasm_column :current_state # defaults to aasm_state
|
7
|
-
#
|
8
|
-
# aasm_initial_state :unread
|
9
|
-
#
|
10
|
-
# aasm_state :unread
|
11
|
-
# aasm_state :read
|
12
|
-
# aasm_state :closed
|
13
|
-
#
|
14
|
-
# aasm_event :view do
|
15
|
-
# transitions :to => :read, :from => [:unread]
|
16
|
-
# end
|
17
|
-
#
|
18
|
-
# aasm_event :close do
|
19
|
-
# transitions :to => :closed, :from => [:read, :unread]
|
20
|
-
# end
|
21
|
-
# end
|
22
|
-
|
23
|
-
class Conversation
|
24
|
-
extend SimpleStateMachine
|
25
|
-
|
26
|
-
def initialize
|
27
|
-
self.state = 'unread'
|
28
|
-
end
|
29
|
-
|
30
|
-
event :view, :unread => :read
|
31
|
-
event :close, :all => :closed
|
32
|
-
|
33
|
-
end
|
data/examples/lamp.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
class Lamp
|
2
|
-
|
3
|
-
extend SimpleStateMachine
|
4
|
-
|
5
|
-
def initialize
|
6
|
-
self.state = 'off'
|
7
|
-
end
|
8
|
-
|
9
|
-
def push_button1
|
10
|
-
puts "click1: #{state}"
|
11
|
-
end
|
12
|
-
event :push_button1, :off => :on,
|
13
|
-
:on => :off
|
14
|
-
|
15
|
-
def push_button2
|
16
|
-
puts "click2: #{state}"
|
17
|
-
end
|
18
|
-
event :push_button2, :off => :on,
|
19
|
-
:on => :off
|
20
|
-
|
21
|
-
end
|
data/examples/relationship.rb
DELETED
@@ -1,87 +0,0 @@
|
|
1
|
-
# Implementation of the AASM Conversation
|
2
|
-
#
|
3
|
-
# class Relationship
|
4
|
-
# include AASM
|
5
|
-
#
|
6
|
-
# aasm_column :status
|
7
|
-
#
|
8
|
-
# aasm_initial_state Proc.new { |relationship| relationship.strictly_for_fun? ? :intimate : :dating }
|
9
|
-
#
|
10
|
-
# aasm_state :dating, :enter => :make_happy, :exit => :make_depressed
|
11
|
-
# aasm_state :intimate, :enter => :make_very_happy, :exit => :never_speak_again
|
12
|
-
# aasm_state :married, :enter => :give_up_intimacy, :exit => :buy_exotic_car_and_wear_a_combover
|
13
|
-
#
|
14
|
-
# aasm_event :get_intimate do
|
15
|
-
# transitions :to => :intimate, :from => [:dating], :guard => :drunk?
|
16
|
-
# end
|
17
|
-
#
|
18
|
-
# aasm_event :get_married do
|
19
|
-
# transitions :to => :married, :from => [:dating, :intimate], :guard => :willing_to_give_up_manhood?
|
20
|
-
# end
|
21
|
-
#
|
22
|
-
# def strictly_for_fun?; end
|
23
|
-
# def drunk?; end
|
24
|
-
# def willing_to_give_up_manhood?; end
|
25
|
-
# def make_happy; end
|
26
|
-
# def make_depressed; end
|
27
|
-
# def make_very_happy; end
|
28
|
-
# def never_speak_again; end
|
29
|
-
# def give_up_intimacy; end
|
30
|
-
# def buy_exotic_car_and_wear_a_combover; end
|
31
|
-
# end
|
32
|
-
|
33
|
-
class Relationship
|
34
|
-
extend SimpleStateMachine
|
35
|
-
|
36
|
-
def initialize
|
37
|
-
self.state = relationship.strictly_for_fun? ? get_intimate : start_dating
|
38
|
-
end
|
39
|
-
|
40
|
-
def start_dating
|
41
|
-
make_happy
|
42
|
-
# make_depressed not called on exit
|
43
|
-
end
|
44
|
-
event :start_dating, nil => :dating
|
45
|
-
|
46
|
-
def get_intimate
|
47
|
-
# exit if drunk?
|
48
|
-
make_very_happy
|
49
|
-
# never_speak_again not called on exit
|
50
|
-
end
|
51
|
-
event :get_intimate, :dating => :intimate
|
52
|
-
|
53
|
-
def get_married
|
54
|
-
give_up_intimacy
|
55
|
-
#exit unless willing_to_give_up_manhood?
|
56
|
-
# buy_exotic_car_and_wear_a_combover not called on exit
|
57
|
-
end
|
58
|
-
event :get_married, :dating => :married,
|
59
|
-
:intimate => :married
|
60
|
-
|
61
|
-
# extra event added
|
62
|
-
def stop_dating
|
63
|
-
make_depressed
|
64
|
-
end
|
65
|
-
event :stop_dating, :dating => nil
|
66
|
-
|
67
|
-
def dump
|
68
|
-
never_speak_again
|
69
|
-
end
|
70
|
-
event :dump, :intimate => :dump
|
71
|
-
|
72
|
-
def divorce
|
73
|
-
buy_exotic_car_and_wear_a_combover
|
74
|
-
end
|
75
|
-
event :divorce, :married => :divorced
|
76
|
-
|
77
|
-
|
78
|
-
def strictly_for_fun?; end
|
79
|
-
def drunk?; end
|
80
|
-
def willing_to_give_up_manhood?; end
|
81
|
-
def make_happy; end
|
82
|
-
def make_depressed; end
|
83
|
-
def make_very_happy; end
|
84
|
-
def never_speak_again; end
|
85
|
-
def give_up_intimacy; end
|
86
|
-
def buy_exotic_car_and_wear_a_combover; end
|
87
|
-
end
|
data/examples/traffic_light.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
class TrafficLight
|
2
|
-
|
3
|
-
extend SimpleStateMachine
|
4
|
-
|
5
|
-
def initialize
|
6
|
-
self.state = 'green'
|
7
|
-
end
|
8
|
-
|
9
|
-
# state machine events
|
10
|
-
def change_state
|
11
|
-
puts "#{state} => #{@next_state}"
|
12
|
-
end
|
13
|
-
|
14
|
-
event :change_state, :green => :orange,
|
15
|
-
:orange => :red,
|
16
|
-
:red => :green
|
17
|
-
end
|
data/examples/user.rb
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
require 'digest/sha1'
|
2
|
-
class User < ActiveRecord::Base
|
3
|
-
|
4
|
-
validates_presence_of :name
|
5
|
-
|
6
|
-
extend SimpleStateMachine::ActiveRecord
|
7
|
-
|
8
|
-
after_initialize :after_initialize
|
9
|
-
def after_initialize
|
10
|
-
self.state ||= 'new'
|
11
|
-
# if you get an ActiveRecord::MissingAttributeError
|
12
|
-
# you'll probably need to do (http://bit.ly/35q23b):
|
13
|
-
# write_attribute(:ssm_state, "pending") unless read_attribute(:ssm_state)
|
14
|
-
end
|
15
|
-
|
16
|
-
def invite
|
17
|
-
self.activation_code = Digest::SHA1.hexdigest("salt #{Time.now.to_f}")
|
18
|
-
send_activation_email(self.activation_code)
|
19
|
-
end
|
20
|
-
event :invite, :new => :invited
|
21
|
-
|
22
|
-
def confirm_invitation activation_code
|
23
|
-
if self.activation_code != activation_code
|
24
|
-
errors.add 'activation_code', 'is invalid'
|
25
|
-
end
|
26
|
-
end
|
27
|
-
event :confirm_invitation, :invited => :active
|
28
|
-
|
29
|
-
#event :log_send_activation_code_failed, :new => :send_activation_code_failed
|
30
|
-
#
|
31
|
-
# def reset_password(new_password)
|
32
|
-
# self.password = new_password
|
33
|
-
# end
|
34
|
-
# # do not change state, but ensure that we are in proper state
|
35
|
-
# event :reset_password, :active => :active
|
36
|
-
|
37
|
-
def send_activation_email(code)
|
38
|
-
true
|
39
|
-
end
|
40
|
-
|
41
|
-
end
|
@@ -1,9 +0,0 @@
|
|
1
|
-
# A sample Gemfile
|
2
|
-
source "http://rubygems.org"
|
3
|
-
|
4
|
-
group :test do
|
5
|
-
gem "rspec"
|
6
|
-
gem "activerecord", git: "https://github.com/rails/rails.git", branch: "main"
|
7
|
-
gem "sqlite3", :platform => [:ruby, :mswin, :mingw]
|
8
|
-
gem "activerecord-jdbcsqlite3-adapter", :platform => :jruby
|
9
|
-
end
|
data/gemfiles/Gemfile.basic
DELETED
Binary file
|
@@ -1,21 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
$:.push File.expand_path("../lib", __FILE__)
|
3
|
-
require "simple_state_machine/version"
|
4
|
-
|
5
|
-
Gem::Specification.new do |s|
|
6
|
-
s.name = %q{simple_state_machine}
|
7
|
-
s.version = SimpleStateMachine::VERSION
|
8
|
-
s.platform = Gem::Platform::RUBY
|
9
|
-
s.authors = ["Marek de Heus", "Petrik de Heus"]
|
10
|
-
s.description = %q{A simple DSL to decorate existing methods with state transition guards.}
|
11
|
-
s.email = ["FIX@example.com"]
|
12
|
-
s.homepage = %q{http://github.com/mdh/ssm}
|
13
|
-
s.extra_rdoc_files = ["LICENSE","README.rdoc"]
|
14
|
-
s.files = `git ls-files`.split("\n")
|
15
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
16
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
17
|
-
s.require_paths = ["lib"]
|
18
|
-
s.summary = %q{A simple DSL to decorate existing methods with logic that guards state transitions.}
|
19
|
-
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
20
|
-
end
|
21
|
-
|
data/spec/.DS_Store
DELETED
Binary file
|