openagent 0.7.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (221) hide show
  1. data/README.md +64 -0
  2. data/lib/openagent.rb +4 -0
  3. data/lib/openagent/agent.rb +24 -0
  4. data/lib/openagent/client.rb +170 -0
  5. data/lib/openagent/errors.rb +30 -0
  6. data/lib/openagent/message_builder.rb +171 -0
  7. data/lib/openagent/ssl_config.rb +26 -0
  8. data/lib/openagent/version.rb +3 -0
  9. data/lib/openagent/xml_helpers.rb +24 -0
  10. data/lib/openagent/zone.rb +58 -0
  11. data/lib/sif/infra/common/application.rb +13 -0
  12. data/lib/sif/infra/common/condition.rb +13 -0
  13. data/lib/sif/infra/common/condition_group.rb +14 -0
  14. data/lib/sif/infra/common/data.rb +11 -0
  15. data/lib/sif/infra/common/error.rb +14 -0
  16. data/lib/sif/infra/common/event.rb +0 -0
  17. data/lib/sif/infra/common/event_object.rb +12 -0
  18. data/lib/sif/infra/common/extended_query.rb +15 -0
  19. data/lib/sif/infra/common/extended_query_results.rb +12 -0
  20. data/lib/sif/infra/common/header.rb +27 -0
  21. data/lib/sif/infra/common/message.rb +49 -0
  22. data/lib/sif/infra/common/object.rb +11 -0
  23. data/lib/sif/infra/common/object_data.rb +46 -0
  24. data/lib/sif/infra/common/other_id.rb +12 -0
  25. data/lib/sif/infra/common/property.rb +12 -0
  26. data/lib/sif/infra/common/protocol.rb +16 -0
  27. data/lib/sif/infra/common/provision.rb +17 -0
  28. data/lib/sif/infra/common/query.rb +16 -0
  29. data/lib/sif/infra/common/query_object.rb +12 -0
  30. data/lib/sif/infra/common/secure_channel.rb +12 -0
  31. data/lib/sif/infra/common/security.rb +13 -0
  32. data/lib/sif/infra/common/status.rb +16 -0
  33. data/lib/sif/infra/common/unprovision.rb +9 -0
  34. data/lib/sif/infra/common/vendor.rb +13 -0
  35. data/lib/sif/infra/messages/ack.rb +16 -0
  36. data/lib/sif/infra/messages/event.rb +12 -0
  37. data/lib/sif/infra/messages/get_agent_acl.rb +11 -0
  38. data/lib/sif/infra/messages/get_message.rb +11 -0
  39. data/lib/sif/infra/messages/get_zone_status.rb +10 -0
  40. data/lib/sif/infra/messages/ping.rb +10 -0
  41. data/lib/sif/infra/messages/provide.rb +16 -0
  42. data/lib/sif/infra/messages/provision.rb +18 -0
  43. data/lib/sif/infra/messages/register.rb +21 -0
  44. data/lib/sif/infra/messages/request.rb +16 -0
  45. data/lib/sif/infra/messages/responder.rb +9 -0
  46. data/lib/sif/infra/messages/response.rb +18 -0
  47. data/lib/sif/infra/messages/sleep.rb +11 -0
  48. data/lib/sif/infra/messages/subscribe.rb +12 -0
  49. data/lib/sif/infra/messages/system_control.rb +15 -0
  50. data/lib/sif/infra/messages/system_control_data.rb +39 -0
  51. data/lib/sif/infra/messages/unprovide.rb +12 -0
  52. data/lib/sif/infra/messages/unregister.rb +11 -0
  53. data/lib/sif/infra/messages/unsubscribe.rb +12 -0
  54. data/lib/sif/infra/messages/wakeup.rb +11 -0
  55. data/lib/sif/infra/messages/zone_status_role.rb +12 -0
  56. data/lib/sif/infra/objects/agent_acl.rb +19 -0
  57. data/lib/sif/infra/objects/zone_status.rb +30 -0
  58. data/lib/sif/models/common/address.rb +21 -0
  59. data/lib/sif/models/common/alert_message.rb +12 -0
  60. data/lib/sif/models/common/base_name.rb +12 -0
  61. data/lib/sif/models/common/calendar_summary.rb +28 -0
  62. data/lib/sif/models/common/code.rb +12 -0
  63. data/lib/sif/models/common/contact_info.rb +21 -0
  64. data/lib/sif/models/common/credits_attempted.rb +12 -0
  65. data/lib/sif/models/common/demographics.rb +31 -0
  66. data/lib/sif/models/common/dwelling_arrangement.rb +14 -0
  67. data/lib/sif/models/common/earned_status.rb +15 -0
  68. data/lib/sif/models/common/electronic_id.rb +12 -0
  69. data/lib/sif/models/common/email.rb +13 -0
  70. data/lib/sif/models/common/english_proficiency.rb +14 -0
  71. data/lib/sif/models/common/exceptionality_category.rb +13 -0
  72. data/lib/sif/models/common/grade_level.rb +12 -0
  73. data/lib/sif/models/common/grid_location.rb +12 -0
  74. data/lib/sif/models/common/identification_info.rb +12 -0
  75. data/lib/sif/models/common/language.rb +14 -0
  76. data/lib/sif/models/common/meal_status.rb +16 -0
  77. data/lib/sif/models/common/medical_alert_message.rb +12 -0
  78. data/lib/sif/models/common/meeting_time.rb +12 -0
  79. data/lib/sif/models/common/name.rb +19 -0
  80. data/lib/sif/models/common/other_code.rb +12 -0
  81. data/lib/sif/models/common/other_id.rb +12 -0
  82. data/lib/sif/models/common/phone_number.rb +15 -0
  83. data/lib/sif/models/common/principal_info.rb +12 -0
  84. data/lib/sif/models/common/race.rb +15 -0
  85. data/lib/sif/models/common/sced_code.rb +15 -0
  86. data/lib/sif/models/common/schedule_info.rb +14 -0
  87. data/lib/sif/models/common/schedule_info_override.rb +13 -0
  88. data/lib/sif/models/common/school_contact.rb +13 -0
  89. data/lib/sif/models/common/school_course_info_override.rb +18 -0
  90. data/lib/sif/models/common/street.rb +22 -0
  91. data/lib/sif/models/common/subject_area.rb +13 -0
  92. data/lib/sif/models/groups/data_model/term_span.rb +14 -0
  93. data/lib/sif/models/groups/sis/attendance_code_info.rb +23 -0
  94. data/lib/sif/models/groups/sis/calendar_date.rb +25 -0
  95. data/lib/sif/models/groups/sis/discipline_incident.rb +31 -0
  96. data/lib/sif/models/groups/sis/lea_info.rb +28 -0
  97. data/lib/sif/models/groups/sis/personal_representer.rb +22 -0
  98. data/lib/sif/models/groups/sis/school_course_info.rb +30 -0
  99. data/lib/sif/models/groups/sis/school_info.rb +32 -0
  100. data/lib/sif/models/groups/sis/section_info.rb +26 -0
  101. data/lib/sif/models/groups/sis/sis_representer.rb +15 -0
  102. data/lib/sif/models/groups/sis/staff_personal.rb +20 -0
  103. data/lib/sif/models/groups/sis/student_personal.rb +37 -0
  104. data/lib/sif/models/groups/sis/student_section_enrollment.rb +21 -0
  105. data/lib/sif/models/groups/sis/term_info.rb +29 -0
  106. data/lib/sif/representations/infra/common/application.rb +16 -0
  107. data/lib/sif/representations/infra/common/condition.rb +16 -0
  108. data/lib/sif/representations/infra/common/condition_group.rb +18 -0
  109. data/lib/sif/representations/infra/common/data.rb +17 -0
  110. data/lib/sif/representations/infra/common/error.rb +17 -0
  111. data/lib/sif/representations/infra/common/event.rb +0 -0
  112. data/lib/sif/representations/infra/common/event_object.rb +15 -0
  113. data/lib/sif/representations/infra/common/extended_query.rb +18 -0
  114. data/lib/sif/representations/infra/common/extended_query_results.rb +15 -0
  115. data/lib/sif/representations/infra/common/header.rb +23 -0
  116. data/lib/sif/representations/infra/common/message.rb +54 -0
  117. data/lib/sif/representations/infra/common/object.rb +14 -0
  118. data/lib/sif/representations/infra/common/object_data.rb +43 -0
  119. data/lib/sif/representations/infra/common/other_id.rb +15 -0
  120. data/lib/sif/representations/infra/common/property.rb +15 -0
  121. data/lib/sif/representations/infra/common/protocol.rb +22 -0
  122. data/lib/sif/representations/infra/common/provision.rb +38 -0
  123. data/lib/sif/representations/infra/common/query.rb +24 -0
  124. data/lib/sif/representations/infra/common/query_object.rb +15 -0
  125. data/lib/sif/representations/infra/common/secure_channel.rb +15 -0
  126. data/lib/sif/representations/infra/common/security.rb +18 -0
  127. data/lib/sif/representations/infra/common/status.rb +18 -0
  128. data/lib/sif/representations/infra/messages/ack.rb +25 -0
  129. data/lib/sif/representations/infra/messages/event.rb +19 -0
  130. data/lib/sif/representations/infra/messages/get_message.rb +12 -0
  131. data/lib/sif/representations/infra/messages/ping.rb +13 -0
  132. data/lib/sif/representations/infra/messages/provide.rb +19 -0
  133. data/lib/sif/representations/infra/messages/provision.rb +37 -0
  134. data/lib/sif/representations/infra/messages/register.rb +30 -0
  135. data/lib/sif/representations/infra/messages/request.rb +24 -0
  136. data/lib/sif/representations/infra/messages/response.rb +29 -0
  137. data/lib/sif/representations/infra/messages/sleep.rb +14 -0
  138. data/lib/sif/representations/infra/messages/subscribe.rb +19 -0
  139. data/lib/sif/representations/infra/messages/system_control.rb +23 -0
  140. data/lib/sif/representations/infra/messages/system_control_data.rb +31 -0
  141. data/lib/sif/representations/infra/messages/wakeup.rb +14 -0
  142. data/lib/sif/representations/models/common/address.rb +24 -0
  143. data/lib/sif/representations/models/common/alert_message.rb +16 -0
  144. data/lib/sif/representations/models/common/contact_info.rb +28 -0
  145. data/lib/sif/representations/models/common/credits_attempted.rb +15 -0
  146. data/lib/sif/representations/models/common/demographics.rb +43 -0
  147. data/lib/sif/representations/models/common/dwelling_arrangement.rb +18 -0
  148. data/lib/sif/representations/models/common/electronic_id.rb +16 -0
  149. data/lib/sif/representations/models/common/email.rb +16 -0
  150. data/lib/sif/representations/models/common/english_proficiency.rb +17 -0
  151. data/lib/sif/representations/models/common/identification_info.rb +16 -0
  152. data/lib/sif/representations/models/common/language.rb +19 -0
  153. data/lib/sif/representations/models/common/medical_alert_message.rb +15 -0
  154. data/lib/sif/representations/models/common/meeting_time.rb +16 -0
  155. data/lib/sif/representations/models/common/name.rb +22 -0
  156. data/lib/sif/representations/models/common/other_code.rb +15 -0
  157. data/lib/sif/representations/models/common/other_id.rb +15 -0
  158. data/lib/sif/representations/models/common/phone_number.rb +18 -0
  159. data/lib/sif/representations/models/common/principal_info.rb +15 -0
  160. data/lib/sif/representations/models/common/race.rb +18 -0
  161. data/lib/sif/representations/models/common/sced_code.rb +18 -0
  162. data/lib/sif/representations/models/common/schedule_info.rb +19 -0
  163. data/lib/sif/representations/models/common/schedule_info_override.rb +18 -0
  164. data/lib/sif/representations/models/common/school_contact.rb +17 -0
  165. data/lib/sif/representations/models/common/school_course_info_override.rb +21 -0
  166. data/lib/sif/representations/models/common/street.rb +26 -0
  167. data/lib/sif/representations/models/common/subject_area.rb +17 -0
  168. data/lib/sif/representations/models/groups/data_model/term_span.rb +20 -0
  169. data/lib/sif/representations/models/groups/sis/personal_representer.rb +38 -0
  170. data/lib/sif/representations/models/groups/sis/school_course_info.rb +36 -0
  171. data/lib/sif/representations/models/groups/sis/school_info.rb +47 -0
  172. data/lib/sif/representations/models/groups/sis/section_info.rb +29 -0
  173. data/lib/sif/representations/models/groups/sis/sis_representer.rb +17 -0
  174. data/lib/sif/representations/models/groups/sis/staff_personal.rb +19 -0
  175. data/lib/sif/representations/models/groups/sis/student_personal.rb +37 -0
  176. data/lib/sif/representations/models/groups/sis/student_section_enrollment.rb +26 -0
  177. data/lib/sif/representations/models/groups/sis/term_info.rb +30 -0
  178. data/lib/sif/sif.rb +249 -0
  179. data/openagent.gemspec +33 -0
  180. data/spec/agent_spec.rb +32 -0
  181. data/spec/client_spec.rb +96 -0
  182. data/spec/fixtures/agent.yaml +31 -0
  183. data/spec/fixtures/messages/event.xml +72 -0
  184. data/spec/fixtures/messages/response.xml +107 -0
  185. data/spec/fixtures/sif/attendance_code_info.xml +9 -0
  186. data/spec/fixtures/sif/calendar_date.xml +22 -0
  187. data/spec/fixtures/sif/calendar_summary.xml +21 -0
  188. data/spec/fixtures/sif/demographics.xml +33 -0
  189. data/spec/fixtures/sif/discipline_incident.xml +70 -0
  190. data/spec/fixtures/sif/lea_info.xml +55 -0
  191. data/spec/fixtures/sif/section_info.xml +1536 -0
  192. data/spec/fixtures/sif/sif_header.xml +12 -0
  193. data/spec/fixtures/sif/sif_message__response.xml +107 -0
  194. data/spec/fixtures/sif/sif_object_data.xml +5 -0
  195. data/spec/fixtures/sif/sif_protocol.xml +3 -0
  196. data/spec/fixtures/sif/sif_protocol__properties.xml +10 -0
  197. data/spec/fixtures/sif/sif_provide.xml +9 -0
  198. data/spec/fixtures/sif/sif_provision.xml +33 -0
  199. data/spec/fixtures/sif/sif_register.xml +20 -0
  200. data/spec/fixtures/sif/sif_request.xml +21 -0
  201. data/spec/fixtures/sif/sif_response.xml +19 -0
  202. data/spec/fixtures/sif/sif_system_control.xml +10 -0
  203. data/spec/fixtures/sif/stu_pers_resp.xml +2 -0
  204. data/spec/fixtures/sif/student_personal.xml +42 -0
  205. data/spec/fixtures/zone.yaml +6 -0
  206. data/spec/message_builder_spec.rb +81 -0
  207. data/spec/response_spec.rb +35 -0
  208. data/spec/sif/representations/xml/header_spec.rb +30 -0
  209. data/spec/sif/representations/xml/message_spec.rb +20 -0
  210. data/spec/sif/representations/xml/object_data_spec.rb +19 -0
  211. data/spec/sif/representations/xml/protocol_spec.rb +34 -0
  212. data/spec/sif/representations/xml/provide_spec.rb +19 -0
  213. data/spec/sif/representations/xml/provision_spec.rb +56 -0
  214. data/spec/sif/representations/xml/register_spec.rb +17 -0
  215. data/spec/sif/representations/xml/request_spec.rb +17 -0
  216. data/spec/sif/representations/xml/response_spec.rb +16 -0
  217. data/spec/sif/representations/xml/spec_helper.rb +7 -0
  218. data/spec/sif/representations/xml/student_personal_spec.rb +69 -0
  219. data/spec/spec_helper.rb +7 -0
  220. data/spec/zone_spec.rb +26 -0
  221. metadata +455 -0
@@ -0,0 +1,26 @@
1
+ require "net/https"
2
+ require "virtus"
3
+
4
+ module OpenAgent
5
+ class SSLConfig
6
+ include Virtus.model
7
+
8
+ attribute :verify_mode, Integer, :default => OpenSSL::SSL::VERIFY_NONE
9
+ attribute :client_cert
10
+ attribute :client_key
11
+ attribute :ca_file
12
+
13
+ def configure(conn)
14
+ conn.use_ssl = true
15
+ conn.verify_mode = verify_mode
16
+
17
+ conn.cert = client_cert if client_cert
18
+ conn.key = client_key if client_key
19
+ conn.ca_file = ca_file if ca_file
20
+ end
21
+
22
+ def cert_key
23
+ "#{client_cert} #{client_key}"
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,3 @@
1
+ module OpenAgent
2
+ VERSION = '0.7.1' unless defined?(OpenAgent::VERSION)
3
+ end
@@ -0,0 +1,24 @@
1
+ require "nokogiri"
2
+
3
+ module OpenAgent
4
+ module XMLHelpers
5
+ PP_XSLT = File.read(File.join(File.dirname(__FILE__), 'pretty_print.xslt'))
6
+ PP_XSL = Nokogiri::XSLT(PP_XSLT)
7
+
8
+ def formatted_xml(xml, pretty_print=true)
9
+ pretty_print ? parse_well_formed_xml(xml) : xml
10
+ end
11
+
12
+ def pretty_xml(doc)
13
+ PP_XSL.apply_to(doc).to_s
14
+ end
15
+
16
+ # If XML is well-formed, reformat it as a pretty XML document.
17
+ def parse_well_formed_xml(xml)
18
+ doc = Nokogiri::XML(xml){ |c| c.strict }
19
+ pretty_xml(doc)
20
+ rescue Nokogiri::XML::SyntaxError
21
+ xml
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,58 @@
1
+ require "net/http"
2
+ require "net/https"
3
+ require "uuid"
4
+ require "uri"
5
+
6
+ require_relative "ssl_config"
7
+
8
+ require "virtus"
9
+
10
+ module OpenAgent
11
+ class Zone
12
+ include Virtus.model
13
+
14
+ attribute :uri
15
+ attribute :timeout, Float, :default => 60
16
+ attribute :open_timeout, Float, :default => 30
17
+ attribute :ssl, SSLConfig
18
+
19
+ def connection
20
+ @connection ||= Net::HTTP.new(host, port).tap do |conn|
21
+ ssl.configure(conn) if ssl
22
+ conn.read_timeout = timeout if timeout
23
+ conn.open_timeout = open_timeout if open_timeout
24
+ end
25
+ end
26
+
27
+ def url
28
+ @url ||= URI.parse(uri)
29
+ end
30
+
31
+ def host
32
+ url.host
33
+ end
34
+
35
+ def port
36
+ url.port
37
+ end
38
+
39
+ def path
40
+ url.path == "" ? "/" : url.path
41
+ end
42
+
43
+ def create_request(msg)
44
+ Net::HTTP::Post.new(path).tap do |post|
45
+ post.body = msg.to_s
46
+ post.content_type = "application/xml"
47
+ end
48
+ end
49
+
50
+ def send_request(request)
51
+ connection.request(request)
52
+ end
53
+
54
+ def send_message(msg)
55
+ send_request(create_request(msg))
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,13 @@
1
+ module SIF
2
+ module Infra
3
+ module Common
4
+ class Application
5
+ include Virtus.model
6
+
7
+ attribute :vendor, String
8
+ attribute :product, String
9
+ attribute :version, String
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module SIF
2
+ module Infra
3
+ module Common
4
+ class Condition
5
+ include Virtus.model
6
+
7
+ attribute :element, String
8
+ attribute :operator, String
9
+ attribute :value, String
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ require_relative 'condition'
2
+
3
+ module SIF
4
+ module Infra
5
+ module Common
6
+ class ConditionGroup
7
+ include Virtus.model
8
+
9
+ attribute :type, String
10
+ attribute :conditions, Array[Condition]
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,11 @@
1
+ module SIF
2
+ module Infra
3
+ module Common
4
+ class Data
5
+ include Virtus.model
6
+
7
+ attribute :message
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,14 @@
1
+ module SIF
2
+ module Infra
3
+ module Common
4
+ class Error
5
+ include Virtus.model
6
+
7
+ attribute :category, String
8
+ attribute :code, String
9
+ attribute :desc, String
10
+ attribute :extended_desc, String
11
+ end
12
+ end
13
+ end
14
+ end
File without changes
@@ -0,0 +1,12 @@
1
+ module SIF
2
+ module Infra
3
+ module Common
4
+ class EventObject
5
+ include Virtus.model
6
+
7
+ attribute :object_name, String
8
+ attribute :action, String
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,15 @@
1
+ module SIF
2
+ module Infra
3
+ module Common
4
+ class ExtendedQuery
5
+ include Virtus.model
6
+
7
+ attribute :destination_provider
8
+ attribute :select
9
+ attribute :from
10
+ attribute :where
11
+ attribute :order_by
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,12 @@
1
+ module SIF
2
+ module Infra
3
+ module Common
4
+ class ExtendedQueryResults
5
+ include Virtus.model
6
+
7
+ attribute :column_headers
8
+ attribute :rows
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,27 @@
1
+ require_relative 'security'
2
+
3
+ module SIF
4
+ module Infra
5
+ module Common
6
+ class Header
7
+ include Virtus.model
8
+
9
+ attribute :security, Security
10
+
11
+ attribute :msg_id, String
12
+ attribute :timestamp, DateTime
13
+ attribute :source_id, String
14
+ attribute :destination_id, String
15
+ attribute :contexts, Array[String]
16
+
17
+ def authentication_level
18
+ security.secure_channel.authentication_level
19
+ end
20
+
21
+ def encryption_level
22
+ security.secure_channel.encryption_level
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,49 @@
1
+ module SIF
2
+ module Infra
3
+ module Common
4
+ class Message
5
+ include Virtus.model
6
+
7
+ attribute :xmlns, String
8
+ attribute :version, String
9
+
10
+ attribute :ack
11
+ attribute :event
12
+ attribute :provide
13
+ attribute :provision
14
+ attribute :register
15
+ attribute :request
16
+ attribute :response
17
+ attribute :subscribe
18
+ attribute :system_control
19
+ attribute :unprovide
20
+ attribute :unregister
21
+ attribute :unsubscribe
22
+
23
+ def inner_message
24
+ ack.status.data.message
25
+ rescue NoMethodError
26
+ nil
27
+ end
28
+ def response_objects
29
+ inner_message.response.object_data.objects
30
+ rescue NoMethodError
31
+ nil
32
+ end
33
+ def type
34
+ if event then :event else :response end
35
+ end
36
+
37
+ def content
38
+ ack || event || provide || provision ||
39
+ register || request || response || subscribe ||
40
+ system_control || unprovide || unregister || unsubscribe
41
+ end
42
+
43
+ def msg_id
44
+ content && content.header.msg_id
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,11 @@
1
+ module SIF
2
+ module Infra
3
+ module Common
4
+ class Object
5
+ include Virtus.model
6
+
7
+ attribute :object_name, String
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,46 @@
1
+ module SIF
2
+ module Infra
3
+ module Common
4
+ class ObjectData
5
+ include Virtus.model
6
+
7
+ attribute :event_object, Common::EventObject
8
+
9
+ # attribute :lea_infos, Array[SIF::Model::Group::SIS::LEAInfo]
10
+ attribute :school_course_infos,
11
+ Array[SIF::Model::Group::SIS::SchoolCourseInfo], :default => []
12
+ attribute :school_infos,
13
+ Array[SIF::Model::Group::SIS::SchoolInfo], :default => []
14
+ attribute :staff_personals,
15
+ Array[SIF::Model::Group::SIS::StaffPersonal], :default => []
16
+ attribute :student_personals,
17
+ Array[SIF::Model::Group::SIS::StudentPersonal], :default => []
18
+ attribute :student_section_enrollments,
19
+ Array[SIF::Model::Group::SIS::StudentSectionEnrollment], :default => []
20
+ attribute :term_infos,
21
+ Array[SIF::Model::Group::SIS::TermInfo], :default => []
22
+ attribute :section_infos,
23
+ Array[SIF::Model::Group::SIS::SectionInfo], :default => []
24
+ def objects
25
+ school_course_infos +
26
+ school_infos +
27
+ staff_personals +
28
+ student_personals +
29
+ student_section_enrollments +
30
+ term_infos +
31
+ section_infos
32
+ end
33
+
34
+ def datatype
35
+ return :school_course_info unless school_course_infos.empty?
36
+ return :school_info unless school_infos.empty?
37
+ return :staff_personal unless staff_personals.empty?
38
+ return :student_personal unless student_personals.empty?
39
+ return :student_section_enrollment unless student_section_enrollments.empty?
40
+ return :term_info unless term_infos.empty?
41
+ return :section_info unless section_infos.empty?
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,12 @@
1
+ module SIF
2
+ module Infra
3
+ module Common
4
+ class OtherId
5
+ include Virtus.model
6
+
7
+ attribute :type, String
8
+ attribute :value, String
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ module SIF
2
+ module Infra
3
+ module Common
4
+ class Property
5
+ include Virtus.model
6
+
7
+ attribute :name, String
8
+ attribute :value, String
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,16 @@
1
+ require_relative 'property'
2
+
3
+ module SIF
4
+ module Infra
5
+ module Common
6
+ class Protocol
7
+ include Virtus.model
8
+
9
+ attribute :type, String
10
+ attribute :secure, String
11
+ attribute :url, String
12
+ attribute :properties, Array[Property]
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,17 @@
1
+ module SIF
2
+ module Infra
3
+ module Common
4
+ class Provision
5
+ include Virtus.model
6
+ attribute :header, Common::Header
7
+ attribute :provide_objects, Array[Common::Object]
8
+ attribute :subscribe_objects, Array[Common::Object]
9
+ attribute :publish_add_objects, Array[Common::Object]
10
+ attribute :publish_change_objects, Array[Common::Object]
11
+ attribute :publish_delete_objects, Array[Common::Object]
12
+ attribute :request_objects, Array[Common::Object]
13
+ attribute :respond_objects, Array[Common::Object]
14
+ end
15
+ end
16
+ end
17
+ end