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

Sign up to get free protection for your applications and to get access to all the features.
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