Skip to content

Commit

Permalink
Updated simple find_by test to something that makes more sense.
Browse files Browse the repository at this point in the history
Removed the find_by creation from embedded document. Embedded
documents shouldn't have find_by methods.
  • Loading branch information
jnunemaker committed Aug 10, 2009
1 parent 2a1af49 commit 6084114
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 37 deletions.
4 changes: 2 additions & 2 deletions lib/mongomapper/document.rb
Expand Up @@ -153,7 +153,7 @@ def validates_exclusion_of(*args)
def validates_inclusion_of(*args)
add_validations(args, MongoMapper::Validations::ValidatesInclusionOf)
end

protected
def method_missing(meth, *args)
finder = DynamicFinder.new(self, meth)
Expand All @@ -169,7 +169,7 @@ class << self; self end.instance_eval do
end
end

private
private
def find_every(options)
criteria, options = FinderOptions.new(options).to_a
collection.find(criteria, options).to_a.map { |doc| new(doc) }
Expand Down
48 changes: 18 additions & 30 deletions lib/mongomapper/embedded_document.rb
Expand Up @@ -44,43 +44,13 @@ def key(name, type, options={})
keys[key.name] = key

create_accessors_for(key)
create_find_by_methods(key)
add_to_subclasses(name, type, options)
apply_validations_for(key)
create_indexes_for(key)

key
end

def create_accessors_for(key)
define_method(key.name) do
read_attribute(key.name)
end

define_method("#{key.name}_before_typecast") do
read_attribute_before_typecast(key.name)
end

define_method("#{key.name}=") do |value|
write_attribute(key.name, value)
end

define_method("#{key.name}?") do
read_attribute(key.name).present?
end
end

def create_find_by_methods(key)
return if embeddable? || key.name.to_s == "_id"

class << self; self; end.instance_eval do
define_method("find_by_#{key.name}") do |*args|
options = args.extract_options!
find(:first, options.deep_merge({:conditions => {key.name => args.first}}))
end
end
end

def add_to_subclasses(name, type, options)
return if subclasses.blank?

Expand Down Expand Up @@ -110,6 +80,24 @@ def parent_model
end

private
def create_accessors_for(key)
define_method(key.name) do
read_attribute(key.name)
end

define_method("#{key.name}_before_typecast") do
read_attribute_before_typecast(key.name)
end

define_method("#{key.name}=") do |value|
write_attribute(key.name, value)
end

define_method("#{key.name}?") do
read_attribute(key.name).present?
end
end

def create_indexes_for(key)
ensure_index key.name if key.options[:index]
end
Expand Down
8 changes: 3 additions & 5 deletions test/functional/test_document.rb
Expand Up @@ -321,11 +321,9 @@ def setup

context "with :find_by" do
should "find document based on argument" do
users = []
users << @document.find_by_first_name('John')
users << @document.find_by_first_name('Nunemaker')
users << @document.find_by_first_name('27')
users.uniq.first.should == @doc1
@document.find_by_first_name('John').should == @doc1
@document.find_by_last_name('Nunemaker').should == @doc1
@document.find_by_age(27).should == @doc1
end

should "not raise error" do
Expand Down

0 comments on commit 6084114

Please sign in to comment.