acts_as_approvable 0.1.1 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. data/.gitignore +4 -0
  2. data/.rspec +2 -0
  3. data/.travis.yml +5 -0
  4. data/Appraisals +22 -0
  5. data/CHANGELOG +76 -0
  6. data/Gemfile +3 -0
  7. data/Gemfile.lock +84 -0
  8. data/MIT-LICENSE +2 -2
  9. data/README.md +146 -0
  10. data/Rakefile +90 -7
  11. data/TODO.md +30 -0
  12. data/VERSION +1 -0
  13. data/acts_as_approvable.gemspec +40 -0
  14. data/features/create_approval.feature +36 -0
  15. data/features/destroy_approval.feature +19 -0
  16. data/features/reset_approval.feature +13 -0
  17. data/features/step_definitions/cucumber_steps.rb +132 -0
  18. data/features/support/env.rb +14 -0
  19. data/features/support/large.txt +29943 -0
  20. data/features/support/second_large.txt +31798 -0
  21. data/features/update_approval.feature +48 -0
  22. data/gemfiles/Gemfile.ci +14 -0
  23. data/gemfiles/Gemfile.ci.lock +98 -0
  24. data/gemfiles/mysql2.gemfile +7 -0
  25. data/gemfiles/mysql2.gemfile.lock +86 -0
  26. data/gemfiles/rails2.gemfile +8 -0
  27. data/gemfiles/rails2.gemfile.lock +86 -0
  28. data/gemfiles/rails30.gemfile +9 -0
  29. data/gemfiles/rails30.gemfile.lock +124 -0
  30. data/gemfiles/rails31.gemfile +9 -0
  31. data/gemfiles/rails31.gemfile.lock +135 -0
  32. data/gemfiles/sqlite.gemfile +7 -0
  33. data/generators/acts_as_approvable/USAGE +3 -0
  34. data/generators/acts_as_approvable/acts_as_approvable_generator.rb +81 -0
  35. data/generators/acts_as_approvable/templates/approvals.js +71 -0
  36. data/generators/acts_as_approvable/templates/approvals_controller.rb +91 -0
  37. data/generators/acts_as_approvable/templates/create_approvals.rb +27 -0
  38. data/generators/acts_as_approvable/templates/initializer.rb +3 -0
  39. data/generators/acts_as_approvable/templates/jquery.form.js +101 -0
  40. data/generators/acts_as_approvable/templates/views/erb/_owner_select.html.erb +4 -0
  41. data/generators/acts_as_approvable/templates/views/erb/_table.html.erb +26 -0
  42. data/generators/acts_as_approvable/templates/views/erb/index.html.erb +17 -0
  43. data/generators/acts_as_approvable/templates/views/haml/_owner_select.html.haml +3 -0
  44. data/generators/acts_as_approvable/templates/views/haml/_table.html.haml +19 -0
  45. data/generators/acts_as_approvable/templates/views/haml/index.html.haml +15 -0
  46. data/init.rb +1 -0
  47. data/lib/acts_as_approvable.rb +96 -2
  48. data/lib/acts_as_approvable/approval.rb +205 -11
  49. data/lib/acts_as_approvable/error.rb +34 -0
  50. data/lib/acts_as_approvable/model.rb +60 -0
  51. data/lib/acts_as_approvable/model/class_methods.rb +63 -0
  52. data/lib/acts_as_approvable/model/create_instance_methods.rb +88 -0
  53. data/lib/acts_as_approvable/model/destroy_instance_methods.rb +38 -0
  54. data/lib/acts_as_approvable/model/instance_methods.rb +107 -0
  55. data/lib/acts_as_approvable/model/update_instance_methods.rb +61 -0
  56. data/lib/acts_as_approvable/ownership.rb +141 -0
  57. data/lib/acts_as_approvable/railtie.rb +7 -0
  58. data/lib/acts_as_approvable/version.rb +1 -8
  59. data/lib/generators/acts_as_approvable/USAGE +1 -0
  60. data/lib/generators/acts_as_approvable/acts_as_approvable_generator.rb +68 -0
  61. data/lib/generators/acts_as_approvable/base.rb +30 -0
  62. data/lib/generators/acts_as_approvable/templates/approvals.js +71 -0
  63. data/lib/generators/acts_as_approvable/templates/approvals_controller.rb +91 -0
  64. data/lib/generators/acts_as_approvable/templates/create_approvals.rb +27 -0
  65. data/lib/generators/acts_as_approvable/templates/jquery.form.js +101 -0
  66. data/lib/generators/erb/acts_as_approvable_generator.rb +33 -0
  67. data/lib/generators/erb/templates/_owner_select.html.erb +4 -0
  68. data/lib/generators/erb/templates/_table.html.erb +26 -0
  69. data/lib/generators/erb/templates/index.html.erb +17 -0
  70. data/lib/generators/haml/acts_as_approvable_generator.rb +33 -0
  71. data/lib/generators/haml/templates/_owner_select.html.haml +3 -0
  72. data/lib/generators/haml/templates/_table.html.haml +19 -0
  73. data/lib/generators/haml/templates/index.html.haml +15 -0
  74. data/lib/tasks/acts_as_approvable.rake +4 -0
  75. data/rails/init.rb +1 -0
  76. data/spec/acts_as_approvable/approval_spec.rb +614 -0
  77. data/spec/acts_as_approvable/model/class_methods_spec.rb +219 -0
  78. data/spec/acts_as_approvable/model/create_instance_methods_spec.rb +169 -0
  79. data/spec/acts_as_approvable/model/destroy_instance_methods_spec.rb +71 -0
  80. data/spec/acts_as_approvable/model/instance_methods_spec.rb +328 -0
  81. data/spec/acts_as_approvable/model/update_instance_methods_spec.rb +111 -0
  82. data/spec/acts_as_approvable/model_spec.rb +113 -0
  83. data/spec/acts_as_approvable/ownership/class_methods_spec.rb +134 -0
  84. data/spec/acts_as_approvable/ownership/instance_methods_spec.rb +32 -0
  85. data/spec/acts_as_approvable/ownership_spec.rb +52 -0
  86. data/spec/acts_as_approvable_spec.rb +31 -0
  87. data/spec/spec_helper.rb +51 -0
  88. data/spec/support/database.rb +49 -0
  89. data/spec/support/database.yml +12 -0
  90. data/spec/support/matchers.rb +87 -0
  91. data/spec/support/models.rb +67 -0
  92. data/spec/support/schema.rb +54 -0
  93. metadata +375 -58
  94. data/README.rdoc +0 -38
  95. data/lib/acts_as_approvable/approver.rb +0 -76
  96. data/lib/generators/acts_as_approvable/install_generator.rb +0 -28
  97. data/lib/generators/acts_as_approvable/templates/install.rb +0 -16
@@ -1,38 +0,0 @@
1
- = ActsAsApprovable
2
-
3
- +acts_as_approvable+ is an ActiveRecord extension that allows you to flag models as pending
4
- approval. One use of this would be so that changes would not show up in your views until the
5
- model has been "approved".
6
-
7
- == Installation
8
- In +Gemfile+:
9
-
10
- gem 'acts_as_approvable', :git => 'https://github.com/iamvery/acts_as_approvable.git'
11
-
12
- In your application root, run:
13
-
14
- $ bundle install
15
-
16
- Generate the migration (warning: will overwrite any table named +Approvals+):
17
-
18
- $ rails g acts_as_approvable:install
19
-
20
- == Usage
21
- Declare +acts_as_approvable+ on your models:
22
-
23
- class Thing < ActiveRecord::Base
24
- acts_as_approvable
25
- end
26
-
27
- Doing so will add the following methods to your model:
28
-
29
- * thing.pending?
30
- * thing.approved?
31
- * thing.approve!
32
- * thing.disapprove!
33
-
34
- Both +pending?+ and +approved?+ exist as convenience methods. +approve!+ and +disapprove!+
35
- will modify the +Approval+ model that your +acts_as_approvable+ model has.
36
-
37
- == Compatibility
38
- This gem is designed to work with Rails 3.x.
@@ -1,76 +0,0 @@
1
- require 'acts_as_approvable/approval'
2
-
3
- module ActsAsApprovable
4
- module Approver
5
- def self.included(base)
6
- base.extend ClassMethods
7
- end
8
-
9
- module ClassMethods
10
- # Creates associations with +Approvals+ and add instance methods for getting approval status
11
- def acts_as_approvable(options = {})
12
- # don't allow multiple calls
13
- return if included_modules.include?(ActsAsApprovable::Approver::InstanceMethods)
14
-
15
- # default approval states when there is no approval and after the record is updated
16
- options[:when_missing] ||= false
17
- options[:post_update] ||= false
18
-
19
- class_attribute :when_missing
20
- self.when_missing = options[:when_missing]
21
-
22
- class_attribute :post_update
23
- self.post_update = options[:post_update]
24
-
25
- # association with approval
26
- has_one :approval, :as => :approvable, :dependent => :destroy
27
-
28
- # access to all models that have been approved
29
- scope :approved, lambda{ joins(:approval).where(Approval.arel_table[:approved].eq(true)) }
30
-
31
- # make sure every new approvable model has an associated approval
32
- after_create :create_approval
33
- after_update :update_approval
34
-
35
- include ActsAsApprovable::Approver::InstanceMethods
36
- end
37
- end
38
-
39
- module InstanceMethods
40
- # Returns whether the approval is approved. Defaults to +default_approval+ if the approval is missing
41
- def approved?
42
- approval.nil? ? when_missing : approval.try(:approved?)
43
- end
44
-
45
- # Return whether the the record is not approved
46
- def pending?
47
- !approved?
48
- end
49
-
50
- def approve!(who = nil)
51
- create_approval if approval.nil?
52
- approval.update_attributes :approved => true, :approver => who || nil if pending?
53
- end
54
-
55
- def disapprove!(who = nil)
56
- create_approval if approval.nil?
57
- approval.update_attributes :approved => false, :approver => who || nil if approved?
58
- end
59
-
60
- def approver
61
- approval.try :approver
62
- end
63
-
64
- private
65
-
66
- def create_approval
67
- self.approval = Approval.create :approvable => self, :approved => when_missing
68
- end
69
-
70
- def update_approval
71
- create_approval if approval.nil?
72
- self.approval.update_attributes :approved => post_update
73
- end
74
- end
75
- end
76
- end
@@ -1,28 +0,0 @@
1
- require 'rails/generators'
2
- require 'rails/generators/migration'
3
- require 'active_record'
4
- require 'rails/generators/active_record'
5
-
6
- module ActsAsApprovable
7
- module Generators
8
- class InstallGenerator < Rails::Generators::Base
9
- include Rails::Generators::Migration
10
-
11
- source_root File.expand_path("../templates", __FILE__)
12
-
13
- # Implement the required interface for Rails::Generators::Migration.
14
- def self.next_migration_number(dirname) #:nodoc:
15
- next_migration_number = current_migration_number(dirname) + 1
16
- if ActiveRecord::Base.timestamped_migrations
17
- [Time.now.utc.strftime("%Y%m%d%H%M%S"), "%.14d" % next_migration_number].max
18
- else
19
- "%.3d" % next_migration_number
20
- end
21
- end
22
-
23
- def copy_migration
24
- migration_template 'install.rb', 'db/migrate/install_acts_as_approvable.rb'
25
- end
26
- end
27
- end
28
- end
@@ -1,16 +0,0 @@
1
- class <%= migration_class_name %> < ActiveRecord::Migration
2
- def self.up
3
- create_table :approvals, :force => true do |t|
4
- t.references :approvable, :polymorphic => true, :null => false
5
- t.references :approver, :polymorphic => true
6
- t.boolean :approved, :default => false
7
- t.timestamps
8
- end
9
- add_index :approvals, [:approvable_id, :approvable_type], :unique => true
10
- end
11
-
12
- def self.down
13
- remove_index :approvals, :column => [:approvable_id, :approvable_type]
14
- drop_table :approvals
15
- end
16
- end