ims-lti 2.0.0.beta.34 → 2.0.0.beta.35

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 (44) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ims.rb +2 -1
  3. data/lib/ims/lis.rb +14 -0
  4. data/lib/ims/lis/context_type/handles.rb +10 -0
  5. data/lib/ims/lis/context_type/urns.rb +10 -0
  6. data/lib/ims/lis/roles/context/handles.rb +60 -0
  7. data/lib/ims/lis/roles/context/urns.rb +60 -0
  8. data/lib/ims/lis/roles/institution/handles.rb +22 -0
  9. data/lib/ims/lis/roles/institution/urns.rb +22 -0
  10. data/lib/ims/lis/roles/system/handles.rb +15 -0
  11. data/lib/ims/lis/roles/system/urns.rb +15 -0
  12. data/lib/ims/lis/statuses/simple_names.rb +9 -0
  13. data/lib/ims/lis/statuses/uris.rb +9 -0
  14. data/lib/ims/lti.rb +1 -0
  15. data/lib/ims/lti/models.rb +3 -1
  16. data/lib/ims/lti/models/membership_service.rb +16 -0
  17. data/lib/ims/lti/models/membership_service/agent.rb +11 -0
  18. data/lib/ims/lti/models/membership_service/container.rb +11 -0
  19. data/lib/ims/lti/models/membership_service/context.rb +11 -0
  20. data/lib/ims/lti/models/membership_service/lis_membership_container.rb +13 -0
  21. data/lib/ims/lti/models/membership_service/lis_person.rb +13 -0
  22. data/lib/ims/lti/models/membership_service/membership.rb +14 -0
  23. data/lib/ims/lti/models/membership_service/organization.rb +14 -0
  24. data/lib/ims/lti/models/membership_service/page.rb +16 -0
  25. data/lib/ims/lti/models/membership_service/person.rb +13 -0
  26. data/lib/ims/lti/models/serializable.rb +12 -0
  27. data/lib/ims/lti/serializers.rb +6 -0
  28. data/lib/ims/lti/serializers/agent_serializer.rb +15 -0
  29. data/lib/ims/lti/serializers/base.rb +125 -0
  30. data/lib/ims/lti/serializers/container_serializer.rb +18 -0
  31. data/lib/ims/lti/serializers/lis_membership_container_serializer.rb +19 -0
  32. data/lib/ims/lti/serializers/lis_person_serializer.rb +13 -0
  33. data/lib/ims/lti/serializers/membership_service.rb +13 -0
  34. data/lib/ims/lti/serializers/membership_service/agent_serializer.rb +5 -0
  35. data/lib/ims/lti/serializers/membership_service/container_serializer.rb +6 -0
  36. data/lib/ims/lti/serializers/membership_service/context_serializer.rb +9 -0
  37. data/lib/ims/lti/serializers/membership_service/lis_membership_container_serializer.rb +9 -0
  38. data/lib/ims/lti/serializers/membership_service/lis_person_serializer.rb +11 -0
  39. data/lib/ims/lti/serializers/membership_service/membership_serializer.rb +7 -0
  40. data/lib/ims/lti/serializers/membership_service/organization_serializer.rb +8 -0
  41. data/lib/ims/lti/serializers/membership_service/page_serializer.rb +10 -0
  42. data/lib/ims/lti/serializers/membership_service/person_serializer.rb +8 -0
  43. data/lib/ims/lti/serializers/person_serializer.rb +13 -0
  44. metadata +55 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a3580b05cd173bd267f4ce2af4d46521d9afc29a
4
- data.tar.gz: 731cc56752b637a036a3bb38a261b7fc7d4be577
3
+ metadata.gz: 964449b43c744efff3c1c34e81c006a12d56e082
4
+ data.tar.gz: 69a97d83beb431c045f48ef8f3484812a602917b
5
5
  SHA512:
6
- metadata.gz: 8a8dc1aa1542a813c11ebb940b2be6ddcb017a84fd0014c5d00d58ca82bdfd6752972fa7405adf3091517dc4300d31926748733bada9134690d37906f41351f0
7
- data.tar.gz: 544957240d256b9c6a96963bbad5a588d52d6dd8ab9bdcfab03dceacec4e455a6e1697a547b7adc764ccdbf64cc077bdeafedfd590bfd8d8c29bc238fb0aa965
6
+ metadata.gz: cc60b2d2ca7e1a686f4e0be8b2c01fa7ef6c8faccbf025f0db0e4688bc4c11a77675ea2027b9349faba9817fa84b7748e06057eef1d188b113c75b4ad22d4e46
7
+ data.tar.gz: 6b1e78fdc4898b9482a9898342ed25bd95b35b7e754d643aae03f934e7ac990aff009a369b41657c2719c528987ffa47ed5784009d707a2efde3b8fbfae5db86
data/lib/ims.rb CHANGED
@@ -1,3 +1,4 @@
1
1
  module IMS
2
2
  require 'ims/lti'
3
- end
3
+ require 'ims/lis'
4
+ end
data/lib/ims/lis.rb ADDED
@@ -0,0 +1,14 @@
1
+ module IMS
2
+ module LIS
3
+ require_relative 'lis/context_type/handles'
4
+ require_relative 'lis/context_type/urns'
5
+ require_relative 'lis/roles/institution/handles'
6
+ require_relative 'lis/roles/institution/urns'
7
+ require_relative 'lis/roles/system/handles'
8
+ require_relative 'lis/roles/system/urns'
9
+ require_relative 'lis/roles/context/handles'
10
+ require_relative 'lis/roles/context/urns'
11
+ require_relative 'lis/statuses/simple_names'
12
+ require_relative 'lis/statuses/uris'
13
+ end
14
+ end
@@ -0,0 +1,10 @@
1
+ module IMS::LIS
2
+ module ContextType
3
+ module Handles
4
+ CourseTemplate = "CourseTemplate"
5
+ CourseOffering = "CourseOffering"
6
+ CourseSection = "CourseSection"
7
+ Group = "Group"
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module IMS::LIS
2
+ module ContextType
3
+ module URNs
4
+ CourseTemplate = "urn:lti:context-type:ims/lis/CourseTemplate"
5
+ CourseOffering = "urn:lti:context-type:ims/lis/CourseOffering"
6
+ CourseSection = "urn:lti:context-type:ims/lis/CourseSection"
7
+ Group = "urn:lti:context-type:ims/lis/Group"
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,60 @@
1
+ module IMS::LIS
2
+ module Roles
3
+ module Context
4
+ module Handles
5
+ Learner = "Learner"
6
+ Learner_Learner = "Learner/Learner"
7
+ Learner_NonCreditLearner = "Learner/NonCreditLearner"
8
+ Learner_GuestLearner = "Learner/GuestLearner"
9
+ Learner_ExternalLearner = "Learner/ExternalLearner"
10
+ Learner_Instructor = "Learner/Instructor"
11
+ Instructor = "Instructor"
12
+ Instructor_PrimaryInstructor = "Instructor/PrimaryInstructor"
13
+ Instructor_Lecturer = "Instructor/Lecturer"
14
+ Instructor_GuestInstructor = "Instructor/GuestInstructor"
15
+ Instructor_ExternalInstructor = "Instructor/ExternalInstructor"
16
+ ContentDeveloper = "ContentDeveloper"
17
+ ContentDeveloper_ContentDeveloper = "ContentDeveloper/ContentDeveloper"
18
+ ContentDeveloper_Librarian = "ContentDeveloper/Librarian"
19
+ ContentDeveloper_ContentExpert = "ContentDeveloper/ContentExpert"
20
+ ContentDeveloper_ExternalContentExpert = "ContentDeveloper/ExternalContentExpert"
21
+ Member = "Member"
22
+ Member_Member = "Member/Member"
23
+ Manager = "Manager"
24
+ Manager_AreaManager = "Manager/AreaManager"
25
+ Manager_CourseCoordinator = "Manager/CourseCoordinator"
26
+ Manager_Observer = "Manager/Observer"
27
+ Manager_ExternalObserver = "Manager/ExternalObserver"
28
+ Mentor = "Mentor"
29
+ Mentor_Mentor = "Mentor/Mentor"
30
+ Mentor_Reviewer = "Mentor/Reviewer"
31
+ Mentor_Advisor = "Mentor/Advisor"
32
+ Mentor_Auditor = "Mentor/Auditor"
33
+ Mentor_Tutor = "Mentor/Tutor"
34
+ Mentor_LearningFacilitator = "Mentor/LearningFacilitator"
35
+ Mentor_ExternalMentor = "Mentor/ExternalMentor"
36
+ Mentor_ExternalReviewer = "Mentor/ExternalReviewer"
37
+ Mentor_ExternalAdvisor = "Mentor/ExternalAdvisor"
38
+ Mentor_ExternalAuditor = "Mentor/ExternalAuditor"
39
+ Mentor_ExternalTutor = "Mentor/ExternalTutor"
40
+ Mentor_ExternalLearningFacilitator = "Mentor/ExternalLearningFacilitator"
41
+ Administrator = "Administrator"
42
+ Administrator_Administrator = "Administrator/Administrator"
43
+ Administrator_Support = "Administrator/Support"
44
+ Administrator_Developer = "Administrator/Developer"
45
+ Administrator_SystemAdministrator = "Administrator/SystemAdministrator"
46
+ Administrator_ExternalSystemAdministrator = "Administrator/ExternalSystemAdministrator"
47
+ Administrator_ExternalDeveloper = "Administrator/ExternalDeveloper"
48
+ Administrator_ExternalSupport = "Administrator/ExternalSupport"
49
+ TeachingAssistant = "TeachingAssistant"
50
+ TeachingAssistant_TeachingAssistant = "TeachingAssistant/TeachingAssistant"
51
+ TeachingAssistant_TeachingAssistantSection = "TeachingAssistant/TeachingAssistantSection"
52
+ TeachingAssistant_TeachingAssistantSectionAssociation = "TeachingAssistant/TeachingAssistantSectionAssociation"
53
+ TeachingAssistant_TeachingAssistantOffering = "TeachingAssistant/TeachingAssistantOffering"
54
+ TeachingAssistant_TeachingAssistantTemplate = "TeachingAssistant/TeachingAssistantTemplate"
55
+ TeachingAssistant_TeachingAssistantGroup = "TeachingAssistant/TeachingAssistantGroup"
56
+ TeachingAssistant_Grader = "TeachingAssistant/Grader"
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,60 @@
1
+ module IMS::LIS
2
+ module Roles
3
+ module Context
4
+ module URNs
5
+ Learner = "urn:lti:role:ims/lis/Learner"
6
+ Learner_Learner = "urn:lti:role:ims/lis/Learner/Learner"
7
+ Learner_NonCreditLearner = "urn:lti:role:ims/lis/Learner/NonCreditLearner"
8
+ Learner_GuestLearner = "urn:lti:role:ims/lis/Learner/GuestLearner"
9
+ Learner_ExternalLearner = "urn:lti:role:ims/lis/Learner/ExternalLearner"
10
+ Learner_Instructor = "urn:lti:role:ims/lis/Learner/Instructor"
11
+ Instructor = "urn:lti:role:ims/lis/Instructor"
12
+ Instructor_PrimaryInstructor = "urn:lti:role:ims/lis/Instructor/PrimaryInstructor"
13
+ Instructor_Lecturer = "urn:lti:role:ims/lis/Instructor/Lecturer"
14
+ Instructor_GuestInstructor = "urn:lti:role:ims/lis/Instructor/GuestInstructor"
15
+ Instructor_ExternalInstructor = "urn:lti:role:ims/lis/Instructor/ExternalInstructor"
16
+ ContentDeveloper = "urn:lti:role:ims/lis/ContentDeveloper"
17
+ ContentDeveloper_ContentDeveloper = "urn:lti:role:ims/lis/ContentDeveloper/ContentDeveloper"
18
+ ContentDeveloper_Librarian = "urn:lti:role:ims/lis/ContentDeveloper/Librarian"
19
+ ContentDeveloper_ContentExpert = "urn:lti:role:ims/lis/ContentDeveloper/ContentExpert"
20
+ ContentDeveloper_ExternalContentExpert = "urn:lti:role:ims/lis/ContentDeveloper/ExternalContentExpert"
21
+ Member = "urn:lti:role:ims/lis/Member"
22
+ Member_Member = "urn:lti:role:ims/lis/Member/Member"
23
+ Manager = "urn:lti:role:ims/lis/Manager"
24
+ Manager_AreaManager = "urn:lti:role:ims/lis/Manager/AreaManager"
25
+ Manager_CourseCoordinator = "urn:lti:role:ims/lis/Manager/CourseCoordinator"
26
+ Manager_Observer = "urn:lti:role:ims/lis/Manager/Observer"
27
+ Manager_ExternalObserver = "urn:lti:role:ims/lis/Manager/ExternalObserver"
28
+ Mentor = "urn:lti:role:ims/lis/Mentor"
29
+ Mentor_Mentor = "urn:lti:role:ims/lis/Mentor/Mentor"
30
+ Mentor_Reviewer = "urn:lti:role:ims/lis/Mentor/Reviewer"
31
+ Mentor_Advisor = "urn:lti:role:ims/lis/Mentor/Advisor"
32
+ Mentor_Auditor = "urn:lti:role:ims/lis/Mentor/Auditor"
33
+ Mentor_Tutor = "urn:lti:role:ims/lis/Mentor/Tutor"
34
+ Mentor_LearningFacilitator = "urn:lti:role:ims/lis/Mentor/LearningFacilitator"
35
+ Mentor_ExternalMentor = "urn:lti:role:ims/lis/Mentor/ExternalMentor"
36
+ Mentor_ExternalReviewer = "urn:lti:role:ims/lis/Mentor/ExternalReviewer"
37
+ Mentor_ExternalAdvisor = "urn:lti:role:ims/lis/Mentor/ExternalAdvisor"
38
+ Mentor_ExternalAuditor = "urn:lti:role:ims/lis/Mentor/ExternalAuditor"
39
+ Mentor_ExternalTutor = "urn:lti:role:ims/lis/Mentor/ExternalTutor"
40
+ Mentor_ExternalLearningFacilitator = "urn:lti:role:ims/lis/Mentor/ExternalLearningFacilitator"
41
+ Administrator = "urn:lti:role:ims/lis/Administrator"
42
+ Administrator_Administrator = "urn:lti:role:ims/lis/Administrator/Administrator"
43
+ Administrator_Support = "urn:lti:role:ims/lis/Administrator/Support"
44
+ Administrator_ExternalDeveloper = "urn:lti:role:ims/lis/Administrator/ExternalDeveloper"
45
+ Administrator_SystemAdministrator = "urn:lti:role:ims/lis/Administrator/SystemAdministrator"
46
+ Administrator_ExternalSystemAdministrator = "urn:lti:role:ims/lis/Administrator/ExternalSystemAdministrator"
47
+ Administrator_ExternalDeveloper = "urn:lti:role:ims/lis/Administrator/ExternalDeveloper"
48
+ Administrator_ExternalSupport = "urn:lti:role:ims/lis/Administrator/ExternalSupport"
49
+ TeachingAssistant = "urn:lti:role:ims/lis/TeachingAssistant"
50
+ TeachingAssistant_TeachingAssistant = "urn:lti:role:ims/lis/TeachingAssistant/TeachingAssistant"
51
+ TeachingAssistant_TeachingAssistantSection = "urn:lti:role:ims/lis/TeachingAssistant/TeachingAssistantSection"
52
+ TeachingAssistant_TeachingAssistantSectionAssociation = "urn:lti:role:ims/lis/TeachingAssistant/TeachingAssistantSectionAssociation"
53
+ TeachingAssistant_TeachingAssistantOffering = "urn:lti:role:ims/lis/TeachingAssistant/TeachingAssistantOffering"
54
+ TeachingAssistant_TeachingAssistantTemplate = "urn:lti:role:ims/lis/TeachingAssistant/TeachingAssistantTemplate"
55
+ TeachingAssistant_TeachingAssistantGroup = "urn:lti:role:ims/lis/TeachingAssistant/TeachingAssistantGroup"
56
+ TeachingAssistant_Grader = "urn:lti:role:ims/lis/TeachingAssistant/Grader"
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,22 @@
1
+ module IMS::LIS
2
+ module Roles
3
+ module Institution
4
+ module Handles
5
+ Student = "Student"
6
+ Faculty = "Faculty"
7
+ Member = "Member"
8
+ Learner = "Learner"
9
+ Instructor = "Instructor"
10
+ Mentor = "Mentor"
11
+ Staff = "Staff"
12
+ Alumni = "Alumni"
13
+ ProspectiveStudent = "ProspectiveStudent"
14
+ Guest = "Guest"
15
+ Other = "Other"
16
+ Administrator = "Administrator"
17
+ Observer = "Observer"
18
+ None = "None"
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,22 @@
1
+ module IMS::LIS
2
+ module Roles
3
+ module Institution
4
+ module URNs
5
+ Student = "urn:lti:instrole:ims/lis/Student"
6
+ Faculty = "urn:lti:instrole:ims/lis/Faculty"
7
+ Member = "urn:lti:instrole:ims/lis/Member"
8
+ Learner = "urn:lti:instrole:ims/lis/Learner"
9
+ Instructor = "urn:lti:instrole:ims/lis/Instructor"
10
+ Mentor = "urn:lti:instrole:ims/lis/Mentor"
11
+ Staff = "urn:lti:instrole:ims/lis/Staff"
12
+ Alumni = "urn:lti:instrole:ims/lis/Alumni"
13
+ ProspectiveStudent = "urn:lti:instrole:ims/lis/ProspectiveStudent"
14
+ Guest = "urn:lti:instrole:ims/lis/Guest"
15
+ Other = "urn:lti:instrole:ims/lis/Other"
16
+ Administrator = "urn:lti:instrole:ims/lis/Administrator"
17
+ Observer = "urn:lti:instrole:ims/lis/Observer"
18
+ None = "urn:lti:instrole:ims/lis/None"
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,15 @@
1
+ module IMS::LIS
2
+ module Roles
3
+ module System
4
+ module Handles
5
+ SysAdmin = "SysAdmin"
6
+ SysSupport = "SysSupport"
7
+ Creator = "Creator"
8
+ AccountAdmin = "AccountAdmin"
9
+ User = "User"
10
+ Administrator = "Administrator"
11
+ None = "None"
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ module IMS::LIS
2
+ module Roles
3
+ module System
4
+ module URNs
5
+ SysAdmin = "urn:lti:sysrole:ims/lis/SysAdmin"
6
+ SysSupport = "urn:lti:sysrole:ims/lis/SysSupport"
7
+ Creator = "urn:lti:sysrole:ims/lis/Creator"
8
+ AccountAdmin = "urn:lti:sysrole:ims/lis/AccountAdmin"
9
+ User = "urn:lti:sysrole:ims/lis/User"
10
+ Administrator = "urn:lti:sysrole:ims/lis/Administrator"
11
+ None = "urn:lti:sysrole:ims/lis/None"
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,9 @@
1
+ module IMS::LIS
2
+ module Statuses
3
+ module SimpleNames
4
+ Active = 'Active'
5
+ Deleted = 'Deleted'
6
+ Inactive = 'Inactive'
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module IMS::LIS
2
+ module Statuses
3
+ module URIs
4
+ Active = 'http://purl.imsglobal.org/vocab/lis/v2/status#Active'
5
+ Deleted = 'http://purl.imsglobal.org/vocab/lis/v2/status#Deleted'
6
+ Inactive = 'http://purl.imsglobal.org/vocab/lis/v2/status#Inactive'
7
+ end
8
+ end
9
+ end
data/lib/ims/lti.rb CHANGED
@@ -12,5 +12,6 @@ module IMS
12
12
  require_relative 'lti/converters'
13
13
  require_relative 'lti/services'
14
14
  require_relative 'lti/errors'
15
+ require_relative 'lti/serializers'
15
16
  end
16
17
  end
@@ -1,6 +1,7 @@
1
1
  module IMS::LTI
2
2
  module Models
3
3
  require_relative 'models/lti_model'
4
+ require_relative 'models/serializable'
4
5
  require_relative 'models/contact'
5
6
  require_relative 'models/localized_name'
6
7
  require_relative 'models/localized_text'
@@ -31,5 +32,6 @@ module IMS::LTI
31
32
  require_relative 'models/content_item_placement'
32
33
  require_relative 'models/content_item_container'
33
34
  require_relative 'models/image'
35
+ require_relative 'models/membership_service'
34
36
  end
35
- end
37
+ end
@@ -0,0 +1,16 @@
1
+ module IMS::LTI::Models
2
+ module MembershipService
3
+ require_relative 'membership_service/agent'
4
+ require_relative 'membership_service/person'
5
+ require_relative 'membership_service/lis_person'
6
+
7
+ require_relative 'membership_service/container'
8
+ require_relative 'membership_service/lis_membership_container'
9
+
10
+ require_relative 'membership_service/organization'
11
+ require_relative 'membership_service/context'
12
+
13
+ require_relative 'membership_service/membership'
14
+ require_relative 'membership_service/page'
15
+ end
16
+ end
@@ -0,0 +1,11 @@
1
+ module IMS::LTI::Models::MembershipService
2
+ class Agent
3
+ include IMS::LTI::Models::Serializable
4
+
5
+ attr_reader :id
6
+
7
+ def initialize(opts={})
8
+ @id = opts[:id]
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module IMS::LTI::Models::MembershipService
2
+ class Container
3
+ include IMS::LTI::Models::Serializable
4
+
5
+ attr_reader :membership_predicate, :membership_subject
6
+
7
+ def initialize(opts={})
8
+ @membership_subject = opts[:membership_subject]
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module IMS::LTI::Models::MembershipService
2
+ class Context < Organization
3
+ attr_reader :context_id
4
+
5
+ def initialize(opts={})
6
+ super(opts)
7
+ @type = 'Context'
8
+ @context_id = opts[:context_id]
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,13 @@
1
+ module IMS::LTI::Models::MembershipService
2
+ class LISMembershipContainer < Container
3
+ attr_reader :context, :type, :id
4
+
5
+ def initialize(opts={})
6
+ super(opts)
7
+ @id = opts[:id]
8
+ @context = 'http://purl.imsglobal.org/ctx/lis/v2/MembershipContainer'
9
+ @type = 'LISMembershipContainer'
10
+ @membership_predicate = 'http://www.w3.org/ns/org#membership'
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module IMS::LTI::Models::MembershipService
2
+ class LISPerson < Person
3
+ attr_reader :email, :result_sourced_id, :sourced_id, :user_id
4
+
5
+ def initialize(opts={})
6
+ super(opts)
7
+ @email = opts[:email]
8
+ @result_sourced_id = opts[:result_sourced_id]
9
+ @sourced_id = opts[:sourced_id]
10
+ @user_id = opts[:user_id]
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ module IMS::LTI::Models::MembershipService
2
+ class Membership
3
+ include IMS::LTI::Models::Serializable
4
+
5
+ attr_reader :id, :status, :member, :role
6
+
7
+ def initialize(opts={})
8
+ @id = opts[:id]
9
+ @status = opts[:status]
10
+ @member = opts[:member]
11
+ @role = opts[:role]
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module IMS::LTI::Models::MembershipService
2
+ class Organization
3
+ include IMS::LTI::Models::Serializable
4
+
5
+ attr_reader :id, :membership, :name, :type
6
+
7
+ def initialize(opts={})
8
+ @id = opts[:id]
9
+ @membership = opts[:membership]
10
+ @name = opts[:name]
11
+ @type = 'Organization'
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,16 @@
1
+ module IMS::LTI::Models::MembershipService
2
+ class Page
3
+ include IMS::LTI::Models::Serializable
4
+
5
+ attr_reader :id, :type, :context, :differences, :page_of, :next_page
6
+
7
+ def initialize(opts={})
8
+ @id = opts[:id]
9
+ @type = 'Page'
10
+ @context = 'http://purl.imsglobal.org/ctx/lis/v2/MembershipContainer'
11
+ @differences = opts[:differences]
12
+ @page_of = opts[:page_of]
13
+ @next_page = opts[:next_page]
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,13 @@
1
+ module IMS::LTI::Models::MembershipService
2
+ class Person < Agent
3
+ attr_reader :family_name, :name, :img, :given_name
4
+
5
+ def initialize(opts={})
6
+ super(opts)
7
+ @family_name = opts[:family_name]
8
+ @name = opts[:name]
9
+ @img = opts[:img]
10
+ @given_name = opts[:given_name]
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,12 @@
1
+ module IMS::LTI::Models
2
+ module Serializable
3
+ def as_json(opts={})
4
+ class_name = self.class.name.gsub(/^IMS::LTI::Models/, 'IMS::LTI::Serializers') + 'Serializer'
5
+ Object.const_get(class_name).as_json(self)
6
+ end
7
+
8
+ def to_json
9
+ as_json.to_json
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,6 @@
1
+ module IMS::LTI
2
+ module Serializers
3
+ require_relative 'serializers/base'
4
+ require_relative 'serializers/membership_service'
5
+ end
6
+ end
@@ -0,0 +1,15 @@
1
+ module IMS::LTI::Serializers
2
+ class AgentSerializer
3
+ def initialize(obj)
4
+ @obj = obj
5
+ end
6
+
7
+ def as_json
8
+ { :@id => @obj.id }
9
+ end
10
+
11
+ def to_json
12
+ as_json.to_json
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,125 @@
1
+ module IMS::LTI::Serializers
2
+ class Base
3
+ class Filter
4
+ def initialize
5
+ @optionals = Set.new
6
+ @keys = {}
7
+ @serializables = Set.new
8
+ @serializable_lists = Set.new
9
+ end
10
+
11
+ def add_filter(name, opts={})
12
+ @optionals.add(name) if opts[:optional]
13
+ @keys[name] = opts[:key] if opts[:key]
14
+ @serializables.add(name) if opts[:serializable]
15
+ @serializable_lists.add(name) if opts[:list_of_serializables]
16
+ end
17
+
18
+ def options_for_attribute(attribute)
19
+ options = {}
20
+ options[:optional] = @optionals.include?(attribute) ? true : false
21
+ options[:key] = @keys[attribute]
22
+ options[:has_serializable] = @serializables.include?(attribute) ? true : false
23
+ options[:has_list_of_serializables] = @serializable_lists.include?(attribute) ? true : false
24
+ options
25
+ end
26
+
27
+ def filter(hash)
28
+ hash = optionals(hash)
29
+ hash = serializables(hash)
30
+ hash = serializable_lists(hash)
31
+ keys(hash) # Needs to happen last
32
+ end
33
+
34
+ private
35
+ def optionals(hash)
36
+ hash.reject { |k, v| @optionals.include?(k) && v.nil? }
37
+ end
38
+
39
+ def serializables(hash)
40
+ hash.reduce({}) do |memo, (k, v)|
41
+ memo[k] = @serializables.include?(k) ? serialize_serializable(v) : v
42
+ memo
43
+ end
44
+ end
45
+
46
+ def serialize_serializable(serializable)
47
+ return if serializable.nil?
48
+ serializable.as_json
49
+ end
50
+
51
+ def serializable_lists(hash)
52
+ hash.reduce({}) do |memo, (k, v)|
53
+ memo[k] = @serializable_lists.include?(k) ? serialize_serializable_list(v) : v
54
+ memo
55
+ end
56
+ end
57
+
58
+ def serialize_serializable_list(list)
59
+ return if list.nil?
60
+ list.map(&:as_json)
61
+ end
62
+
63
+ def keys(hash)
64
+ hash.reduce({}) do |memo, (k, v)|
65
+ key = @keys.include?(k) ? @keys[k] : k
66
+ memo[key] = v
67
+ memo
68
+ end
69
+ end
70
+ end
71
+
72
+ @filter = Filter.new
73
+ @attributes = Set.new
74
+
75
+ def self.inherited(subclass)
76
+ subclass.instance_variable_set(:@filter, Filter.new)
77
+ subclass.instance_variable_set(:@attributes, Set.new)
78
+ end
79
+
80
+ def self.set_attribute(name, opts={})
81
+ @attributes.add(name)
82
+ @filter.add_filter(name, opts)
83
+ end
84
+
85
+ def self.set_attributes(*names)
86
+ names.each { |name| set_attribute(name) }
87
+ end
88
+
89
+ def self.has_serializable(name, opts={})
90
+ opts[:serializable] = true
91
+ opts[:list_of_serializables] = false
92
+ set_attribute(name, opts)
93
+ end
94
+
95
+ def self.has_list_of_serializables(name, opts={})
96
+ opts[:list_of_serializables] = true
97
+ opts[:serializable] = false
98
+ set_attribute(name, opts)
99
+ end
100
+
101
+ def self.as_json(obj)
102
+ @filter.filter(base_hash(obj))
103
+ end
104
+
105
+ def self.to_json(obj)
106
+ as_json(obj).to_json
107
+ end
108
+
109
+ def self.options_for_attribute(attribute)
110
+ @filter.options_for_attribute(attribute)
111
+ end
112
+
113
+ def self.attributes
114
+ @attributes
115
+ end
116
+
117
+ private
118
+
119
+ def self.base_hash(obj)
120
+ h = {}
121
+ @attributes.each { |attribute| h[attribute] = obj.send(attribute) }
122
+ h
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,18 @@
1
+ module IMS::LTI::Serializers
2
+ class ContainerSerializer
3
+ def initialize(obj)
4
+ @obj = obj
5
+ end
6
+
7
+ def as_json
8
+ h = {}
9
+ h[:membershipSubject] = @obj.membership_subject ? @obj.membership_subject.as_json : nil
10
+ h[:membershipPredicate] = @obj.membership_predicate
11
+ h
12
+ end
13
+
14
+ def to_json
15
+ as_json.to_json
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,19 @@
1
+ module IMS::LTI::Serializers
2
+ class LISMembershipContainerSerializer
3
+ def initialize(obj)
4
+ @obj = obj
5
+ end
6
+
7
+ def as_json
8
+ h = super
9
+ h[:@context] = @obj.context
10
+ h[:@id] = @obj.id
11
+ h[:@type] = @obj.type
12
+ h
13
+ end
14
+
15
+ def to_json
16
+ as_json.to_json
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,13 @@
1
+ module IMS::LTI::Serializers
2
+ class LISPersonSerializer
3
+ def as_json
4
+ h = super
5
+ h.merge({
6
+ :email => @obj.email,
7
+ :resultSourcedId => @obj.result_sourced_id,
8
+ :sourcedId => @obj.sourced_id,
9
+ :userId => @obj.user_id
10
+ })
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module IMS::LTI::Serializers
2
+ module MembershipService
3
+ require_relative 'membership_service/agent_serializer'
4
+ require_relative 'membership_service/container_serializer'
5
+ require_relative 'membership_service/context_serializer'
6
+ require_relative 'membership_service/lis_membership_container_serializer'
7
+ require_relative 'membership_service/lis_person_serializer'
8
+ require_relative 'membership_service/membership_serializer'
9
+ require_relative 'membership_service/organization_serializer'
10
+ require_relative 'membership_service/page_serializer'
11
+ require_relative 'membership_service/person_serializer'
12
+ end
13
+ end
@@ -0,0 +1,5 @@
1
+ module IMS::LTI::Serializers::MembershipService
2
+ class AgentSerializer < IMS::LTI::Serializers::Base
3
+ set_attribute :id, key: :@id
4
+ end
5
+ end
@@ -0,0 +1,6 @@
1
+ module IMS::LTI::Serializers::MembershipService
2
+ class ContainerSerializer < IMS::LTI::Serializers::Base
3
+ set_attribute :membership_predicate, key: :membershipPredicate
4
+ has_serializable :membership_subject, key: :membershipSubject
5
+ end
6
+ end
@@ -0,0 +1,9 @@
1
+ module IMS::LTI::Serializers::MembershipService
2
+ class ContextSerializer < IMS::LTI::Serializers::Base
3
+ set_attribute :id, key: :@id
4
+ set_attribute :name
5
+ set_attribute :type, key: :@type
6
+ set_attribute :context_id, key: :contextId
7
+ has_list_of_serializables :membership
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module IMS::LTI::Serializers::MembershipService
2
+ class LISMembershipContainerSerializer < IMS::LTI::Serializers::Base
3
+ set_attribute :membership_predicate, key: :membershipPredicate
4
+ has_serializable :membership_subject, key: :membershipSubject
5
+ set_attribute :id, key: :@id
6
+ set_attribute :context, key: :@context
7
+ set_attribute :type, key: :@type
8
+ end
9
+ end
@@ -0,0 +1,11 @@
1
+ module IMS::LTI::Serializers::MembershipService
2
+ class LISPersonSerializer < IMS::LTI::Serializers::Base
3
+ set_attribute :id, key: :@id
4
+ set_attributes :name, :image, :email
5
+ set_attribute :family_name, key: :familyName
6
+ set_attribute :given_name, key: :givenName
7
+ set_attribute :result_sourced_id, key: :resultSourcedId
8
+ set_attribute :sourced_id, key: :sourcedId
9
+ set_attribute :user_id, key: :userId
10
+ end
11
+ end
@@ -0,0 +1,7 @@
1
+ module IMS::LTI::Serializers::MembershipService
2
+ class MembershipSerializer < IMS::LTI::Serializers::Base
3
+ set_attribute :id, key: :@id
4
+ set_attributes :status, :role
5
+ has_serializable :member
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ module IMS::LTI::Serializers::MembershipService
2
+ class OrganizationSerializer < IMS::LTI::Serializers::Base
3
+ set_attribute :id, key: :@id
4
+ set_attribute :name
5
+ set_attribute :type, key: :@type
6
+ has_list_of_serializables :membership
7
+ end
8
+ end
@@ -0,0 +1,10 @@
1
+ module IMS::LTI::Serializers::MembershipService
2
+ class PageSerializer < IMS::LTI::Serializers::Base
3
+ set_attribute :id, key: :@id
4
+ set_attribute :type, key: :@type
5
+ set_attribute :context, key: :@context
6
+ set_attribute :differences
7
+ set_attribute :next_page, key: :nextPage
8
+ has_serializable :page_of, key: :pageOf
9
+ end
10
+ end
@@ -0,0 +1,8 @@
1
+ module IMS::LTI::Serializers::MembershipService
2
+ class PersonSerializer < IMS::LTI::Serializers::Base
3
+ set_attribute :id, key: :@id
4
+ set_attributes :name, :image
5
+ set_attribute :family_name, key: :familyName
6
+ set_attribute :given_name, key: :givenName
7
+ end
8
+ end
@@ -0,0 +1,13 @@
1
+ module IMS::LTI::Serializers
2
+ class PersonSerializer
3
+ def as_json
4
+ h = super
5
+ h.merge({
6
+ :familyName => @obj.family_name,
7
+ :name => @obj.name,
8
+ :img => @obj.img,
9
+ :givenName => @obj.given_name
10
+ })
11
+ end
12
+ end
13
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ims-lti
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.beta.34
4
+ version: 2.0.0.beta.35
5
5
  platform: ruby
6
6
  authors:
7
7
  - Instructure
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-10 00:00:00.000000000 Z
11
+ date: 2016-02-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: simple_oauth
@@ -136,6 +136,20 @@ dependencies:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
138
  version: 0.10.1
139
+ - !ruby/object:Gem::Dependency
140
+ name: byebug
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '8.2'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '8.2'
139
153
  description:
140
154
  email:
141
155
  executables: []
@@ -146,6 +160,17 @@ files:
146
160
  - LICENSE.txt
147
161
  - README.md
148
162
  - lib/ims.rb
163
+ - lib/ims/lis.rb
164
+ - lib/ims/lis/context_type/handles.rb
165
+ - lib/ims/lis/context_type/urns.rb
166
+ - lib/ims/lis/roles/context/handles.rb
167
+ - lib/ims/lis/roles/context/urns.rb
168
+ - lib/ims/lis/roles/institution/handles.rb
169
+ - lib/ims/lis/roles/institution/urns.rb
170
+ - lib/ims/lis/roles/system/handles.rb
171
+ - lib/ims/lis/roles/system/urns.rb
172
+ - lib/ims/lis/statuses/simple_names.rb
173
+ - lib/ims/lis/statuses/uris.rb
149
174
  - lib/ims/lti.rb
150
175
  - lib/ims/lti/converters.rb
151
176
  - lib/ims/lti/converters/time_json_converter.rb
@@ -169,6 +194,16 @@ files:
169
194
  - lib/ims/lti/models/localized_name.rb
170
195
  - lib/ims/lti/models/localized_text.rb
171
196
  - lib/ims/lti/models/lti_model.rb
197
+ - lib/ims/lti/models/membership_service.rb
198
+ - lib/ims/lti/models/membership_service/agent.rb
199
+ - lib/ims/lti/models/membership_service/container.rb
200
+ - lib/ims/lti/models/membership_service/context.rb
201
+ - lib/ims/lti/models/membership_service/lis_membership_container.rb
202
+ - lib/ims/lti/models/membership_service/lis_person.rb
203
+ - lib/ims/lti/models/membership_service/membership.rb
204
+ - lib/ims/lti/models/membership_service/organization.rb
205
+ - lib/ims/lti/models/membership_service/page.rb
206
+ - lib/ims/lti/models/membership_service/person.rb
172
207
  - lib/ims/lti/models/message_handler.rb
173
208
  - lib/ims/lti/models/messages.rb
174
209
  - lib/ims/lti/models/messages/basic_lti_launch_request.rb
@@ -187,6 +222,7 @@ files:
187
222
  - lib/ims/lti/models/rest_service.rb
188
223
  - lib/ims/lti/models/rest_service_profile.rb
189
224
  - lib/ims/lti/models/security_contract.rb
225
+ - lib/ims/lti/models/serializable.rb
190
226
  - lib/ims/lti/models/service_owner.rb
191
227
  - lib/ims/lti/models/service_provider.rb
192
228
  - lib/ims/lti/models/tool_consumer_profile.rb
@@ -195,6 +231,23 @@ files:
195
231
  - lib/ims/lti/models/tool_setting.rb
196
232
  - lib/ims/lti/models/tool_setting_container.rb
197
233
  - lib/ims/lti/models/vendor.rb
234
+ - lib/ims/lti/serializers.rb
235
+ - lib/ims/lti/serializers/agent_serializer.rb
236
+ - lib/ims/lti/serializers/base.rb
237
+ - lib/ims/lti/serializers/container_serializer.rb
238
+ - lib/ims/lti/serializers/lis_membership_container_serializer.rb
239
+ - lib/ims/lti/serializers/lis_person_serializer.rb
240
+ - lib/ims/lti/serializers/membership_service.rb
241
+ - lib/ims/lti/serializers/membership_service/agent_serializer.rb
242
+ - lib/ims/lti/serializers/membership_service/container_serializer.rb
243
+ - lib/ims/lti/serializers/membership_service/context_serializer.rb
244
+ - lib/ims/lti/serializers/membership_service/lis_membership_container_serializer.rb
245
+ - lib/ims/lti/serializers/membership_service/lis_person_serializer.rb
246
+ - lib/ims/lti/serializers/membership_service/membership_serializer.rb
247
+ - lib/ims/lti/serializers/membership_service/organization_serializer.rb
248
+ - lib/ims/lti/serializers/membership_service/page_serializer.rb
249
+ - lib/ims/lti/serializers/membership_service/person_serializer.rb
250
+ - lib/ims/lti/serializers/person_serializer.rb
198
251
  - lib/ims/lti/services.rb
199
252
  - lib/ims/lti/services/tool_config.rb
200
253
  - lib/ims/lti/services/tool_proxy_registration_service.rb