make_flaggable 0.0.2

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,7 @@
1
+ Gemfile.lock
2
+ pkg/*
3
+ doc/*
4
+ *.gem
5
+ *.log
6
+ *.sqlite3
7
+ .bundle
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source :gemcutter
2
+
3
+ # Specify your gem's dependencies in make_flaggable.gemspec
4
+ gemspec
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010-2011 by Kai Schlamp
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,81 @@
1
+ = MakeFlaggable
2
+
3
+ MakeFlaggable is an extension for building a user-centric flagging system for Rails 3 applications.
4
+ It currently supports ActiveRecord models.
5
+
6
+ == Installation
7
+
8
+ add MakeFlaggable to your Gemfile
9
+
10
+ gem 'make_flaggable'
11
+
12
+ afterwards execute
13
+
14
+ bundle install
15
+
16
+ generate the required migration file
17
+
18
+ rails generate make_flaggable
19
+
20
+ migrate the database
21
+
22
+ rake db:migrate
23
+
24
+ == Usage
25
+
26
+ # Specify a model that can be flagged.
27
+ class Article < ActiveRecord::Base
28
+ make_flaggable
29
+ end
30
+
31
+ # Specify a model that can flag another model.
32
+ class User < ActiveRecord::Base
33
+ make_flagger
34
+ end
35
+
36
+ # You can specify that a flagger can only flag a flaggable once.
37
+ class User < ActiveRecord::Base
38
+ make_flagger :flag_once => true
39
+ end
40
+
41
+ # The user can now flag the flaggable.
42
+ # If the user already flagged the flaggable and :flag_once was set then an AlreadyFlaggedError is raised.
43
+ user.flag!(article, reason)
44
+
45
+ # The method without bang(!) does not raise the AlreadyFlaggedError when the user flags the flaggable more than once.
46
+ # Instead it just returns false and ignores the flagging.
47
+ # If :flag_once was not set then this method behaves like flag! method.
48
+ user.flag(article, reason)
49
+
50
+ # The user may unflag an already done flagging.
51
+ # If the user never flagged the flaggable then an NotFlaggedError is raised.
52
+ user.unflag!(article)
53
+
54
+ # The method without bang(!) does not raise the NotFlaggedError, but just returns false if the user never flagged
55
+ # the flaggable.
56
+ user.unflag(article)
57
+
58
+ # Get all flaggings of a flaggable.
59
+ article.flaggings
60
+
61
+ # Get the reason of a flagging.
62
+ flagging = article.flaggings.first
63
+ flagging.reason
64
+
65
+ # Get the flagger of the flagging.
66
+ flagging = article.flaggings.first
67
+ user = flagging.flagger
68
+
69
+ # Returns true if the article was flagged by any flagger, false otherwise
70
+ article.flagged?
71
+
72
+ # Flaggings can also be accessed by its flagger.
73
+ flagger.flaggings
74
+
75
+ == Testing
76
+
77
+ MakeFlaggable uses RSpec for testing and has a rake task for executing the provided specs
78
+
79
+ rake spec
80
+
81
+ Copyright © 2010-2011 Kai Schlamp (http://www.medihack.org), released under the MIT license
data/Rakefile ADDED
@@ -0,0 +1,7 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'rspec/core/rake_task'
5
+ RSpec::Core::RakeTask.new(:spec)
6
+
7
+ task :default => :spec
@@ -0,0 +1,20 @@
1
+ require 'rails/generators/migration'
2
+ require 'rails/generators/active_record'
3
+
4
+ class MakeFlaggableGenerator < Rails::Generators::Base
5
+ include Rails::Generators::Migration
6
+
7
+ desc "Generates a migration for the Flag model"
8
+
9
+ def self.source_root
10
+ @source_root ||= File.dirname(__FILE__) + '/templates'
11
+ end
12
+
13
+ def self.next_migration_number(path)
14
+ ActiveRecord::Generators::Base.next_migration_number(path)
15
+ end
16
+
17
+ def generate_migration
18
+ migration_template 'migration.rb', 'db/migrate/create_make_flaggable_tables'
19
+ end
20
+ end
@@ -0,0 +1,23 @@
1
+ class CreateMakeFlaggableTables < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :flaggings do |t|
4
+ t.string :flaggable_type
5
+ t.integer :flaggable_id
6
+ t.string :flagger_type
7
+ t.integer :flagger_id
8
+ t.text :reason
9
+
10
+ t.timestamps
11
+ end
12
+
13
+ add_index :flaggings, [:flaggable_type, :flaggable_id]
14
+ add_index :flaggings, [:flagger_type, :flagger_id, :flaggable_type, :flaggable_id], :name => "access_flaggings"
15
+ end
16
+
17
+ def self.down
18
+ remove_index :flaggings, :column => [:flaggable_type, :flaggable_id]
19
+ remove_index :flaggings, :name => "access_flaggings"
20
+
21
+ drop_table :flaggings
22
+ end
23
+ end
@@ -0,0 +1,21 @@
1
+ module MakeFlaggable
2
+ module Exceptions
3
+ class AlreadyFlaggedError < StandardError
4
+ def initialize
5
+ super "The flaggable was already flagged by this flagger."
6
+ end
7
+ end
8
+
9
+ class NotFlaggedError < StandardError
10
+ def initialize
11
+ super "The flaggable was not flagged by the flagger."
12
+ end
13
+ end
14
+
15
+ class InvalidFlaggableError < StandardError
16
+ def initialize
17
+ super "Invalid flaggable."
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,19 @@
1
+ module MakeFlaggable
2
+ module Flaggable
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ has_many :flaggings, :class_name => "MakeFlaggable::Flagging", :as => :flaggable
7
+ end
8
+
9
+ module ClassMethods
10
+ def flaggable?
11
+ true
12
+ end
13
+ end
14
+
15
+ def flagged?
16
+ flaggings.count > 0
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,73 @@
1
+ module MakeFlaggable
2
+ module Flagger
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ has_many :flaggings, :class_name => "MakeFlaggable::Flagging", :as => :flagger
7
+ end
8
+
9
+ module ClassMethods
10
+ def flagger?
11
+ true
12
+ end
13
+ end
14
+
15
+ # Flag a +flaggable+ using the provided +reason+.
16
+ # Raises an +AlreadyFlaggedError+ if the flagger already flagged the flaggable and +:flag_once+ option is set.
17
+ # Raises an +InvalidFlaggableError+ if the flaggable is not a valid flaggable.
18
+ def flag!(flaggable, reason = nil)
19
+ check_flaggable(flaggable)
20
+
21
+ if (flaggable_options[:flag_once] && fetch_flaggings(flaggable).try(:first))
22
+ raise MakeFlaggable::Exceptions::AlreadyFlaggedError.new
23
+ end
24
+
25
+ Flagging.create(:flaggable => flaggable, :flagger => self, :reason => reason)
26
+ end
27
+
28
+ # Flag the +flaggable+, but don't raise an error if the flaggable was already flagged and +:flag_once+ was set.
29
+ # If +:flag_once+ was not set then this method behaves like +flag!+.
30
+ # The flagging is simply ignored then.
31
+ def flag(flaggable, reason = nil)
32
+ begin
33
+ flag!(flaggable, reason)
34
+ rescue Exceptions::AlreadyFlaggedError
35
+ end
36
+ end
37
+
38
+ def unflag!(flaggable)
39
+ check_flaggable(flaggable)
40
+
41
+ flaggings = fetch_flaggings(flaggable)
42
+
43
+ raise Exceptions::NotFlaggedError if flaggings.empty?
44
+
45
+ flaggings.destroy_all
46
+
47
+ true
48
+ end
49
+
50
+ def unflag(flaggable)
51
+ begin
52
+ unflag!(flaggable)
53
+ success = true
54
+ rescue Exceptions::NotFlaggedError
55
+ success = false
56
+ end
57
+ success
58
+ end
59
+
60
+ private
61
+
62
+ def fetch_flaggings(flaggable)
63
+ flaggings.where({
64
+ :flaggable_type => flaggable.class.to_s,
65
+ :flaggable_id => flaggable.id
66
+ })
67
+ end
68
+
69
+ def check_flaggable(flaggable)
70
+ raise Exceptions::InvalidFlaggableError unless flaggable.class.flaggable?
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,6 @@
1
+ module MakeFlaggable
2
+ class Flagging < ActiveRecord::Base
3
+ belongs_to :flaggable, :polymorphic => true
4
+ belongs_to :flagger, :polymorphic => true
5
+ end
6
+ end
@@ -0,0 +1,3 @@
1
+ module MakeFlaggable
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,38 @@
1
+ require 'make_flaggable/flagging'
2
+ require 'make_flaggable/flaggable'
3
+ require 'make_flaggable/flagger'
4
+ require 'make_flaggable/exceptions'
5
+
6
+ module MakeFlaggable
7
+ def flaggable?
8
+ false
9
+ end
10
+
11
+ def flagger?
12
+ false
13
+ end
14
+
15
+ # Specify a model as flaggable.
16
+ # Optional option :once_per_flagger when only on flag per flagger is allowed.
17
+ #
18
+ # Example:
19
+ # class Article < ActiveRecord::Base
20
+ # make_flaggable :once_per_flagger => true
21
+ # end
22
+ def make_flaggable
23
+ include Flaggable
24
+ end
25
+
26
+ # Specify a model as flagger.
27
+ #
28
+ # Example:
29
+ # class User < ActiveRecord::Base
30
+ # make_flagger
31
+ # end
32
+ def make_flagger(options = {})
33
+ define_method(:flaggable_options) { options }
34
+ include Flagger
35
+ end
36
+ end
37
+
38
+ ActiveRecord::Base.extend MakeFlaggable
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path("../lib/make_flaggable/version", __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "make_flaggable"
6
+ s.version = MakeFlaggable::VERSION
7
+ s.platform = Gem::Platform::RUBY
8
+ s.authors = ["Kai Schlamp"]
9
+ s.email = ["schlamp@gmx.de"]
10
+ s.homepage = "http://github.com/medihack/make_flaggable"
11
+ s.summary = "Rails 3 flagging extension"
12
+ s.description = "A user-centric flagging extension for Rails 3 applications."
13
+
14
+ s.required_rubygems_version = ">= 1.3.6"
15
+ s.rubyforge_project = "make_flaggable"
16
+
17
+ s.add_dependency "activerecord", "~> 3.0.0"
18
+ s.add_development_dependency "bundler", "~> 1.0.0"
19
+ s.add_development_dependency "rspec", "~> 2.5.0"
20
+ s.add_development_dependency "database_cleaner", "0.6.7.RC"
21
+ s.add_development_dependency "sqlite3-ruby", "~> 1.3.0"
22
+ s.add_development_dependency "generator_spec", "~> 0.8.2"
23
+
24
+ s.files = `git ls-files`.split("\n")
25
+ s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
26
+ s.require_path = 'lib'
27
+ end
data/spec/database.yml ADDED
@@ -0,0 +1,3 @@
1
+ sqlite3:
2
+ adapter: sqlite3
3
+ database: make_flaggable.sqlite3
@@ -0,0 +1,3 @@
1
+ sqlite3:
2
+ adapter: sqlite3
3
+ database: make_flaggable.sqlite3
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+ require 'action_controller'
3
+ require 'generator_spec/test_case'
4
+ require 'generators/make_flaggable/make_flaggable_generator'
5
+
6
+ describe MakeFlaggableGenerator do
7
+ include GeneratorSpec::TestCase
8
+ destination File.expand_path("/tmp", __FILE__)
9
+ tests MakeFlaggableGenerator
10
+
11
+ before do
12
+ prepare_destination
13
+ run_generator
14
+ end
15
+
16
+ specify do
17
+ destination_root.should have_structure {
18
+ directory "db" do
19
+ directory "migrate" do
20
+ migration "create_make_flaggable_tables" do
21
+ contains "class CreateMakeFlaggableTables"
22
+ contains "create_table :flaggings"
23
+ end
24
+ end
25
+ end
26
+ }
27
+ end
28
+ end
@@ -0,0 +1,104 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe "Make Flaggable" do
4
+ before(:each) do
5
+ @flaggable = FlaggableModel.create(:name => "Flaggable 1")
6
+ @flagger = FlaggerModel.create(:name => "Flagger 1")
7
+ @flagger_once = FlaggerOnceModel.create(:name => "Flagger Once 1")
8
+ end
9
+
10
+ it "should create a flaggable instance" do
11
+ @flaggable.class.should == FlaggableModel
12
+ @flaggable.class.flaggable?.should == true
13
+ end
14
+
15
+ it "should create a flagger instance" do
16
+ @flagger.class.should == FlaggerModel
17
+ @flagger.class.flagger?.should == true
18
+
19
+ @flagger_once.class.should == FlaggerOnceModel
20
+ @flagger_once.class.flagger?.should == true
21
+ end
22
+
23
+ describe "flagger" do
24
+ describe "flag" do
25
+ it "should create a flagging" do
26
+ @flaggable.flaggings.length.should == 0
27
+ @flagger.flag!(@flaggable)
28
+ @flaggable.flaggings.reload.length.should == 1
29
+ end
30
+
31
+ it "should store the reason" do
32
+ @flagger.flag!(@flaggable, "The reason.")
33
+ reason = @flaggable.flaggings[0].reason
34
+ reason.should == "The reason."
35
+ end
36
+
37
+ it "should only allow to flag a flaggable per flagger once with rasing an error" do
38
+ @flagger_once.flag!(@flaggable)
39
+ lambda { @flagger_once.flag!(@flaggable) }.should raise_error(MakeFlaggable::Exceptions::AlreadyFlaggedError)
40
+ MakeFlaggable::Flagging.count.should == 1
41
+ end
42
+
43
+ it "should only allow to flag a flaggable per flagger once without rasing an error" do
44
+ @flagger_once.flag(@flaggable)
45
+ lambda { @flagger_once.flag(@flaggable) }.should_not raise_error(MakeFlaggable::Exceptions::AlreadyFlaggedError)
46
+ MakeFlaggable::Flagging.count.should == 1
47
+ end
48
+ end
49
+
50
+ describe "unflag" do
51
+ it "should unflag a flagging" do
52
+ @flagger.flag!(@flaggable)
53
+ @flagger.flaggings.length.should == 1
54
+ @flagger.unflag!(@flaggable).should == true
55
+ @flagger.flaggings.reload.length.should == 0
56
+ end
57
+
58
+ it "should unflag multiple flaggings" do
59
+ @flagger.flag!(@flaggable)
60
+ @flagger.flag!(@flaggable)
61
+ @flagger.flaggings.length.should == 2
62
+ @flagger.unflag!(@flaggable).should == true
63
+ @flagger.flaggings.reload.length.should == 0
64
+ end
65
+
66
+ it "normal method should return true when successfully unflagged" do
67
+ @flagger.flag(@flaggable)
68
+ @flagger.unflag(@flaggable).should == true
69
+ end
70
+
71
+ it "should raise error if flagger not flagged the flaggable with bang method" do
72
+ lambda { @flagger.unflag!(@flaggable) }.should raise_error(MakeFlaggable::Exceptions::NotFlaggedError)
73
+ end
74
+
75
+ it "should not raise error if flagger not flagged the flaggable with normal method" do
76
+ lambda {
77
+ @flagger.unflag(@flaggable).should == false
78
+ }.should_not raise_error(MakeFlaggable::Exceptions::NotFlaggedError)
79
+ end
80
+ end
81
+
82
+ it "should have flaggings" do
83
+ @flagger.flaggings.length.should == 0
84
+ @flagger.flag!(@flaggable)
85
+ @flagger.flaggings.reload.length.should == 1
86
+ end
87
+ end
88
+
89
+ describe "flaggable" do
90
+ it "should have flaggings" do
91
+ @flaggable.flaggings.length.should == 0
92
+ @flagger.flag!(@flaggable)
93
+ @flaggable.flaggings.reload.length.should == 1
94
+ end
95
+
96
+ it "should check if flaggable is flagged" do
97
+ @flaggable.flagged?.should == false
98
+ @flagger.flag!(@flaggable)
99
+ @flaggable.flagged?.should == true
100
+ @flagger.unflag!(@flaggable)
101
+ @flaggable.flagged?.should == false
102
+ end
103
+ end
104
+ end
data/spec/models.rb ADDED
@@ -0,0 +1,14 @@
1
+ class FlaggableModel < ActiveRecord::Base
2
+ make_flaggable
3
+ end
4
+
5
+ class FlaggerModel < ActiveRecord::Base
6
+ make_flagger
7
+ end
8
+
9
+ class FlaggerOnceModel < ActiveRecord::Base
10
+ make_flagger :flag_once => true
11
+ end
12
+
13
+ class InvalidFlaggableModel < ActiveRecord::Base
14
+ end
data/spec/schema.rb ADDED
@@ -0,0 +1,30 @@
1
+ ActiveRecord::Schema.define :version => 0 do
2
+ create_table :flaggable_models, :force => true do |t|
3
+ t.string :name
4
+ end
5
+
6
+ create_table :flagger_models, :force => true do |t|
7
+ t.string :name
8
+ end
9
+
10
+ create_table :flagger_once_models, :force => true do |t|
11
+ t.string :name
12
+ end
13
+
14
+ create_table :invalid_flaggable_models, :force => true do |t|
15
+ t.string :name
16
+ end
17
+
18
+ create_table :flaggings, :force => true do |t|
19
+ t.string :flaggable_type
20
+ t.integer :flaggable_id
21
+ t.string :flagger_type
22
+ t.integer :flagger_id
23
+ t.text :reason
24
+
25
+ t.timestamps
26
+ end
27
+
28
+ add_index :flaggings, [:flaggable_type, :flaggable_id]
29
+ add_index :flaggings, [:flagger_type, :flagger_id, :flaggable_type, :flaggable_id], :name => "access_flaggings"
30
+ end
@@ -0,0 +1,37 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ require 'logger'
4
+ require 'rspec'
5
+ require 'active_record'
6
+ require 'database_cleaner'
7
+
8
+ $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../lib')
9
+ require 'make_flaggable'
10
+
11
+ ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__) + '/debug.log')
12
+ ActiveRecord::Base.configurations = YAML::load_file(File.dirname(__FILE__) + '/database.yml')
13
+ ActiveRecord::Base.establish_connection(ENV['DB'] || 'sqlite3')
14
+
15
+ ActiveRecord::Base.silence do
16
+ ActiveRecord::Migration.verbose = false
17
+
18
+ load(File.dirname(__FILE__) + '/schema.rb')
19
+ load(File.dirname(__FILE__) + '/models.rb')
20
+ end
21
+
22
+ RSpec.configure do |config|
23
+ config.filter_run :focus => true
24
+ config.run_all_when_everything_filtered = true
25
+ config.filter_run_excluding :exclude => true
26
+
27
+ config.mock_with :rspec
28
+
29
+ config.before(:suite) do
30
+ DatabaseCleaner.strategy = :truncation
31
+ DatabaseCleaner.clean
32
+ end
33
+
34
+ config.after(:each) do
35
+ DatabaseCleaner.clean
36
+ end
37
+ end
metadata ADDED
@@ -0,0 +1,142 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: make_flaggable
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.2
6
+ platform: ruby
7
+ authors:
8
+ - Kai Schlamp
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-06-18 00:00:00 +02:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: activerecord
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ~>
23
+ - !ruby/object:Gem::Version
24
+ version: 3.0.0
25
+ type: :runtime
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ prerelease: false
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ~>
34
+ - !ruby/object:Gem::Version
35
+ version: 1.0.0
36
+ type: :development
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
39
+ name: rspec
40
+ prerelease: false
41
+ requirement: &id003 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: 2.5.0
47
+ type: :development
48
+ version_requirements: *id003
49
+ - !ruby/object:Gem::Dependency
50
+ name: database_cleaner
51
+ prerelease: false
52
+ requirement: &id004 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - "="
56
+ - !ruby/object:Gem::Version
57
+ version: 0.6.7.RC
58
+ type: :development
59
+ version_requirements: *id004
60
+ - !ruby/object:Gem::Dependency
61
+ name: sqlite3-ruby
62
+ prerelease: false
63
+ requirement: &id005 !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: 1.3.0
69
+ type: :development
70
+ version_requirements: *id005
71
+ - !ruby/object:Gem::Dependency
72
+ name: generator_spec
73
+ prerelease: false
74
+ requirement: &id006 !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ~>
78
+ - !ruby/object:Gem::Version
79
+ version: 0.8.2
80
+ type: :development
81
+ version_requirements: *id006
82
+ description: A user-centric flagging extension for Rails 3 applications.
83
+ email:
84
+ - schlamp@gmx.de
85
+ executables: []
86
+
87
+ extensions: []
88
+
89
+ extra_rdoc_files: []
90
+
91
+ files:
92
+ - .gitignore
93
+ - Gemfile
94
+ - MIT-LICENSE
95
+ - README.rdoc
96
+ - Rakefile
97
+ - lib/generators/make_flaggable/make_flaggable_generator.rb
98
+ - lib/generators/make_flaggable/templates/migration.rb
99
+ - lib/make_flaggable.rb
100
+ - lib/make_flaggable/exceptions.rb
101
+ - lib/make_flaggable/flaggable.rb
102
+ - lib/make_flaggable/flagger.rb
103
+ - lib/make_flaggable/flagging.rb
104
+ - lib/make_flaggable/version.rb
105
+ - make_flaggable.gemspec
106
+ - spec/database.yml
107
+ - spec/database.yml.sample
108
+ - spec/generators/make_flaggable_generator_spec.rb
109
+ - spec/lib/make_flaggable_spec.rb
110
+ - spec/models.rb
111
+ - spec/schema.rb
112
+ - spec/spec_helper.rb
113
+ has_rdoc: true
114
+ homepage: http://github.com/medihack/make_flaggable
115
+ licenses: []
116
+
117
+ post_install_message:
118
+ rdoc_options: []
119
+
120
+ require_paths:
121
+ - lib
122
+ required_ruby_version: !ruby/object:Gem::Requirement
123
+ none: false
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: "0"
128
+ required_rubygems_version: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ">="
132
+ - !ruby/object:Gem::Version
133
+ version: 1.3.6
134
+ requirements: []
135
+
136
+ rubyforge_project: make_flaggable
137
+ rubygems_version: 1.6.2
138
+ signing_key:
139
+ specification_version: 3
140
+ summary: Rails 3 flagging extension
141
+ test_files: []
142
+