diff --git a/product_release/README.markdown b/product_release/README.markdown new file mode 100644 index 0000000..2bbc046 --- /dev/null +++ b/product_release/README.markdown @@ -0,0 +1 @@ +# An example of an EmbeddedDocument diff --git a/product_release/app/model/product.rb b/product_release/app/model/product.rb index 66a7805..c9ba3a1 100644 --- a/product_release/app/model/product.rb +++ b/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 diff --git a/product_release/app/model/release.rb b/product_release/app/model/release.rb index 16e2431..a5d199b 100644 --- a/product_release/app/model/release.rb +++ b/product_release/app/model/release.rb @@ -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 diff --git a/product_release/spec/product_spec.rb b/product_release/spec/product_spec.rb index f0417b0..715f7dc 100644 --- a/product_release/spec/product_spec.rb +++ b/product_release/spec/product_spec.rb @@ -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