activefacts-examples 1.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (262) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.rspec +1 -0
  4. data/.travis.yml +4 -0
  5. data/Gemfile +10 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +22 -0
  8. data/Rakefile +6 -0
  9. data/activefacts-examples.gemspec +26 -0
  10. data/cql/Address.cql +44 -0
  11. data/cql/Astronomy.cql +35 -0
  12. data/cql/Blog.cql +54 -0
  13. data/cql/CinemaBookings.cql +64 -0
  14. data/cql/CinemaTickets.cql +127 -0
  15. data/cql/CompanyDirectorEmployee.cql +56 -0
  16. data/cql/Death.cql +17 -0
  17. data/cql/Diplomacy.cql +48 -0
  18. data/cql/Genealogy.cql +98 -0
  19. data/cql/Health.cql +78 -0
  20. data/cql/Insurance.cql +320 -0
  21. data/cql/Marriage.cql +18 -0
  22. data/cql/Metamodel.cql +567 -0
  23. data/cql/Monogamy.cql +24 -0
  24. data/cql/MultiInheritance.cql +22 -0
  25. data/cql/MultipleSubtyping.cql +30 -0
  26. data/cql/NonRoleId.cql +14 -0
  27. data/cql/OddIdentifier.cql +18 -0
  28. data/cql/OilSupply.cql +53 -0
  29. data/cql/OneRoleNesting.cql +38 -0
  30. data/cql/OneToOnes.cql +17 -0
  31. data/cql/Orienteering.cql +111 -0
  32. data/cql/PartyModel.cql +38 -0
  33. data/cql/PersonPlaysGame.cql +18 -0
  34. data/cql/RedundantDependency.cql +34 -0
  35. data/cql/SchoolActivities.cql +33 -0
  36. data/cql/SeparateSubtype.cql +30 -0
  37. data/cql/ServiceDirector.cql +276 -0
  38. data/cql/SimplestUnary.cql +12 -0
  39. data/cql/Supervision.cql +34 -0
  40. data/cql/VenueSeating.cql +45 -0
  41. data/cql/WaiterTips.cql +33 -0
  42. data/cql/Warehousing.cql +101 -0
  43. data/cql/WindowInRoomInBldg.cql +28 -0
  44. data/cql/unit.cql +474 -0
  45. data/diagrams/json/Address.json +41 -0
  46. data/diagrams/json/Astronomy.json +31 -0
  47. data/diagrams/json/Blog.json +46 -0
  48. data/diagrams/json/CinemaBookings.json +53 -0
  49. data/diagrams/json/CinemaTickets.json +101 -0
  50. data/diagrams/json/CompanyDirectorEmployee.json +44 -0
  51. data/diagrams/json/Death.json +20 -0
  52. data/diagrams/json/Diplomacy.json +34 -0
  53. data/diagrams/json/Genealogy.json +78 -0
  54. data/diagrams/json/Insurance.json +259 -0
  55. data/diagrams/json/Marriage.json +21 -0
  56. data/diagrams/json/Metamodel.json +318 -0
  57. data/diagrams/json/Monogamy.json +22 -0
  58. data/diagrams/json/MultiInheritance.json +25 -0
  59. data/diagrams/json/MultipleSubtyping.json +22 -0
  60. data/diagrams/json/OilSupply.json +49 -0
  61. data/diagrams/json/OneRoleNesting.json +37 -0
  62. data/diagrams/json/Orienteering.json +94 -0
  63. data/diagrams/json/PersonPlaysGame.json +22 -0
  64. data/diagrams/json/RedundantDependency.json +33 -0
  65. data/diagrams/json/SchoolActivities.json +28 -0
  66. data/diagrams/json/SeparateSubtype.json +29 -0
  67. data/diagrams/json/SimplestUnary.json +15 -0
  68. data/diagrams/json/Supervision.json +27 -0
  69. data/diagrams/json/VenueSeating.json +40 -0
  70. data/diagrams/json/WaiterTips.json +29 -0
  71. data/diagrams/json/Warehousing.json +86 -0
  72. data/diagrams/json/WindowInRoomInBldg.json +31 -0
  73. data/images/Address.SQL.png +0 -0
  74. data/images/Address.png +0 -0
  75. data/images/Blog.png +0 -0
  76. data/images/CinemaBookings.png +0 -0
  77. data/images/CinemaTickets.png +0 -0
  78. data/images/CompanyDirectorEmployee.png +0 -0
  79. data/images/Death.png +0 -0
  80. data/images/Diplomacy.png +0 -0
  81. data/images/DumpMetamodel.bat +2 -0
  82. data/images/Genealogy.png +0 -0
  83. data/images/Insurance/Claim.png +0 -0
  84. data/images/Insurance/Insurance.png +0 -0
  85. data/images/Insurance/Person.png +0 -0
  86. data/images/Insurance/Policy.png +0 -0
  87. data/images/Insurance/Related.png +0 -0
  88. data/images/Insurance/VehicleIncident.png +0 -0
  89. data/images/Marriage.png +0 -0
  90. data/images/Metamodel/Concepts.png +0 -0
  91. data/images/Metamodel/Constraints.png +0 -0
  92. data/images/Metamodel/ContextNote.png +0 -0
  93. data/images/Metamodel/Diagrams.png +0 -0
  94. data/images/Metamodel/Language.png +0 -0
  95. data/images/Metamodel/Legacy.png +0 -0
  96. data/images/Metamodel/Objects.png +0 -0
  97. data/images/Metamodel/Populations.png +0 -0
  98. data/images/Metamodel/Query.png +0 -0
  99. data/images/Metamodel/Units.png +0 -0
  100. data/images/Metamodel/ValueConstraints.png +0 -0
  101. data/images/Metamodel/ValueTypes.png +0 -0
  102. data/images/MetamodelER.bcp +1 -0
  103. data/images/MetamodelER.pdf +0 -0
  104. data/images/MultiInheritance.png +0 -0
  105. data/images/NorthwindER.png +0 -0
  106. data/images/OilSupply.png +0 -0
  107. data/images/Orienteering/Administration.png +0 -0
  108. data/images/Orienteering/Registration.png +0 -0
  109. data/images/Orienteering/Scoring.png +0 -0
  110. data/images/PersonPlaysGame.png +0 -0
  111. data/images/RedundantDependency.png +0 -0
  112. data/images/SchoolActivities.png +0 -0
  113. data/images/SeparateSubtype.png +0 -0
  114. data/images/SimplestUnary.png +0 -0
  115. data/images/Supervision.png +0 -0
  116. data/images/VenueSeating.png +0 -0
  117. data/images/WaiterTips.png +0 -0
  118. data/images/Warehousing.png +0 -0
  119. data/images/WindowInRoomInBldg.png +0 -0
  120. data/metadata/json/Astronomy.json +175 -0
  121. data/metadata/json/CinemaBookings.json +354 -0
  122. data/metadata/json/CinemaTickets.json +768 -0
  123. data/metadata/json/CompanyDirectorEmployee.json +270 -0
  124. data/metadata/json/Diplomacy.json +186 -0
  125. data/metadata/json/Metamodel.json +3214 -0
  126. data/metadata/json/OilSupply.json +411 -0
  127. data/metadata/json/SeparateSubtype.json +157 -0
  128. data/metadata/json/Supervision.json +128 -0
  129. data/metadata/json/VenueSeating.json +209 -0
  130. data/orm/.gitignore +11 -0
  131. data/orm/Address.orm +1268 -0
  132. data/orm/Astronomy.orm +925 -0
  133. data/orm/Blog.orm +1711 -0
  134. data/orm/CinemaBookings.orm +1998 -0
  135. data/orm/CinemaTickets.orm +5060 -0
  136. data/orm/CompanyDirectorEmployee.orm +2094 -0
  137. data/orm/Death.orm +386 -0
  138. data/orm/Diplomacy.orm +1478 -0
  139. data/orm/ExampleModels2010.csproj +764 -0
  140. data/orm/ExampleModels2010.sln +16 -0
  141. data/orm/Genealogy.orm +3209 -0
  142. data/orm/Health.orm +2407 -0
  143. data/orm/Insurance.orm +12727 -0
  144. data/orm/Marriage.orm +493 -0
  145. data/orm/Metamodel.orm +20998 -0
  146. data/orm/Monogamy.orm +328 -0
  147. data/orm/MultiInheritance.orm +537 -0
  148. data/orm/MultipleSubtyping.orm +347 -0
  149. data/orm/OilSupply.orm +2533 -0
  150. data/orm/OneRoleNesting.orm +1237 -0
  151. data/orm/Orienteering.orm +3976 -0
  152. data/orm/PersonPlaysGame.orm +426 -0
  153. data/orm/RedundantDependency.orm +844 -0
  154. data/orm/SchoolActivities.orm +961 -0
  155. data/orm/SeparateSubtype.orm +821 -0
  156. data/orm/SimplestUnary.orm +172 -0
  157. data/orm/Supervision.orm +734 -0
  158. data/orm/VenueSeating.orm +1289 -0
  159. data/orm/WaiterTips.orm +789 -0
  160. data/orm/Warehousing.orm +3792 -0
  161. data/orm/WindowInRoomInBldg.orm +772 -0
  162. data/rails/models/Astronomy.models +17 -0
  163. data/rails/models/CinemaBookings.models +123 -0
  164. data/rails/models/CinemaTickets.models +192 -0
  165. data/rails/models/Diplomacy.models +126 -0
  166. data/rails/models/Metamodel.models +894 -0
  167. data/rails/models/OneRoleNesting.models +18 -0
  168. data/rails/models/SeparateSubtype.models +49 -0
  169. data/rails/models/VenueSeating.models +70 -0
  170. data/rails/schema/Astronomy.schema.rb +25 -0
  171. data/rails/schema/CinemaBookings.schema.rb +78 -0
  172. data/rails/schema/CinemaTickets.schema.rb +132 -0
  173. data/rails/schema/Diplomacy.schema.rb +74 -0
  174. data/rails/schema/Metamodel.schema.rb +538 -0
  175. data/rails/schema/OneRoleNesting.rb +20 -0
  176. data/rails/schema/SeparateSubtype.schema.rb +35 -0
  177. data/rails/schema/VenueSeating.schema.rb +46 -0
  178. data/rails/schema/Warehousing.schema.rb +145 -0
  179. data/ruby/Address.rb +68 -0
  180. data/ruby/Astronomy.rb +55 -0
  181. data/ruby/Blog.rb +84 -0
  182. data/ruby/CinemaBookings.rb +109 -0
  183. data/ruby/CinemaTickets.rb +218 -0
  184. data/ruby/CompanyDirectorEmployee.rb +73 -0
  185. data/ruby/Death.rb +26 -0
  186. data/ruby/Diplomacy.rb +59 -0
  187. data/ruby/Genealogy.rb +173 -0
  188. data/ruby/Insurance.rb +562 -0
  189. data/ruby/Marriage.rb +21 -0
  190. data/ruby/Metamodel.rb +621 -0
  191. data/ruby/Monogamy.rb +27 -0
  192. data/ruby/MultiInheritance.rb +38 -0
  193. data/ruby/OilSupply.rb +112 -0
  194. data/ruby/OneRoleNesting.rb +66 -0
  195. data/ruby/Orienteering.rb +216 -0
  196. data/ruby/PersonPlaysGame.rb +31 -0
  197. data/ruby/RedundantDependency.rb +53 -0
  198. data/ruby/SchoolActivities.rb +49 -0
  199. data/ruby/SeparateSubtype.rb +46 -0
  200. data/ruby/SimplestUnary.rb +10 -0
  201. data/ruby/Supervision.rb +33 -0
  202. data/ruby/TwoValues.rb +14 -0
  203. data/ruby/VenueSeating.rb +64 -0
  204. data/ruby/WaiterTips.rb +49 -0
  205. data/ruby/Warehousing.rb +167 -0
  206. data/ruby/WindowInRoomInBldg.rb +45 -0
  207. data/sql/server/Address.sql +40 -0
  208. data/sql/server/Astronomy.sql +36 -0
  209. data/sql/server/Blog.sql +78 -0
  210. data/sql/server/CinemaBookings.sql +95 -0
  211. data/sql/server/CinemaTickets.sql +191 -0
  212. data/sql/server/CompanyDirectorEmployee.sql +104 -0
  213. data/sql/server/Death.sql +11 -0
  214. data/sql/server/Diplomacy.sql +66 -0
  215. data/sql/server/Genealogy.sql +138 -0
  216. data/sql/server/Health.sql +169 -0
  217. data/sql/server/Insurance.sql +484 -0
  218. data/sql/server/Marriage.sql +30 -0
  219. data/sql/server/Metamodel.sql +1000 -0
  220. data/sql/server/Monogamy.sql +20 -0
  221. data/sql/server/MultiInheritance.sql +27 -0
  222. data/sql/server/OilSupply.sql +105 -0
  223. data/sql/server/OneRoleNesting.sql +29 -0
  224. data/sql/server/Orienteering.sql +186 -0
  225. data/sql/server/PersonPlaysGame.sql +9 -0
  226. data/sql/server/RedundantDependency.sql +54 -0
  227. data/sql/server/SchoolActivities.sql +30 -0
  228. data/sql/server/SeparateSubtype.sql +33 -0
  229. data/sql/server/SimplestUnary.sql +9 -0
  230. data/sql/server/Supervision.sql +30 -0
  231. data/sql/server/VenueSeating.sql +54 -0
  232. data/sql/server/WaiterTips.sql +31 -0
  233. data/sql/server/Warehousing.sql +203 -0
  234. data/sql/server/WindowInRoomInBldg.sql +13 -0
  235. data/transform/surrogate/Address.absorption +2 -0
  236. data/transform/surrogate/Blog.absorption +5 -0
  237. data/transform/surrogate/CinemaBookings.absorption +7 -0
  238. data/transform/surrogate/CompanyDirectorEmployee.absorption +7 -0
  239. data/transform/surrogate/Death.absorption +1 -0
  240. data/transform/surrogate/Diplomacy-revised.absorption +6 -0
  241. data/transform/surrogate/Diplomacy.absorption +6 -0
  242. data/transform/surrogate/Genealogy.absorption +8 -0
  243. data/transform/surrogate/Insurance.absorption +18 -0
  244. data/transform/surrogate/Marriage.absorption +2 -0
  245. data/transform/surrogate/Metamodel.absorption +25 -0
  246. data/transform/surrogate/Monogamy.absorption +1 -0
  247. data/transform/surrogate/MultiInheritance.absorption +1 -0
  248. data/transform/surrogate/MultipleSubtyping.absorption +1 -0
  249. data/transform/surrogate/OilSupply.absorption +8 -0
  250. data/transform/surrogate/OneRoleNesting.absorption +1 -0
  251. data/transform/surrogate/Orienteering.absorption +11 -0
  252. data/transform/surrogate/PersonPlaysGame.absorption +1 -0
  253. data/transform/surrogate/RedundantDependency.absorption +3 -0
  254. data/transform/surrogate/SchoolActivities.absorption +3 -0
  255. data/transform/surrogate/SeparateSubtype.absorption +3 -0
  256. data/transform/surrogate/SimplestUnary.absorption +1 -0
  257. data/transform/surrogate/Supervision.absorption +2 -0
  258. data/transform/surrogate/WaiterTips.absorption +3 -0
  259. data/transform/surrogate/Warehousing.absorption +12 -0
  260. data/transform/surrogate/WindowInRoomInBldg.absorption +1 -0
  261. data/transform/surrogate/unit.absorption +0 -0
  262. metadata +374 -0
@@ -0,0 +1,17 @@
1
+
2
+ module Concernz
3
+ module AstronomicalObject
4
+ extend ActiveSupport::Concern
5
+ included do
6
+ self.primary_key = 'astronomical_object_id'
7
+
8
+ # AstronomicalObject is involved in Orbit and Orbit is around AstronomicalObject
9
+ belongs_to :center_via_orbit, :class_name => 'AstronomicalObject', :foreign_key => :orbit_center_astronomical_object_id
10
+
11
+ # Orbit is around AstronomicalObject and Orbit involves AstronomicalObject
12
+ has_many :astronomical_objects_via_orbit, :class_name => 'AstronomicalObject', :foreign_key => :orbit_center_astronomical_object_id, :dependent => :destroy
13
+
14
+ validates :astronomical_object_code, :presence => true
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,123 @@
1
+
2
+ module Concernz
3
+ module Booking
4
+ extend ActiveSupport::Concern
5
+ included do
6
+ self.primary_key = 'booking_id'
7
+
8
+ # Booking involves Person
9
+ belongs_to :person, :foreign_key => :person_id
10
+
11
+ # Booking involves Session
12
+ belongs_to :session, :foreign_key => :session_id
13
+
14
+ # Booking is involved in Seat Allocation
15
+ has_many :seat_allocations, :class_name => 'SeatAllocation', :foreign_key => :booking_id, :dependent => :destroy
16
+ has_many :seats, :through => :seat_allocations
17
+
18
+ validates :number, :presence => true
19
+ validates :person_id, :presence => true
20
+ validates :session_id, :presence => true
21
+ end
22
+ end
23
+ end
24
+
25
+ module Concernz
26
+ module Cinema
27
+ extend ActiveSupport::Concern
28
+ included do
29
+ self.primary_key = 'cinema_id'
30
+
31
+ # Cinema contains Row and Row contains Seat
32
+ has_many :seats_via_row, :class_name => 'Seat', :foreign_key => :row_cinema_id, :dependent => :destroy
33
+ has_many :row_nrs, :through => :seats_via_row
34
+
35
+ # Cinema is involved in Session
36
+ has_many :sessions, :class_name => 'Session', :foreign_key => :cinema_id, :dependent => :destroy
37
+ end
38
+ end
39
+ end
40
+
41
+ module Concernz
42
+ module Film
43
+ extend ActiveSupport::Concern
44
+ included do
45
+ self.primary_key = 'film_id'
46
+
47
+ # Film is involved in Session
48
+ has_many :sessions, :class_name => 'Session', :foreign_key => :film_id, :dependent => :destroy
49
+ end
50
+ end
51
+ end
52
+
53
+ module Concernz
54
+ module Person
55
+ extend ActiveSupport::Concern
56
+ included do
57
+ self.primary_key = 'person_id'
58
+
59
+ # Person is involved in Booking
60
+ has_many :bookings, :class_name => 'Booking', :foreign_key => :person_id, :dependent => :destroy
61
+
62
+ validates :login_name, :presence => true
63
+ end
64
+ end
65
+ end
66
+
67
+ module Concernz
68
+ module Seat
69
+ extend ActiveSupport::Concern
70
+ included do
71
+ self.primary_key = 'seat_id'
72
+
73
+ # Seat is in Row and Row is in Cinema
74
+ belongs_to :cinema_via_row, :class_name => 'Cinema', :foreign_key => :row_cinema_id
75
+
76
+ # Seat is involved in Seat Allocation
77
+ has_many :seat_allocations, :class_name => 'SeatAllocation', :foreign_key => :allocated_seat_id, :dependent => :destroy
78
+ has_many :bookings, :through => :seat_allocations
79
+
80
+ validates :row_cinema_id, :presence => true
81
+ validates :row_nr, :presence => true
82
+ validates :seat_number, :presence => true
83
+ end
84
+ end
85
+ end
86
+
87
+ module Concernz
88
+ module SeatAllocation
89
+ extend ActiveSupport::Concern
90
+ included do
91
+ # Seat Allocation involves Booking
92
+ belongs_to :booking, :foreign_key => :booking_id
93
+
94
+ # Seat Allocation involves Seat
95
+ belongs_to :allocated_seat, :class_name => 'Seat', :foreign_key => :allocated_seat_id
96
+
97
+ validates :booking_id, :presence => true
98
+ validates :allocated_seat_id, :presence => true
99
+ end
100
+ end
101
+ end
102
+
103
+ module Concernz
104
+ module Session
105
+ extend ActiveSupport::Concern
106
+ included do
107
+ self.primary_key = 'session_id'
108
+
109
+ # Session involves Cinema
110
+ belongs_to :cinema, :foreign_key => :cinema_id
111
+
112
+ # Session involves Film
113
+ belongs_to :film, :foreign_key => :film_id
114
+
115
+ # Session is involved in Booking
116
+ has_many :bookings, :class_name => 'Booking', :foreign_key => :session_id, :dependent => :destroy
117
+
118
+ validates :cinema_id, :presence => true
119
+ validates :date_time_value, :presence => true
120
+ validates :film_id, :presence => true
121
+ end
122
+ end
123
+ end
@@ -0,0 +1,192 @@
1
+
2
+ module Concernz
3
+ module AllocatableCinemaSection
4
+ extend ActiveSupport::Concern
5
+ included do
6
+ self.primary_key = 'allocatable_cinema_section_id'
7
+
8
+ # AllocatableCinemaSection involves Cinema
9
+ belongs_to :cinema, :foreign_key => :cinema_id
10
+
11
+ validates :cinema_id, :presence => true
12
+ validates :section_name, :presence => true
13
+ end
14
+ end
15
+ end
16
+
17
+ module Concernz
18
+ module Booking
19
+ extend ActiveSupport::Concern
20
+ included do
21
+ self.primary_key = 'booking_id'
22
+
23
+ # Booking involves Person
24
+ belongs_to :person, :foreign_key => :person_id
25
+
26
+ # Booking involves Session
27
+ belongs_to :session, :foreign_key => :session_id
28
+
29
+ # Booking is involved in Places Paid
30
+ has_many :places_paids, :class_name => 'PlacesPaid', :foreign_key => :booking_id, :dependent => :destroy
31
+
32
+ # Booking is involved in Seat Allocation
33
+ has_many :seat_allocations, :class_name => 'SeatAllocation', :foreign_key => :booking_id, :dependent => :destroy
34
+ has_many :seats, :through => :seat_allocations
35
+
36
+ validates :booking_nr, :presence => true
37
+ validates :number, :presence => true
38
+ validates :person_id, :presence => true
39
+ validates :session_id, :presence => true
40
+ end
41
+ end
42
+ end
43
+
44
+ module Concernz
45
+ module Cinema
46
+ extend ActiveSupport::Concern
47
+ included do
48
+ self.primary_key = 'cinema_id'
49
+
50
+ # Cinema is involved in AllocatableCinemaSection
51
+ has_many :allocatable_cinema_sections, :class_name => 'AllocatableCinemaSection', :foreign_key => :cinema_id, :dependent => :destroy
52
+
53
+ # Cinema contains Row and Row contains Seat
54
+ has_many :seats_via_row, :class_name => 'Seat', :foreign_key => :row_cinema_id, :dependent => :destroy
55
+ has_many :row_nrs, :through => :seats_via_row
56
+
57
+ # Cinema is involved in Session
58
+ has_many :sessions, :class_name => 'Session', :foreign_key => :cinema_id, :dependent => :destroy
59
+
60
+ # Cinema is involved in Ticket Pricing
61
+ has_many :ticket_pricings, :class_name => 'TicketPricing', :foreign_key => :cinema_id, :dependent => :destroy
62
+
63
+ validates :name, :presence => true
64
+ end
65
+ end
66
+ end
67
+
68
+ module Concernz
69
+ module Film
70
+ extend ActiveSupport::Concern
71
+ included do
72
+ self.primary_key = 'film_id'
73
+
74
+ # Film is involved in Session
75
+ has_many :sessions, :class_name => 'Session', :foreign_key => :film_id, :dependent => :destroy
76
+
77
+ validates :name, :presence => true
78
+ end
79
+ end
80
+ end
81
+
82
+ module Concernz
83
+ module Person
84
+ extend ActiveSupport::Concern
85
+ included do
86
+ self.primary_key = 'person_id'
87
+
88
+ # Person is involved in Booking
89
+ has_many :bookings, :class_name => 'Booking', :foreign_key => :person_id, :dependent => :destroy
90
+ end
91
+ end
92
+ end
93
+
94
+ module Concernz
95
+ module PlacesPaid
96
+ extend ActiveSupport::Concern
97
+ included do
98
+ self.primary_key = 'places_paid_id'
99
+
100
+ # Places Paid involves Booking
101
+ belongs_to :booking, :foreign_key => :booking_id
102
+
103
+ validates :booking_id, :presence => true
104
+ validates :number, :presence => true
105
+ validates :payment_method_code, :presence => true
106
+ end
107
+ end
108
+ end
109
+
110
+ module Concernz
111
+ module Seat
112
+ extend ActiveSupport::Concern
113
+ included do
114
+ self.primary_key = 'seat_id'
115
+
116
+ # Seat is in Row and Row is in Cinema
117
+ belongs_to :cinema_via_row, :class_name => 'Cinema', :foreign_key => :row_cinema_id
118
+
119
+ # Seat is involved in Seat Allocation
120
+ has_many :seat_allocations, :class_name => 'SeatAllocation', :foreign_key => :allocated_seat_id, :dependent => :destroy
121
+ has_many :bookings, :through => :seat_allocations
122
+
123
+ validates :row_cinema_id, :presence => true
124
+ validates :row_nr, :presence => true
125
+ validates :seat_number, :presence => true
126
+ end
127
+ end
128
+ end
129
+
130
+ module Concernz
131
+ module SeatAllocation
132
+ extend ActiveSupport::Concern
133
+ included do
134
+ # Seat Allocation involves Booking
135
+ belongs_to :booking, :foreign_key => :booking_id
136
+
137
+ # Seat Allocation involves Seat
138
+ belongs_to :allocated_seat, :class_name => 'Seat', :foreign_key => :allocated_seat_id
139
+
140
+ validates :booking_id, :presence => true
141
+ validates :allocated_seat_id, :presence => true
142
+ end
143
+ end
144
+ end
145
+
146
+ module Concernz
147
+ module Session
148
+ extend ActiveSupport::Concern
149
+ included do
150
+ self.primary_key = 'session_id'
151
+
152
+ # Session involves Cinema
153
+ belongs_to :cinema, :foreign_key => :cinema_id
154
+
155
+ # Session involves Film
156
+ belongs_to :film, :foreign_key => :film_id
157
+
158
+ # Session is involved in Booking
159
+ has_many :bookings, :class_name => 'Booking', :foreign_key => :session_id, :dependent => :destroy
160
+
161
+ validates :cinema_id, :presence => true
162
+ validates :film_id, :presence => true
163
+ validates :session_time_year_nr, :presence => true
164
+ validates :session_time_month_nr, :presence => true
165
+ validates :session_time_day, :presence => true
166
+ validates :session_time_hour, :presence => true
167
+ validates :session_time_minute, :presence => true
168
+ end
169
+ end
170
+ end
171
+
172
+ module Concernz
173
+ module TicketPricing
174
+ extend ActiveSupport::Concern
175
+ included do
176
+ self.primary_key = 'ticket_pricing_id'
177
+
178
+ # Ticket Pricing involves Cinema
179
+ belongs_to :cinema, :foreign_key => :cinema_id
180
+
181
+ validates :cinema_id, :presence => true
182
+ validates :high_demand, :presence => true
183
+ validates :price, :presence => true
184
+ validates :section_name, :presence => true
185
+ validates :session_time_year_nr, :presence => true
186
+ validates :session_time_month_nr, :presence => true
187
+ validates :session_time_day, :presence => true
188
+ validates :session_time_hour, :presence => true
189
+ validates :session_time_minute, :presence => true
190
+ end
191
+ end
192
+ end
@@ -0,0 +1,126 @@
1
+
2
+ module Concernz
3
+ module Country
4
+ extend ActiveSupport::Concern
5
+ included do
6
+ self.primary_key = 'country_id'
7
+
8
+ # Diplomat represents Country
9
+ has_many :diplomats, :class_name => 'Diplomat', :foreign_key => :represented_country_id, :dependent => :destroy
10
+
11
+ # Diplomat serves in Country
12
+ has_many :diplomats, :class_name => 'Diplomat', :foreign_key => :served_country_id, :dependent => :destroy
13
+
14
+ # Country is involved in LanguageUse
15
+ has_many :language_uses, :class_name => 'LanguageUse', :foreign_key => :country_id, :dependent => :destroy
16
+ has_many :languages, :through => :language_uses
17
+
18
+ # Country is involved in Representation
19
+ has_many :representations, :class_name => 'Representation', :foreign_key => :country_id, :dependent => :destroy
20
+
21
+ # Country is involved in Representation
22
+ has_many :representations, :class_name => 'Representation', :foreign_key => :represented_country_id, :dependent => :destroy
23
+
24
+ validates :country_name, :presence => true
25
+ end
26
+ end
27
+ end
28
+
29
+ module Concernz
30
+ module Diplomat
31
+ extend ActiveSupport::Concern
32
+ included do
33
+ self.primary_key = 'diplomat_id'
34
+
35
+ # Diplomat represents Country
36
+ belongs_to :represented_country, :class_name => 'Country', :foreign_key => :represented_country_id
37
+
38
+ # Diplomat serves in Country
39
+ belongs_to :served_country, :class_name => 'Country', :foreign_key => :served_country_id
40
+
41
+ # Diplomat is involved in Fluency
42
+ has_many :fluencies, :class_name => 'Fluency', :foreign_key => :diplomat_id, :dependent => :destroy
43
+ has_many :languages, :through => :fluencies
44
+
45
+ # Diplomat is an Ambassador and Ambassador is involved in Representation
46
+ has_many :representations_via_ambassador, :class_name => 'Representation', :foreign_key => :ambassador_id, :dependent => :destroy
47
+
48
+ validates :diplomat_name, :presence => true
49
+ validates :represented_country_id, :presence => true
50
+ validates :served_country_id, :presence => true
51
+ end
52
+ end
53
+ end
54
+
55
+ module Concernz
56
+ module Fluency
57
+ extend ActiveSupport::Concern
58
+ included do
59
+ # Fluency involves Diplomat
60
+ belongs_to :diplomat, :foreign_key => :diplomat_id
61
+
62
+ # Fluency involves Language
63
+ belongs_to :language, :foreign_key => :language_id
64
+
65
+ validates :diplomat_id, :presence => true
66
+ validates :language_id, :presence => true
67
+ end
68
+ end
69
+ end
70
+
71
+ module Concernz
72
+ module Language
73
+ extend ActiveSupport::Concern
74
+ included do
75
+ self.primary_key = 'language_id'
76
+
77
+ # Language is involved in Fluency
78
+ has_many :fluencies, :class_name => 'Fluency', :foreign_key => :language_id, :dependent => :destroy
79
+ has_many :diplomats, :through => :fluencies
80
+
81
+ # Language is involved in LanguageUse
82
+ has_many :language_uses, :class_name => 'LanguageUse', :foreign_key => :language_id, :dependent => :destroy
83
+ has_many :countries, :through => :language_uses
84
+
85
+ validates :language_name, :presence => true
86
+ end
87
+ end
88
+ end
89
+
90
+ module Concernz
91
+ module LanguageUse
92
+ extend ActiveSupport::Concern
93
+ included do
94
+ # LanguageUse involves Country
95
+ belongs_to :country, :foreign_key => :country_id
96
+
97
+ # LanguageUse involves Language
98
+ belongs_to :language, :foreign_key => :language_id
99
+
100
+ validates :language_id, :presence => true
101
+ validates :country_id, :presence => true
102
+ end
103
+ end
104
+ end
105
+
106
+ module Concernz
107
+ module Representation
108
+ extend ActiveSupport::Concern
109
+ included do
110
+ self.primary_key = 'representation_id'
111
+
112
+ # Representation involves Country
113
+ belongs_to :country, :foreign_key => :country_id
114
+
115
+ # Representation involves Country
116
+ belongs_to :represented_country, :class_name => 'Country', :foreign_key => :represented_country_id
117
+
118
+ # Representation involves Ambassador and Ambassador is a kind of Diplomat
119
+ belongs_to :diplomat_via_ambassador, :class_name => 'Diplomat', :foreign_key => :ambassador_id
120
+
121
+ validates :ambassador_id, :presence => true
122
+ validates :country_id, :presence => true
123
+ validates :represented_country_id, :presence => true
124
+ end
125
+ end
126
+ end