Skip to content

Commit

Permalink
Added retrieval by released_at
Browse files Browse the repository at this point in the history
  • Loading branch information
JonKernPA committed Apr 25, 2011
1 parent 2854450 commit cf7e77f
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 3 deletions.
1 change: 1 addition & 0 deletions product_release/README.markdown
@@ -0,0 +1 @@
# An example of an EmbeddedDocument
5 changes: 4 additions & 1 deletion product_release/app/model/product.rb
@@ -1,14 +1,17 @@
class Product
include MongoMapper::Document

key :name, String, :required => true, :unique => true

many :releases

# scope :by_age, lambda { |age| releases.where(:released_at.gt => age.days.ago) }

def to_s
text = name
releases.each_with_index do |r, i|
text += "\n" if i == 0
text += " Version #{r.major}:#{r.minor} on #{r.released_at.localtime.strftime("%d-%b-%Y")}"
text += " Version #{r.major}:#{r.minor} on #{r.released_at.localtime.strftime("%d-%b-%Y")}\n"
end
text
end
Expand Down
2 changes: 1 addition & 1 deletion product_release/app/model/release.rb
Expand Up @@ -4,5 +4,5 @@ class Release
key :minor, String, :default => 0
key :released_at, Time, :default => Time.now

# embedded_in :product
#embedded_in :product
end
19 changes: 18 additions & 1 deletion product_release/spec/product_spec.rb
Expand Up @@ -14,14 +14,31 @@
it "should create product releases" do
expect {
Product.create(:name => "Zapper", :releases =>[
Release.new(:major=>"0", :minor=>"1")]
Release.new(:major=>"0", :minor=>"1", :released_at => 10.days.ago),
Release.new(:major=>"0", :minor=>"2", :released_at => 5.days.ago),
Release.new(:major=>"0", :minor=>"3", :released_at => 4.days.ago)
]
)
}.to change {Product.count}.by(1)
expect {
Product.create(:name => "Bopper", :releases =>[
Release.new(:major=>"1", :minor=>"1", :released_at => 10.days.ago),
Release.new(:major=>"1", :minor=>"2", :released_at => 9.days.ago)
]
)
}.to change {Product.count}.by(1)
end

it "should allow querying by age" do
list = Product.all(:conditions => {"releases.released_at" => {"$gt" => 5.days.ago}})
puts list.inspect
list.should_not be_empty
end

after :all do
products = Product.sort(:name)
products.each {|p| puts p}
products.each {|p| puts p.to_json}
end

end
Expand Down

0 comments on commit cf7e77f

Please sign in to comment.