absorb_api 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +8 -0
- data/Gemfile +11 -0
- data/LICENSE.txt +21 -0
- data/README.md +203 -0
- data/Rakefile +2 -0
- data/absorb_api.gemspec +25 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/doc/AbsorbApi.html +216 -0
- data/doc/AbsorbApi/Base.html +239 -0
- data/doc/AbsorbApi/Category.html +173 -0
- data/doc/AbsorbApi/Certificate.html +212 -0
- data/doc/AbsorbApi/Chapter.html +160 -0
- data/doc/AbsorbApi/Collection.html +180 -0
- data/doc/AbsorbApi/Configuration.html +188 -0
- data/doc/AbsorbApi/Course.html +534 -0
- data/doc/AbsorbApi/CourseEnrollment.html +437 -0
- data/doc/AbsorbApi/Curriculum.html +498 -0
- data/doc/AbsorbApi/Department.html +242 -0
- data/doc/AbsorbApi/LessonEnrollment.html +370 -0
- data/doc/AbsorbApi/Orm.html +201 -0
- data/doc/AbsorbApi/Relations.html +301 -0
- data/doc/AbsorbApi/ResourceNotFound.html +102 -0
- data/doc/AbsorbApi/RouteNotFound.html +102 -0
- data/doc/AbsorbApi/User.html +615 -0
- data/doc/AbsorbApi/ValidationError.html +102 -0
- data/doc/Gemfile.html +100 -0
- data/doc/Gemfile_lock.html +150 -0
- data/doc/LICENSE_txt.html +113 -0
- data/doc/README_md.html +340 -0
- data/doc/Rakefile.html +93 -0
- data/doc/absorb_api_gemspec.html +126 -0
- data/doc/bin/setup.html +97 -0
- data/doc/created.rid +26 -0
- data/doc/css/fonts.css +167 -0
- data/doc/css/rdoc.css +590 -0
- data/doc/fonts/Lato-Light.ttf +0 -0
- data/doc/fonts/Lato-LightItalic.ttf +0 -0
- data/doc/fonts/Lato-Regular.ttf +0 -0
- data/doc/fonts/Lato-RegularItalic.ttf +0 -0
- data/doc/fonts/SourceCodePro-Bold.ttf +0 -0
- data/doc/fonts/SourceCodePro-Regular.ttf +0 -0
- data/doc/images/add.png +0 -0
- data/doc/images/arrow_up.png +0 -0
- data/doc/images/brick.png +0 -0
- data/doc/images/brick_link.png +0 -0
- data/doc/images/bug.png +0 -0
- data/doc/images/bullet_black.png +0 -0
- data/doc/images/bullet_toggle_minus.png +0 -0
- data/doc/images/bullet_toggle_plus.png +0 -0
- data/doc/images/date.png +0 -0
- data/doc/images/delete.png +0 -0
- data/doc/images/find.png +0 -0
- data/doc/images/loadingAnimation.gif +0 -0
- data/doc/images/macFFBgHack.png +0 -0
- data/doc/images/package.png +0 -0
- data/doc/images/page_green.png +0 -0
- data/doc/images/page_white_text.png +0 -0
- data/doc/images/page_white_width.png +0 -0
- data/doc/images/plugin.png +0 -0
- data/doc/images/ruby.png +0 -0
- data/doc/images/tag_blue.png +0 -0
- data/doc/images/tag_green.png +0 -0
- data/doc/images/transparent.png +0 -0
- data/doc/images/wrench.png +0 -0
- data/doc/images/wrench_orange.png +0 -0
- data/doc/images/zoom.png +0 -0
- data/doc/index.html +135 -0
- data/doc/js/darkfish.js +161 -0
- data/doc/js/jquery.js +4 -0
- data/doc/js/navigation.js +142 -0
- data/doc/js/navigation.js.gz +0 -0
- data/doc/js/search.js +109 -0
- data/doc/js/search_index.js +1 -0
- data/doc/js/search_index.js.gz +0 -0
- data/doc/js/searcher.js +228 -0
- data/doc/js/searcher.js.gz +0 -0
- data/doc/table_of_contents.html +218 -0
- data/lib/absorb_api.rb +26 -0
- data/lib/absorb_api/base.rb +31 -0
- data/lib/absorb_api/category.rb +7 -0
- data/lib/absorb_api/certificate.rb +7 -0
- data/lib/absorb_api/chapter.rb +7 -0
- data/lib/absorb_api/collection.rb +19 -0
- data/lib/absorb_api/configuration.rb +21 -0
- data/lib/absorb_api/course.rb +24 -0
- data/lib/absorb_api/course_enrollment.rb +33 -0
- data/lib/absorb_api/curriculum.rb +7 -0
- data/lib/absorb_api/department.rb +10 -0
- data/lib/absorb_api/lesson_enrollment.rb +5 -0
- data/lib/absorb_api/orm.rb +28 -0
- data/lib/absorb_api/relations.rb +62 -0
- data/lib/absorb_api/user.rb +27 -0
- data/lib/absorb_api/version.rb +3 -0
- 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,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
|
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: []
|