-
Type:
Task
-
Resolution: Done
-
Affects Version/s: None
-
Component/s: None
-
None
-
None
-
None
-
None
-
None
-
None
-
None
-
None
I have tests that are now failing when using after_find callbacks in 4.0.0.beta1 (which were passing in 4.0.0.alpha1). Not sure exactly why but I have a Mongoid BaseEvent
Model with the following callback:
after_find :unpublish_if_expired
def unpublish_if_expired
if persisted? && publish && end_date_time
if end_date_time.to_date < (Date.today + 1.day)
self.set(publish: false, expired: true)
end
end
end
The test stack trace is below:
mongo seed data IMPORTED
ERROR (0:00:14.406) test_0002_upon publish for a weekly recurring event recurring events are created
Missing attribute: 'publish'.
@ /Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta1/lib/mongoid/attributes.rb:95:in `read_attribute'
/Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta1/lib/mongoid/fields.rb:409:in `block (2 levels) in create_field_getter'
app/models/base_event.rb:131:in `unpublish_if_expired'
/Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/activesupport-4.0.2/lib/active_support/callbacks.rb:375:in `run*2708368292953340410*find_callbacks'
/Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/activesupport-4.0.2/lib/active_support/callbacks.rb:80:in `run_callbacks'
/Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta1/lib/mongoid/interceptable.rb:138:in `run_callbacks'
/Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta1/lib/mongoid/document.rb:316:in `instantiate'
/Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta1/lib/mongoid/factory.rb:44:in `from_db'
/Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta1/lib/mongoid/contextual/mongo.rb:647:in `yield_document'
/Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta1/lib/mongoid/contextual/mongo.rb:123:in `block in each'
/Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/moped-2.0.0.beta6/lib/moped/cursor.rb:28:in `block in each'
/Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/moped-2.0.0.beta6/lib/moped/cursor.rb:28:in `each'
/Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/moped-2.0.0.beta6/lib/moped/cursor.rb:28:in `each'
/Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/moped-2.0.0.beta6/lib/moped/query.rb:77:in `each'
/Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta1/lib/mongoid/contextual/mongo.rb:122:in `each'
/Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta1/lib/mongoid/contextual.rb:20:in `each'
app/models/concerns/geotaggable.rb:131:in `to_a'
app/models/concerns/geotaggable.rb:131:in `block in geosearch'
app/models/concerns/geotaggable.rb:124:in `each'
app/models/concerns/geotaggable.rb:124:in `geosearch'
app/models/concerns/geotaggable.rb:98:in `set_destination'
app/models/base_event.rb:67:in `update_destination'
/Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/activesupport-4.0.2/lib/active_support/callbacks.rb:397:in `run*2708368292953340410*save_callbacks'
/Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/activesupport-4.0.2/lib/active_support/callbacks.rb:80:in `run_callbacks'
/Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta1/lib/mongoid/interceptable.rb:138:in `run_callbacks'
/Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta1/lib/mongoid/persistable/creatable.rb:115:in `prepare_insert'
/Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta1/lib/mongoid/persistable/creatable.rb:23:in `insert'
/Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta1/lib/mongoid/persistable/savable.rb:23:in `save'
/Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta1/lib/mongoid/relations/many.rb:47:in `create'
test/models/event_test.rb:114:in `block in <class:EventTest>'
Debug Output!
From: /Users/w2ddev/Development/what2do.asia/app/models/base_event.rb @ line 131 BaseEvent#unpublish_if_expired:
130: def unpublish_if_expired
=> 131: binding.pry
132: if persisted? && publish && end_date_time
133: if end_date_time.to_date < (Date.today + 1.day)
134: self.set(publish: false, expired: true)
135: end
136: end
137: end
[1] pry(#<BaseEvent>)> self
=> #<BaseEvent _id: 52ef24d464626b74603a0000, c_at(created_at): nil, u_at(updated_at): nil, geo: nil, zoom: nil, box: nil, poly: nil, visits_data: nil, impressions_data: nil, listing_id: nil, event_category_id: nil, country_id: nil, region_id: nil, area_id: nil, mail_shares_count: nil, fb_shares_count: nil, start_date_time: nil, end_date_time: nil, weekly_recurring: nil, recurring_freq: nil, event_slug: nil, expired: nil, _slugs: nil, _keywords: nil, _type: "BaseEvent", name: nil, description: nil, ticket_uri: nil, publish: nil>
[2] pry(#<BaseEvent>)> self.reload
From: /Users/w2ddev/Development/what2do.asia/app/models/base_event.rb @ line 131 BaseEvent#unpublish_if_expired:
130: def unpublish_if_expired
=> 131: binding.pry
132: if persisted? && publish && end_date_time
133: if end_date_time.to_date < (Date.today + 1.day)
134: self.set(publish: false, expired: true)
135: end
136: end
137: end
[1] pry(#<BaseEvent>)> self
=> #<BaseEvent _id: 52ef24d464626b74603a0000, c_at(created_at): 2014-02-03 05:10:45 UTC, u_at(updated_at): 2014-02-03 05:10:45 UTC, geo: [115.172933, -8.711895], zoom: 4, box: [[92.03090948491251, -29.76855487958732], [149.1598157349125, 21.038999620781567]], poly: [], visits_data: {}, impressions_data: {}, listing_id: BSON::ObjectId('52ef24cc64626b7460070000'), event_category_id: BSON::ObjectId('521d330369b27dacc4000003'), country_id: BSON::ObjectId('50139c3a9a4b7ce00100016d'), region_id: BSON::ObjectId('50139c3a9a4b7ce00100016e'), area_id: BSON::ObjectId('50139c3a9a4b7ce001000171'), mail_shares_count: 0, fb_shares_count: 0, start_date_time: 2014-03-17 21:00:00 UTC, end_date_time: 2014-03-17 22:00:00 UTC, weekly_recurring: false, recurring_freq: 7, event_slug:
, expired: false, _slugs:
{"en"=>["admin-listing-pte-bingo-night-17-3-14"]}, _keywords: ["admin", "amal", "bingo", "charity", "listing", "night", "pte"], _type: "BaseEvent", name:
{"en"=>"Bingo Night", "id"=>"Bingo Night"}, description:
{"en"=>"A wonderful night of bingo under the stars"}, ticket_uri: nil, publish: false>
[2] pry(#<BaseEve
Above is debugger output from my tests - It would appear that the after find callback is not loading any model attributes or being triggered before attributes are loaded. I checked the change log and don't see any reason in terms of changes why this fails, is there something I am missing here or is this a possible bug?
If you need more info let me know, not sure whether this has any relevance but this is an STI Model.