state_manager 0.2.10 → 0.2.11

Sign up to get free protection for your applications and to get access to all the features.
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