Guest User

Untitled

a guest
Jul 23rd, 2018
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.54 KB | None | 0 0
  1. #!/usr/bin/ruby
  2.  
  3. require 'rubygems'
  4. require 'data_objects' # current master @ ed1ceefc
  5. require 'dm-core' # current master @ 73860575
  6. require 'dm-migrations' # current master @ ab608e81
  7.  
  8. class Order
  9. include ::DataMapper::Resource
  10.  
  11. property :id, Serial
  12.  
  13. has 0..n, :order_items
  14. end
  15.  
  16. class OrderItem
  17. include ::DataMapper::Resource
  18.  
  19. property :id, Serial
  20. property :queues, String, :default => '', :lazy => true
  21.  
  22. belongs_to :order
  23.  
  24. before :save do
  25. if $LAZY_LOAD
  26. warn "materializing lazy_loaded property"
  27. self.queues
  28. end
  29. end
  30. end
  31.  
  32. ::DataMapper.setup(:default, 'mysql://127.0.0.1/test')
  33.  
  34. $LAZY_LOAD = false
  35.  
  36. 2.times do |i|
  37. ::DataMapper.auto_migrate!
  38.  
  39. warn "\n--- pass #{i} (lazy load property in save hook == #{$LAZY_LOAD})\n"
  40.  
  41. order = Order.create
  42. order_item = OrderItem.create(:queues => 'balls', :order => order)
  43. new_order = Order.create
  44.  
  45. order.order_items.all.each do |item|
  46.  
  47. warn "item #{item.id} has order #{item.order.id}, updating with new_order #{new_order.id}"
  48. item.update(:order => new_order)
  49.  
  50. if item.order.id == new_order.id
  51. warn "EXPECTED: item #{item.id} now has order #{item.order.id}"
  52. else
  53. # NOTE: item.dirty? == false, and it's still the wrong value after item.reload.
  54. warn "NOT EXPECTED: item #{item.id} now has order #{item.order.id} (wanted order #{new_order.id})"
  55. end
  56. end
  57.  
  58. # Second time through, materialize the lazy-loaded property.
  59. $LAZY_LOAD = true
  60. end
Add Comment
Please, Sign In to add comment