enterprisifier 0.0.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 (303) hide show
  1. data/.document +5 -0
  2. data/.gitignore +22 -0
  3. data/LICENSE +20 -0
  4. data/README.md +3 -0
  5. data/Rakefile +57 -0
  6. data/VERSION +1 -0
  7. data/lib/enterprisifier.rb +7 -0
  8. data/lib/enterprisifier/code_generation.rb +1 -0
  9. data/lib/enterprisifier/code_generation/code_builder.rb +33 -0
  10. data/lib/enterprisifier/code_generation/code_generator.rb +281 -0
  11. data/lib/enterprisifier/code_generation/generator.rb +102 -0
  12. data/lib/enterprisifier/code_generation/generators/attribute_generator.rb +22 -0
  13. data/lib/enterprisifier/code_generation/generators/choice_generator.rb +12 -0
  14. data/lib/enterprisifier/code_generation/generators/complex_content_generator.rb +12 -0
  15. data/lib/enterprisifier/code_generation/generators/complex_type_generator.rb +12 -0
  16. data/lib/enterprisifier/code_generation/generators/element_generator.rb +28 -0
  17. data/lib/enterprisifier/code_generation/generators/extension_generator.rb +11 -0
  18. data/lib/enterprisifier/code_generation/generators/group_generator.rb +27 -0
  19. data/lib/enterprisifier/code_generation/generators/restriction_generator.rb +11 -0
  20. data/lib/enterprisifier/code_generation/generators/sequence_generator.rb +12 -0
  21. data/lib/enterprisifier/code_generation/generators/simple_content_generator.rb +12 -0
  22. data/lib/enterprisifier/code_generation/generators/simple_type_generator.rb +11 -0
  23. data/lib/enterprisifier/code_generation/generators/union_generator.rb +34 -0
  24. data/lib/enterprisifier/constants.rb +3 -0
  25. data/lib/enterprisifier/logging.rb +5 -0
  26. data/lib/enterprisifier/marshalling.rb +0 -0
  27. data/lib/enterprisifier/marshalling/builder.rb +11 -0
  28. data/lib/enterprisifier/marshalling/instantiatable_element.rb +170 -0
  29. data/lib/enterprisifier/marshalling/namespace.rb +23 -0
  30. data/lib/enterprisifier/marshalling/reification.rb +30 -0
  31. data/lib/enterprisifier/marshalling/schema_composition.rb +170 -0
  32. data/lib/enterprisifier/marshalling/xsd/schema/attribute.rb +48 -0
  33. data/lib/enterprisifier/marshalling/xsd/schema/choice.rb +18 -0
  34. data/lib/enterprisifier/marshalling/xsd/schema/complex_content.rb +18 -0
  35. data/lib/enterprisifier/marshalling/xsd/schema/complex_type.rb +28 -0
  36. data/lib/enterprisifier/marshalling/xsd/schema/element.rb +92 -0
  37. data/lib/enterprisifier/marshalling/xsd/schema/extension.rb +29 -0
  38. data/lib/enterprisifier/marshalling/xsd/schema/group.rb +22 -0
  39. data/lib/enterprisifier/marshalling/xsd/schema/restriction.rb +29 -0
  40. data/lib/enterprisifier/marshalling/xsd/schema/sequence.rb +21 -0
  41. data/lib/enterprisifier/marshalling/xsd/schema/simple_content.rb +18 -0
  42. data/lib/enterprisifier/marshalling/xsd/schema/simple_type.rb +23 -0
  43. data/lib/enterprisifier/marshalling/xsd/schema/union.rb +23 -0
  44. data/lib/enterprisifier/marshalling/xsd/types/boolean.rb +14 -0
  45. data/lib/enterprisifier/marshalling/xsd/types/date.rb +13 -0
  46. data/lib/enterprisifier/marshalling/xsd/types/date_time.rb +13 -0
  47. data/lib/enterprisifier/marshalling/xsd/types/decimal.rb +13 -0
  48. data/lib/enterprisifier/marshalling/xsd/types/string.rb +14 -0
  49. data/lib/enterprisifier/marshalling/xsd/types/time.rb +14 -0
  50. data/lib/enterprisifier/schema.rb +1 -0
  51. data/lib/enterprisifier/schema/base_element.rb +156 -0
  52. data/lib/enterprisifier/schema/element_factory.rb +29 -0
  53. data/lib/enterprisifier/schema/elements/annotation.rb +20 -0
  54. data/lib/enterprisifier/schema/elements/attribute.rb +22 -0
  55. data/lib/enterprisifier/schema/elements/choice.rb +13 -0
  56. data/lib/enterprisifier/schema/elements/complex_content.rb +13 -0
  57. data/lib/enterprisifier/schema/elements/complex_type.rb +13 -0
  58. data/lib/enterprisifier/schema/elements/documentation.rb +12 -0
  59. data/lib/enterprisifier/schema/elements/element.rb +23 -0
  60. data/lib/enterprisifier/schema/elements/enumeration.rb +12 -0
  61. data/lib/enterprisifier/schema/elements/extension.rb +12 -0
  62. data/lib/enterprisifier/schema/elements/fraction_digits.rb +12 -0
  63. data/lib/enterprisifier/schema/elements/group.rb +12 -0
  64. data/lib/enterprisifier/schema/elements/import.rb +28 -0
  65. data/lib/enterprisifier/schema/elements/include.rb +28 -0
  66. data/lib/enterprisifier/schema/elements/max_inclusive.rb +12 -0
  67. data/lib/enterprisifier/schema/elements/min_inclusive.rb +12 -0
  68. data/lib/enterprisifier/schema/elements/pattern.rb +12 -0
  69. data/lib/enterprisifier/schema/elements/restriction.rb +12 -0
  70. data/lib/enterprisifier/schema/elements/schema.rb +71 -0
  71. data/lib/enterprisifier/schema/elements/sequence.rb +12 -0
  72. data/lib/enterprisifier/schema/elements/simple_content.rb +12 -0
  73. data/lib/enterprisifier/schema/elements/simple_type.rb +12 -0
  74. data/lib/enterprisifier/schema/elements/union.rb +17 -0
  75. data/lib/enterprisifier/schema/elements/unknown_element.rb +12 -0
  76. data/lib/enterprisifier/schema/loader.rb +61 -0
  77. data/test/enterprisifier_test.rb +35 -0
  78. data/test/example/e_business_for_media/aaaa/elements/aaaa_message_header.rb +15 -0
  79. data/test/example/e_business_for_media/aaaa/elements/aaaa_values.rb +52 -0
  80. data/test/example/e_business_for_media/aaaa/elements/action.rb +17 -0
  81. data/test/example/e_business_for_media/aaaa/elements/business_object.rb +17 -0
  82. data/test/example/e_business_for_media/aaaa/elements/media.rb +17 -0
  83. data/test/example/e_business_for_media/aaaa/elements/schema_name.rb +17 -0
  84. data/test/example/e_business_for_media/aaaa/elements/schema_version.rb +17 -0
  85. data/test/example/e_business_for_media/aaaa/elements/unique_message_id.rb +19 -0
  86. data/test/example/e_business_for_media/aaaa/types/aaaa_message_type.rb +58 -0
  87. data/test/example/e_business_for_media/aaaa/types/action_string.rb +18 -0
  88. data/test/example/e_business_for_media/aaaa/types/business_object_string.rb +18 -0
  89. data/test/example/e_business_for_media/aaaa/types/guid.rb +20 -0
  90. data/test/example/e_business_for_media/aaaa/types/media_string.rb +19 -0
  91. data/test/example/e_business_for_media/aaaa/types/schema_name_string.rb +18 -0
  92. data/test/example/e_business_for_media/aaaa/types/schema_version_string.rb +18 -0
  93. data/test/example/e_business_for_media/aaaa/types/unique_message_id.rb +18 -0
  94. data/test/example/e_business_for_media/iab/attributes/currency.rb +17 -0
  95. data/test/example/e_business_for_media/iab/attributes/id_owner.rb +19 -0
  96. data/test/example/e_business_for_media/iab/attributes/name.rb +19 -0
  97. data/test/example/e_business_for_media/iab/attributes/prefix.rb +18 -0
  98. data/test/example/e_business_for_media/iab/attributes/primary.rb +33 -0
  99. data/test/example/e_business_for_media/iab/attributes/script.rb +23 -0
  100. data/test/example/e_business_for_media/iab/attributes/sms_enabled.rb +20 -0
  101. data/test/example/e_business_for_media/iab/attributes/type.rb +30 -0
  102. data/test/example/e_business_for_media/iab/attributes/valid_from.rb +18 -0
  103. data/test/example/e_business_for_media/iab/attributes/valid_to.rb +18 -0
  104. data/test/example/e_business_for_media/iab/elements/ad_server.rb +17 -0
  105. data/test/example/e_business_for_media/iab/elements/additional_metrics.rb +16 -0
  106. data/test/example/e_business_for_media/iab/elements/address.rb +16 -0
  107. data/test/example/e_business_for_media/iab/elements/address_line.rb +22 -0
  108. data/test/example/e_business_for_media/iab/elements/advertiser.rb +17 -0
  109. data/test/example/e_business_for_media/iab/elements/affix.rb +53 -0
  110. data/test/example/e_business_for_media/iab/elements/agency.rb +19 -0
  111. data/test/example/e_business_for_media/iab/elements/agency_commission.rb +19 -0
  112. data/test/example/e_business_for_media/iab/elements/alternate_script.rb +147 -0
  113. data/test/example/e_business_for_media/iab/elements/amount.rb +16 -0
  114. data/test/example/e_business_for_media/iab/elements/area_city_code.rb +18 -0
  115. data/test/example/e_business_for_media/iab/elements/attachments.rb +18 -0
  116. data/test/example/e_business_for_media/iab/elements/audience.rb +17 -0
  117. data/test/example/e_business_for_media/iab/elements/background.rb +15 -0
  118. data/test/example/e_business_for_media/iab/elements/basis.rb +26 -0
  119. data/test/example/e_business_for_media/iab/elements/billing_frequency.rb +15 -0
  120. data/test/example/e_business_for_media/iab/elements/billing_info.rb +16 -0
  121. data/test/example/e_business_for_media/iab/elements/billing_notes.rb +16 -0
  122. data/test/example/e_business_for_media/iab/elements/billing_partner.rb +16 -0
  123. data/test/example/e_business_for_media/iab/elements/billing_statistics_source.rb +16 -0
  124. data/test/example/e_business_for_media/iab/elements/brand_name.rb +17 -0
  125. data/test/example/e_business_for_media/iab/elements/budget.rb +16 -0
  126. data/test/example/e_business_for_media/iab/elements/building_number.rb +23 -0
  127. data/test/example/e_business_for_media/iab/elements/campaign_brief.rb +38 -0
  128. data/test/example/e_business_for_media/iab/elements/campaign_reference_id.rb +18 -0
  129. data/test/example/e_business_for_media/iab/elements/campaign_reference_info.rb +16 -0
  130. data/test/example/e_business_for_media/iab/elements/category.rb +16 -0
  131. data/test/example/e_business_for_media/iab/elements/context.rb +17 -0
  132. data/test/example/e_business_for_media/iab/elements/contract_details.rb +17 -0
  133. data/test/example/e_business_for_media/iab/elements/count.rb +16 -0
  134. data/test/example/e_business_for_media/iab/elements/country_code.rb +23 -0
  135. data/test/example/e_business_for_media/iab/elements/created_date.rb +15 -0
  136. data/test/example/e_business_for_media/iab/elements/creating_system.rb +16 -0
  137. data/test/example/e_business_for_media/iab/elements/date.rb +16 -0
  138. data/test/example/e_business_for_media/iab/elements/delivery.rb +17 -0
  139. data/test/example/e_business_for_media/iab/elements/delivery_address.rb +72 -0
  140. data/test/example/e_business_for_media/iab/elements/description.rb +16 -0
  141. data/test/example/e_business_for_media/iab/elements/desired_positioning_notes.rb +16 -0
  142. data/test/example/e_business_for_media/iab/elements/destination_system.rb +16 -0
  143. data/test/example/e_business_for_media/iab/elements/discount.rb +19 -0
  144. data/test/example/e_business_for_media/iab/elements/distribution.rb +15 -0
  145. data/test/example/e_business_for_media/iab/elements/document_id.rb +20 -0
  146. data/test/example/e_business_for_media/iab/elements/document_name.rb +16 -0
  147. data/test/example/e_business_for_media/iab/elements/document_sender.rb +17 -0
  148. data/test/example/e_business_for_media/iab/elements/due_date.rb +15 -0
  149. data/test/example/e_business_for_media/iab/elements/end_date.rb +16 -0
  150. data/test/example/e_business_for_media/iab/elements/extension.rb +17 -0
  151. data/test/example/e_business_for_media/iab/elements/family_name.rb +55 -0
  152. data/test/example/e_business_for_media/iab/elements/fax.rb +16 -0
  153. data/test/example/e_business_for_media/iab/elements/flight_exclusivity_guidelines.rb +16 -0
  154. data/test/example/e_business_for_media/iab/elements/format.rb +16 -0
  155. data/test/example/e_business_for_media/iab/elements/formatted_name.rb +22 -0
  156. data/test/example/e_business_for_media/iab/elements/formatted_number.rb +18 -0
  157. data/test/example/e_business_for_media/iab/elements/geographic_considerations.rb +15 -0
  158. data/test/example/e_business_for_media/iab/elements/given_name.rb +19 -0
  159. data/test/example/e_business_for_media/iab/elements/goal.rb +29 -0
  160. data/test/example/e_business_for_media/iab/elements/gross_cost.rb +16 -0
  161. data/test/example/e_business_for_media/iab/elements/iab_advertiser_info.rb +15 -0
  162. data/test/example/e_business_for_media/iab/elements/iab_billing_info.rb +15 -0
  163. data/test/example/e_business_for_media/iab/elements/iab_message_base.rb +15 -0
  164. data/test/example/e_business_for_media/iab/elements/iab_message_header.rb +17 -0
  165. data/test/example/e_business_for_media/iab/elements/iab_publisher_info.rb +15 -0
  166. data/test/example/e_business_for_media/iab/elements/iab_type_of_contact.rb +17 -0
  167. data/test/example/e_business_for_media/iab/elements/id.rb +17 -0
  168. data/test/example/e_business_for_media/iab/elements/id_value.rb +34 -0
  169. data/test/example/e_business_for_media/iab/elements/in_reference_to.rb +33 -0
  170. data/test/example/e_business_for_media/iab/elements/industry.rb +17 -0
  171. data/test/example/e_business_for_media/iab/elements/instructions.rb +15 -0
  172. data/test/example/e_business_for_media/iab/elements/international_country_code.rb +17 -0
  173. data/test/example/e_business_for_media/iab/elements/internet_email_address.rb +16 -0
  174. data/test/example/e_business_for_media/iab/elements/internet_web_address.rb +17 -0
  175. data/test/example/e_business_for_media/iab/elements/legal_name.rb +19 -0
  176. data/test/example/e_business_for_media/iab/elements/link.rb +16 -0
  177. data/test/example/e_business_for_media/iab/elements/location.rb +17 -0
  178. data/test/example/e_business_for_media/iab/elements/make_good_policy.rb +16 -0
  179. data/test/example/e_business_for_media/iab/elements/middle_name.rb +17 -0
  180. data/test/example/e_business_for_media/iab/elements/mobile.rb +17 -0
  181. data/test/example/e_business_for_media/iab/elements/municipality.rb +17 -0
  182. data/test/example/e_business_for_media/iab/elements/name.rb +16 -0
  183. data/test/example/e_business_for_media/iab/elements/national_number.rb +19 -0
  184. data/test/example/e_business_for_media/iab/elements/net_cost.rb +16 -0
  185. data/test/example/e_business_for_media/iab/elements/non_standard_value.rb +16 -0
  186. data/test/example/e_business_for_media/iab/elements/notes.rb +16 -0
  187. data/test/example/e_business_for_media/iab/elements/order_status.rb +17 -0
  188. data/test/example/e_business_for_media/iab/elements/other_contacts.rb +18 -0
  189. data/test/example/e_business_for_media/iab/elements/other_id.rb +20 -0
  190. data/test/example/e_business_for_media/iab/elements/other_target.rb +17 -0
  191. data/test/example/e_business_for_media/iab/elements/out_clause.rb +16 -0
  192. data/test/example/e_business_for_media/iab/elements/pager.rb +16 -0
  193. data/test/example/e_business_for_media/iab/elements/partner.rb +19 -0
  194. data/test/example/e_business_for_media/iab/elements/payment_terms.rb +16 -0
  195. data/test/example/e_business_for_media/iab/elements/payment_type.rb +15 -0
  196. data/test/example/e_business_for_media/iab/elements/percent.rb +16 -0
  197. data/test/example/e_business_for_media/iab/elements/person_name.rb +16 -0
  198. data/test/example/e_business_for_media/iab/elements/post_office_box.rb +18 -0
  199. data/test/example/e_business_for_media/iab/elements/postal_address.rb +16 -0
  200. data/test/example/e_business_for_media/iab/elements/postal_code.rb +18 -0
  201. data/test/example/e_business_for_media/iab/elements/preferred_given_name.rb +18 -0
  202. data/test/example/e_business_for_media/iab/elements/primary_contact.rb +16 -0
  203. data/test/example/e_business_for_media/iab/elements/primary_id.rb +17 -0
  204. data/test/example/e_business_for_media/iab/elements/primary_success_metric.rb +15 -0
  205. data/test/example/e_business_for_media/iab/elements/product_name.rb +17 -0
  206. data/test/example/e_business_for_media/iab/elements/property_name.rb +16 -0
  207. data/test/example/e_business_for_media/iab/elements/publisher.rb +17 -0
  208. data/test/example/e_business_for_media/iab/elements/referenced_document_id.rb +15 -0
  209. data/test/example/e_business_for_media/iab/elements/referenced_version.rb +22 -0
  210. data/test/example/e_business_for_media/iab/elements/region.rb +21 -0
  211. data/test/example/e_business_for_media/iab/elements/request_for_proposal.rb +16 -0
  212. data/test/example/e_business_for_media/iab/elements/rfp_details.rb +15 -0
  213. data/test/example/e_business_for_media/iab/elements/rfp_response_requirements.rb +15 -0
  214. data/test/example/e_business_for_media/iab/elements/role.rb +31 -0
  215. data/test/example/e_business_for_media/iab/elements/selection_criteria.rb +16 -0
  216. data/test/example/e_business_for_media/iab/elements/sent_date.rb +15 -0
  217. data/test/example/e_business_for_media/iab/elements/standard_value.rb +16 -0
  218. data/test/example/e_business_for_media/iab/elements/start_date.rb +16 -0
  219. data/test/example/e_business_for_media/iab/elements/street_name.rb +21 -0
  220. data/test/example/e_business_for_media/iab/elements/subscriber_number.rb +19 -0
  221. data/test/example/e_business_for_media/iab/elements/target_audience.rb +15 -0
  222. data/test/example/e_business_for_media/iab/elements/targeting.rb +42 -0
  223. data/test/example/e_business_for_media/iab/elements/telephone.rb +16 -0
  224. data/test/example/e_business_for_media/iab/elements/terms_and_conditions.rb +27 -0
  225. data/test/example/e_business_for_media/iab/elements/terms_attachment.rb +15 -0
  226. data/test/example/e_business_for_media/iab/elements/terms_text.rb +15 -0
  227. data/test/example/e_business_for_media/iab/elements/time.rb +17 -0
  228. data/test/example/e_business_for_media/iab/elements/title.rb +17 -0
  229. data/test/example/e_business_for_media/iab/elements/ttytdd.rb +17 -0
  230. data/test/example/e_business_for_media/iab/elements/type.rb +15 -0
  231. data/test/example/e_business_for_media/iab/elements/unit.rb +21 -0
  232. data/test/example/e_business_for_media/iab/elements/use.rb +17 -0
  233. data/test/example/e_business_for_media/iab/elements/value.rb +15 -0
  234. data/test/example/e_business_for_media/iab/elements/version.rb +24 -0
  235. data/test/example/e_business_for_media/iab/elements/when_available.rb +19 -0
  236. data/test/example/e_business_for_media/iab/elements/zero_cost.rb +15 -0
  237. data/test/example/e_business_for_media/iab/groups/telcom_number_group.rb +52 -0
  238. data/test/example/e_business_for_media/iab/types/attachment_type.rb +32 -0
  239. data/test/example/e_business_for_media/iab/types/base_cost.rb +32 -0
  240. data/test/example/e_business_for_media/iab/types/base_target_type.rb +31 -0
  241. data/test/example/e_business_for_media/iab/types/base_unit.rb +27 -0
  242. data/test/example/e_business_for_media/iab/types/campaign_reference_info_type.rb +81 -0
  243. data/test/example/e_business_for_media/iab/types/contact_method_location_pattern_extension_type.rb +22 -0
  244. data/test/example/e_business_for_media/iab/types/contact_method_location_type.rb +24 -0
  245. data/test/example/e_business_for_media/iab/types/contact_method_type.rb +81 -0
  246. data/test/example/e_business_for_media/iab/types/contact_method_use_pattern_extension_type.rb +22 -0
  247. data/test/example/e_business_for_media/iab/types/contact_method_use_type.rb +23 -0
  248. data/test/example/e_business_for_media/iab/types/contact_method_when_available_type.rb +20 -0
  249. data/test/example/e_business_for_media/iab/types/contract_details_type.rb +46 -0
  250. data/test/example/e_business_for_media/iab/types/cost_method_enumeration.rb +29 -0
  251. data/test/example/e_business_for_media/iab/types/cost_method_type.rb +28 -0
  252. data/test/example/e_business_for_media/iab/types/currency_code_type.rb +20 -0
  253. data/test/example/e_business_for_media/iab/types/discount_type.rb +36 -0
  254. data/test/example/e_business_for_media/iab/types/entity_id_type.rb +57 -0
  255. data/test/example/e_business_for_media/iab/types/generic_target_type.rb +31 -0
  256. data/test/example/e_business_for_media/iab/types/iab_advertiser_info_type.rb +38 -0
  257. data/test/example/e_business_for_media/iab/types/iab_billing_info_type.rb +54 -0
  258. data/test/example/e_business_for_media/iab/types/iab_contact_method_type.rb +44 -0
  259. data/test/example/e_business_for_media/iab/types/iab_date_time_type.rb +28 -0
  260. data/test/example/e_business_for_media/iab/types/iab_distribution_enumerated_type.rb +22 -0
  261. data/test/example/e_business_for_media/iab/types/iab_distribution_type.rb +20 -0
  262. data/test/example/e_business_for_media/iab/types/iab_message_base_type.rb +47 -0
  263. data/test/example/e_business_for_media/iab/types/iab_message_header_type.rb +34 -0
  264. data/test/example/e_business_for_media/iab/types/iab_partner_info_type.rb +67 -0
  265. data/test/example/e_business_for_media/iab/types/iab_payment_terms_enumerated_type.rb +23 -0
  266. data/test/example/e_business_for_media/iab/types/iab_payment_terms_type.rb +20 -0
  267. data/test/example/e_business_for_media/iab/types/iab_payment_type_enumerated_type.rb +21 -0
  268. data/test/example/e_business_for_media/iab/types/iab_publisher_info_type.rb +29 -0
  269. data/test/example/e_business_for_media/iab/types/iab_type_of_contact_type.rb +30 -0
  270. data/test/example/e_business_for_media/iab/types/internet_email_address_type.rb +19 -0
  271. data/test/example/e_business_for_media/iab/types/internet_web_address_type.rb +20 -0
  272. data/test/example/e_business_for_media/iab/types/mobile_telcom_number_type.rb +33 -0
  273. data/test/example/e_business_for_media/iab/types/monetary_type.rb +28 -0
  274. data/test/example/e_business_for_media/iab/types/percentage_type.rb +21 -0
  275. data/test/example/e_business_for_media/iab/types/person_name_type.rb +282 -0
  276. data/test/example/e_business_for_media/iab/types/postal_address_type.rb +120 -0
  277. data/test/example/e_business_for_media/iab/types/request_for_proposal_type.rb +35 -0
  278. data/test/example/e_business_for_media/iab/types/rfp_details_type.rb +118 -0
  279. data/test/example/e_business_for_media/iab/types/rfp_response_requirements_type.rb +33 -0
  280. data/test/example/e_business_for_media/iab/types/telcom_number_type.rb +34 -0
  281. data/test/example/e_business_for_media/iab/types/unit_type.rb +28 -0
  282. data/test/example/e_business_for_media/iab/types/unit_type_enumeration.rb +27 -0
  283. data/test/example/e_business_for_media/iab/types/zero_cost_type.rb +29 -0
  284. data/test/example/e_business_for_media/iab/types/zero_cost_type_enumeration.rb +21 -0
  285. data/test/marshalling_test.rb +13 -0
  286. data/test/mocks.rb +10 -0
  287. data/test/teststrap.rb +23 -0
  288. data/test/xsd/AAAA_Common.xsd +76 -0
  289. data/test/xsd/HRXMLlicense.txt +32 -0
  290. data/test/xsd/IAB_Acknowledgement.xsd +181 -0
  291. data/test/xsd/IAB_AdvertiserCommon.xsd +40 -0
  292. data/test/xsd/IAB_BillingCommon.xsd +75 -0
  293. data/test/xsd/IAB_CampaignCommon.xsd +80 -0
  294. data/test/xsd/IAB_Common.xsd +1176 -0
  295. data/test/xsd/IAB_ContractCommon.xsd +54 -0
  296. data/test/xsd/IAB_InsertionOrderCommon.xsd +40 -0
  297. data/test/xsd/IAB_LineItemCommon.xsd +328 -0
  298. data/test/xsd/IAB_MessageCommon.xsd +66 -0
  299. data/test/xsd/IAB_OrderCommon.xsd +98 -0
  300. data/test/xsd/IAB_ProposalCommon.xsd +30 -0
  301. data/test/xsd/IAB_PublisherCommon.xsd +26 -0
  302. data/test/xsd/IAB_RFPCommon.xsd +126 -0
  303. metadata +626 -0
@@ -0,0 +1,22 @@
1
+ require 'enterprisifier/code_generation/code_generator'
2
+
3
+ module Enterprisifier
4
+ module CodeGeneration
5
+ class AttributeGenerator < CodeGenerator
6
+ extends "Enterprisifier::Marshalling::XSD::Schema::Attribute"
7
+ register :attribute, :namespace => true, :as => :class
8
+ macro_mappings :default, :fixed, :form, :use
9
+
10
+ def macro_reference_type
11
+ if @node.value_type
12
+ @generator.modularize_type(@node.value_type, @mod_name, "Types")
13
+ elsif @node.ref
14
+ @generator.modularize_type(@node.ref, @mod_name, "Attributes")
15
+ else
16
+ nil
17
+ end
18
+ end
19
+
20
+ end # AttributeGenerator
21
+ end # CodeGenerator
22
+ end # Enterprisifier
@@ -0,0 +1,12 @@
1
+ require 'enterprisifier/code_generation/code_generator'
2
+
3
+ module Enterprisifier
4
+ module CodeGeneration
5
+ class ChoiceGenerator < CodeGenerator
6
+ extends "Enterprisifier::Marshalling::XSD::Schema::Choice"
7
+ register :choice, :namespace => true
8
+ macro_mappings :min_occurs, :max_occurs
9
+
10
+ end # ChoiceGenerator
11
+ end # CodeGenerator
12
+ end # Enterprisifier
@@ -0,0 +1,12 @@
1
+ require 'enterprisifier/code_generation/code_generator'
2
+
3
+ module Enterprisifier
4
+ module CodeGeneration
5
+ class ComplexContentGenerator < CodeGenerator
6
+ extends "Enterprisifier::Marshalling::XSD::Schema::ComplexContent"
7
+ register :complexContent, :namespace => true
8
+ macro_mappings :mixed
9
+
10
+ end # ComplexContentGenerator
11
+ end # CodeGenerator
12
+ end # Enterprisifier
@@ -0,0 +1,12 @@
1
+ require 'enterprisifier/code_generation/code_generator'
2
+
3
+ module Enterprisifier
4
+ module CodeGeneration
5
+ class ComplexTypeGenerator < CodeGenerator
6
+ extends "Enterprisifier::Marshalling::XSD::Schema::ComplexType"
7
+ register :complexType, :namespace => true, :in => "Types"
8
+ macro_mappings :abstract, :mixed, :block, :final
9
+
10
+ end # ComplexTypeGenerator
11
+ end # CodeGenerator
12
+ end # Enterprisifier
@@ -0,0 +1,28 @@
1
+ require 'enterprisifier/code_generation/code_generator'
2
+
3
+ module Enterprisifier
4
+ module CodeGeneration
5
+ class ElementGenerator < CodeGenerator
6
+ extends "Enterprisifier::Marshalling::XSD::Schema::Element"
7
+ register :element, :namespace => true, :as => :class
8
+ macro_mappings :default, :fixed, :form, :min_occurs, :max_occurs, :nillable, :abstract, :block, :final
9
+
10
+ def macro_reference_type
11
+ if @node.ref
12
+ @generator.modularize_type(@node.ref, @mod_name, "Elements")
13
+ elsif @node.element_type
14
+ @generator.modularize_type(@node.element_type, @mod_name, "Types")
15
+ else
16
+ nil
17
+ end
18
+ end
19
+
20
+ def attribute_macros
21
+ @attribute_macros ||= super.tap do |m|
22
+ m << [:substitution_group, @generator.modularize_type(@node.substitution_group, @mod_name, "Elements")] if @node.substitution_group
23
+ end
24
+ end
25
+
26
+ end # ElementGenerator
27
+ end # CodeGenerator
28
+ end # Enterprisifier
@@ -0,0 +1,11 @@
1
+ require 'enterprisifier/code_generation/code_generator'
2
+
3
+ module Enterprisifier
4
+ module CodeGeneration
5
+ class ExtensionGenerator < CodeGenerator
6
+ extends "Enterprisifier::Marshalling::XSD::Schema::Extension"
7
+ register :extension, :namespace => true
8
+
9
+ end # ExtensionGenerator
10
+ end # CodeGenerator
11
+ end # Enterprisifier
@@ -0,0 +1,27 @@
1
+ require 'enterprisifier/code_generation/code_generator'
2
+
3
+ module Enterprisifier
4
+ module CodeGeneration
5
+ class GroupGenerator < CodeGenerator
6
+ extends "Enterprisifier::Marshalling::XSD::Schema::Group"
7
+ register :group, :namespace => true
8
+ macro_mappings :min_occurs, :max_occurs
9
+
10
+ def attribute_macros
11
+ @attribute_macros ||= super.tap do |m|
12
+ m << [:ref, @generator.modularize_type(@node.ref, @mod_name, "Groups")] if @node.ref
13
+ end
14
+ end
15
+
16
+ def requires
17
+ @requires ||= super.tap do |r|
18
+ next unless @node.ref
19
+ mt = @generator.modularize_type(@node.ref, @mod_name, "Groups")
20
+ p = mt.split("::").map(&:underscore).join("/")
21
+ r << p
22
+ end
23
+ end
24
+
25
+ end # GroupGenerator
26
+ end # CodeGenerator
27
+ end # Enterprisifier
@@ -0,0 +1,11 @@
1
+ require 'enterprisifier/code_generation/code_generator'
2
+
3
+ module Enterprisifier
4
+ module CodeGeneration
5
+ class RestrictionGenerator < CodeGenerator
6
+ extends "Enterprisifier::Marshalling::XSD::Schema::Restriction"
7
+ register :restriction, :namespace => true
8
+
9
+ end # RestrictionGenerator
10
+ end # CodeGenerator
11
+ end # Enterprisifier
@@ -0,0 +1,12 @@
1
+ require 'enterprisifier/code_generation/code_generator'
2
+
3
+ module Enterprisifier
4
+ module CodeGeneration
5
+ class SequenceGenerator < CodeGenerator
6
+ extends "Enterprisifier::Marshalling::XSD::Schema::Sequence"
7
+ register :sequence, :namespace => true
8
+ macro_mappings :min_occurs, :max_occurs
9
+
10
+ end # SequenceGenerator
11
+ end # CodeGenerator
12
+ end # Enterprisifier
@@ -0,0 +1,12 @@
1
+ require 'enterprisifier/code_generation/code_generator'
2
+
3
+ module Enterprisifier
4
+ module CodeGeneration
5
+ class SimpleContentGenerator < CodeGenerator
6
+ extends "Enterprisifier::Marshalling::XSD::Schema::SimpleContent"
7
+ register :simpleContent, :namespace => true
8
+
9
+
10
+ end # SimpleContentGenerator
11
+ end # CodeGenerator
12
+ end # Enterprisifier
@@ -0,0 +1,11 @@
1
+ require 'enterprisifier/code_generation/code_generator'
2
+
3
+ module Enterprisifier
4
+ module CodeGeneration
5
+ class SimpleTypeGenerator < CodeGenerator
6
+ extends "Enterprisifier::Marshalling::XSD::Schema::SimpleType"
7
+ register :simpleType, :namespace => true, :in => "Types"
8
+
9
+ end # SimpleTypeGenerator
10
+ end # CodeGenerator
11
+ end # Enterprisifier
@@ -0,0 +1,34 @@
1
+ require 'enterprisifier/code_generation/code_generator'
2
+
3
+ module Enterprisifier
4
+ module CodeGeneration
5
+ class UnionGenerator < CodeGenerator
6
+ extends "Enterprisifier::Marshalling::XSD::Schema::Union"
7
+ register :union, :namespace => true
8
+
9
+ def attribute_macros
10
+ @attribute_macros ||= super.tap do |m|
11
+ m << [:member_types, modularized_member_types.join(", ")] unless modularized_member_types.empty?
12
+ end
13
+ end
14
+
15
+ def requires
16
+ @requires ||= super.tap do |r|
17
+ mmt = modularized_member_types.collect do |mt|
18
+ mt.split("::").map(&:underscore).join("/")
19
+ end
20
+ r.concat(mmt)
21
+ end
22
+ end
23
+
24
+ private
25
+
26
+ def modularized_member_types
27
+ @modularized_member_types ||= @node.member_types.collect do |mt|
28
+ @generator.modularize_type(mt, @mod_name, "Types")
29
+ end
30
+ end
31
+
32
+ end # UnionGenerator
33
+ end # CodeGenerator
34
+ end # Enterprisifier
@@ -0,0 +1,3 @@
1
+ module Enterprisifier
2
+ XMLSchemaNameSpaceURI = "http://www.w3.org/2001/XMLSchema"
3
+ end
@@ -0,0 +1,5 @@
1
+ require 'logger'
2
+
3
+ module Enterprisifier
4
+ Logger = ::Logger.new($stdout)
5
+ end
File without changes
@@ -0,0 +1,11 @@
1
+ require 'nokogiri/xml/builder'
2
+
3
+ #
4
+ # @todo - ugly monkey patch here because nokogiri breaks when i extend builder
5
+ class Nokogiri::XML::Builder
6
+
7
+ def tag(tag_name, *args, &block)
8
+ send(tag_name, *args, &block)
9
+ end
10
+
11
+ end
@@ -0,0 +1,170 @@
1
+ module Enterprisifier
2
+ module Marshalling
3
+ class InstantiatableElement
4
+ include Observable
5
+ include ActiveSupport::Callbacks
6
+
7
+ class AssociationProxy < BlankSlate
8
+ def initialize(parent, element_klass)
9
+ @parent = parent
10
+ @collection = []
11
+ @element_klass = element_klass
12
+ end
13
+
14
+ def build
15
+ @element_klass.new.tap do |e|
16
+ e.parent = @parent
17
+ @collection << e
18
+ end
19
+ end
20
+
21
+ def method_missing(sym, *args, &block)
22
+ @collection.send(sym, *args, &block)
23
+ end
24
+ end # AssociationProxy
25
+
26
+ define_callbacks :after_create
27
+ delegate :element_name, :to => "self.class"
28
+ delegate :element_namespace, :to => "self.class"
29
+ attr_reader :parent
30
+ class_inheritable_accessor :element_name, :element_namespace, :attribute_definitions
31
+ self.attribute_definitions = {}
32
+
33
+ class << self
34
+
35
+ def create(*args, &block)
36
+ new(*args, &block).tap do |inst|
37
+ inst.run_callbacks(:after_create)
38
+ end
39
+ end
40
+
41
+ def inspect
42
+ "<Element Class #{element_name} (#{object_id}) ns: #{element_namespace.inspect}>"
43
+ end
44
+
45
+ def has_many(name, element_klass)
46
+ define_method("#{name}") do
47
+ next(instance_variable_get("@#{name}")) if instance_variable_set("@#{name}")
48
+ proxy = AssociationProxy.new(self, element_klass)
49
+ instance_variable_set("@#{name}", proxy)
50
+ children << proxy
51
+ proxy
52
+ end
53
+ end
54
+
55
+ def has_one(name, element_klass)
56
+ attr_reader name
57
+ define_method("build_#{name}") do
58
+ next(send(name)) if send(name)
59
+ element_klass.new.tap do |e|
60
+ instance_variable_set("@#{name}", e)
61
+ e.parent = self
62
+ children << e
63
+ end
64
+ end
65
+ end
66
+
67
+ def has_attribute(namespace, name, attribute_klass)
68
+ (attribute_definitions[namespace] ||= {})[name.to_sym] = attribute_klass
69
+ end
70
+
71
+ end # << self
72
+
73
+ def attributes
74
+ @attributes ||= []
75
+ end
76
+
77
+ def children
78
+ @children ||= []
79
+ end
80
+
81
+ def attribute(name, val = nil)
82
+ if val
83
+ find_or_initialize_attribute(name).value = val
84
+ else
85
+ find_or_initialize_attribute(name).try(:value)
86
+ end
87
+ end
88
+
89
+ def namespaced_attribute(namespace, name, val = nil)
90
+ if val
91
+ find_or_initialize_attribute(name, namespace).value = val
92
+ else
93
+ find_or_initialize_attribute(name, namespace).try(:value)
94
+ end
95
+ end
96
+
97
+ def to_xml(builder = nil)
98
+ builder ||= Nokogiri::XML::Builder.new { |builder| }
99
+ builder.tag(element_name, value_to_string) do
100
+ set_root_ns(builder) if root?
101
+ flattened_children.each { |c| c.to_xml(builder) }
102
+ end
103
+ builder.to_xml
104
+ end
105
+
106
+ def inspect
107
+ "<Element #{element_name} (#{object_id}) ns: #{element_namespace.inspect}>"
108
+ end
109
+
110
+ def parent=(parent_element)
111
+ add_observer(parent_element)
112
+ changed
113
+ notify_observers(:child_added, self)
114
+ parent_element
115
+ end
116
+
117
+ def update(message, obj)
118
+ send(:"observe_#{message}", obj) if respond_to?(:"observe_#{message}", true)
119
+ end
120
+
121
+ def root?
122
+ !parent
123
+ end
124
+
125
+ private
126
+
127
+ def observe_child_added(child)
128
+ notify_observers(:child_added, child)
129
+ end
130
+
131
+ def find_or_initialize_attribute(name, ns_short_name_or_url = nil)
132
+ find_attribute(name, ns_short_name_or_url) || initialize_attribute(namen ns_short_name_or_url)
133
+ end
134
+
135
+ def find_attribute(name, ns_short_name_or_url = nil)
136
+ ns = ns_short_name_or_url || element_namespace
137
+ attributes.detect do |attr|
138
+ attr.attribute_namespace.is?(ns) && attr.name == name
139
+ end
140
+ end
141
+
142
+ def initialize_attribute(name, ns_short_name_or_url = nil)
143
+ if ns_short_name_or_url
144
+ attribute_col = attribute_definitions.detect { |(k,v)| k.is?(ns_short_name_or_url) }
145
+ raise(ArgumentError, "Unknown namespace #{ns.inspect}") unless attribute_col
146
+ else
147
+ attribute_col = attribute_definitions[element_namespace]
148
+ end
149
+ if attribute_col && attribute_col[name.to_sym]
150
+ attribute_col[name.to_sym].new.tap {|a| attributes << a}
151
+ else
152
+ raise(ArgumentError, "Unknown attribute #{name.inspect}")
153
+ end
154
+ end
155
+
156
+ def flattened_children
157
+ children.flatten
158
+ end
159
+
160
+ def value_to_string
161
+ nil
162
+ end
163
+
164
+ def set_root_ns(builder)
165
+ builder.parent["xmlns"] = element_namespace.url
166
+ end
167
+
168
+ end # InstantiatableElement
169
+ end # Marshalling
170
+ end # Enterprisifier
@@ -0,0 +1,23 @@
1
+ module Enterprisifier
2
+ module Marshalling
3
+ class Namespace
4
+ attr_reader :short_name, :url
5
+
6
+ def initialize(short_name, url)
7
+ @short_name, @url = short_name, url
8
+ end
9
+
10
+ def ==(other_ns)
11
+ other_ns.url == url
12
+ end
13
+
14
+ def hash
15
+ url.hash
16
+ end
17
+
18
+ def is?(short_name_or_url)
19
+ @short_name == short_name_or_url || @url == short_name_or_url
20
+ end
21
+ end # Namespace
22
+ end # Marshalling
23
+ end # Enterprisifier
@@ -0,0 +1,30 @@
1
+ module Enterprisifier
2
+ module Marshalling
3
+ module Reification
4
+
5
+ #
6
+ # @todo - this is ugly.
7
+ def reify(reified)
8
+ here = self
9
+ reified.instance_eval do
10
+ define_method(:value=) do |ruby_val|
11
+ (@value ||= here.new).value = ruby_val
12
+ end
13
+
14
+ define_method(:value) do
15
+ @value ? @value.ruby_value : nil
16
+ end
17
+
18
+ define_method(:value_from_string) do |str_val|
19
+ @value ||= here.from_string(str_val)
20
+ end
21
+
22
+ define_method(:value_to_string) do
23
+ @value ? @value.to_xml_string : nil
24
+ end
25
+ end
26
+ end
27
+
28
+ end # Reification
29
+ end # Marshalling
30
+ end # Enterprisifier