Skip to content

Commit

Permalink
Merge options with default options at the beginning
Browse files Browse the repository at this point in the history
This allows to pass nil as an option value for :dependent option.
  • Loading branch information
luvtechno committed Oct 21, 2012
1 parent 5387187 commit 6fee85e
Showing 1 changed file with 19 additions and 11 deletions.
30 changes: 19 additions & 11 deletions lib/acts-as-messageable/model.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,25 +14,33 @@ module ClassMethods
# @param [Array, Symbol] :required - required fields in message
# @param [Symbol] :dependent - dependent option from ActiveRecord has_many method
def acts_as_messageable(options = {})
has_many :received_messages_relation,
:as => :received_messageable,
:class_name => options[:class_name] || "ActsAsMessageable::Message",
:dependent => options[:dependent] || :nullify
has_many :sent_messages_relation,
default_options = {
:table_name => "messages",
:class_name => "ActsAsMessageable::Message",
:required => [:topic, :body],
:dependent => :nullify,
}
options = default_options.merge(options)

has_many :received_messages_relation,
:as => :received_messageable,
:class_name => options[:class_name],
:dependent => options[:dependent]
has_many :sent_messages_relation,
:as => :sent_messageable,
:class_name => options[:class_name] || "ActsAsMessageable::Message",
:dependent => options[:dependent] || :nullify
:class_name => options[:class_name],
:dependent => options[:dependent]

self.messages_class_name = (options[:class_name] || "ActsAsMessageable::Message").constantize
self.messages_class_name = options[:class_name].constantize

if self.messages_class_name.respond_to?(:table_name=)
self.messages_class_name.table_name = (options[:table_name] || "messages")
self.messages_class_name.table_name = options[:table_name]
else
self.messages_class_name.set_table_name(options[:table_name] || "messages")
self.messages_class_name.set_table_name(options[:table_name])
ActiveSupport::Deprecation.warn("Calling set_table_name is deprecated. Please use `self.table_name = 'the_name'` instead.")
end

self.messages_class_name.required = Array.wrap(options[:required] || [:topic, :body])
self.messages_class_name.required = Array.wrap(options[:required])
self.messages_class_name.validates_presence_of self.messages_class_name.required

include ActsAsMessageable::Model::InstanceMethods
Expand Down

0 comments on commit 6fee85e

Please sign in to comment.