Guest User

Untitled

a guest
Jun 17th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.63 KB | None | 0 0
  1. #!/usr/bin/env ruby
  2. #
  3. # encoding: utf-8
  4.  
  5. require 'dm-sqlite-adapter'
  6. require 'dm-migrations'
  7. require 'dm-validations'
  8.  
  9. DataMapper.setup :default, "sqlite::memory:"
  10.  
  11. class Group
  12. include DataMapper::Resource
  13.  
  14. property :id, Serial
  15. property :name, String, :length => 10..100
  16.  
  17. has n, :students
  18. end
  19.  
  20. class Student
  21. include DataMapper::Resource
  22.  
  23. property :id, Serial
  24. property :name, String, :required => true
  25.  
  26. belongs_to :group
  27. has n, :scores
  28.  
  29. def _save
  30. result = super
  31.  
  32. unless result
  33. validate if dirty_self?
  34. validate_parents if dirty_parents?
  35. validate_children if dirty_children?
  36. end
  37.  
  38. result
  39. end
  40.  
  41. def validate
  42. valid?
  43. end
  44.  
  45. def validate_parents
  46. parent_relationships.each do |relationship|
  47. parent = relationship.get(self)
  48. unless parent.valid?
  49. errors[relationship.name] = parent.errors
  50. end
  51. end
  52. end
  53.  
  54. def validate_children
  55. child_associations.each do |collection|
  56. if collection.dirty?
  57. collection.each do |child|
  58. unless child.valid?
  59. (errors[collection.relationship.name] ||= []) << child.errors
  60. end
  61. end
  62. end
  63. end
  64. end
  65. end
  66.  
  67. class Score
  68. include DataMapper::Resource
  69.  
  70. property :id, Serial
  71. property :result, String, :length => 1..2
  72.  
  73. belongs_to :student
  74. end
  75.  
  76. DataMapper.finalize
  77. DataMapper.auto_migrate!
  78.  
  79. group = Group.new :name => 'foo'
  80. student = Student.new :group => group
  81. student.scores.new :result => 'A'
  82. student.scores.new :result => ''
  83.  
  84. student.save
  85.  
  86. puts student.errors.inspect
  87.  
  88. puts "*"*80
  89.  
  90. puts student.errors[:group].inspect
  91.  
  92. puts "*"*80
  93.  
  94. puts student.errors[:scores].inspect
Add Comment
Please, Sign In to add comment