manabu 0.0.1 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 9db4b58173710a3ebd06e7d303be5a434d9409b1
4
- data.tar.gz: 348cabbc95d1218e4f264f0cbb15d24481e686a4
2
+ SHA256:
3
+ metadata.gz: a9e858021472f03b2d532caf72061380aeabe89a644faae4471492496604ac48
4
+ data.tar.gz: 176b6bdba3acfb636ecd2c6d71b67e16ae6e833bc759d5b8cd2742b812171643
5
5
  SHA512:
6
- metadata.gz: f43a79c5964ec8a156d1694241d230cf9ea05aab58cd22b6e56ab8bc762a8625fbd7ea4080715abc038ea4ec5707e73e52c9f7a394e4de92a08c54c96d427c6d
7
- data.tar.gz: 243cf49f2eec86a6269f6186c8b7d4f845271ccfdfd8f8d8480c88d4f79ea279c2ce265a5142805ae6ef5a1d35e8fc1d943c34cfa8af204021232f0cbf08a457
6
+ metadata.gz: 306735afa0cf37124823c0feb56e445822667423e6c2ad460d6a3781ce266944b840b5b9c2ec5eaaeb1fc639cdd8b6c0eed4fea400a894b8e79edf9dad962b14
7
+ data.tar.gz: 31653b603f44ed4a2c69cc4545eb4002f81e956cb2874b1f165710d8d9a3b5aa108fbd1c1ebf55730c6f78f55ca3076bfa7436aa9f04c500cd9e32e333161f9f
data/lib/manabu.rb ADDED
@@ -0,0 +1,5 @@
1
+ require_relative 'manabu/client'
2
+ require_relative 'manabu/student'
3
+ require_relative 'manabu/students'
4
+ require_relative 'manabu/course'
5
+ require_relative 'manabu/courses'
@@ -0,0 +1,93 @@
1
+ module Manabu
2
+ class ClassGroup < Resource
3
+
4
+ class Enrollment
5
+
6
+ def initialize(client, attributes = {})
7
+ @client = client
8
+ @id = attributes.fetch(:id, @id)
9
+ @class_group_id = attributes.fetch(:class_group_id, @class_group_id)
10
+ @student_id = attributes.fetch(:student_id, @student_id)
11
+ @student = nil
12
+ end
13
+
14
+ def student
15
+ if @student
16
+ @student
17
+ else
18
+ @student = _fetch_student
19
+ end
20
+ end
21
+
22
+ private
23
+
24
+ def _fetch_student
25
+ response = @client.get("students/#{@student_id}")
26
+ Manabu::Student.new(@client, response)
27
+ end
28
+ end
29
+
30
+ attr_reader :id, :name, :grade, :homeroom, :notes_count,
31
+ :enrollments_count, :facility_id
32
+
33
+ def initialize(client, **info)
34
+ super
35
+ @students = []
36
+ @enrollments = []
37
+ end
38
+
39
+ def fill(**info)
40
+ @id = info.fetch(:id, @id)
41
+ @name = info.fetch(:name, @name)
42
+ @grade = info.fetch(:grade, @grade)
43
+ @homeroom = info.fetch(:homeroom, @homeroom)
44
+ @notes_count = info.fetch(:notes_count, @notes_count)
45
+ @enrollments_count = info.fetch(:enrollments_count, @enrollments_count)
46
+ @facility_id = info.fetch(:facility_id, @facility_id)
47
+ self
48
+ end
49
+
50
+ def students
51
+ if @students.any?
52
+ @students
53
+ else
54
+ @students = _fetch_students
55
+ end
56
+ end
57
+
58
+ def enrollments
59
+ if @enrollments.any?
60
+ @enrollments
61
+ else
62
+ @enrollments = _fetch_enrollments
63
+ end
64
+ end
65
+
66
+ def add_student(student, args = {})
67
+ response = @client.post("class_groups/#{id}/enrollments",
68
+ student_id: student.id
69
+ )
70
+
71
+ Enrollment.new(@client, response).tap do |enrollment|
72
+ @enrollments << enrollment
73
+ end
74
+ end
75
+
76
+ private
77
+
78
+ def _fetch_students
79
+ response = @client.get("class_groups/#{id}/students")
80
+ response[:students].map do |student|
81
+ Manabu::Student.new(@client, student)
82
+ end
83
+ end
84
+
85
+ def _fetch_enrollments
86
+ response = @client.get("class_groups/#{id}/enrollments")
87
+ response[:enrollments].map do |enrollment|
88
+ Enrollment.new(@client, enrollment)
89
+ end
90
+ end
91
+
92
+ end
93
+ end
File without changes
@@ -0,0 +1,96 @@
1
+ require_relative 'connection/auth'
2
+ require_relative 'connection/transactor'
3
+
4
+ module Manabu
5
+ # General client interface which bundles together most client functionality
6
+ class Client
7
+ attr_accessor :auth, :transactor, :status
8
+
9
+ # Initializes with login details and passes options to all linked instances.
10
+ #
11
+ # == Parameters:
12
+ # username::
13
+ # The User Name or e-mail address
14
+ # password::
15
+ # The password for the given user
16
+ # host::
17
+ # The host URL
18
+ # port::
19
+ # The host port (default 80)
20
+ # options::
21
+ # A hash of options, such as:
22
+ # * force_secure_connection - (default true), set to false to disable HTTPS/SSL
23
+ # * transport_type - (default :msgpack), sets transport data type [:msgpack, :json]
24
+ def initialize(username, password, host, port = 80, **options)
25
+ @status = :initializing
26
+ @auth = Manabu::Connection::Auth.new(username, password, host, port, options)
27
+ if @auth.success?
28
+ @transactor = @auth.transactor
29
+ @status = :connected
30
+ else
31
+ @status = :failed
32
+ raise Error::Connection::Unauthorized
33
+ end
34
+ end
35
+
36
+ # Performs a GET against the API
37
+ #
38
+ # == Parameters:
39
+ # path::
40
+ # The API endpoint path
41
+ # args::
42
+ # An argument hash
43
+ #
44
+ # == Returns:
45
+ # The returned data as an object
46
+ def get(path, **args)
47
+ @transactor.get(path, args)
48
+ end
49
+
50
+ # Performs a POST against the API
51
+ #
52
+ # == Parameters:
53
+ # path::
54
+ # The API endpoint path
55
+ # args::
56
+ # An argument hash
57
+ #
58
+ # == Returns:
59
+ # The returned data as an object
60
+ def post(path, **args)
61
+ @transactor.post(path, args)
62
+ end
63
+
64
+ # Performs a PATCH against the API
65
+ #
66
+ # == Parameters:
67
+ # path::
68
+ # The API endpoint path
69
+ # args::
70
+ # An argument hash
71
+ #
72
+ # == Returns:
73
+ # The returned data as an object
74
+ def patch(path, **args)
75
+ @transactor.patch(path, args)
76
+ end
77
+
78
+ # Performs a DELETE against the API
79
+ #
80
+ # == Parameters:
81
+ # path::
82
+ # The API endpoint path
83
+ # args::
84
+ # An argument hash
85
+ #
86
+ # == Returns:
87
+ # The returned data as an object
88
+ def delete(path, **args)
89
+ @transactor.delete(path, args)
90
+ end
91
+
92
+ # def inspect
93
+ # "#<Manabu::Client:#{object_id}>"
94
+ # end
95
+ end
96
+ end
@@ -0,0 +1,56 @@
1
+ require_relative 'transactor'
2
+
3
+ module Manabu
4
+ module Connection
5
+ class Auth
6
+ attr_accessor :username, :host, :port, :connection, :transactor, :token, :refresh_token
7
+
8
+ def initialize(username, password, host, port, **options)
9
+ @username = username
10
+ @host = host
11
+ @port = port
12
+ @transactor = Transactor.new(host, port,
13
+ options.fetch(:force_secure_connection, true),
14
+ options.fetch(:transport_type, :msgpack),
15
+ options)
16
+ @connection = false
17
+ _authenticate(username, password)
18
+
19
+ ObjectSpace.define_finalizer(self, -> { @connection = false })
20
+ end
21
+
22
+ def success?()
23
+ @connection
24
+ end
25
+
26
+ def stop()
27
+
28
+ end
29
+
30
+ def _authenticate(username, password)
31
+ response = @transactor.post("authenticate", username: username, password: password)
32
+ @connection = true
33
+
34
+ @token = response[:tokens][:auth_token]
35
+ @transactor.authorization = @token
36
+
37
+ _refresh(response[:tokens])
38
+ end
39
+
40
+ def _refresh(tokens)
41
+ @refresh_token = tokens[:refresh_token]
42
+ thread = Thread.new do
43
+ loop do
44
+ break unless @connection
45
+ sleep(120)
46
+ refresh_response = transactor.post("authenticate/refresh",
47
+ refresh_token: @refresh_token
48
+ )
49
+ @transactor.authorization = refresh_response[:tokens][:auth_token]
50
+ @refresh_token = refresh_response[:tokens][:refresh_token]
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,10 @@
1
+ module Manabu
2
+ module Connection
3
+ module Error
4
+ class Unauthorized < RuntimeError; end
5
+ class UnprocessableEntity < StandardError; end
6
+ class InvalidJSON < StandardError; end
7
+ class InvalidMsgPack < StandardError; end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,149 @@
1
+ require 'faraday'
2
+ require 'faraday_middleware'
3
+ require 'typhoeus'
4
+ require 'typhoeus/adapters/faraday'
5
+ require 'json'
6
+ require 'msgpack'
7
+ require_relative 'error'
8
+
9
+ module Manabu
10
+ module Connection
11
+ # Handles transactions between server, abstracting the transport protocol and returning objects
12
+ class Transactor
13
+ attr_accessor :server_url, :server_port, :transport_type, :force_secure_connection, :status,
14
+ :api_version, :authorization
15
+
16
+ def initialize(server_url, server_port = 80, force_secure_connection = true,
17
+ transport_type = :msgpack, **options)
18
+ @server_url = server_url
19
+ @server_port = server_port
20
+ @transport_type = transport_type
21
+ @status = :unknown
22
+ @force_secure_connection = force_secure_connection
23
+ @options = options
24
+ @api_version = options[:api_version] || 1
25
+ connect
26
+ _check_server_status
27
+ end
28
+
29
+ def connect()
30
+ return @connection if @connection
31
+ @connection = Faraday.new do |conn|
32
+ conn.request :url_encoded
33
+
34
+ case @transport_type
35
+ when :msgpack
36
+ conn.headers['Accept'] = 'application/msgpack'
37
+ when :json
38
+ conn.headers['Accept'] = 'application/json'
39
+ else # someone messed up, defaulting to msgpack
40
+ @transport_type = :msgpack
41
+ conn.headers['Accept'] = 'application/msgpack'
42
+ end
43
+
44
+ conn.use FaradayMiddleware::FollowRedirects, limit: 5
45
+ conn.adapter :typhoeus
46
+ end
47
+
48
+ _kludge_windows if Gem.win_platform?
49
+
50
+ _check_server_status
51
+ end
52
+
53
+ # Gets data from the server
54
+ def get(endpoint, **args)
55
+ _define_action(:get, endpoint, args)
56
+ end
57
+
58
+ # Sets data from the server
59
+ def post(endpoint, **args)
60
+ _define_action(:post, endpoint, args)
61
+ end
62
+
63
+ def patch(endpoint, **args)
64
+ _define_action(:patch, endpoint, args)
65
+ end
66
+
67
+ def delete(endpoint, **args)
68
+ _define_action(:delete, endpoint, args)
69
+ end
70
+
71
+ def _define_action(action, endpoint, args)
72
+ response = connect.send(
73
+ action,
74
+ URI.encode(
75
+ "#{@protocol}://#{@server_url}:#{@server_port}/api/v#{@api_version}/#{endpoint}"),
76
+ args,
77
+ _header_hash
78
+ )
79
+ _status_raiser(response)
80
+ _datafy_response(response.body)
81
+ end
82
+
83
+ def _header_hash
84
+ Hash.new.tap do |h|
85
+ h['Authorization'] = authorization if authorization
86
+ end
87
+ end
88
+
89
+
90
+ def _status_raiser(response)
91
+ case response.status
92
+ when 200..299
93
+ return # don't raise
94
+ else
95
+ case @transport_type
96
+ when :msgpack
97
+ raise Error::UnprocessableEntity, _datafy_msgpack(response.body)
98
+ when :json
99
+ raise Error::UnprocessableEntity, _datafy_json(response.body)
100
+ end
101
+ end
102
+ end
103
+
104
+ def _datafy_response(body)
105
+ case @transport_type
106
+ when :msgpack
107
+ return _datafy_msgpack(body)
108
+ when :json
109
+ return _datafy_json(body)
110
+ end
111
+
112
+ body # Just return raw data if no transport type was specified...
113
+ end
114
+
115
+ def _datafy_msgpack(body)
116
+ MessagePack::DefaultFactory.register_type(0x00, Symbol)
117
+ MessagePack.unpack(body)
118
+ rescue
119
+ raise Manabu::Connection::Error::InvalidMsgPack, 'Malformed data from server!'
120
+ end
121
+
122
+ def _datafy_json(body)
123
+ JSON.parse(body, symbolize_names: true)
124
+ rescue JSON::ParseError
125
+ raise Manabu::Connection::Error::InvalidJSON, 'Malformed data from server!'
126
+ end
127
+
128
+ def _check_server_status
129
+ @protocol = 'https'
130
+ @status = get('status')[:status]
131
+ rescue Faraday::ConnectionFailed
132
+ unless @force_secure_connection
133
+ @protocol = 'http'
134
+ @status = get('status')[:status]
135
+ end
136
+ end
137
+
138
+ # Windows doesn't supply us with the correct cacert.pem, so we force it
139
+ def _kludge_windows
140
+ cert_loc = "#{__dir__}/cacert.pem"
141
+ unless File.exist? cert_loc
142
+ response = @connection.get('http://curl.haxx.se/ca/cacert.pem')
143
+ File.open(cert_loc, 'wb') { |fp| fp.write(response.body) }
144
+ end
145
+ ENV['SSL_CERT_FILE'] = cert_loc
146
+ end
147
+ end
148
+ end
149
+ end
@@ -0,0 +1,105 @@
1
+ module Manabu
2
+ class Course < Resource
3
+
4
+ class Enrollment
5
+
6
+ attr_reader :seat_number
7
+
8
+ def initialize(client, attributes = {})
9
+ @client = client
10
+ @id = attributes.fetch(:id, @id)
11
+ @course_id = attributes.fetch(:course_id, @course_id)
12
+ @student_id = attributes.fetch(:student_id, @student_id)
13
+ @seat_number = attributes.fetch(:seat_number, @seat_number)
14
+ @student = nil
15
+ end
16
+
17
+ def student
18
+ if @student
19
+ @student
20
+ else
21
+ @student = _fetch_student
22
+ end
23
+ end
24
+
25
+ def seat_number=(value)
26
+ # TODO: handle when seat is occupied by another student
27
+ # TODO: handle other errors (EG request was invalid, request timed out)
28
+ response = @client.patch("courses/#{@course_id}/enrollments/#{@id}", seat_number: value)
29
+ @seat_number = value
30
+ end
31
+
32
+ private
33
+
34
+ def _fetch_student
35
+ response = @client.get("students/#{@student_id}")
36
+ Manabu::Student.new(@client, response)
37
+ end
38
+ end
39
+
40
+ attr_reader :id, :name, :code, :notes_count, :students_count,
41
+ :enrollments_count, :facility_id, :syllbaus_id
42
+
43
+ def initialize(client, **info)
44
+ super
45
+ @students = []
46
+ @enrollments = []
47
+ end
48
+
49
+ def fill(**info)
50
+ @id = info.fetch(:id, @id)
51
+ @name = info.fetch(:name, @name)
52
+ @code = info.fetch(:code, @code)
53
+ @notes_count = info.fetch(:notes_count, @notes_count)
54
+ @students_count = info.fetch(:students_count, @students_count)
55
+ @enrollments_count = info.fetch(:enrollments_count, @enrollments_count)
56
+ @facility_id = info.fetch(:facility_id, @facility_id)
57
+ @syllabus_id = info.fetch(:syllabus_id, @syllabus_id)
58
+ self
59
+ end
60
+
61
+ def students
62
+ if @students.any?
63
+ @students
64
+ else
65
+ @students = _fetch_students
66
+ end
67
+ end
68
+
69
+ def enrollments
70
+ if @enrollments.any?
71
+ @enrollments
72
+ else
73
+ @enrollments = _fetch_enrollments
74
+ end
75
+ end
76
+
77
+ def add_student(student, args = {})
78
+ response = @client.post("courses/#{id}/enrollments",
79
+ student_id: student.id,
80
+ seat_number: args[:seat_number]
81
+ )
82
+
83
+ Enrollment.new(@client, response).tap do |enrollment|
84
+ @enrollments << enrollment
85
+ end
86
+ end
87
+
88
+ private
89
+
90
+ def _fetch_students
91
+ response = @client.get("courses/#{id}/students")
92
+ response[:students].map do |student|
93
+ Manabu::Student.new(@client, student)
94
+ end
95
+ end
96
+
97
+ def _fetch_enrollments
98
+ response = @client.get("courses/#{id}/enrollments")
99
+ response[:enrollments].map do |enrollment|
100
+ Enrollment.new(@client, enrollment)
101
+ end
102
+ end
103
+
104
+ end
105
+ end
@@ -0,0 +1,35 @@
1
+ require_relative 'client'
2
+
3
+ module Manabu
4
+ class Courses
5
+ def initialize(client)
6
+ @client = client
7
+ end
8
+
9
+ def index
10
+ # TODO format object
11
+ @client.get('courses')
12
+ end
13
+
14
+ def register(course)
15
+ case course
16
+ when Manabu::Course
17
+ return register_course_by_object(course)
18
+ when Hash
19
+ return register_course_by_hash(course)
20
+ end
21
+ end
22
+
23
+ def register_course_by_object(course)
24
+ res = @client.post('courses', course.to_hash)
25
+ # TODO: handle errors
26
+ course.fill(res)
27
+ end
28
+
29
+ def register_course_by_hash(course)
30
+ res = @client.post('courses', course)
31
+ # TODO: handle errors
32
+ Manabu::Course.new(@client, res)
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,20 @@
1
+ require_relative './resource'
2
+
3
+ module Manabu
4
+ class Guardian < Resource
5
+ attr_accessor :id, :surname, :name, :name_reading, :surname_reading, :birth_date, :gender
6
+
7
+ def fill(**info)
8
+ @id = info.fetch(:id, @id)
9
+ @surname = info.fetch(:surname, @surname)
10
+ @name = info.fetch(:name, @name)
11
+ @name_reading = info.fetch(:name_reading, @name_reading)
12
+ @surname_reading = info.fetch(:surname_reading, @surname_reading)
13
+ @birth_date = info.fetch(:birth_date, @birth_date)
14
+ @gender = info.fetch(:gender, @gender)
15
+
16
+ self
17
+ end
18
+
19
+ end
20
+ end
@@ -0,0 +1,24 @@
1
+ module Manabu
2
+ class Resource
3
+ def initialize(client, **info)
4
+ @client = client
5
+ fill(info)
6
+ end
7
+
8
+ def fill(**info)
9
+ end
10
+
11
+ def _fill(var, sym, hash)
12
+ var = hash[sym] if (hash.include?(sym) && !hash[sym].nil?)
13
+ end
14
+
15
+ def to_hash
16
+ hash = {}
17
+ instance_variables.each do |var|
18
+ iv = instance_variable_get(var)
19
+ hash[(var.to_s.delete("@")).to_sym] = iv if !iv.nil?
20
+ end
21
+ hash
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,49 @@
1
+ require_relative './resource'
2
+ require_relative './guardian'
3
+
4
+ module Manabu
5
+ class Student < Resource
6
+ class GuardianNotAdded < StandardError; end
7
+ attr_accessor :id, :surname, :name, :name_reading,
8
+ :surname_reading, :birth_date, :gender
9
+
10
+ def fill(**info)
11
+ @id = info.fetch(:id, @id)
12
+ @surname = info.fetch(:surname, @surname)
13
+ @name = info.fetch(:name, @name)
14
+ @name_reading = info.fetch(:name_reading, @name_reading)
15
+ @surname_reading = info.fetch(:surname_reading, @surname_reading)
16
+ @birth_date = info.fetch(:birth_date, @birth_date)
17
+ @gender = info.fetch(:gender, @gender)
18
+
19
+ self
20
+ end
21
+
22
+ def set(**info)
23
+ response = @client.patch("students/#{@id}", info)
24
+ fill(response)
25
+ end
26
+
27
+ def add_guardian(guardian)
28
+ # NOTE: detect when guardian is already added to student
29
+ response = @client.post("students/#{id}/student_guardians", guardian_id: guardian.id)
30
+ self
31
+ rescue StandardError
32
+ raise GuardianNotAdded, 'Guardian is not added to student'
33
+ end
34
+
35
+ def guardians
36
+ response = @client.get("students/#{id}/guardians")
37
+ response[:guardians].map do |guardian|
38
+ Manabu::Guardian.new(@client, guardian)
39
+ end
40
+ end
41
+
42
+ def courses
43
+ response = @client.get("students/#{id}/courses")
44
+ response[:courses].map do |course|
45
+ Manabu::Course.new(@client, course)
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,89 @@
1
+ require_relative 'client'
2
+ require_relative 'student'
3
+
4
+ module Manabu
5
+ # Handles the student index for the given client
6
+ class Students
7
+ # Initializes against the passed client instance. If the client instance does not
8
+ # contain a client with a valid authorization all methods will return nil.
9
+ #
10
+ # == Parameters:
11
+ # client::
12
+ # A Manabu::Client instance (with a valid authorization)
13
+ def initialize(client)
14
+ @client = client
15
+ @students = []
16
+ end
17
+
18
+ # Returns a roster of all students which the client user has access to.
19
+ #
20
+ # == Parameters:
21
+ # filters:
22
+ # A hash of filters to narrow down results. Available filters include:
23
+ # * enrollment_status - [] TODO fill in enrollment statuses
24
+ def roster(**filters)
25
+ # TODO: handle errors
26
+ # TODO: handle filters in API endpoint
27
+ # NOTE: cache results
28
+ return students if filters.empty?
29
+
30
+ students.select do |student|
31
+ filters.slice(*whitelist_filter_attributes).all? do |filter, value|
32
+ student.send(filter) == value
33
+ end
34
+ end
35
+ end
36
+
37
+ def register(student)
38
+ new_student = case student
39
+ when Manabu::Student
40
+ register_student_by_object(student)
41
+ when Hash
42
+ register_student_by_hash(student)
43
+ end
44
+ new_student.tap { |object| @students << object }
45
+ end
46
+
47
+ def register_student_by_object(student)
48
+ res = @client.post('students', student.to_hash)
49
+ # TODO: handle errors
50
+ student.fill(res)
51
+ end
52
+
53
+ def register_student_by_hash(student)
54
+ res = @client.post('students', student)
55
+ # TODO: handle errors
56
+ Manabu::Student.new(@client, res)
57
+ end
58
+
59
+ def delete(student)
60
+ @client.delete("students/#{student.id}")
61
+ @students.reject! { |object| object.id == student.id }
62
+ # NOTE: check in response when implement error object
63
+ true
64
+ end
65
+
66
+ private
67
+
68
+ def students()
69
+ if @students.any?
70
+ @students
71
+ else
72
+ @students = _fetch_students
73
+ end
74
+ end
75
+
76
+ def whitelist_filter_attributes()
77
+ [:name, :surname]
78
+ end
79
+
80
+ def _fetch_students()
81
+ # TODO raise error if @client is nil
82
+ response = @client.get('students')
83
+ response[:students].map do |student|
84
+ Manabu::Student.new(@client, student)
85
+ end
86
+ end
87
+
88
+ end
89
+ end
@@ -0,0 +1,19 @@
1
+ require_relative 'client'
2
+
3
+ module Manabu
4
+ class Syllabuses
5
+ def initialize(client)
6
+ @client = client
7
+ end
8
+
9
+ def index
10
+ # TODO format object
11
+ @client.get('syllabuses')
12
+ end
13
+
14
+ def register(attributes = {})
15
+ @client.post('syllabuses', attributes)
16
+ end
17
+
18
+ end
19
+ end
data/manabu.gemspec CHANGED
@@ -1,22 +1,29 @@
1
1
  Gem::Specification.new do |s|
2
- s.name = 'manabu'
3
- s.version = '0.0.1'
4
- s.licenses = ['GPL']
5
- s.summary = 'Workstation client for GAKU Engine'
6
- s.description = \
7
- ' Engine is a highly customizable Open Source School Management System. ' +
2
+ s.name = 'manabu'
3
+ s.version = '0.0.3'
4
+ s.licenses = ['AGPL-3.0', 'GPL-3.0']
5
+ s.summary = 'API client for GAKU Engine'
6
+ s.description = 'Manabu is an API client module used to access the GAKU Engine API'
8
7
  s.post_install_message = \
9
8
  '╔═════════════════════════╼' +
10
- "║Manabu for ⚙学 GAKU Engine [学エンジン] " +
9
+ "║Manabu API Client for ⚙学 GAKU Engine [学エンジン] " +
11
10
  '╟─────────────────────────╼' +
12
- '║©2015 幻信創造株式会社 [Phantom Creation Inc.]' +
11
+ '║©2015 (株)幻創社 [Phantom Creation Inc.]' +
13
12
  '║http://www.gakuengine.com' +
14
13
  '╟─────────────────────────╼' +
15
- '║Manabu is Open Sourced under the GPL.' +
14
+ '║Manabu is Open Sourced under the AGPLv3/GPLv3.' +
16
15
  '╚═════════════════════════╼'
17
- s.files = `git ls-files`.split("\n")
18
- s.test_files = `git ls-files -- {spec}/*`.split("\n")
19
- s.authors = ['Rei Kagetsuki']
20
- s.email = 'info@gakuengine.com'
21
- s.homepage = 'http://www.gakuengine.com'
16
+ s.authors = ['Rei Kagetsuki']
17
+ s.email = 'info@gakuengine.com'
18
+ s.homepage = 'http://www.gakuengine.com'
19
+
20
+ s.files = Dir.glob('lib/**/*.rb') +
21
+ ['manabu.gemspec']
22
+ s.require_paths = ['lib']
23
+
24
+ s.add_dependency 'faraday', '~> 0.13', '~> 0.13.1'
25
+ s.add_dependency 'faraday_middleware', '~> 0.12', '~> 0.12.2'
26
+ s.add_dependency 'typhoeus', '~> 1.3', '~> 1.3.0'
27
+ s.add_dependency 'msgpack', '~> 1.2', '~> 1.2.2'
28
+ s.add_development_dependency 'gaku', '~> 0.3.0', '~> 0.3.0.pre.4'
22
29
  end
metadata CHANGED
@@ -1,32 +1,144 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: manabu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rei Kagetsuki
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-06 00:00:00.000000000 Z
12
- dependencies: []
13
- description: " Engine is a highly customizable Open Source School Management System.
14
- ╔═════════════════════════╼║Manabu for ⚙学 GAKU Engine [学エンジン] ╟─────────────────────────╼║©2015
15
- 幻信創造株式会社 [Phantom Creation Inc.]║http://www.gakuengine.com╟─────────────────────────╼║Manabu
16
- is Open Sourced under the GPL.╚═════════════════════════╼"
11
+ date: 2018-02-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: faraday
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.13'
20
+ - - "~>"
21
+ - !ruby/object:Gem::Version
22
+ version: 0.13.1
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '0.13'
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: 0.13.1
33
+ - !ruby/object:Gem::Dependency
34
+ name: faraday_middleware
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '0.12'
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: 0.12.2
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '0.12'
50
+ - - "~>"
51
+ - !ruby/object:Gem::Version
52
+ version: 0.12.2
53
+ - !ruby/object:Gem::Dependency
54
+ name: typhoeus
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '1.3'
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: 1.3.0
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '1.3'
70
+ - - "~>"
71
+ - !ruby/object:Gem::Version
72
+ version: 1.3.0
73
+ - !ruby/object:Gem::Dependency
74
+ name: msgpack
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: '1.2'
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 1.2.2
83
+ type: :runtime
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.2'
90
+ - - "~>"
91
+ - !ruby/object:Gem::Version
92
+ version: 1.2.2
93
+ - !ruby/object:Gem::Dependency
94
+ name: gaku
95
+ requirement: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - "~>"
98
+ - !ruby/object:Gem::Version
99
+ version: 0.3.0
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: 0.3.0.pre.4
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: 0.3.0
110
+ - - "~>"
111
+ - !ruby/object:Gem::Version
112
+ version: 0.3.0.pre.4
113
+ description: Manabu is an API client module used to access the GAKU Engine API
17
114
  email: info@gakuengine.com
18
115
  executables: []
19
116
  extensions: []
20
117
  extra_rdoc_files: []
21
118
  files:
119
+ - lib/manabu.rb
120
+ - lib/manabu/class_group.rb
121
+ - lib/manabu/class_groups.rb
122
+ - lib/manabu/client.rb
123
+ - lib/manabu/connection/auth.rb
124
+ - lib/manabu/connection/error.rb
125
+ - lib/manabu/connection/transactor.rb
126
+ - lib/manabu/course.rb
127
+ - lib/manabu/courses.rb
128
+ - lib/manabu/guardian.rb
129
+ - lib/manabu/resource.rb
130
+ - lib/manabu/student.rb
131
+ - lib/manabu/students.rb
132
+ - lib/manabu/syllabuses.rb
22
133
  - manabu.gemspec
23
134
  homepage: http://www.gakuengine.com
24
135
  licenses:
25
- - GPL
136
+ - AGPL-3.0
137
+ - GPL-3.0
26
138
  metadata: {}
27
- post_install_message: "╔═════════════════════════╼║Manabu for ⚙学 GAKU Engine [学エンジン]
28
- ╟─────────────────────────╼║©2015 幻信創造株式会社 [Phantom Creation Inc.]║http://www.gakuengine.com╟─────────────────────────╼║Manabu
29
- is Open Sourced under the GPL.╚═════════════════════════╼"
139
+ post_install_message: "╔═════════════════════════╼║Manabu API Client for ⚙学 GAKU Engine
140
+ [学エンジン] ╟─────────────────────────╼║©2015 (株)幻創社 [Phantom Creation Inc.]║http://www.gakuengine.com╟─────────────────────────╼║Manabu
141
+ is Open Sourced under the AGPLv3/GPLv3.╚═════════════════════════╼"
30
142
  rdoc_options: []
31
143
  require_paths:
32
144
  - lib
@@ -42,8 +154,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
42
154
  version: '0'
43
155
  requirements: []
44
156
  rubyforge_project:
45
- rubygems_version: 2.2.2
157
+ rubygems_version: 2.7.3
46
158
  signing_key:
47
159
  specification_version: 4
48
- summary: Workstation client for GAKU Engine
160
+ summary: API client for GAKU Engine
49
161
  test_files: []