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 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