has_state_machine 0.1.1 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +36 -3
- data/lib/has_state_machine/state.rb +8 -0
- data/lib/has_state_machine/state_helpers.rb +4 -2
- data/lib/has_state_machine/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 524c408a87a46086495361e76507c6d1eb963acc6d72664c3faf0c8c913fa19f
|
4
|
+
data.tar.gz: 992299b87230582800a63afdf47bd573003481f74e3d521de414d8e20c783bf4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a49dd7b572ba738ce5c29db2bb9f50100595a47353aa28b8bfb0e814340381202ac2db180efd42dfe9aea691088170eaf7ea266b1da0fc3a4d30ca287c266e44
|
7
|
+
data.tar.gz: 4a6ab1dfca389dcd4eac9d05a826d28cdbe145329dc078370327e76a07a2c8993d5fb470d981717ebec58c70c811501e447d20931d7cee0af8e8109132af6e41
|
data/README.md
CHANGED
@@ -5,6 +5,14 @@
|
|
5
5
|
|
6
6
|
HasStateMachine uses ruby classes to make creating a finite state machine for your ActiveRecord models a breeze.
|
7
7
|
|
8
|
+
## Contents
|
9
|
+
|
10
|
+
- [Installation](#installation)
|
11
|
+
- [Usage](#usage)
|
12
|
+
- [Changelog](https://github.com/encampment/has_state_machine/blob/master/CHANGELOG.md)
|
13
|
+
- [Contributing](#contributing)
|
14
|
+
- [License](#license)
|
15
|
+
|
8
16
|
## Installation
|
9
17
|
Add this line to your application's Gemfile:
|
10
18
|
|
@@ -70,11 +78,15 @@ module Workflow
|
|
70
78
|
# There are callbacks for running logic before and after
|
71
79
|
# a transition occurs.
|
72
80
|
before_transition do
|
73
|
-
Rails.logger.info "Post is being archived
|
81
|
+
Rails.logger.info "== Post is being archived ==\n"
|
74
82
|
end
|
75
83
|
|
76
84
|
after_transition do
|
77
|
-
Rails.logger.info "Post has been archived
|
85
|
+
Rails.logger.info "== Post has been archived ==\n"
|
86
|
+
|
87
|
+
# You can access the previous state of the object in
|
88
|
+
# after_transition callbacks as well.
|
89
|
+
Rails.logger.info "== Transitioned from #{previous_state} ==\n"
|
78
90
|
end
|
79
91
|
end
|
80
92
|
end
|
@@ -91,10 +103,31 @@ post.status # => "draft"
|
|
91
103
|
post.title = "Foobar"
|
92
104
|
post.status.transition_to(:published) # => true
|
93
105
|
post.status # => "published"
|
106
|
+
|
107
|
+
post.status.transition_to(:archived)
|
108
|
+
# == Post is being archived ==
|
109
|
+
# == Post has been archived ==
|
110
|
+
# == Transitioned from published ==
|
111
|
+
# => true
|
94
112
|
```
|
95
113
|
|
96
114
|
## Contributing
|
97
|
-
|
115
|
+
|
116
|
+
Anyone is encouraged to help improve this project. Here are a few ways you can help:
|
117
|
+
|
118
|
+
- [Report bugs](https://github.com/encampment/has_state_machine/issues)
|
119
|
+
- Fix bugs and [submit pull requests](https://github.com/encampment/has_state_machine/pulls)
|
120
|
+
- Write, clarify, or fix documentation
|
121
|
+
- Suggest or add new features
|
122
|
+
|
123
|
+
To get started with development:
|
124
|
+
|
125
|
+
```
|
126
|
+
git clone https://github.com/encampment/has_state_machine.git
|
127
|
+
cd has_state_machine
|
128
|
+
bundle install
|
129
|
+
bundle exec rake test
|
130
|
+
```
|
98
131
|
|
99
132
|
## License
|
100
133
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
@@ -75,6 +75,14 @@ module HasStateMachine
|
|
75
75
|
possible_transitions.include? desired_state
|
76
76
|
end
|
77
77
|
|
78
|
+
##
|
79
|
+
# Helper method for grabbing the previous state of the object after
|
80
|
+
# it has been transitioned to the new state. Useful in
|
81
|
+
# after_transition blocks
|
82
|
+
def previous_state
|
83
|
+
object.previous_changes[object.state_attribute]&.first
|
84
|
+
end
|
85
|
+
|
78
86
|
def state_instance(desired_state)
|
79
87
|
klass = "#{object.workflow_namespace}::#{desired_state.to_s.classify}".safe_constantize
|
80
88
|
klass&.new(object)
|
@@ -55,7 +55,9 @@ module HasStateMachine
|
|
55
55
|
# @example Retreiving a users published posts
|
56
56
|
# > Post.published.where(user: user)
|
57
57
|
# #=> [#<Post>]
|
58
|
-
|
58
|
+
if defined?(ActiveRecord) && (self < ActiveRecord::Base)
|
59
|
+
scope state, -> { where("#{state_attribute} = ?", state) }
|
60
|
+
end
|
59
61
|
|
60
62
|
##
|
61
63
|
# Defines boolean helpers to determine if the active state matches
|
@@ -76,7 +78,7 @@ module HasStateMachine
|
|
76
78
|
# Getter for the current state of the model based on the configured state
|
77
79
|
# attribute.
|
78
80
|
def current_state
|
79
|
-
|
81
|
+
attributes.with_indifferent_access[state_attribute]
|
80
82
|
end
|
81
83
|
|
82
84
|
##
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: has_state_machine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Benjamin Hargett
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2021-01-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|