acts-as-approvable 0.6.7 → 0.6.8.1

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.
Files changed (64) hide show
  1. data/.gitignore +2 -5
  2. data/.rspec +2 -0
  3. data/.travis.yml +5 -0
  4. data/Appraisals +14 -10
  5. data/CHANGELOG +16 -0
  6. data/Gemfile.lock +60 -20
  7. data/README.md +1 -2
  8. data/Rakefile +44 -16
  9. data/VERSION +1 -1
  10. data/acts-as-approvable.gemspec +21 -11
  11. data/features/create_approval.feature +26 -0
  12. data/features/step_definitions/cucumber_steps.rb +86 -0
  13. data/features/support/env.rb +14 -0
  14. data/features/support/large.txt +29943 -0
  15. data/features/support/second_large.txt +31798 -0
  16. data/features/update_approval.feature +34 -0
  17. data/gemfiles/Gemfile.ci +14 -0
  18. data/gemfiles/Gemfile.ci.lock +98 -0
  19. data/gemfiles/mysql2.gemfile +7 -0
  20. data/gemfiles/mysql2.gemfile.lock +92 -0
  21. data/gemfiles/rails2.gemfile +1 -0
  22. data/gemfiles/rails2.gemfile.lock +59 -17
  23. data/gemfiles/rails30.gemfile +1 -0
  24. data/gemfiles/rails30.gemfile.lock +54 -14
  25. data/gemfiles/rails31.gemfile +1 -0
  26. data/gemfiles/rails31.gemfile.lock +54 -14
  27. data/gemfiles/sqlite.gemfile +7 -0
  28. data/generators/acts_as_approvable/templates/create_approvals.rb +8 -7
  29. data/lib/acts-as-approvable.rb +2 -3
  30. data/lib/acts_as_approvable/approval.rb +3 -2
  31. data/lib/acts_as_approvable/model.rb +55 -0
  32. data/lib/acts_as_approvable/model/class_methods.rb +63 -0
  33. data/lib/acts_as_approvable/model/create_instance_methods.rb +83 -0
  34. data/lib/acts_as_approvable/model/instance_methods.rb +89 -0
  35. data/lib/acts_as_approvable/model/update_instance_methods.rb +61 -0
  36. data/lib/acts_as_approvable/railtie.rb +1 -1
  37. data/lib/generators/acts_as_approvable/templates/create_approvals.rb +8 -7
  38. data/spec/acts_as_approvable/approval_spec.rb +475 -0
  39. data/spec/acts_as_approvable/model/class_methods_spec.rb +219 -0
  40. data/spec/acts_as_approvable/model/create_instance_methods_spec.rb +149 -0
  41. data/spec/acts_as_approvable/model/instance_methods_spec.rb +328 -0
  42. data/spec/acts_as_approvable/model/update_instance_methods_spec.rb +111 -0
  43. data/spec/acts_as_approvable/model_spec.rb +90 -0
  44. data/spec/acts_as_approvable/ownership/class_methods_spec.rb +101 -0
  45. data/spec/acts_as_approvable/ownership/instance_methods_spec.rb +32 -0
  46. data/spec/acts_as_approvable/ownership_spec.rb +51 -0
  47. data/spec/acts_as_approvable_spec.rb +29 -0
  48. data/spec/spec_helper.rb +51 -0
  49. data/spec/support/database.rb +46 -0
  50. data/spec/support/database.yml +12 -0
  51. data/spec/support/matchers.rb +87 -0
  52. data/spec/support/models.rb +60 -0
  53. data/{test → spec/support}/schema.rb +15 -9
  54. metadata +156 -53
  55. data/gemfiles/rails32.gemfile +0 -8
  56. data/gemfiles/rails32.gemfile.lock +0 -99
  57. data/lib/acts_as_approvable/acts_as_approvable.rb +0 -291
  58. data/test/acts_as_approvable_model_test.rb +0 -459
  59. data/test/acts_as_approvable_ownership_test.rb +0 -132
  60. data/test/acts_as_approvable_schema_test.rb +0 -13
  61. data/test/acts_as_approvable_test.rb +0 -8
  62. data/test/database.yml +0 -7
  63. data/test/support.rb +0 -19
  64. data/test/test_helper.rb +0 -62
data/.gitignore CHANGED
@@ -1,7 +1,4 @@
1
- test/*.db
2
- test/debug.log
1
+ debug.log
2
+ spec/*.db
3
3
  coverage/
4
- rdoc/
5
- yardoc/
6
- .yardoc
7
4
  *.gem
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format doc
2
+ --color
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.8.7
4
+ - 1.9.2
5
+ gemfile: gemfiles/Gemfile.ci
data/Appraisals CHANGED
@@ -1,18 +1,22 @@
1
1
  appraise 'rails2' do
2
2
  gem 'activerecord', '~> 2.3'
3
+ gem 'sqlite3'
3
4
  end
4
5
 
5
- appraise 'rails30' do
6
- gem 'activerecord', '~> 3.0.0'
7
- gem 'railties', '~> 3.0.0'
8
- end
6
+ if RUBY_VERSION =~ /^1\.9/
7
+ appraise 'rails30' do
8
+ gem 'activerecord', '~> 3.0.0'
9
+ gem 'railties', '~> 3.0.0'
10
+ gem 'sqlite3'
11
+ end
9
12
 
10
- appraise 'rails31' do
11
- gem 'activerecord', '~> 3.1.0'
12
- gem 'railties', '~> 3.1.0'
13
+ appraise 'rails31' do
14
+ gem 'activerecord', '~> 3.1.0'
15
+ gem 'railties', '~> 3.1.0'
16
+ gem 'sqlite3'
17
+ end
13
18
  end
14
19
 
15
- appraise 'rails32' do
16
- gem 'activerecord', '~> 3.2.0'
17
- gem 'railties', '~> 3.2.0'
20
+ appraise 'mysql2' do
21
+ gem 'mysql2', '~> 0.2.18'
18
22
  end
data/CHANGELOG CHANGED
@@ -1,3 +1,19 @@
1
+ == 0.6.8.1
2
+
3
+ * Bad gem push...
4
+
5
+ == 0.6.8
6
+
7
+ * Fixed issue where approval state would be checked if the local state field
8
+ was present but not the value being checked.
9
+ * Reorganized `ActsAsApprovable::Model` into seperate files.
10
+ * `.acts_as_approvable` is the only method that should be available until
11
+ called. Moved other class methods into a module that is included on
12
+ configuration.
13
+ * Moved from Test::Unit to RSpec
14
+ * Renamed `can_save?` to `able_to_save?`
15
+ * Specify larger field size for original and object columns (16MB)
16
+
1
17
  == 0.6.6
2
18
 
3
19
  * `#pending_changes?` should not be true if there are no pending update
data/Gemfile.lock CHANGED
@@ -12,39 +12,79 @@ GEM
12
12
  appraisal (0.4.1)
13
13
  bundler
14
14
  rake
15
+ binding_of_caller (0.6.7)
16
+ builder (3.0.0)
15
17
  coderay (1.0.5)
16
- metaclass (0.0.1)
17
- method_source (0.7.0)
18
- mocha (0.10.4)
19
- metaclass (~> 0.0.1)
20
- multi_json (1.0.4)
21
- pry (0.9.8)
18
+ coolline (0.1.0)
19
+ cucumber (1.1.0)
20
+ builder (>= 2.1.2)
21
+ diff-lcs (>= 1.1.2)
22
+ gherkin (~> 2.5.0)
23
+ json (>= 1.4.6)
24
+ term-ansicolor (>= 1.0.6)
25
+ diff-lcs (1.1.3)
26
+ gherkin (2.5.1)
27
+ json (>= 1.4.6)
28
+ io-console (0.3)
29
+ json (1.6.5)
30
+ method_source (0.7.1)
31
+ multi_json (1.1.0)
32
+ plymouth (0.3.2)
33
+ pry-exception_explorer (>= 0.1.7)
34
+ pry (0.9.8.4)
22
35
  coderay (~> 1.0.5)
23
- method_source (~> 0.7)
24
- slop (>= 2.4.3, < 3)
36
+ method_source (~> 0.7.1)
37
+ slop (>= 2.4.4, < 3)
38
+ pry-coolline (0.1.1)
39
+ coolline (~> 0.1.0)
40
+ io-console (~> 0.3.0)
41
+ pry-exception_explorer (0.1.9)
42
+ pry-stack_explorer (>= 0.3.9)
43
+ pry-nav (0.1.0)
44
+ pry (~> 0.9.8.1)
45
+ pry-stack_explorer (0.4.1)
46
+ binding_of_caller (~> 0.6.2)
47
+ pry (~> 0.9.8.2)
48
+ pry-syntax-hacks (0.0.6)
49
+ pry (>= 0.9.8)
25
50
  rake (0.9.2.2)
26
51
  redcarpet (2.1.0)
52
+ rspec (2.8.0)
53
+ rspec-core (~> 2.8.0)
54
+ rspec-expectations (~> 2.8.0)
55
+ rspec-mocks (~> 2.8.0)
56
+ rspec-core (2.8.0)
57
+ rspec-expectations (2.8.0)
58
+ diff-lcs (~> 1.1.2)
59
+ rspec-mocks (2.8.0)
27
60
  shoulda (2.11.3)
28
- simplecov (0.5.4)
29
- multi_json (~> 1.0.3)
61
+ simplecov (0.6.1)
62
+ multi_json (~> 1.0)
30
63
  simplecov-html (~> 0.5.3)
31
64
  simplecov-html (0.5.3)
32
- slop (2.4.3)
33
- sqlite3 (1.3.5)
65
+ slop (2.4.4)
66
+ term-ansicolor (1.0.6)
67
+ timecop (0.3.5)
34
68
  yard (0.7.5)
35
69
 
36
70
  PLATFORMS
37
71
  ruby
38
72
 
39
73
  DEPENDENCIES
40
- activerecord (~> 2.3)
74
+ activerecord (~> 2.3.14)
41
75
  acts-as-approvable!
42
- appraisal
43
- mocha
44
- pry
45
- rake
46
- redcarpet
47
- shoulda
76
+ appraisal (~> 0.4.1)
77
+ cucumber (~> 1.1.0)
78
+ plymouth
79
+ pry (~> 0.9.8.1)
80
+ pry-coolline
81
+ pry-nav (~> 0.1.0)
82
+ pry-stack_explorer
83
+ pry-syntax-hacks
84
+ rake (~> 0.9.2)
85
+ redcarpet (~> 2.1.0)
86
+ rspec (~> 2.8.0)
87
+ shoulda (~> 2.0)
48
88
  simplecov
49
- sqlite3
89
+ timecop (~> 0.3.5)
50
90
  yard
data/README.md CHANGED
@@ -1,5 +1,4 @@
1
- Acts as Approvable
2
- ==================
1
+ # Acts as Approvable [![Build Status](https://secure.travis-ci.org/jlogsdon/acts_as_approvable.png)](http://travis-ci.org/jlogsdon/acts_as_approvable?branch=master)
3
2
 
4
3
  This plugin provides a workflow for approving new records and changes to existing
5
4
  records.
data/Rakefile CHANGED
@@ -1,6 +1,9 @@
1
1
  require 'rubygems'
2
2
  require 'bundler/setup'
3
3
  require 'rake/testtask'
4
+ require 'rspec/core/rake_task'
5
+ require 'cucumber'
6
+ require 'cucumber/rake/task'
4
7
  require 'yard'
5
8
  require 'appraisal'
6
9
 
@@ -11,12 +14,12 @@ desc 'Start a pry session with a database connection open'
11
14
  task :pry do |t|
12
15
  $LOAD_PATH << './lib'
13
16
  require 'pry'
14
- require './test/test_helper'
17
+ require './spec/spec_helper'
15
18
 
16
- ActiveRecord::Base.logger = Logger.new(STDOUT)
17
- load_schema
19
+ Support::Database.setup_log(STDOUT)
20
+ Support::Database.load_schema
18
21
 
19
- ActsAsApprovable::Ownership.configure
22
+ #ActsAsApprovable::Ownership.configure
20
23
  Pry.start(TOPLEVEL_BINDING)
21
24
  end
22
25
 
@@ -33,20 +36,19 @@ task :copy do |t|
33
36
  end
34
37
 
35
38
  desc 'Test the acts_as_approvable plugin.'
36
- Rake::TestTask.new(:test) do |t|
37
- t.libs << 'test' << 'lib'
38
- t.pattern = 'test/*_test.rb'
39
- t.verbose = true
40
- end
39
+ RSpec::Core::RakeTask.new(:test)
41
40
 
42
41
  if RUBY_VERSION =~ /^1\.8/
43
- require 'rcov/rcovtask'
44
- Rcov::RcovTask.new do |t|
45
- t.libs << 'test' << 'lib'
46
- t.rcov_opts << '--exclude' << '"Library/Ruby/*"' << '--sort' << 'coverage'
47
- t.pattern = 'test/*_test.rb'
48
- t.output_dir = 'coverage/'
49
- t.verbose = true
42
+ begin
43
+ require 'rcov/rcovtask'
44
+ Rcov::RcovTask.new do |t|
45
+ t.libs << 'test' << 'lib'
46
+ t.rcov_opts << '--exclude' << '"Library/Ruby/*"' << '--sort' << 'coverage'
47
+ t.pattern = 'test/*_test.rb'
48
+ t.output_dir = 'coverage/'
49
+ t.verbose = true
50
+ end
51
+ rescue LoadError
50
52
  end
51
53
  elsif RUBY_VERSION =~ /^1\.9/
52
54
  namespace :test do
@@ -57,6 +59,32 @@ elsif RUBY_VERSION =~ /^1\.9/
57
59
  end
58
60
  end
59
61
 
62
+ namespace :test do
63
+ desc 'Setup appraisals and install gems for the gambit run'
64
+ task :setup do
65
+ start = Time.now
66
+ Kernel.system('rbenv each -v bundle install')
67
+ Kernel.system('rbenv each -v bundle exec rake appraisal:install')
68
+ elapsed = Time.now - start
69
+
70
+ puts "\nRan everything in #{elapsed} seconds"
71
+ end
72
+
73
+ desc 'Run all specs and features across all installed rubies'
74
+ task :gambit do
75
+ start = Time.now
76
+ Kernel.system('rbenv each -v bundle exec rake appraisal test')
77
+ Kernel.system('rbenv each -v bundle exec rake appraisal features')
78
+ elapsed = Time.now - start
79
+
80
+ puts "\nRan everything in #{elapsed} seconds"
81
+ end
82
+ end
83
+
84
+ Cucumber::Rake::Task.new(:features) do |t|
85
+ t.cucumber_opts = "features --format pretty"
86
+ end
87
+
60
88
  desc 'Generate documentation for the acts_as_approvable plugin.'
61
89
  YARD::Rake::YardocTask.new do |t|
62
90
  yard_dir = (ENV['YARD_DIR'] || 'yardoc')
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.7
1
+ 0.6.8.1
@@ -14,18 +14,28 @@ Gem::Specification.new do |s|
14
14
  s.date = %q(2012-02-14)
15
15
 
16
16
  s.files = `git ls-files`.split("\n")
17
- s.test_files = `git ls-files -- test/*`.split("\n")
17
+ s.test_files = `git ls-files -- spec/* features/*`.split("\n")
18
18
  s.require_paths = ['lib']
19
19
 
20
- s.add_development_dependency %q<activerecord>, '~> 2.3'
21
- s.add_development_dependency %q<appraisal>
22
- s.add_development_dependency %q<redcarpet>
23
- s.add_development_dependency %q<shoulda>
24
- s.add_development_dependency %q<sqlite3>
25
- s.add_development_dependency %q<mocha>
26
- s.add_development_dependency %q<rake>
27
- s.add_development_dependency %q<rcov> if RUBY_VERSION =~ /^1\.8/
28
- s.add_development_dependency %q<simplecov> if RUBY_VERSION =~ /^1\.9/
20
+ s.add_development_dependency %q<activerecord>, '~> 2.3.14'
21
+ s.add_development_dependency %q<appraisal>, '~> 0.4.1'
22
+ s.add_development_dependency %q<redcarpet>, '~> 2.1.0'
23
+ s.add_development_dependency %q<shoulda>, '~> 2.0'
24
+ s.add_development_dependency %q<rspec>, '~> 2.8.0'
25
+ s.add_development_dependency %q<timecop>, '~> 0.3.5'
26
+ s.add_development_dependency %q<cucumber>, '~> 1.1.0'
27
+ s.add_development_dependency %q<rake>, '~> 0.9.2'
29
28
  s.add_development_dependency %q<yard>
30
- s.add_development_dependency %q<pry>
29
+ s.add_development_dependency %q<pry>, '~> 0.9.8.1'
30
+ s.add_development_dependency %q<pry-syntax-hacks>
31
+
32
+ if RUBY_VERSION =~ /^1\.9/
33
+ s.add_development_dependency %q<simplecov>
34
+ s.add_development_dependency %q<pry-coolline>
35
+ s.add_development_dependency %q<pry-stack_explorer>
36
+ s.add_development_dependency %q<pry-nav>, '~> 0.1.0'
37
+ s.add_development_dependency %q<plymouth>
38
+ elsif RUBY_VERSION =~ /^1\.8/
39
+ s.add_development_dependency %q<rcov>
40
+ end
31
41
  end
@@ -0,0 +1,26 @@
1
+ Feature: Create Approvals
2
+ In order to provide an approval queue for new records
3
+
4
+ Background:
5
+ Given a record created with create approval
6
+
7
+ Scenario: a new record is created
8
+ Then it should be pending
9
+
10
+ Scenario: a new record is approved
11
+ When I approve the record
12
+ Then it should be approved
13
+
14
+ Scenario: a new record is rejected
15
+ When I reject the record
16
+ Then it should be rejected
17
+
18
+ Scenario: an approved record is approved again
19
+ When the record is already approved
20
+ And I approve the record
21
+ Then it should raise ActsAsApprovable::Error::Locked
22
+
23
+ Scenario: an approved record is rejected
24
+ When the record is already approved
25
+ And I reject the record
26
+ Then it should raise ActsAsApprovable::Error::Locked
@@ -0,0 +1,86 @@
1
+ def support_file_path(file)
2
+ File.join('features', 'support', file.gsub(/^file:/, '').gsub(/ +/, '_') + '.txt')
3
+ end
4
+
5
+ Given /^a record created with (create|update|any) approval$/ do |type|
6
+ @record = case type
7
+ when 'create'; CreatesApprovable.create
8
+ when 'update'; UpdatesApprovable.create
9
+ when 'any'; DefaultApprovable.create
10
+ end
11
+ end
12
+
13
+ When /^I (approve|reject) the (record|changes?)$/ do |state, type|
14
+ begin
15
+ method = "#{state}!".to_sym
16
+
17
+ case type
18
+ when 'record'; @record.send(method)
19
+ when 'changes', 'change'; @approval.send(method)
20
+ end
21
+ rescue => @last_error
22
+ end
23
+
24
+ @record.reload
25
+ end
26
+
27
+ When /^the record is already (approved|rejected)$/ do |state|
28
+ case state
29
+ when 'approved'; @record.approve!
30
+ when 'rejected'; @record.reject!
31
+ end
32
+
33
+ @record.reload
34
+ end
35
+
36
+ When /^I update the record with:$/ do |table|
37
+ table.rows_hash.each_pair do |attr, value|
38
+ value = File.read(support_file_path(value)) if value =~ /^file:/
39
+ @record[attr] = value
40
+ end
41
+ @record.save!
42
+
43
+ @approval = @record.update_approvals.last
44
+ @update = table.rows_hash
45
+ end
46
+
47
+ Then /^it should be (pending|approved|rejected)$/ do |state|
48
+ method = "#{state}?".to_sym
49
+ @record.send(method).should be_true
50
+ end
51
+
52
+ Then /^it should have (no )?pending changes$/ do |empty|
53
+ @record.pending_changes?.should_not == !!empty
54
+ end
55
+
56
+ Then /^it should raise (.+?)$/ do |exception|
57
+ @last_error.class.should == eval(exception)
58
+ end
59
+
60
+ Then /^the (approval|record) should (not )?have (the changes|changed)$/ do |type, changed, tense|
61
+ changed = !!changed
62
+ changes = type == 'record' ? @record.attributes : @approval.object
63
+
64
+ @update.each_pair do |attr, value|
65
+ value = File.read(support_file_path(value)) if value =~ /^file:/
66
+ if changed
67
+ changes[attr].should_not == value
68
+ else
69
+ changes[attr].should == value
70
+ end
71
+ end
72
+ end
73
+
74
+ Then /^the (approval|record) should (not )?have changed to:$/ do |type, changed, table|
75
+ changed = !!changed
76
+ changes = type == 'record' ? @record.attributes : @approval.object
77
+
78
+ table.rows_hash.each_pair do |attr, value|
79
+ value = File.read(support_file_path(value)) if value =~ /^file:/
80
+ if changed
81
+ changes[attr].should_not == value
82
+ else
83
+ changes[attr].should == value
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,14 @@
1
+ ENV['RAILS_ENV'] = 'test'
2
+
3
+ require 'rubygems'
4
+ require 'active_record'
5
+
6
+ require File.expand_path('../../lib/acts-as-approvable', File.dirname(__FILE__))
7
+
8
+ require File.expand_path('../../spec/support/database', File.dirname(__FILE__))
9
+ require File.expand_path('../../spec/support/models', File.dirname(__FILE__))
10
+
11
+ Before do
12
+ LOGGER = Support::Database.setup_log unless defined?(LOGGER)
13
+ Support::Database.load_schema
14
+ end