validating-workflow 0.7.7 → 0.7.9
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/Rakefile +0 -26
- data/VERSION +1 -1
- data/lib/workflow/active_model_persistence.rb +34 -0
- data/lib/workflow/mongoid_persistence.rb +35 -0
- data/lib/workflow/remodel_persistence.rb +17 -0
- data/lib/workflow/transactional.rb +32 -0
- data/lib/workflow.rb +9 -4
- data/validating-workflow.rb +1 -0
- metadata +15 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d130757849316ba07bb518d99578f4184f59dbb3
|
4
|
+
data.tar.gz: 8b8fae7c226937dd0a5029ea9ae53cd05dd7688c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d2df156fe39c4a35538e4ee5d9d2ba42684f808357257e16b3c814f781ac24b69f46696f3ae56ad4066c49020b9d41202b7cc4f1bab74a3cfa35d55b1e3af08b
|
7
|
+
data.tar.gz: bfcfbc6ba0c6c45e8db8119180f21dcdeeeddcfb22a74d1b85e97fb70e859977bbbae10172dd076ebb0d427a5e3e229388caeef06bdfb5a6ca7889c89da6902d
|
data/Rakefile
CHANGED
@@ -16,29 +16,3 @@ Rake::RDocTask.new do |rdoc|
|
|
16
16
|
rdoc.options << "-S"
|
17
17
|
end
|
18
18
|
|
19
|
-
begin
|
20
|
-
require 'jeweler'
|
21
|
-
Jeweler::Tasks.new do |gemspec|
|
22
|
-
gemspec.name = 'workflow'
|
23
|
-
gemspec.rubyforge_project = 'workflow'
|
24
|
-
gemspec.email = 'vladimir@geekq.net'
|
25
|
-
gemspec.homepage = 'http://www.geekq.net/workflow/'
|
26
|
-
gemspec.authors = ['Vladimir Dobriakov', 'Willem van Kerkhof']
|
27
|
-
gemspec.summary = 'A replacement for acts_as_state_machine.'
|
28
|
-
gemspec.description = <<-EOS
|
29
|
-
Workflow is a finite-state-machine-inspired API for modeling and interacting
|
30
|
-
with what we tend to refer to as 'workflow'.
|
31
|
-
|
32
|
-
* nice DSL to describe your states, events and transitions
|
33
|
-
* robust integration with ActiveRecord and non relational data stores
|
34
|
-
* various hooks for single transitions, entering state etc.
|
35
|
-
* convenient access to the workflow specification: list states, possible events
|
36
|
-
for particular state
|
37
|
-
EOS
|
38
|
-
|
39
|
-
Jeweler::GemcutterTasks.new
|
40
|
-
end
|
41
|
-
rescue LoadError
|
42
|
-
puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
|
43
|
-
end
|
44
|
-
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.7.
|
1
|
+
0.7.9
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Workflow
|
2
|
+
module ActiveModelPersistence
|
3
|
+
|
4
|
+
def self.happy_to_be_included_in?(klass)
|
5
|
+
Object.const_defined?(:ActiveRecord) and klass.is_a? ActiveRecord::Base
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.included(klass)
|
9
|
+
klass.before_validation :write_initial_state
|
10
|
+
end
|
11
|
+
|
12
|
+
def load_workflow_state
|
13
|
+
read_attribute(self.class.workflow_column)
|
14
|
+
end
|
15
|
+
|
16
|
+
# On transition the new workflow state is immediately saved in the
|
17
|
+
# database.
|
18
|
+
def persist_workflow_state(new_value)
|
19
|
+
update_attribute self.class.workflow_column, new_value
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
# Motivation: even if NULL is stored in the workflow_state database column,
|
25
|
+
# the current_state is correctly recognized in the Ruby code. The problem
|
26
|
+
# arises when you want to SELECT records filtering by the value of initial
|
27
|
+
# state. That's why it is important to save the string with the name of the
|
28
|
+
# initial state in all the new records.
|
29
|
+
def write_initial_state
|
30
|
+
write_attribute self.class.workflow_column, current_state.to_s
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Workflow
|
2
|
+
module MongoidPersistence
|
3
|
+
|
4
|
+
def self.happy_to_be_included_in?(klass)
|
5
|
+
Object.const_defined?(:Mongoid) and klass.include? Mongoid::Document
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.included(klass)
|
9
|
+
klass.after_initialize :write_initial_state
|
10
|
+
end
|
11
|
+
|
12
|
+
def load_workflow_state
|
13
|
+
read_attribute(self.class.workflow_column)
|
14
|
+
end
|
15
|
+
|
16
|
+
# implementation of abstract method: saves new workflow state to DB
|
17
|
+
def persist_workflow_state(new_value)
|
18
|
+
self.write_attribute(self.class.workflow_column, new_value.to_s)
|
19
|
+
self.save!
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
# Motivation: even if NULL is stored in the workflow_state database column,
|
25
|
+
# the current_state is correctly recognized in the Ruby code. The problem
|
26
|
+
# arises when you want to SELECT records filtering by the value of initial
|
27
|
+
# state. That's why it is important to save the string with the name of the
|
28
|
+
# initial state in all the new records.
|
29
|
+
def write_initial_state
|
30
|
+
write_attribute self.class.workflow_column, current_state.to_s
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Workflow
|
2
|
+
module RemodelPersistence
|
3
|
+
|
4
|
+
def self.happy_to_be_included_in?(klass)
|
5
|
+
Object.const_defined?(:Remodel) and klass < Remodel::Entity
|
6
|
+
end
|
7
|
+
|
8
|
+
def load_workflow_state
|
9
|
+
send(self.class.workflow_column)
|
10
|
+
end
|
11
|
+
|
12
|
+
def persist_workflow_state(new_value)
|
13
|
+
update(self.class.workflow_column => new_value)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Provides transaction rollback on halt. For now, you can choose between
|
4
|
+
# normal halt without any change to ordinary persistence (halt) or halt
|
5
|
+
# with transaction rollback (halt_with_rollback!), which will raise an
|
6
|
+
# ActiveRecord::Rollback exception.
|
7
|
+
# So this only works with ActiveRecord atm.
|
8
|
+
|
9
|
+
module Workflow
|
10
|
+
module Transactional
|
11
|
+
def new_transaction
|
12
|
+
self.class.transaction(:requires_new => true) do
|
13
|
+
yield
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def halt_with_rollback!(reason = nil)
|
18
|
+
halt reason
|
19
|
+
raise ActiveRecord::Rollback
|
20
|
+
end
|
21
|
+
|
22
|
+
def process_event!(*args)
|
23
|
+
return_value = :unprocessed
|
24
|
+
self.new_transaction do
|
25
|
+
return_value = super(*args)
|
26
|
+
# raise ActiveRecord::Rollback if self.halted?
|
27
|
+
end
|
28
|
+
return return_value == :unprocessed ? false : return_value
|
29
|
+
end
|
30
|
+
|
31
|
+
end # module Transactional
|
32
|
+
end # module Workflow
|
data/lib/workflow.rb
CHANGED
@@ -2,10 +2,11 @@ require 'rubygems'
|
|
2
2
|
|
3
3
|
# See also README.markdown for documentation
|
4
4
|
module Workflow
|
5
|
-
autoload :ActiveModelPersistence,
|
6
|
-
autoload :MongoidPersistence,
|
7
|
-
autoload :RemodelPersistence,
|
8
|
-
autoload :Transactional,
|
5
|
+
autoload :ActiveModelPersistence, 'workflow/active_model_persistence'
|
6
|
+
autoload :MongoidPersistence, 'workflow/mongoid_persistence'
|
7
|
+
autoload :RemodelPersistence, 'workflow/remodel_persistence'
|
8
|
+
autoload :Transactional, 'workflow/transactional'
|
9
|
+
autoload :StateDependentValidations, 'workflow/state_dependent_validations'
|
9
10
|
|
10
11
|
class Specification
|
11
12
|
|
@@ -21,6 +22,10 @@ module Workflow
|
|
21
22
|
states.keys
|
22
23
|
end
|
23
24
|
|
25
|
+
def event_names
|
26
|
+
states.values.map{|e| e.events.keys }.uniq
|
27
|
+
end
|
28
|
+
|
24
29
|
private
|
25
30
|
|
26
31
|
def state(name, meta = {:meta => {}}, &events_and_etc)
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'workflow'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: validating-workflow
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vladimir Dobriakov
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2017-05-24 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: |
|
15
15
|
Validating-Workflow is a finite-state-machine-inspired API for modeling and interacting
|
@@ -27,41 +27,47 @@ extensions: []
|
|
27
27
|
extra_rdoc_files:
|
28
28
|
- README.markdown
|
29
29
|
files:
|
30
|
-
- .gitignore
|
30
|
+
- ".gitignore"
|
31
31
|
- MIT-LICENSE
|
32
32
|
- README.markdown
|
33
33
|
- Rakefile
|
34
34
|
- VERSION
|
35
35
|
- lib/workflow.rb
|
36
|
+
- lib/workflow/active_model_persistence.rb
|
37
|
+
- lib/workflow/mongoid_persistence.rb
|
38
|
+
- lib/workflow/remodel_persistence.rb
|
39
|
+
- lib/workflow/state_dependent_validations.rb
|
40
|
+
- lib/workflow/transactional.rb
|
36
41
|
- test/couchtiny_example.rb
|
37
42
|
- test/main_test.rb
|
38
43
|
- test/multiple_workflows_test.rb
|
39
44
|
- test/readme_example.rb
|
40
45
|
- test/test_helper.rb
|
41
46
|
- test/without_active_record_test.rb
|
47
|
+
- validating-workflow.rb
|
42
48
|
- workflow.rb
|
43
|
-
- lib/workflow/state_dependent_validations.rb
|
44
49
|
homepage: http://www.geekq.net/workflow/
|
45
|
-
licenses:
|
50
|
+
licenses:
|
51
|
+
- MIT
|
46
52
|
metadata: {}
|
47
53
|
post_install_message:
|
48
54
|
rdoc_options:
|
49
|
-
- --charset=UTF-8
|
55
|
+
- "--charset=UTF-8"
|
50
56
|
require_paths:
|
51
57
|
- lib
|
52
58
|
required_ruby_version: !ruby/object:Gem::Requirement
|
53
59
|
requirements:
|
54
|
-
- -
|
60
|
+
- - ">="
|
55
61
|
- !ruby/object:Gem::Version
|
56
62
|
version: '0'
|
57
63
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
58
64
|
requirements:
|
59
|
-
- -
|
65
|
+
- - ">="
|
60
66
|
- !ruby/object:Gem::Version
|
61
67
|
version: '0'
|
62
68
|
requirements: []
|
63
69
|
rubyforge_project:
|
64
|
-
rubygems_version: 2.
|
70
|
+
rubygems_version: 2.5.2
|
65
71
|
signing_key:
|
66
72
|
specification_version: 3
|
67
73
|
summary: A replacement for acts_as_state_machine, an enhancement of workflow.
|
@@ -72,4 +78,3 @@ test_files:
|
|
72
78
|
- test/without_active_record_test.rb
|
73
79
|
- test/multiple_workflows_test.rb
|
74
80
|
- test/readme_example.rb
|
75
|
-
has_rdoc:
|