just_state_machine 0.2.0 → 0.3.0
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/README.md +11 -3
- data/lib/jsm.rb +6 -0
- data/lib/jsm/drawer/digraph.rb +41 -0
- data/lib/jsm/drawer/graphviz.rb +16 -0
- data/lib/jsm/drawer/node.rb +12 -0
- data/lib/jsm/event.rb +6 -1
- data/lib/jsm/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ffaec8272814487f36a006b35a7fb4ba9d03e212
|
4
|
+
data.tar.gz: 9e6c7df7b81ee6e55d79f47c9a8e44ac36234df1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a8f00e1451d1fb713f8000027239c1de502093bb658be3ee7a2c1106103b39b4573053ae88445e4e399a9f2b1b5e455c9b95f789ac498d5e5e32a02253ad7dc0
|
7
|
+
data.tar.gz: dd327c2a4857e9b2795ac11dbb081d31f2da958fa17ce0bcfb2de68288edb7936ccb39a666294ffc2b6bae79b2c8917f5768d990d421c1b79101a7f68104ae3d
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
[](https://badge.fury.io/rb/just_state_machine)
|
2
2
|
[](https://codeclimate.com/github/wendy0402/jsm)
|
3
3
|
# Jsm
|
4
4
|
|
@@ -9,7 +9,7 @@ JSM is abbreviation of Just State Machine. The purpose is to simplify and increa
|
|
9
9
|
Add this line to your application's Gemfile:
|
10
10
|
|
11
11
|
```ruby
|
12
|
-
gem '
|
12
|
+
gem 'just_state_machine'
|
13
13
|
```
|
14
14
|
|
15
15
|
And then execute:
|
@@ -18,7 +18,7 @@ And then execute:
|
|
18
18
|
|
19
19
|
Or install it yourself as:
|
20
20
|
|
21
|
-
$ gem install
|
21
|
+
$ gem install just_state_machine
|
22
22
|
|
23
23
|
## Usage
|
24
24
|
|
@@ -168,7 +168,15 @@ user.title # :beginner
|
|
168
168
|
user.upgrade_title # true
|
169
169
|
user.title # :intermediate
|
170
170
|
```
|
171
|
+
### Transition
|
172
|
+
Transition will transitioning your state from one state to other state. Params `from` in transition can receive one or multiple states.
|
173
|
+
However to put multiple states, you need to put it in array.
|
171
174
|
|
175
|
+
```ruby
|
176
|
+
transition from: :intermediate, to: :beginner #one `from` states
|
177
|
+
transition from: [:intermediate, :master], to: :beginner #multiple `from` states
|
178
|
+
```
|
179
|
+
What above code means for multiple `from` states is the current state either `:intermediate` or `:master`, transform it into `:beginner` state
|
172
180
|
## Active Model Integration
|
173
181
|
```ruby
|
174
182
|
class UserStateMachine < Jsm::Base
|
data/lib/jsm.rb
CHANGED
@@ -0,0 +1,41 @@
|
|
1
|
+
#list of all nodes
|
2
|
+
class Jsm::Drawer::Digraph
|
3
|
+
attr_reader :state_machine
|
4
|
+
def initialize(state_machine)
|
5
|
+
@state_machine = state_machine
|
6
|
+
end
|
7
|
+
|
8
|
+
#list of all nodes
|
9
|
+
# TODO: move it to different class(?)
|
10
|
+
def nodes
|
11
|
+
unless @nodes
|
12
|
+
events = state_machine.events.values
|
13
|
+
@nodes = events.map{ |event| to_nodes(event) }.flatten
|
14
|
+
end
|
15
|
+
@nodes
|
16
|
+
end
|
17
|
+
|
18
|
+
# convert it to string that is compatible with api Graphviz
|
19
|
+
def to_s
|
20
|
+
nodes.map(&:to_s).join(';')
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
# convert transitions of event into nodes object
|
26
|
+
# return value is array
|
27
|
+
# e.g: [Jsm::Drawer::Node.new(:confirmed, :completed, :complete)]
|
28
|
+
def to_nodes(event)
|
29
|
+
nodes = []
|
30
|
+
event.transitions.each do |transition|
|
31
|
+
if transition.multiple_from?
|
32
|
+
temp_nodes = transition.from.map{ |from| Jsm::Drawer::Node.new(from: from, to: transition.to, label: event.name) }
|
33
|
+
else
|
34
|
+
from = transition.from[0] # even only one it is still in array e.g: [:confirmed]
|
35
|
+
temp_nodes = [Jsm::Drawer::Node.new(from: from, to: transition.to, label: event.name)]
|
36
|
+
end
|
37
|
+
nodes += temp_nodes
|
38
|
+
end
|
39
|
+
nodes
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class Jsm::Drawer::Graphviz
|
2
|
+
API_URL = "https://chart.googleapis.com/chart"
|
3
|
+
def self.generate_url(state_machine)
|
4
|
+
new(state_machine).generate_url
|
5
|
+
end
|
6
|
+
|
7
|
+
def initialize(state_machine)
|
8
|
+
@state_machine = state_machine
|
9
|
+
@diagraph = Jsm::Drawer::Digraph.new(@state_machine)
|
10
|
+
end
|
11
|
+
|
12
|
+
def generate_url
|
13
|
+
diagram = @diagraph
|
14
|
+
"#{API_URL}?cht=gv&chl=digraph{#{diagram}}"
|
15
|
+
end
|
16
|
+
end
|
data/lib/jsm/event.rb
CHANGED
@@ -4,7 +4,12 @@ class Jsm::Event
|
|
4
4
|
attr_reader :name, :states, :transitions
|
5
5
|
attr_accessor :attribute_name
|
6
6
|
|
7
|
-
::Jsm::Transition = Struct.new(:from, :to)
|
7
|
+
::Jsm::Transition = Struct.new(:from, :to) do
|
8
|
+
def multiple_from?
|
9
|
+
from.size > 1
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
8
13
|
def initialize(name, params = {}, &block)
|
9
14
|
@name = name
|
10
15
|
@states = params[:states]
|
data/lib/jsm/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: just_state_machine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- wendy0402
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-10-
|
11
|
+
date: 2015-10-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -148,6 +148,9 @@ files:
|
|
148
148
|
- lib/jsm/client/active_model.rb
|
149
149
|
- lib/jsm/client/active_record.rb
|
150
150
|
- lib/jsm/client_extension.rb
|
151
|
+
- lib/jsm/drawer/digraph.rb
|
152
|
+
- lib/jsm/drawer/graphviz.rb
|
153
|
+
- lib/jsm/drawer/node.rb
|
151
154
|
- lib/jsm/event.rb
|
152
155
|
- lib/jsm/event_executor/active_model.rb
|
153
156
|
- lib/jsm/event_executor/active_record.rb
|