state_manager 0.2.10 → 0.2.11

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.
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ # rcov generated
2
+ coverage
3
+ coverage.data
4
+
5
+ # rdoc generated
6
+ rdoc
7
+
8
+ # yard generated
9
+ doc
10
+ .yardoc
11
+
12
+ # bundler
13
+ .bundle
14
+
15
+ # jeweler generated
16
+ pkg
17
+
18
+ .DS_Store
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ rvm:
2
+ - 1.9.3
3
+ before_install:
4
+ - gem install bundler --version '>= 1.2.2'
5
+ script: "bundle exec rake test"
data/Gemfile CHANGED
@@ -1,18 +1,13 @@
1
1
  source "http://rubygems.org"
2
2
 
3
- gem 'activesupport'
3
+ gemspec
4
4
 
5
5
  group :development do
6
- gem "rdoc", "~> 3.12"
7
- gem 'pry'
8
- gem 'pry-doc'
9
- gem 'pry-remote'
10
- gem 'pry-nav'
11
- gem 'pry-stack_explorer'
12
- gem "bundler", "~> 1.0.0"
13
- gem "jeweler", "~> 1.8.3"
6
+ gem "bundler"
14
7
  gem 'delayed_job_active_record'
15
8
  gem 'activerecord'
16
9
  gem 'sqlite3'
17
10
  gem 'timecop'
11
+ gem 'database_cleaner'
12
+ gem 'byebug'
18
13
  end
data/Gemfile.lock CHANGED
@@ -1,74 +1,58 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ state_manager (0.2.11)
5
+ activesupport
6
+
1
7
  GEM
2
8
  remote: http://rubygems.org/
3
9
  specs:
4
- activemodel (3.2.3)
5
- activesupport (= 3.2.3)
6
- builder (~> 3.0.0)
7
- activerecord (3.2.3)
8
- activemodel (= 3.2.3)
9
- activesupport (= 3.2.3)
10
- arel (~> 3.0.2)
11
- tzinfo (~> 0.3.29)
12
- activesupport (3.2.3)
13
- i18n (~> 0.6)
14
- multi_json (~> 1.0)
15
- arel (3.0.2)
16
- binding_of_caller (0.6.7)
17
- builder (3.0.0)
18
- coderay (1.0.6)
19
- delayed_job (3.0.3)
20
- activesupport (~> 3.0)
21
- delayed_job_active_record (0.3.2)
22
- activerecord (> 2.1.0)
23
- delayed_job (~> 3.0.0)
24
- git (1.2.5)
25
- i18n (0.6.0)
26
- jeweler (1.8.3)
27
- bundler (~> 1.0)
28
- git (>= 1.2.5)
29
- rake
30
- rdoc
31
- json (1.7.3)
32
- method_source (0.7.1)
33
- multi_json (1.3.6)
34
- pry (0.9.9.6)
35
- coderay (~> 1.0.5)
36
- method_source (~> 0.7.1)
37
- slop (>= 2.4.4, < 3)
38
- pry-doc (0.4.2)
39
- pry (>= 0.9.0)
40
- yard (~> 0.8.1)
41
- pry-nav (0.2.1)
42
- pry (~> 0.9.9)
43
- pry-remote (0.1.4)
44
- pry (~> 0.9.9)
45
- slop (~> 2.1)
46
- pry-stack_explorer (0.4.2)
47
- binding_of_caller (~> 0.6.2)
48
- pry (~> 0.9.9)
49
- rake (0.9.2.2)
50
- rdoc (3.12)
51
- json (~> 1.4)
52
- slop (2.4.4)
53
- sqlite3 (1.3.6)
54
- timecop (0.3.5)
55
- tzinfo (0.3.33)
56
- yard (0.8.1)
10
+ activemodel (4.1.1)
11
+ activesupport (= 4.1.1)
12
+ builder (~> 3.1)
13
+ activerecord (4.1.1)
14
+ activemodel (= 4.1.1)
15
+ activesupport (= 4.1.1)
16
+ arel (~> 5.0.0)
17
+ activesupport (4.1.1)
18
+ i18n (~> 0.6, >= 0.6.9)
19
+ json (~> 1.7, >= 1.7.7)
20
+ minitest (~> 5.1)
21
+ thread_safe (~> 0.1)
22
+ tzinfo (~> 1.1)
23
+ arel (5.0.1.20140414130214)
24
+ builder (3.2.2)
25
+ byebug (3.1.2)
26
+ columnize (~> 0.8)
27
+ debugger-linecache (~> 1.2)
28
+ columnize (0.8.9)
29
+ database_cleaner (1.3.0)
30
+ debugger-linecache (1.2.0)
31
+ delayed_job (4.0.1)
32
+ activesupport (>= 3.0, < 4.2)
33
+ delayed_job_active_record (4.0.1)
34
+ activerecord (>= 3.0, < 4.2)
35
+ delayed_job (>= 3.0, < 4.1)
36
+ i18n (0.6.9)
37
+ json (1.8.1)
38
+ minitest (5.3.4)
39
+ rake (10.3.2)
40
+ sqlite3 (1.3.9)
41
+ thread_safe (0.3.4)
42
+ timecop (0.7.1)
43
+ tzinfo (1.2.1)
44
+ thread_safe (~> 0.1)
57
45
 
58
46
  PLATFORMS
59
47
  ruby
60
48
 
61
49
  DEPENDENCIES
62
50
  activerecord
63
- activesupport
64
- bundler (~> 1.0.0)
51
+ bundler
52
+ byebug
53
+ database_cleaner
65
54
  delayed_job_active_record
66
- jeweler (~> 1.8.3)
67
- pry
68
- pry-doc
69
- pry-nav
70
- pry-remote
71
- pry-stack_explorer
72
- rdoc (~> 3.12)
55
+ rake
73
56
  sqlite3
57
+ state_manager!
74
58
  timecop
data/Rakefile CHANGED
@@ -11,20 +11,6 @@ rescue Bundler::BundlerError => e
11
11
  end
12
12
  require 'rake'
13
13
 
14
- require 'jeweler'
15
- Jeweler::Tasks.new do |gem|
16
- # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
- gem.name = "state_manager"
18
- gem.homepage = "http://github.com/ghempton/state_manager"
19
- gem.license = "MIT"
20
- gem.summary = "%Q{Finite state machine implementation.}"
21
- gem.description = %Q{Finite state machine implementation that keeps logic separate from model classes and supports sub-states.}
22
- gem.email = "ghempton@gmail.com"
23
- gem.authors = ["Gordon Hempton"]
24
- # dependencies defined in Gemfile
25
- end
26
- Jeweler::RubygemsDotOrgTasks.new
27
-
28
14
  require 'rake/testtask'
29
15
  Rake::TestTask.new(:test) do |test|
30
16
  test.libs << 'lib' << 'test'
@@ -33,13 +19,3 @@ Rake::TestTask.new(:test) do |test|
33
19
  end
34
20
 
35
21
  task :default => :test
36
-
37
- require 'rdoc/task'
38
- Rake::RDocTask.new do |rdoc|
39
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
40
-
41
- rdoc.rdoc_dir = 'rdoc'
42
- rdoc.title = "statemanager #{version}"
43
- rdoc.rdoc_files.include('README*')
44
- rdoc.rdoc_files.include('lib/**/*.rb')
45
- end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.10
1
+ 0.2.11
@@ -13,26 +13,13 @@ module StateManager
13
13
  module ResourceMethods
14
14
 
15
15
  def self.included(base)
16
- base.after_initialize do
17
- self.state_managers ||= {}
18
- end
19
- base.before_validation do
20
- validate_states!
21
- end
22
- base.before_save do
23
- state_managers.values.map(&:before_save)
24
- end
25
- base.after_save do
26
- state_managers.values.map(&:after_save)
27
- end
28
-
29
16
  base.extend(ClassMethods)
30
17
  end
31
18
 
32
19
  def _validate_states
33
20
  self.validate_states!
34
21
  end
35
-
22
+
36
23
  module ClassMethods
37
24
  def state_manager_added(property, klass, options)
38
25
  class_eval do
@@ -47,6 +34,24 @@ module StateManager
47
34
  where(query, state, like_term)
48
35
  }
49
36
  end
37
+
38
+ after_initialize do
39
+ self.state_managers ||= {}
40
+ end
41
+ before_validation do
42
+ validate_states!
43
+ end
44
+ before_save do
45
+ state_managers.values.map(&:before_save)
46
+ end
47
+
48
+ save_callback = options[:save_callback] && options[:save_callback].to_sym
49
+ if save_callback == :after_commit
50
+ after_commit(:on => :create) { state_managers.values.map(&:after_save) }
51
+ after_commit(:on => :update) { state_managers.values.map(&:after_save) }
52
+ else # defaults to after_save
53
+ after_save { state_managers.values.map(&:after_save) }
54
+ end
50
55
  end
51
56
  end
52
57
  end
@@ -100,4 +105,4 @@ module StateManager
100
105
  end
101
106
  end
102
107
  end
103
- end
108
+ end
@@ -9,14 +9,14 @@ module StateManager
9
9
  # If no base class is specified we look for a class inside the current
10
10
  # state's class which has the same name as the state
11
11
  const_name = name.to_s.classify
12
- klass ||= if const_defined?(const_name)
12
+ klass ||= if const_defined?(const_name, false)
13
13
  self.const_get(const_name)
14
14
  else
15
15
  Class.new(StateManager::State)
16
16
  end
17
17
  klass = Class.new(klass, &block) if block_given?
18
18
 
19
- remove_const const_name if const_defined?(const_name)
19
+ remove_const const_name if const_defined?(const_name, false)
20
20
  const_set(const_name, klass)
21
21
 
22
22
  specification.states[name.to_sym] = klass
@@ -23,7 +23,13 @@ if defined?(Delayed)
23
23
 
24
24
  def entered
25
25
  delayed_events.each do |name, event|
26
- delay = event[:delay]
26
+ delay = if event[:delay].is_a? Proc
27
+ instance_exec(&event[:delay])
28
+ elsif event[:delay].is_a? Symbol
29
+ send event[:delay]
30
+ else
31
+ event[:delay]
32
+ end
27
33
  delayed_event = DelayedEvent.new(path, event, state_manager)
28
34
  Delayed::Job.enqueue delayed_event, :run_at => delay.from_now
29
35
  end
@@ -45,7 +45,7 @@ module StateManager
45
45
  # Define the subclass as a constant. We do this for multiple reasons, one
46
46
  # of which is to allow it to be serialized to YAML for delayed_job
47
47
  const_name = "#{property.to_s.camelize}States"
48
- remove_const const_name if const_defined?(const_name)
48
+ remove_const const_name if const_defined?(const_name, false)
49
49
  const_set(const_name, klass)
50
50
 
51
51
  # Create an accessor for the state manager on this resource
@@ -1,103 +1,24 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
- # -*- encoding: utf-8 -*-
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'state_manager/version'
5
5
 
6
- Gem::Specification.new do |s|
7
- s.name = "state_manager"
8
- s.version = "0.2.10"
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "state_manager"
8
+ spec.version = StateManager::VERSION
9
+ spec.authors = ["Gordon L. Hempton"]
10
+ spec.email = ["ghempton@gmail.com"]
11
+ spec.summary = "%Q{Finite state machine implementation.}"
12
+ spec.description = "Finite state machine implementation that keeps logic separate from model classes and supports sub-states."
13
+ spec.homepage = "https://github.com/ghempton/state_manager"
14
+ spec.license = "MIT"
9
15
 
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Gordon Hempton"]
12
- s.date = "2012-08-29"
13
- s.description = "Finite state machine implementation that keeps logic separate from model classes and supports sub-states."
14
- s.email = "ghempton@gmail.com"
15
- s.extra_rdoc_files = [
16
- "LICENSE.txt",
17
- "README.md"
18
- ]
19
- s.files = [
20
- ".document",
21
- "Gemfile",
22
- "Gemfile.lock",
23
- "LICENSE.txt",
24
- "README.md",
25
- "Rakefile",
26
- "VERSION",
27
- "lib/state_manager.rb",
28
- "lib/state_manager/adapters.rb",
29
- "lib/state_manager/adapters/active_record.rb",
30
- "lib/state_manager/adapters/base.rb",
31
- "lib/state_manager/base.rb",
32
- "lib/state_manager/core.rb",
33
- "lib/state_manager/dsl.rb",
34
- "lib/state_manager/helpers.rb",
35
- "lib/state_manager/plugins.rb",
36
- "lib/state_manager/plugins/delayed_job.rb",
37
- "lib/state_manager/resource.rb",
38
- "lib/state_manager/serialization.rb",
39
- "lib/state_manager/state.rb",
40
- "state_manager.gemspec",
41
- "test/adapters/active_record_test.rb",
42
- "test/basic_test.rb",
43
- "test/definition_test.rb",
44
- "test/helper.rb",
45
- "test/helpers_test.rb",
46
- "test/plugins/delayed_job_test.rb",
47
- "test/transitions_test.rb"
48
- ]
49
- s.homepage = "http://github.com/ghempton/state_manager"
50
- s.licenses = ["MIT"]
51
- s.require_paths = ["lib"]
52
- s.rubygems_version = "1.8.23"
53
- s.summary = "%Q{Finite state machine implementation.}"
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
54
20
 
55
- if s.respond_to? :specification_version then
56
- s.specification_version = 3
57
-
58
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
59
- s.add_runtime_dependency(%q<activesupport>, [">= 0"])
60
- s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
61
- s.add_development_dependency(%q<pry>, [">= 0"])
62
- s.add_development_dependency(%q<pry-doc>, [">= 0"])
63
- s.add_development_dependency(%q<pry-remote>, [">= 0"])
64
- s.add_development_dependency(%q<pry-nav>, [">= 0"])
65
- s.add_development_dependency(%q<pry-stack_explorer>, [">= 0"])
66
- s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
67
- s.add_development_dependency(%q<jeweler>, ["~> 1.8.3"])
68
- s.add_development_dependency(%q<delayed_job_active_record>, [">= 0"])
69
- s.add_development_dependency(%q<activerecord>, [">= 0"])
70
- s.add_development_dependency(%q<sqlite3>, [">= 0"])
71
- s.add_development_dependency(%q<timecop>, [">= 0"])
72
- else
73
- s.add_dependency(%q<activesupport>, [">= 0"])
74
- s.add_dependency(%q<rdoc>, ["~> 3.12"])
75
- s.add_dependency(%q<pry>, [">= 0"])
76
- s.add_dependency(%q<pry-doc>, [">= 0"])
77
- s.add_dependency(%q<pry-remote>, [">= 0"])
78
- s.add_dependency(%q<pry-nav>, [">= 0"])
79
- s.add_dependency(%q<pry-stack_explorer>, [">= 0"])
80
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
81
- s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
82
- s.add_dependency(%q<delayed_job_active_record>, [">= 0"])
83
- s.add_dependency(%q<activerecord>, [">= 0"])
84
- s.add_dependency(%q<sqlite3>, [">= 0"])
85
- s.add_dependency(%q<timecop>, [">= 0"])
86
- end
87
- else
88
- s.add_dependency(%q<activesupport>, [">= 0"])
89
- s.add_dependency(%q<rdoc>, ["~> 3.12"])
90
- s.add_dependency(%q<pry>, [">= 0"])
91
- s.add_dependency(%q<pry-doc>, [">= 0"])
92
- s.add_dependency(%q<pry-remote>, [">= 0"])
93
- s.add_dependency(%q<pry-nav>, [">= 0"])
94
- s.add_dependency(%q<pry-stack_explorer>, [">= 0"])
95
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
96
- s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
97
- s.add_dependency(%q<delayed_job_active_record>, [">= 0"])
98
- s.add_dependency(%q<activerecord>, [">= 0"])
99
- s.add_dependency(%q<sqlite3>, [">= 0"])
100
- s.add_dependency(%q<timecop>, [">= 0"])
101
- end
21
+ spec.add_runtime_dependency 'activesupport'
22
+ spec.add_development_dependency "bundler", "~> 1.5"
23
+ spec.add_development_dependency "rake"
102
24
  end
103
-
@@ -1,6 +1,6 @@
1
1
  require 'helper'
2
2
 
3
- class ActiveRecordTest < Test::Unit::TestCase
3
+ class ActiveRecordTest < Minitest::Test
4
4
 
5
5
  class PostStates < StateManager::Base
6
6
  attr_accessor :before_callbacks_called
@@ -37,6 +37,12 @@ class ActiveRecordTest < Test::Unit::TestCase
37
37
  extend StateManager::Resource
38
38
  state_manager
39
39
  end
40
+
41
+ class Post2 < ActiveRecord::Base
42
+ self.table_name = 'posts'
43
+ extend StateManager::Resource
44
+ state_manager(:state, PostStates, :save_callback => :after_commit)
45
+ end
40
46
 
41
47
  def exec(sql)
42
48
  ActiveRecord::Base.connection.execute sql
@@ -50,7 +56,6 @@ class ActiveRecordTest < Test::Unit::TestCase
50
56
 
51
57
  ActiveRecord::Schema.define do
52
58
  create_table :posts do |t|
53
- t.integer :id
54
59
  t.string :title
55
60
  t.string :body
56
61
  t.string :state
@@ -63,9 +68,11 @@ class ActiveRecordTest < Test::Unit::TestCase
63
68
  exec "INSERT INTO posts VALUES(4, NULL, NULL, 'submitted.bad_state')"
64
69
 
65
70
  @resource = nil
71
+ DatabaseCleaner.start
66
72
  end
67
73
 
68
74
  def teardown
75
+ DatabaseCleaner.clean
69
76
  ActiveRecord::Base.connection.disconnect!
70
77
  end
71
78
 
@@ -81,9 +88,11 @@ class ActiveRecordTest < Test::Unit::TestCase
81
88
  assert !@resource.state_manager.before_callbacks_called
82
89
  assert !@resource.state_manager.after_callbacks_called
83
90
  assert @resource.changed?, "state should not have been persisted"
84
- @resource.save
85
- assert @resource.state_manager.before_callbacks_called
86
- assert @resource.state_manager.after_callbacks_called
91
+ @resource.transaction do
92
+ @resource.save
93
+ assert @resource.state_manager.before_callbacks_called
94
+ assert @resource.state_manager.after_callbacks_called
95
+ end
87
96
  end
88
97
 
89
98
  def test_initial_state_value
@@ -148,8 +157,32 @@ class ActiveRecordTest < Test::Unit::TestCase
148
157
  @resource = Post.find(2)
149
158
  @resource.state_manager.send_event :submit
150
159
  assert_state 'submitted.awaiting_review'
151
- assert_raise(StateManager::Adapters::ActiveRecord::DirtyTransition) do
160
+ assert_raises(StateManager::Adapters::ActiveRecord::DirtyTransition) do
152
161
  @resource.state_manager.send_event :review
153
162
  end
154
163
  end
155
- end
164
+
165
+ def test_after_commit_callback
166
+ @resource = Post2.find(1)
167
+ assert_state 'unsubmitted'
168
+ assert !@resource.state_manager.before_callbacks_called
169
+ assert !@resource.state_manager.after_callbacks_called
170
+ assert @resource.changed?, "state should not have been persisted"
171
+ @resource.transaction do
172
+ @resource.save!
173
+ assert @resource.state_manager.before_callbacks_called
174
+ assert !@resource.state_manager.after_callbacks_called
175
+ end
176
+ assert @resource.state_manager.after_callbacks_called
177
+ end
178
+
179
+ def test_after_commit_callback_on_create
180
+ Post2.transaction do
181
+ @resource = Post2.new
182
+ assert !@resource.state_manager.after_callbacks_called
183
+ @resource.save
184
+ assert !@resource.state_manager.after_callbacks_called
185
+ end
186
+ assert @resource.state_manager.after_callbacks_called
187
+ end
188
+ end
data/test/basic_test.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'helper'
2
2
 
3
- class BasicTest < Test::Unit::TestCase
3
+ class BasicTest < Minitest::Test
4
4
 
5
5
  class PostStates < StateManager::Base
6
6
  state :unsubmitted do
@@ -87,7 +87,7 @@ class BasicTest < Test::Unit::TestCase
87
87
 
88
88
  assert_state 'rejected', 'state should have transitioned'
89
89
 
90
- assert_raise StateManager::StateNotFound do
90
+ assert_raises StateManager::StateNotFound do
91
91
  @resource.state_manager.transition_to 'reviewing'
92
92
  end
93
93
  end
@@ -98,7 +98,7 @@ class BasicTest < Test::Unit::TestCase
98
98
  assert_equal @resource.state_manager.current_state.path, 'submitted.awaiting_review', 'state should have transitioned'
99
99
  assert_equal @resource.state, 'submitted.awaiting_review', 'state should have been written'
100
100
 
101
- assert_raise StateManager::InvalidEvent do
101
+ assert_raises StateManager::InvalidEvent do
102
102
  @resource.state_manager.send_event! :submit
103
103
  end
104
104
  assert_equal @resource.state, 'submitted.awaiting_review', 'state should not have changed'
@@ -115,7 +115,7 @@ class BasicTest < Test::Unit::TestCase
115
115
  assert_equal @resource.workflow_state_manager.current_state.path, 'submitted.awaiting_review', 'state should have transitioned'
116
116
  assert_equal @resource.workflow_state, 'submitted.awaiting_review', 'state should have been written'
117
117
 
118
- assert_raise StateManager::InvalidEvent do
118
+ assert_raises StateManager::InvalidEvent do
119
119
  @resource.workflow_state_manager.send_event! :submit
120
120
  end
121
121
  assert_equal @resource.workflow_state, 'submitted.awaiting_review', 'state should not have changed'
@@ -124,7 +124,7 @@ class BasicTest < Test::Unit::TestCase
124
124
  end
125
125
 
126
126
  def test_can_only_transition_to_leaf
127
- assert_raise StateManager::InvalidTransition do
127
+ assert_raises StateManager::InvalidTransition do
128
128
  @resource.state_manager.transition_to('submitted')
129
129
  end
130
130
  end
@@ -1,6 +1,6 @@
1
1
  require 'helper'
2
2
 
3
- class DefinitionTest < Test::Unit::TestCase
3
+ class DefinitionTest < Minitest::Test
4
4
 
5
5
  class CommentStates < StateManager::Base
6
6
  attr_accessor :accept_reason, :reject_reason
data/test/helper.rb CHANGED
@@ -7,16 +7,23 @@ rescue Bundler::BundlerError => e
7
7
  $stderr.puts "Run `bundle install` to install missing gems"
8
8
  exit e.status_code
9
9
  end
10
- require 'test/unit'
10
+ require 'minitest/autorun'
11
11
 
12
12
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
13
13
  $LOAD_PATH.unshift(File.dirname(__FILE__))
14
- require 'pry'
15
14
  require 'delayed_job_active_record'
16
15
  require 'state_manager'
17
16
  require 'timecop'
17
+ require 'database_cleaner'
18
+ require 'byebug'
18
19
 
19
- class Test::Unit::TestCase
20
+ DatabaseCleaner.strategy = :truncation
21
+
22
+ class Minitest::Test
23
+
24
+ def teardown
25
+ Timecop.return
26
+ end
20
27
 
21
28
  def assert_state(path, state_manager=nil, message=nil)
22
29
  if state_manager.is_a? String
@@ -27,11 +34,6 @@ class Test::Unit::TestCase
27
34
  assert_equal path, state_manager.current_state.path
28
35
  end
29
36
 
30
- def teardown
31
- ActiveRecord::Base.connection.disconnect!
32
- Timecop.return
33
- end
34
-
35
37
  # Convince delayed job that the duration has passed and perform any jobs that
36
38
  # need doing
37
39
  def time_warp(duration)
@@ -44,4 +46,4 @@ class Test::Unit::TestCase
44
46
  raise "Delayed job error: #{error}" if error
45
47
  end
46
48
 
47
- end
49
+ end
data/test/helpers_test.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'helper'
2
2
 
3
- class HelpersTest < Test::Unit::TestCase
3
+ class HelpersTest < Minitest::Test
4
4
 
5
5
  class ItemStates < StateManager::Base
6
6
  state :default do
@@ -1,7 +1,7 @@
1
1
  require 'helper'
2
2
  require 'timecop'
3
3
 
4
- class DelayedJobTest < Test::Unit::TestCase
4
+ class DelayedJobTest < Minitest::Test
5
5
 
6
6
  class ProjectStates < StateManager::Base
7
7
  initial_state 'unsubmitted.initial'
@@ -14,13 +14,19 @@ class DelayedJobTest < Test::Unit::TestCase
14
14
  end
15
15
  state :submitted do
16
16
  event :accept, :transitions_to => 'accepted'
17
- event :auto_accept, :transitions_to => 'accepted', :delay => 1.day
17
+ event :auto_accept, :transitions_to => 'accepted', :delay => :delay
18
18
  event :reject, :transitions_to => 'rejected'
19
19
  end
20
20
  state :accepted do
21
21
  event :remind, :transitions_to => 'rejected'
22
22
  end
23
23
  state :rejected
24
+
25
+ class Submitted
26
+ def delay
27
+ 1.day
28
+ end
29
+ end
24
30
  end
25
31
 
26
32
  def exec(sql)
@@ -35,7 +41,6 @@ class DelayedJobTest < Test::Unit::TestCase
35
41
 
36
42
  ActiveRecord::Schema.define do
37
43
  create_table :projects do |t|
38
- t.integer :id
39
44
  t.string :title
40
45
  t.string :state
41
46
  end
@@ -125,4 +130,4 @@ class DelayedJobTest < Test::Unit::TestCase
125
130
  assert_state 'unsubmitted.reminded'
126
131
  end
127
132
 
128
- end
133
+ end
@@ -1,6 +1,6 @@
1
1
  require 'helper'
2
2
 
3
- class TransitionsTest < Test::Unit::TestCase
3
+ class TransitionsTest < Minitest::Test
4
4
 
5
5
  class UserStates < StateManager::Base
6
6
  module TrackEnterExitCounts
metadata CHANGED
@@ -1,22 +1,22 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: state_manager
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.10
4
+ version: 0.2.11
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
- - Gordon Hempton
8
+ - Gordon L. Hempton
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-29 00:00:00.000000000 Z
12
+ date: 2014-06-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
- - - ! '>='
19
+ - - ">="
20
20
  - !ruby/object:Gem::Version
21
21
  version: '0'
22
22
  type: :runtime
@@ -24,103 +24,7 @@ dependencies:
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  none: false
26
26
  requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: '0'
30
- - !ruby/object:Gem::Dependency
31
- name: rdoc
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ~>
36
- - !ruby/object:Gem::Version
37
- version: '3.12'
38
- type: :development
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ~>
44
- - !ruby/object:Gem::Version
45
- version: '3.12'
46
- - !ruby/object:Gem::Dependency
47
- name: pry
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ! '>='
52
- - !ruby/object:Gem::Version
53
- version: '0'
54
- type: :development
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ! '>='
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- - !ruby/object:Gem::Dependency
63
- name: pry-doc
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - ! '>='
68
- - !ruby/object:Gem::Version
69
- version: '0'
70
- type: :development
71
- prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
78
- - !ruby/object:Gem::Dependency
79
- name: pry-remote
80
- requirement: !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - ! '>='
84
- - !ruby/object:Gem::Version
85
- version: '0'
86
- type: :development
87
- prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ! '>='
92
- - !ruby/object:Gem::Version
93
- version: '0'
94
- - !ruby/object:Gem::Dependency
95
- name: pry-nav
96
- requirement: !ruby/object:Gem::Requirement
97
- none: false
98
- requirements:
99
- - - ! '>='
100
- - !ruby/object:Gem::Version
101
- version: '0'
102
- type: :development
103
- prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - ! '>='
108
- - !ruby/object:Gem::Version
109
- version: '0'
110
- - !ruby/object:Gem::Dependency
111
- name: pry-stack_explorer
112
- requirement: !ruby/object:Gem::Requirement
113
- none: false
114
- requirements:
115
- - - ! '>='
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
- requirements:
123
- - - ! '>='
27
+ - - ">="
124
28
  - !ruby/object:Gem::Version
125
29
  version: '0'
126
30
  - !ruby/object:Gem::Dependency
@@ -128,39 +32,23 @@ dependencies:
128
32
  requirement: !ruby/object:Gem::Requirement
129
33
  none: false
130
34
  requirements:
131
- - - ~>
132
- - !ruby/object:Gem::Version
133
- version: 1.0.0
134
- type: :development
135
- prerelease: false
136
- version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
- requirements:
139
- - - ~>
140
- - !ruby/object:Gem::Version
141
- version: 1.0.0
142
- - !ruby/object:Gem::Dependency
143
- name: jeweler
144
- requirement: !ruby/object:Gem::Requirement
145
- none: false
146
- requirements:
147
- - - ~>
35
+ - - "~>"
148
36
  - !ruby/object:Gem::Version
149
- version: 1.8.3
37
+ version: '1.5'
150
38
  type: :development
151
39
  prerelease: false
152
40
  version_requirements: !ruby/object:Gem::Requirement
153
41
  none: false
154
42
  requirements:
155
- - - ~>
43
+ - - "~>"
156
44
  - !ruby/object:Gem::Version
157
- version: 1.8.3
45
+ version: '1.5'
158
46
  - !ruby/object:Gem::Dependency
159
- name: delayed_job_active_record
47
+ name: rake
160
48
  requirement: !ruby/object:Gem::Requirement
161
49
  none: false
162
50
  requirements:
163
- - - ! '>='
51
+ - - ">="
164
52
  - !ruby/object:Gem::Version
165
53
  version: '0'
166
54
  type: :development
@@ -168,67 +56,20 @@ dependencies:
168
56
  version_requirements: !ruby/object:Gem::Requirement
169
57
  none: false
170
58
  requirements:
171
- - - ! '>='
172
- - !ruby/object:Gem::Version
173
- version: '0'
174
- - !ruby/object:Gem::Dependency
175
- name: activerecord
176
- requirement: !ruby/object:Gem::Requirement
177
- none: false
178
- requirements:
179
- - - ! '>='
180
- - !ruby/object:Gem::Version
181
- version: '0'
182
- type: :development
183
- prerelease: false
184
- version_requirements: !ruby/object:Gem::Requirement
185
- none: false
186
- requirements:
187
- - - ! '>='
188
- - !ruby/object:Gem::Version
189
- version: '0'
190
- - !ruby/object:Gem::Dependency
191
- name: sqlite3
192
- requirement: !ruby/object:Gem::Requirement
193
- none: false
194
- requirements:
195
- - - ! '>='
196
- - !ruby/object:Gem::Version
197
- version: '0'
198
- type: :development
199
- prerelease: false
200
- version_requirements: !ruby/object:Gem::Requirement
201
- none: false
202
- requirements:
203
- - - ! '>='
204
- - !ruby/object:Gem::Version
205
- version: '0'
206
- - !ruby/object:Gem::Dependency
207
- name: timecop
208
- requirement: !ruby/object:Gem::Requirement
209
- none: false
210
- requirements:
211
- - - ! '>='
212
- - !ruby/object:Gem::Version
213
- version: '0'
214
- type: :development
215
- prerelease: false
216
- version_requirements: !ruby/object:Gem::Requirement
217
- none: false
218
- requirements:
219
- - - ! '>='
59
+ - - ">="
220
60
  - !ruby/object:Gem::Version
221
61
  version: '0'
222
62
  description: Finite state machine implementation that keeps logic separate from model
223
63
  classes and supports sub-states.
224
- email: ghempton@gmail.com
64
+ email:
65
+ - ghempton@gmail.com
225
66
  executables: []
226
67
  extensions: []
227
- extra_rdoc_files:
228
- - LICENSE.txt
229
- - README.md
68
+ extra_rdoc_files: []
230
69
  files:
231
- - .document
70
+ - ".document"
71
+ - ".gitignore"
72
+ - ".travis.yml"
232
73
  - Gemfile
233
74
  - Gemfile.lock
234
75
  - LICENSE.txt
@@ -256,7 +97,7 @@ files:
256
97
  - test/helpers_test.rb
257
98
  - test/plugins/delayed_job_test.rb
258
99
  - test/transitions_test.rb
259
- homepage: http://github.com/ghempton/state_manager
100
+ homepage: https://github.com/ghempton/state_manager
260
101
  licenses:
261
102
  - MIT
262
103
  post_install_message:
@@ -266,22 +107,26 @@ require_paths:
266
107
  required_ruby_version: !ruby/object:Gem::Requirement
267
108
  none: false
268
109
  requirements:
269
- - - ! '>='
110
+ - - ">="
270
111
  - !ruby/object:Gem::Version
271
112
  version: '0'
272
- segments:
273
- - 0
274
- hash: -1972430724111836425
275
113
  required_rubygems_version: !ruby/object:Gem::Requirement
276
114
  none: false
277
115
  requirements:
278
- - - ! '>='
116
+ - - ">="
279
117
  - !ruby/object:Gem::Version
280
118
  version: '0'
281
119
  requirements: []
282
120
  rubyforge_project:
283
- rubygems_version: 1.8.23
121
+ rubygems_version: 1.8.25
284
122
  signing_key:
285
123
  specification_version: 3
286
- summary: ! '%Q{Finite state machine implementation.}'
287
- test_files: []
124
+ summary: "%Q{Finite state machine implementation.}"
125
+ test_files:
126
+ - test/adapters/active_record_test.rb
127
+ - test/basic_test.rb
128
+ - test/definition_test.rb
129
+ - test/helper.rb
130
+ - test/helpers_test.rb
131
+ - test/plugins/delayed_job_test.rb
132
+ - test/transitions_test.rb