Skip to content

Commit

Permalink
enforce reasons when setting
Browse files Browse the repository at this point in the history
  • Loading branch information
courtenay committed Mar 17, 2008
1 parent fd7a749 commit b521f95
Show file tree
Hide file tree
Showing 6 changed files with 36 additions and 22 deletions.
32 changes: 10 additions & 22 deletions generators/can_flag/can_flag_generator.rb
Expand Up @@ -198,33 +198,21 @@ def manifest
puts
puts ("-" * 70)
puts "Don't forget to:"
puts
puts " - modify your code:"
puts
puts " include render :partial => 'layouts/flag', :object => @article "
puts " Activate your user model for flagging"
puts
puts " Activate your user model for flagging abilities"
puts " class User < ActiveRecord::Base "
puts " can_flag "
puts " end"
#if options[:include_activation]
# puts " map.activate '/activate/:activation_code', :controller => '#{model_controller_file_name}', :action => 'activate'"
# puts
# puts " - add an observer to config/environment.rb"
# puts " config.active_record.observers = :#{file_name}_observer"
# puts
#end
#if options[:stateful]
# puts "Also, don't forget to install the acts_as_state_machine plugin and set your resource:"
# puts
# puts " svn co http://elitists.textdriven.com/svn/plugins/acts_as_state_machine/trunk vendor/plugins/acts_as_state_machine"
# puts
# puts %w(map.resources :#{model_controller_file_name}, :member => { :suspend => :put, :unsuspend => :put, :purge => :delete })
# puts
#end
#puts "Try these for some familiar login URLs if you like:"
#puts
#puts %(map.activate '/activate/:activation_code', :controller => '#{model_controller_file_name}', :action => 'activate', :activation_code => nil)
#puts %(map.signup '/signup', :controller => '#{model_controller_file_name}', :action => 'new')
#puts %(map.login '/login', :controller => '#{controller_file_name}', :action => 'new')
#puts %(map.logout '/logout', :controller => '#{controller_file_name}', :action => 'destroy')
puts
puts " Activate your content (article) models for flagging"
puts " class Article < ActiveRecord::Base"
puts " can_be_flagged :reasons => [ :spam, :inappropriate ]"
puts " end"
puts
puts
puts ("-" * 70)
puts
Expand Down
2 changes: 2 additions & 0 deletions generators/can_flag/templates/index.html.erb
Expand Up @@ -8,6 +8,7 @@
<th>Reporter (flags)</th>
<th>Link</th>
<th>Violator</th>
<th>Reason</th>
<th>Actions</th>
</tr>
</thead>
Expand All @@ -18,6 +19,7 @@
<td><%%=h flag.user.login %> (<%%=h flag.user.flags.size %>)</td>
<td><%%= link_to h('%s %i' % [flag.flaggable_type, flag.flaggable_id]), flag.flaggable %></td>
<td><%%= link_to h(flag.owner.login), flag.owner %></td>
<td><%%=h flag.reason %></td>
<td><%%= link_to "Destroy", flag, :method => :delete %></td>
</tr>
<%% end %>
Expand Down
4 changes: 4 additions & 0 deletions generators/can_flag/templates/migration.rb
Expand Up @@ -5,8 +5,12 @@ def self.up
t.integer :flaggable_id
t.string :flaggable_type
t.integer :flaggable_user_id
t.string :reason
t.timestamps
end
# todo: add index on reason
# todo: add index on user_id
# todo: add index on flaggable_user_id
end

def self.down
Expand Down
10 changes: 10 additions & 0 deletions lib/flag.rb
Expand Up @@ -23,9 +23,19 @@ def callback_flaggable
end

before_validation_on_create :set_owner_id
#before_validation_on_create :check_reason

def set_owner_id
self.flaggable_user_id = flaggable.user_id
end

validates_each :reason do |record,attr,value|
record.errors.add(attr, "don't include '#{value}' as an option") if value and !record.flaggable.reasons.include?(value.to_sym)
end
#def check_reason
# errorsraise "Reason Not Accepted" unless flaggable.class.reasons.include?(new_reason.to_sym)
# write_attribute :reason, new_reason
#end

# UNTESTED
# # Helper class method to lookup all flags assigned
Expand Down
9 changes: 9 additions & 0 deletions test/flag_test.rb
Expand Up @@ -24,4 +24,13 @@ def test_sets_flaggable_user_id
flag.save!
assert_equal 1, flag.flaggable_user_id
end

def test_only_allows_valid_reasons
Article.class_eval { can_be_flagged :reasons => [ :foolish ] }
article = Article.create :title => "My article", :body => "Five five five", :user_id => 1
flag = Flag.create :flaggable => article, :reason => "foolish"
assert flag.save!
flag.reason = "Monkeys"
assert ! flag.save
end
end
1 change: 1 addition & 0 deletions test/schema.rb
Expand Up @@ -15,5 +15,6 @@
t.integer :flaggable_id
t.string :flaggable_type
t.integer :flaggable_user_id
t.string :reason
end
end

0 comments on commit b521f95

Please sign in to comment.