just_state_machine 0.2.0 → 0.3.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: a3c6bd3c8889f049fec253dd6f28baacef949905
4
- data.tar.gz: 4886b6301006dae04f550c9ba3d98963ca75f2af
3
+ metadata.gz: ffaec8272814487f36a006b35a7fb4ba9d03e212
4
+ data.tar.gz: 9e6c7df7b81ee6e55d79f47c9a8e44ac36234df1
5
5
  SHA512:
6
- metadata.gz: 84500a6b5717d563c659e6c999bb3d5f9a4f9102c5c63167bd035349c8efc8c30b3502cb74b95955f5941fd4694bb6d6e53eb7d0d1b143cdb31edf27e0ac134d
7
- data.tar.gz: f3a632523feda1353f2e960dcd380f942f22d18a71fc53cddf5bcf0242ef6108077fc7a072999cfbe0ea819cb94e39eb479728df6f6f92f34a6d67ab8174349a
6
+ metadata.gz: a8f00e1451d1fb713f8000027239c1de502093bb658be3ee7a2c1106103b39b4573053ae88445e4e399a9f2b1b5e455c9b95f789ac498d5e5e32a02253ad7dc0
7
+ data.tar.gz: dd327c2a4857e9b2795ac11dbb081d31f2da958fa17ce0bcfb2de68288edb7936ccb39a666294ffc2b6bae79b2c8917f5768d990d421c1b79101a7f68104ae3d
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- [![Gem Version](https://badge.fury.io/rb/jsm.svg)](https://badge.fury.io/rb/jsm)
1
+ [![Gem Version](https://badge.fury.io/rb/just_state_machine.svg)](https://badge.fury.io/rb/just_state_machine)
2
2
  [![Code Climate](https://codeclimate.com/github/wendy0402/jsm/badges/gpa.svg)](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 'jsm'
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 jsm
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
@@ -17,4 +17,10 @@ module Jsm
17
17
  require "jsm/event_executor/active_model"
18
18
  require "jsm/event_executor/active_record"
19
19
  end
20
+
21
+ module Drawer
22
+ require "jsm/drawer/node"
23
+ require "jsm/drawer/digraph"
24
+ require "jsm/drawer/graphviz"
25
+ end
20
26
  end
@@ -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
@@ -0,0 +1,12 @@
1
+ class Jsm::Drawer::Node
2
+ attr_reader :from, :to, :label
3
+ def initialize(params = {})
4
+ @from = params[:from]
5
+ @to = params[:to]
6
+ @label = params[:label]
7
+ end
8
+
9
+ def to_s
10
+ "#{from.to_s}->#{to.to_s}[label=#{label.to_s}]"
11
+ end
12
+ end
@@ -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]
@@ -1,3 +1,3 @@
1
1
  module Jsm
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
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.2.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-18 00:00:00.000000000 Z
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