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.
- data/.gitignore +4 -0
- data/.rspec +2 -0
- data/.travis.yml +5 -0
- data/Appraisals +22 -0
- data/CHANGELOG +76 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +84 -0
- data/MIT-LICENSE +2 -2
- data/README.md +146 -0
- data/Rakefile +90 -7
- data/TODO.md +30 -0
- data/VERSION +1 -0
- data/acts_as_approvable.gemspec +40 -0
- data/features/create_approval.feature +36 -0
- data/features/destroy_approval.feature +19 -0
- data/features/reset_approval.feature +13 -0
- data/features/step_definitions/cucumber_steps.rb +132 -0
- data/features/support/env.rb +14 -0
- data/features/support/large.txt +29943 -0
- data/features/support/second_large.txt +31798 -0
- data/features/update_approval.feature +48 -0
- data/gemfiles/Gemfile.ci +14 -0
- data/gemfiles/Gemfile.ci.lock +98 -0
- data/gemfiles/mysql2.gemfile +7 -0
- data/gemfiles/mysql2.gemfile.lock +86 -0
- data/gemfiles/rails2.gemfile +8 -0
- data/gemfiles/rails2.gemfile.lock +86 -0
- data/gemfiles/rails30.gemfile +9 -0
- data/gemfiles/rails30.gemfile.lock +124 -0
- data/gemfiles/rails31.gemfile +9 -0
- data/gemfiles/rails31.gemfile.lock +135 -0
- data/gemfiles/sqlite.gemfile +7 -0
- data/generators/acts_as_approvable/USAGE +3 -0
- data/generators/acts_as_approvable/acts_as_approvable_generator.rb +81 -0
- data/generators/acts_as_approvable/templates/approvals.js +71 -0
- data/generators/acts_as_approvable/templates/approvals_controller.rb +91 -0
- data/generators/acts_as_approvable/templates/create_approvals.rb +27 -0
- data/generators/acts_as_approvable/templates/initializer.rb +3 -0
- data/generators/acts_as_approvable/templates/jquery.form.js +101 -0
- data/generators/acts_as_approvable/templates/views/erb/_owner_select.html.erb +4 -0
- data/generators/acts_as_approvable/templates/views/erb/_table.html.erb +26 -0
- data/generators/acts_as_approvable/templates/views/erb/index.html.erb +17 -0
- data/generators/acts_as_approvable/templates/views/haml/_owner_select.html.haml +3 -0
- data/generators/acts_as_approvable/templates/views/haml/_table.html.haml +19 -0
- data/generators/acts_as_approvable/templates/views/haml/index.html.haml +15 -0
- data/init.rb +1 -0
- data/lib/acts_as_approvable.rb +96 -2
- data/lib/acts_as_approvable/approval.rb +205 -11
- data/lib/acts_as_approvable/error.rb +34 -0
- data/lib/acts_as_approvable/model.rb +60 -0
- data/lib/acts_as_approvable/model/class_methods.rb +63 -0
- data/lib/acts_as_approvable/model/create_instance_methods.rb +88 -0
- data/lib/acts_as_approvable/model/destroy_instance_methods.rb +38 -0
- data/lib/acts_as_approvable/model/instance_methods.rb +107 -0
- data/lib/acts_as_approvable/model/update_instance_methods.rb +61 -0
- data/lib/acts_as_approvable/ownership.rb +141 -0
- data/lib/acts_as_approvable/railtie.rb +7 -0
- data/lib/acts_as_approvable/version.rb +1 -8
- data/lib/generators/acts_as_approvable/USAGE +1 -0
- data/lib/generators/acts_as_approvable/acts_as_approvable_generator.rb +68 -0
- data/lib/generators/acts_as_approvable/base.rb +30 -0
- data/lib/generators/acts_as_approvable/templates/approvals.js +71 -0
- data/lib/generators/acts_as_approvable/templates/approvals_controller.rb +91 -0
- data/lib/generators/acts_as_approvable/templates/create_approvals.rb +27 -0
- data/lib/generators/acts_as_approvable/templates/jquery.form.js +101 -0
- data/lib/generators/erb/acts_as_approvable_generator.rb +33 -0
- data/lib/generators/erb/templates/_owner_select.html.erb +4 -0
- data/lib/generators/erb/templates/_table.html.erb +26 -0
- data/lib/generators/erb/templates/index.html.erb +17 -0
- data/lib/generators/haml/acts_as_approvable_generator.rb +33 -0
- data/lib/generators/haml/templates/_owner_select.html.haml +3 -0
- data/lib/generators/haml/templates/_table.html.haml +19 -0
- data/lib/generators/haml/templates/index.html.haml +15 -0
- data/lib/tasks/acts_as_approvable.rake +4 -0
- data/rails/init.rb +1 -0
- data/spec/acts_as_approvable/approval_spec.rb +614 -0
- data/spec/acts_as_approvable/model/class_methods_spec.rb +219 -0
- data/spec/acts_as_approvable/model/create_instance_methods_spec.rb +169 -0
- data/spec/acts_as_approvable/model/destroy_instance_methods_spec.rb +71 -0
- data/spec/acts_as_approvable/model/instance_methods_spec.rb +328 -0
- data/spec/acts_as_approvable/model/update_instance_methods_spec.rb +111 -0
- data/spec/acts_as_approvable/model_spec.rb +113 -0
- data/spec/acts_as_approvable/ownership/class_methods_spec.rb +134 -0
- data/spec/acts_as_approvable/ownership/instance_methods_spec.rb +32 -0
- data/spec/acts_as_approvable/ownership_spec.rb +52 -0
- data/spec/acts_as_approvable_spec.rb +31 -0
- data/spec/spec_helper.rb +51 -0
- data/spec/support/database.rb +49 -0
- data/spec/support/database.yml +12 -0
- data/spec/support/matchers.rb +87 -0
- data/spec/support/models.rb +67 -0
- data/spec/support/schema.rb +54 -0
- metadata +375 -58
- data/README.rdoc +0 -38
- data/lib/acts_as_approvable/approver.rb +0 -76
- data/lib/generators/acts_as_approvable/install_generator.rb +0 -28
- data/lib/generators/acts_as_approvable/templates/install.rb +0 -16
data/README.rdoc
DELETED
@@ -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
|