flow_machine 0.2.1 → 0.2.2

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
- SHA1:
3
- metadata.gz: 4f2854b32591eca32664799e2989ca782d48a210
4
- data.tar.gz: 67dc2d6d227bfd8d9d6e206cabd68fe9744a671f
2
+ SHA256:
3
+ metadata.gz: 6cd2fd744bfa9fae413fd4c4f5c9d47d05f80520623fdc5d95dd8be0bf0e13b1
4
+ data.tar.gz: f8f593c69fe42dbce33166fa81c3a92886bb70fe81169f24f1620f6c7d7733d8
5
5
  SHA512:
6
- metadata.gz: 66e5f0523da68517a158f700e6a8513ca0fc39988e105ac047c6e23d44a1ed389471f95f7ce6af1f577305cbd6d0b888053e25dc5d3296e16e5e26d4f30eb211
7
- data.tar.gz: e439a8fc84df57039721fb849e39037f045b0d6ed82711710091c03506271ee529f94401500be86aba05866e1e941aae0174ffaf9df37729f685372eb4f27f1a
6
+ metadata.gz: 1459686da1123e9358ec5bbfc73d52e5db44058aa1f691b9a5ce36f0fddd01ba1a38f28eea8646974c0463843b1c5c2ad26b4d260649431bfade61294e0e9bd6
7
+ data.tar.gz: 7006a927ea623460f60069e2ae9b082996fa571799651830692920924b61147fec783895093d3b1bf29dbebd76a4777606a61b658ffc3249012e7dfbf3d9d127
data/README.md CHANGED
@@ -4,13 +4,14 @@ Build finite state machines in a backend-agnostic, class-centric way.
4
4
 
5
5
  The basic features will work with any PORO, and more features and callbacks are available when used with an ORM like `ActiveRecord` and/or `ActiveModel::Dirty`.
6
6
 
7
+ _Circle CI Status:_ [![Circle CI](https://circleci.com/gh/tablexi/flow_machine.svg?style=svg)](https://circleci.com/gh/tablexi/flow_machine)
7
8
  ## *Raison d'être*
8
9
 
9
10
  After exploring several of the existing Ruby state machine options, they all seem too tightly coupled to an ORM models and tend to pollute the object model's code far too much. The goal of this gem is to provide a clean, testable interface for working with a state machine that decouples as much as possible from the model object itself.
10
11
 
11
12
  ## Upgrading
12
13
 
13
- See [UPGRADE.md](UPGRADE.md) for details
14
+ [CHANGELOG.md](CHANGELOG.md) will contain changes that need to be made at each version
14
15
 
15
16
  ## Requirements
16
17
 
@@ -1,3 +1,3 @@
1
1
  module FlowMachine
2
- VERSION = "0.2.1"
2
+ VERSION = "0.2.2"
3
3
  end
@@ -0,0 +1,32 @@
1
+ module FlowMachine
2
+ module Workflow
3
+ module ModelExtension
4
+ # resolves to
5
+ # class Model
6
+ # def self.published
7
+ # where(status: 'published')
8
+ # end
9
+ #
10
+ # def published?
11
+ # self.status == 'published'
12
+ # end
13
+ # end
14
+ def create_scopes_on(content_class)
15
+ state_method = self.state_method
16
+ state_names.each do |status|
17
+ # Don't add the scope classes if `where` is not defined since it means
18
+ # you're likely not in a ORM class.
19
+ if content_class.respond_to?(:where)
20
+ content_class.singleton_class.send(:define_method, status) do
21
+ where(state_method => status)
22
+ end
23
+ end
24
+
25
+ content_class.send(:define_method, "#{status}?") do
26
+ public_send(state_method) == status
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,6 +1,7 @@
1
1
  require "active_support/core_ext/module/delegation"
2
2
  require "active_support/core_ext/object/try"
3
3
  require "flow_machine/workflow/factory_methods"
4
+ require "flow_machine/workflow/model_extension"
4
5
 
5
6
  module FlowMachine
6
7
  module Workflow
@@ -8,31 +9,11 @@ module FlowMachine
8
9
 
9
10
  def self.included(base)
10
11
  base.extend(ClassMethods)
12
+ base.extend(ModelExtension)
11
13
  base.send(:attr_reader, :object)
12
14
  end
13
15
 
14
16
  module ClassMethods
15
- # resolves to
16
- # class Model
17
- # def self.published
18
- # where(status: 'published')
19
- # end
20
- #
21
- # def published?
22
- # self.status == 'published'
23
- # end
24
- # end
25
- def create_scopes_on(content_class)
26
- self.state_names.each do |status|
27
- content_class.singleton_class.send(:define_method, status) do
28
- where(status: status)
29
- end
30
-
31
- content_class.send(:define_method, "#{status}?") do
32
- self.status == status
33
- end
34
- end
35
- end
36
17
 
37
18
  attr_accessor :callbacks
38
19
 
@@ -0,0 +1,55 @@
1
+ require 'ostruct'
2
+
3
+ RSpec.describe FlowMachine::Workflow::ModelExtension do
4
+ class Test1State < FlowMachine::WorkflowState
5
+ end
6
+
7
+ class Test2State < FlowMachine::WorkflowState
8
+ end
9
+
10
+ class TestWorkflow
11
+ include FlowMachine::Workflow
12
+ state Test1State
13
+ state Test2State
14
+ end
15
+
16
+ describe '.create_scopes_on' do
17
+ class PersistedModel < Struct.new(:state)
18
+ def self.where(opts)
19
+ [new(opts[:state])]
20
+ end
21
+
22
+ TestWorkflow.create_scopes_on(self)
23
+ end
24
+
25
+ class UnPersistedModel < Struct.new(:state)
26
+ TestWorkflow.create_scopes_on(self)
27
+ end
28
+
29
+ it 'adds the predicate model for state 1' do
30
+ expect(PersistedModel.new('test1')).to be_test1
31
+ expect(PersistedModel.new('test2')).not_to be_test1
32
+ end
33
+
34
+ it 'adds the predicate model for state 2' do
35
+ expect(PersistedModel.new('test1')).not_to be_test2
36
+ expect(PersistedModel.new('test2')).to be_test2
37
+ end
38
+
39
+ it 'adds a scope for test1' do
40
+ expect(PersistedModel.test1).to be_an(Array)
41
+ expect(PersistedModel.test1).to be_one
42
+ expect(PersistedModel.test1.first).to eq(PersistedModel.new('test1'))
43
+ end
44
+
45
+ it 'adds a scope for test2' do
46
+ expect(PersistedModel.test2).to be_an(Array)
47
+ expect(PersistedModel.test2).to be_one
48
+ expect(PersistedModel.test2.first).to eq(PersistedModel.new('test2'))
49
+ end
50
+
51
+ it 'does not add scopes if where is not defined' do
52
+ expect(UnPersistedModel).not_to respond_to(:test1)
53
+ end
54
+ end
55
+ end
@@ -121,8 +121,7 @@ RSpec.describe FlowMachine::Workflow do
121
121
 
122
122
  it 'does not call for invalid states' do
123
123
  expect(workflow).not_to receive(:after_transition_callback)
124
- # Will throw an ArgumentError for invalid state
125
- expect { workflow.transition to: :invalid_state }.to raise_error
124
+ expect { workflow.transition to: :invalid_state }.to raise_error(ArgumentError)
126
125
  end
127
126
 
128
127
  it 'does not call for ending in the same state' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flow_machine
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Hanggi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-21 00:00:00.000000000 Z
11
+ date: 2019-01-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 3.1.0
33
+ version: 3.8.0
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 3.1.0
40
+ version: 3.8.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec-its
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -69,10 +69,12 @@ files:
69
69
  - lib/flow_machine/version.rb
70
70
  - lib/flow_machine/workflow.rb
71
71
  - lib/flow_machine/workflow/factory_methods.rb
72
+ - lib/flow_machine/workflow/model_extension.rb
72
73
  - lib/flow_machine/workflow_state.rb
73
74
  - lib/tasks/workflow_tasks.rake
74
75
  - spec/flow_machine/factory_methods_spec.rb
75
76
  - spec/flow_machine/multiple_workflow_spec.rb
77
+ - spec/flow_machine/workflow/model_extension_spec.rb
76
78
  - spec/flow_machine/workflow_callback_spec.rb
77
79
  - spec/flow_machine/workflow_change_callback_spec.rb
78
80
  - spec/flow_machine/workflow_spec.rb
@@ -98,16 +100,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
100
  version: '0'
99
101
  requirements: []
100
102
  rubyforge_project:
101
- rubygems_version: 2.4.8
103
+ rubygems_version: 2.7.7
102
104
  signing_key:
103
105
  specification_version: 4
104
106
  summary: A class-based state machine.
105
107
  test_files:
108
+ - spec/spec_helper.rb
109
+ - spec/flow_machine/workflow_spec.rb
110
+ - spec/flow_machine/workflow_state_spec.rb
106
111
  - spec/flow_machine/factory_methods_spec.rb
107
- - spec/flow_machine/multiple_workflow_spec.rb
108
112
  - spec/flow_machine/workflow_callback_spec.rb
113
+ - spec/flow_machine/workflow/model_extension_spec.rb
109
114
  - spec/flow_machine/workflow_change_callback_spec.rb
110
- - spec/flow_machine/workflow_spec.rb
111
- - spec/flow_machine/workflow_state_spec.rb
112
- - spec/spec_helper.rb
113
- has_rdoc:
115
+ - spec/flow_machine/multiple_workflow_spec.rb