absorb_api 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +8 -0
  3. data/Gemfile +11 -0
  4. data/LICENSE.txt +21 -0
  5. data/README.md +203 -0
  6. data/Rakefile +2 -0
  7. data/absorb_api.gemspec +25 -0
  8. data/bin/console +14 -0
  9. data/bin/setup +8 -0
  10. data/doc/AbsorbApi.html +216 -0
  11. data/doc/AbsorbApi/Base.html +239 -0
  12. data/doc/AbsorbApi/Category.html +173 -0
  13. data/doc/AbsorbApi/Certificate.html +212 -0
  14. data/doc/AbsorbApi/Chapter.html +160 -0
  15. data/doc/AbsorbApi/Collection.html +180 -0
  16. data/doc/AbsorbApi/Configuration.html +188 -0
  17. data/doc/AbsorbApi/Course.html +534 -0
  18. data/doc/AbsorbApi/CourseEnrollment.html +437 -0
  19. data/doc/AbsorbApi/Curriculum.html +498 -0
  20. data/doc/AbsorbApi/Department.html +242 -0
  21. data/doc/AbsorbApi/LessonEnrollment.html +370 -0
  22. data/doc/AbsorbApi/Orm.html +201 -0
  23. data/doc/AbsorbApi/Relations.html +301 -0
  24. data/doc/AbsorbApi/ResourceNotFound.html +102 -0
  25. data/doc/AbsorbApi/RouteNotFound.html +102 -0
  26. data/doc/AbsorbApi/User.html +615 -0
  27. data/doc/AbsorbApi/ValidationError.html +102 -0
  28. data/doc/Gemfile.html +100 -0
  29. data/doc/Gemfile_lock.html +150 -0
  30. data/doc/LICENSE_txt.html +113 -0
  31. data/doc/README_md.html +340 -0
  32. data/doc/Rakefile.html +93 -0
  33. data/doc/absorb_api_gemspec.html +126 -0
  34. data/doc/bin/setup.html +97 -0
  35. data/doc/created.rid +26 -0
  36. data/doc/css/fonts.css +167 -0
  37. data/doc/css/rdoc.css +590 -0
  38. data/doc/fonts/Lato-Light.ttf +0 -0
  39. data/doc/fonts/Lato-LightItalic.ttf +0 -0
  40. data/doc/fonts/Lato-Regular.ttf +0 -0
  41. data/doc/fonts/Lato-RegularItalic.ttf +0 -0
  42. data/doc/fonts/SourceCodePro-Bold.ttf +0 -0
  43. data/doc/fonts/SourceCodePro-Regular.ttf +0 -0
  44. data/doc/images/add.png +0 -0
  45. data/doc/images/arrow_up.png +0 -0
  46. data/doc/images/brick.png +0 -0
  47. data/doc/images/brick_link.png +0 -0
  48. data/doc/images/bug.png +0 -0
  49. data/doc/images/bullet_black.png +0 -0
  50. data/doc/images/bullet_toggle_minus.png +0 -0
  51. data/doc/images/bullet_toggle_plus.png +0 -0
  52. data/doc/images/date.png +0 -0
  53. data/doc/images/delete.png +0 -0
  54. data/doc/images/find.png +0 -0
  55. data/doc/images/loadingAnimation.gif +0 -0
  56. data/doc/images/macFFBgHack.png +0 -0
  57. data/doc/images/package.png +0 -0
  58. data/doc/images/page_green.png +0 -0
  59. data/doc/images/page_white_text.png +0 -0
  60. data/doc/images/page_white_width.png +0 -0
  61. data/doc/images/plugin.png +0 -0
  62. data/doc/images/ruby.png +0 -0
  63. data/doc/images/tag_blue.png +0 -0
  64. data/doc/images/tag_green.png +0 -0
  65. data/doc/images/transparent.png +0 -0
  66. data/doc/images/wrench.png +0 -0
  67. data/doc/images/wrench_orange.png +0 -0
  68. data/doc/images/zoom.png +0 -0
  69. data/doc/index.html +135 -0
  70. data/doc/js/darkfish.js +161 -0
  71. data/doc/js/jquery.js +4 -0
  72. data/doc/js/navigation.js +142 -0
  73. data/doc/js/navigation.js.gz +0 -0
  74. data/doc/js/search.js +109 -0
  75. data/doc/js/search_index.js +1 -0
  76. data/doc/js/search_index.js.gz +0 -0
  77. data/doc/js/searcher.js +228 -0
  78. data/doc/js/searcher.js.gz +0 -0
  79. data/doc/table_of_contents.html +218 -0
  80. data/lib/absorb_api.rb +26 -0
  81. data/lib/absorb_api/base.rb +31 -0
  82. data/lib/absorb_api/category.rb +7 -0
  83. data/lib/absorb_api/certificate.rb +7 -0
  84. data/lib/absorb_api/chapter.rb +7 -0
  85. data/lib/absorb_api/collection.rb +19 -0
  86. data/lib/absorb_api/configuration.rb +21 -0
  87. data/lib/absorb_api/course.rb +24 -0
  88. data/lib/absorb_api/course_enrollment.rb +33 -0
  89. data/lib/absorb_api/curriculum.rb +7 -0
  90. data/lib/absorb_api/department.rb +10 -0
  91. data/lib/absorb_api/lesson_enrollment.rb +5 -0
  92. data/lib/absorb_api/orm.rb +28 -0
  93. data/lib/absorb_api/relations.rb +62 -0
  94. data/lib/absorb_api/user.rb +27 -0
  95. data/lib/absorb_api/version.rb +3 -0
  96. metadata +168 -0
data/lib/absorb_api.rb ADDED
@@ -0,0 +1,26 @@
1
+ require 'faraday'
2
+ require 'typhoeus/adapters/faraday'
3
+ require 'json'
4
+ require 'faraday_middleware'
5
+ require 'active_support/all'
6
+ require 'active_model'
7
+
8
+ require "absorb_api/orm"
9
+ require "absorb_api/relations"
10
+ require "absorb_api/collection"
11
+
12
+ require "absorb_api/version"
13
+ require "absorb_api/configuration"
14
+ require "absorb_api/base"
15
+ require "absorb_api/user"
16
+ require "absorb_api/course"
17
+ require "absorb_api/course_enrollment"
18
+ require "absorb_api/lesson_enrollment"
19
+ require "absorb_api/category"
20
+ require "absorb_api/certificate"
21
+ require "absorb_api/chapter"
22
+ require "absorb_api/curriculum"
23
+ require "absorb_api/department"
24
+
25
+ module AbsorbApi
26
+ end
@@ -0,0 +1,31 @@
1
+ module AbsorbApi
2
+ class Base
3
+ def initialize(attributes, &block)
4
+ attributes.each do |k,v|
5
+ instance_variable_set("@#{k.to_s.underscore}", v) unless v.nil?
6
+ end
7
+ yield self if block_given?
8
+ end
9
+
10
+ def self.authorize
11
+ @authorize ||= Faraday.new(:url => AbsorbApi.configuration.url) do |faraday|
12
+ faraday.request :url_encoded
13
+ faraday.response :logger
14
+ faraday.adapter :typhoeus
15
+ end.post do |req|
16
+ req.url 'Authenticate', { username: AbsorbApi.configuration.absorbuser, password: AbsorbApi.configuration.absorbpass, privateKey: AbsorbApi.configuration.absorbkey }
17
+ req.headers['Content-Type'] = 'application/json'
18
+ req.headers["accept"] = "json"
19
+ end.body.delete('\\"')
20
+ end
21
+
22
+ def self.api
23
+ @api ||= Faraday.new(:url => AbsorbApi.configuration.url, :parallel_manager => Typhoeus::Hydra.new(:max_concurrency => 200)) do |faraday|
24
+ faraday.request :json
25
+ faraday.response :json, :content_type => /\bjson$/
26
+ faraday.adapter :typhoeus
27
+ faraday.headers = {"Authorization" => authorize }
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,7 @@
1
+ module AbsorbApi
2
+ class Category < Base
3
+ include Orm
4
+
5
+ attr_accessor :id, :parent_id, :name, :description
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module AbsorbApi
2
+ class Certificate < Base
3
+ include Orm
4
+
5
+ attr_accessor :id, :enrollment_id, :full_name, :course_name, :acquired_date, :expiry_date, :notes
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module AbsorbApi
2
+ class Chapter < Base
3
+ include Orm
4
+
5
+ attr_accessor :id, :name, :lesson_ids
6
+ end
7
+ end
@@ -0,0 +1,19 @@
1
+ module AbsorbApi
2
+ class Collection < ::Array
3
+ attr_reader :metadata
4
+
5
+ def initialize(elements, metadata = {})
6
+ super(elements)
7
+ @metadata = metadata
8
+ end
9
+
10
+ private
11
+ def method_missing(name, *args, &block)
12
+ # if klass.respond_to?(name)
13
+ # scoping { klass.send(name, *args) }
14
+ # else
15
+ super
16
+ # end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,21 @@
1
+ module AbsorbApi
2
+ class Configuration
3
+ attr_accessor :url, :absorbuser, :absorbpass, :absorbkey, :ignored_lesson_types, :ignored_course_ids
4
+ end
5
+
6
+ class << self
7
+ attr_accessor :configuration
8
+ end
9
+
10
+ def self.configuration
11
+ @configuration ||= Configuration.new
12
+ end
13
+
14
+ def self.reset
15
+ @configuration = Configuration.new
16
+ end
17
+
18
+ def self.configure
19
+ yield(configuration)
20
+ end
21
+ end
@@ -0,0 +1,24 @@
1
+ module AbsorbApi
2
+ class Course < Base
3
+ include Orm
4
+ include Relations
5
+
6
+ attr_accessor :id, :name, :description, :notes, :external_id, :access_date, :expire_type, :expire_duration, :expiry_date, :active_status, :tag_ids, :resource_ids, :editor_ids, :prices, :competency_definition_ids, :prerequisite_course_ids, :post_enrollment_course_ids, :allow_course_evaluation, :category_id, :certificate_url, :audience, :goals, :vendor, :company_cost, :learner_cost, :company_time, :learner_time
7
+
8
+ has_many :certificates
9
+ has_many :chapters
10
+ has_many :enrollments, :course_enrollment
11
+
12
+ # gets all associated enrollments given a collection of courses
13
+ # all calls are called in parallel
14
+ def self.enrollments_from_collection(courses)
15
+ enrollments = []
16
+ api.in_parallel do
17
+ courses.reject { |course| AbsorbApi.configuration.ignored_course_ids.include? course.id }.each do |course|
18
+ enrollments << api.get("courses/#{course.id}/enrollments")
19
+ end
20
+ end
21
+ enrollments.map { |response| response.body.map { |attrs| CourseEnrollment.new(attrs) } }.flatten
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,33 @@
1
+ module AbsorbApi
2
+ class CourseEnrollment < Base
3
+ include Relations
4
+
5
+ attr_accessor :id, :course_id, :course_name, :course_version_id, :user_id, :full_name, :status, :progress, :score, :accepted_terms_and_conditions, :time_spent, :date_started, :date_completed, :enrollment_key_id, :certificate_id, :credits
6
+
7
+ # has_many :lessons, klass: :lesson_enrollment
8
+
9
+ def lessons
10
+ api.get("users/#{self.user_id}/enrollments/#{self.course_id}/lessons", { "modifiedSince" => "2016-01-01"}).body.map! do |lesson_attributes|
11
+ LessonEnrollment.new(lesson_attributes)
12
+ end
13
+ end
14
+
15
+ # gets all associated lessons given a collection of enrollments
16
+ # all calls are called in parallel
17
+ # enrollments are chunked in groups of 105 to keep typhoeus from getting bogged down
18
+ # modifiedSince must be a DateTime object
19
+ def self.lessons_from_collection(course_enrollments, modifiedSince)
20
+ if modifiedSince.is_a? DateTime
21
+ lessons = []
22
+ course_enrollments.each_slice(105) do |enrollment_slice|
23
+ api.in_parallel do
24
+ enrollment_slice.each do |enrollment|
25
+ lessons << api.get("users/#{enrollment.user_id}/enrollments/#{enrollment.course_id}/lessons", { "modifiedSince" => modifiedSince.to_s})
26
+ end
27
+ end
28
+ end
29
+ lessons.map { |response| response.body.map { |body| LessonEnrollment.new(body) } }.flatten.reject { |lesson| AbsorbApi.configuration.ignored_lesson_types.include? lesson.type }
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,7 @@
1
+ module AbsorbApi
2
+ class Curriculum < Base
3
+ include Orm
4
+
5
+ attr_accessor :is_pacing_enabled, :curriculum_group_ids, :id, :name, :description, :notes, :external_id, :access_date, :expire_type, :expire_duration, :expiry_date, :active_status, :tag_ids, :resource_ids, :editor_ids, :prices, :competency_definition_ids, :prerequisite_course_ids, :post_enrollment_course_ids, :allow_course_evaluation, :category_id, :certificate_url, :audience, :goals, :vendor, :company_cost, :learner_cost, :company_time, :learner_time
6
+ end
7
+ end
@@ -0,0 +1,10 @@
1
+ module AbsorbApi
2
+ class Department < Base
3
+ include Orm
4
+ include Relations
5
+
6
+ attr_accessor :id, :name, :use_department_contact_details, :company_name, :phone_number, :email_address, :external_id, :parent_id, :currency_id
7
+
8
+ has_one :parent, :department
9
+ end
10
+ end
@@ -0,0 +1,5 @@
1
+ module AbsorbApi
2
+ class LessonEnrollment < Base
3
+ attr_accessor :lesson_id, :chapter_enrollment_id, :type, :attempts, :failures, :last_attempt, :id, :course_enrollment_id, :chapter_id, :session_id, :name, :user_id, :full_name, :status, :progress, :score, :time_spent, :date_enrolled, :date_started, :date_completed
4
+ end
5
+ end
@@ -0,0 +1,28 @@
1
+ module AbsorbApi
2
+ class ResourceNotFound < StandardError; end
3
+ class RouteNotFound < StandardError; end
4
+ class ValidationError < StandardError; end
5
+
6
+ module Orm
7
+ extend ActiveSupport::Concern
8
+
9
+ class_methods do
10
+ def find(id)
11
+ raise ResourceNotFound if id.blank?
12
+ response = Base.api.get("#{to_s.demodulize.pluralize}/#{id}")
13
+ response.status == 404 ? raise(ResourceNotFound) : new(response.body)
14
+ end
15
+
16
+ def all
17
+ response = Base.api.get("#{to_s.demodulize.pluralize}")
18
+ if response.status == 404
19
+ raise RouteNotFound
20
+ else
21
+ Collection.new( response.body.map! do |attributes|
22
+ new(attributes)
23
+ end, {klass: to_s.demodulize } )
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,62 @@
1
+ module AbsorbApi
2
+ module Relations
3
+ extend ActiveSupport::Concern
4
+
5
+ class_methods do
6
+ def has_many(rel_name, klass = nil)
7
+ klass ||= rel_name
8
+
9
+ define_method "#{rel_name.to_s}" do |**conditions|
10
+ Base.api.get("#{self.class.to_s.demodulize.pluralize}/#{id}/#{rel_name.to_s}", conditions).body.map! do |attributes|
11
+ "AbsorbApi::#{klass.to_s.classify}".constantize.new(attributes)
12
+ end
13
+ end
14
+
15
+ define_method "find_#{rel_name.to_s.singularize}" do |child_id|
16
+ response = Base.api.get("#{self.class.to_s.demodulize.pluralize}/#{id}/#{rel_name.to_s}/#{child_id}")
17
+ if response.status == 400
18
+ raise ResourceNotFound
19
+ else
20
+ "AbsorbApi::#{klass.to_s.classify}".constantize.new(response.body)
21
+ end
22
+ end
23
+
24
+ define_method "#{rel_name.to_s.singularize}_ids" do
25
+ Base.api.get("#{self.class.to_s.demodulize.pluralize}/#{id}/#{rel_name.to_s}").body.map! do |attributes|
26
+ "AbsorbApi::#{klass.to_s.classify}".constantize.new(attributes)
27
+ end.map(&:id)
28
+ end
29
+ end
30
+
31
+ def has_one(rel_name, klass = nil)
32
+ klass ||= rel_name
33
+
34
+ define_method "#{rel_name.to_s}" do
35
+ "AbsorbApi::#{klass.to_s.classify}".constantize.new(Base.api.get("#{klass.to_s.pluralize}/"+ send(rel_name.to_s + "_id")).body)
36
+ end
37
+ end
38
+
39
+ def where(**conditions)
40
+ Collection.new( Base.api.get("#{to_s.demodulize.pluralize}", conditions).body.map! do |attributes|
41
+ new(attributes)
42
+ end, {klass: to_s.demodulize } )
43
+ end
44
+
45
+ def create(attributes = [], &block)
46
+ object = to_s.classify.constantize.new(attributes)
47
+ yield object if block_given?
48
+ attrs = JSON.parse(object.to_json)
49
+ attrs.keys.each { |k| attrs[ k.camelize ] = attrs.delete(k) }
50
+ response = Base.api.post("#{to_s.demodulize.pluralize}", attrs)
51
+ if response.status == 500
52
+ raise ValidationError
53
+ elsif response.status == 405
54
+ raise RouteNotFound
55
+ else
56
+ object.id = response.body["Id"]
57
+ object
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,27 @@
1
+ module AbsorbApi
2
+ class User < Base
3
+ include Orm
4
+ include Relations
5
+
6
+ attr_accessor :id, :department_id, :first_name, :middle_name, :last_name, :username, :password, :email_address, :cc_email_addresses, :language_id, :gender, :address, :address2, :city, :province_id, :country_id, :postal_code, :phone, :employee_number, :location, :job_title, :reference_number, :date_hired, :date_terminated, :notes, :custom_fields, :role_ids, :active_status, :is_learner, :is_admin, :is_instructor, :external_id, :supervisor_id
7
+
8
+ has_many :courses
9
+ has_many :enrollments, klass: :course_enrollment
10
+ has_many :certificates
11
+
12
+ # gets all associated courses given a collection of users
13
+ # all calls are called in parallel
14
+ # users are chunked in groups of 105 to keep typhoeus from getting bogged down
15
+ def self.courses_from_collection(users)
16
+ courses = []
17
+ users.each_slice(105) do |user_slice|
18
+ api.in_parallel do
19
+ user_slice.each do |user|
20
+ courses << api.get("users/#{user.id}/courses")
21
+ end
22
+ end
23
+ end
24
+ courses.map { |response| response.body.map { |body| Course.new(body) } }.flatten
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,3 @@
1
+ module AbsorbApi
2
+ VERSION = "0.1.0"
3
+ end
metadata ADDED
@@ -0,0 +1,168 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: absorb_api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - npezza93
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-01-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.11'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.11'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ description: |-
42
+ "Absorb LMS is a powerful, flexible, and visually stunning software platform teamed with expert implementation and support to help you build the training programs your business needs. Whether your old LMS is slowing you down or you’ve outgrown your current training model, Absorb can help.
43
+ "
44
+ email:
45
+ - npezza93@gmail.com
46
+ executables: []
47
+ extensions: []
48
+ extra_rdoc_files: []
49
+ files:
50
+ - ".gitignore"
51
+ - Gemfile
52
+ - LICENSE.txt
53
+ - README.md
54
+ - Rakefile
55
+ - absorb_api.gemspec
56
+ - bin/console
57
+ - bin/setup
58
+ - doc/AbsorbApi.html
59
+ - doc/AbsorbApi/Base.html
60
+ - doc/AbsorbApi/Category.html
61
+ - doc/AbsorbApi/Certificate.html
62
+ - doc/AbsorbApi/Chapter.html
63
+ - doc/AbsorbApi/Collection.html
64
+ - doc/AbsorbApi/Configuration.html
65
+ - doc/AbsorbApi/Course.html
66
+ - doc/AbsorbApi/CourseEnrollment.html
67
+ - doc/AbsorbApi/Curriculum.html
68
+ - doc/AbsorbApi/Department.html
69
+ - doc/AbsorbApi/LessonEnrollment.html
70
+ - doc/AbsorbApi/Orm.html
71
+ - doc/AbsorbApi/Relations.html
72
+ - doc/AbsorbApi/ResourceNotFound.html
73
+ - doc/AbsorbApi/RouteNotFound.html
74
+ - doc/AbsorbApi/User.html
75
+ - doc/AbsorbApi/ValidationError.html
76
+ - doc/Gemfile.html
77
+ - doc/Gemfile_lock.html
78
+ - doc/LICENSE_txt.html
79
+ - doc/README_md.html
80
+ - doc/Rakefile.html
81
+ - doc/absorb_api_gemspec.html
82
+ - doc/bin/setup.html
83
+ - doc/created.rid
84
+ - doc/css/fonts.css
85
+ - doc/css/rdoc.css
86
+ - doc/fonts/Lato-Light.ttf
87
+ - doc/fonts/Lato-LightItalic.ttf
88
+ - doc/fonts/Lato-Regular.ttf
89
+ - doc/fonts/Lato-RegularItalic.ttf
90
+ - doc/fonts/SourceCodePro-Bold.ttf
91
+ - doc/fonts/SourceCodePro-Regular.ttf
92
+ - doc/images/add.png
93
+ - doc/images/arrow_up.png
94
+ - doc/images/brick.png
95
+ - doc/images/brick_link.png
96
+ - doc/images/bug.png
97
+ - doc/images/bullet_black.png
98
+ - doc/images/bullet_toggle_minus.png
99
+ - doc/images/bullet_toggle_plus.png
100
+ - doc/images/date.png
101
+ - doc/images/delete.png
102
+ - doc/images/find.png
103
+ - doc/images/loadingAnimation.gif
104
+ - doc/images/macFFBgHack.png
105
+ - doc/images/package.png
106
+ - doc/images/page_green.png
107
+ - doc/images/page_white_text.png
108
+ - doc/images/page_white_width.png
109
+ - doc/images/plugin.png
110
+ - doc/images/ruby.png
111
+ - doc/images/tag_blue.png
112
+ - doc/images/tag_green.png
113
+ - doc/images/transparent.png
114
+ - doc/images/wrench.png
115
+ - doc/images/wrench_orange.png
116
+ - doc/images/zoom.png
117
+ - doc/index.html
118
+ - doc/js/darkfish.js
119
+ - doc/js/jquery.js
120
+ - doc/js/navigation.js
121
+ - doc/js/navigation.js.gz
122
+ - doc/js/search.js
123
+ - doc/js/search_index.js
124
+ - doc/js/search_index.js.gz
125
+ - doc/js/searcher.js
126
+ - doc/js/searcher.js.gz
127
+ - doc/table_of_contents.html
128
+ - lib/absorb_api.rb
129
+ - lib/absorb_api/base.rb
130
+ - lib/absorb_api/category.rb
131
+ - lib/absorb_api/certificate.rb
132
+ - lib/absorb_api/chapter.rb
133
+ - lib/absorb_api/collection.rb
134
+ - lib/absorb_api/configuration.rb
135
+ - lib/absorb_api/course.rb
136
+ - lib/absorb_api/course_enrollment.rb
137
+ - lib/absorb_api/curriculum.rb
138
+ - lib/absorb_api/department.rb
139
+ - lib/absorb_api/lesson_enrollment.rb
140
+ - lib/absorb_api/orm.rb
141
+ - lib/absorb_api/relations.rb
142
+ - lib/absorb_api/user.rb
143
+ - lib/absorb_api/version.rb
144
+ homepage: https://github.com/npezza93/absorb_api
145
+ licenses:
146
+ - MIT
147
+ metadata: {}
148
+ post_install_message:
149
+ rdoc_options: []
150
+ require_paths:
151
+ - lib
152
+ required_ruby_version: !ruby/object:Gem::Requirement
153
+ requirements:
154
+ - - ">="
155
+ - !ruby/object:Gem::Version
156
+ version: '0'
157
+ required_rubygems_version: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - ">="
160
+ - !ruby/object:Gem::Version
161
+ version: '0'
162
+ requirements: []
163
+ rubyforge_project:
164
+ rubygems_version: 2.4.8
165
+ signing_key:
166
+ specification_version: 4
167
+ summary: API wrapper for Absorb LMS
168
+ test_files: []