fortytwo 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +20 -0
- data/.ruby-version +1 -0
- data/Gemfile +3 -0
- data/README.md +0 -0
- data/Rakefile +5 -0
- data/fortytwo.gemspec +30 -0
- data/lib/fortytwo.rb +8 -0
- data/lib/fortytwo/client.rb +72 -0
- data/lib/fortytwo/configuration.rb +19 -0
- data/lib/fortytwo/endpoints/user.rb +23 -0
- data/lib/fortytwo/error.rb +67 -0
- data/lib/fortytwo/responses/base.rb +22 -0
- data/lib/fortytwo/responses/models/campus.rb +18 -0
- data/lib/fortytwo/responses/models/cursus.rb +11 -0
- data/lib/fortytwo/responses/models/cursus_user.rb +22 -0
- data/lib/fortytwo/responses/models/expertise_user.rb +11 -0
- data/lib/fortytwo/responses/models/language.rb +11 -0
- data/lib/fortytwo/responses/models/project.rb +11 -0
- data/lib/fortytwo/responses/models/project_user.rb +19 -0
- data/lib/fortytwo/responses/models/skill.rb +11 -0
- data/lib/fortytwo/responses/models/user.rb +27 -0
- data/lib/fortytwo/responses/user.rb +14 -0
- data/lib/fortytwo/version.rb +3 -0
- data/tasks/console.rake +4 -0
- metadata +164 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b878dfe76a61b2f6eb865f7d56985adf47daeec9
|
4
|
+
data.tar.gz: 2559a245fc7928b2c2f613137c425e571a2161b4
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5d54bc966a09181071cfc799ca1c063d8ae6ad9615d7222709cb7ba1e0bf108b05286a542f552ddeda209d51e7f77153f6f52422d6f92cfe879e8e4d9cd12fee
|
7
|
+
data.tar.gz: 77d2daf6388d644d1e64953cc5d48de0e9de4b1188e9e528bd36605ddcda8fcf6c189942c4df571254a7dd053f2486ad585b0d1fe402d9ae8bc58c4158209921
|
data/.gitignore
ADDED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.0.0
|
data/Gemfile
ADDED
data/README.md
ADDED
File without changes
|
data/Rakefile
ADDED
data/fortytwo.gemspec
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'fortytwo/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'fortytwo'
|
8
|
+
spec.version = FortyTwo::VERSION
|
9
|
+
spec.authors = ['Matias Fernandez']
|
10
|
+
spec.email = ['matiasfmolinari@gmail.com']
|
11
|
+
spec.summary = 'Ruby client library for the 42 API'
|
12
|
+
spec.description = 'Provides an easy way to interact with the 42 API in any kind of application'
|
13
|
+
spec.homepage = 'https://github.com/MatiasFMolinari/fortytwo'
|
14
|
+
spec.license = 'MIT'
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ['lib']
|
20
|
+
|
21
|
+
spec.required_ruby_version = '2.0.0'
|
22
|
+
|
23
|
+
spec.add_development_dependency 'rack', '1.6.4'
|
24
|
+
spec.add_development_dependency 'bundler', '~> 1.5'
|
25
|
+
spec.add_development_dependency 'rake', '~> 10.0', '>= 10.0.0'
|
26
|
+
spec.add_development_dependency 'pry', '~> 0.9', '>= 0.9.0'
|
27
|
+
spec.add_development_dependency 'yard', '~> 0.8'
|
28
|
+
|
29
|
+
spec.add_runtime_dependency 'oauth2', '~> 1.2'
|
30
|
+
end
|
data/lib/fortytwo.rb
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'oauth2'
|
2
|
+
|
3
|
+
require 'fortytwo/configuration'
|
4
|
+
# require 'fortytwo/error'
|
5
|
+
require 'fortytwo/endpoints/user'
|
6
|
+
|
7
|
+
module FortyTwo
|
8
|
+
class Client
|
9
|
+
API_HOST = 'https://api.intra.42.fr'
|
10
|
+
REQUEST_CLASSES = [FortyTwo::Endpoint::User]
|
11
|
+
|
12
|
+
attr_reader :configuration
|
13
|
+
|
14
|
+
def initialize(options = nil)
|
15
|
+
@configuration = nil
|
16
|
+
define_request_methods
|
17
|
+
|
18
|
+
unless options.nil?
|
19
|
+
@configuration = Configuration.new(options)
|
20
|
+
check_api_keys
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def configure
|
25
|
+
# raise Error::AlreadyConfigured unless @configuration.nil?
|
26
|
+
|
27
|
+
@configuration = Configuration.new
|
28
|
+
yield(@configuration)
|
29
|
+
check_api_keys
|
30
|
+
end
|
31
|
+
|
32
|
+
def check_api_keys
|
33
|
+
if configuration.nil? || configuration.invalid?
|
34
|
+
@configuration = nil
|
35
|
+
# raise Error::MissingAPIKeys
|
36
|
+
else
|
37
|
+
@configuration.freeze
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def token
|
42
|
+
return @token if instance_variable_defined?(:@token)
|
43
|
+
|
44
|
+
check_api_keys
|
45
|
+
api_key = @configuration.api_key
|
46
|
+
api_secret = @configuration.api_secret
|
47
|
+
client = OAuth2::Client.new(api_key, api_secret, site: API_HOST)
|
48
|
+
client.client_credentials.get_token
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def define_request_methods
|
54
|
+
REQUEST_CLASSES.each do |request_class|
|
55
|
+
endpoint_instance = request_class.new(self)
|
56
|
+
create_methods_from_instance(endpoint_instance)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def create_methods_from_instance(instance)
|
61
|
+
instance.public_methods(false).each do |method_name|
|
62
|
+
add_method(instance, method_name)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def add_method(instance, method_name)
|
67
|
+
define_singleton_method(method_name) do |*args|
|
68
|
+
instance.public_send(method_name, *args)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module FortyTwo
|
2
|
+
class Configuration
|
3
|
+
AUTH_KEYS = [:api_key, :api_secret]
|
4
|
+
|
5
|
+
attr_accessor *AUTH_KEYS
|
6
|
+
|
7
|
+
def initialize(config_hash = nil)
|
8
|
+
if config_hash.is_a?(Hash)
|
9
|
+
config_hash.each do |config_name, config_value|
|
10
|
+
self.send("#{config_name}=", config_value)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def invalid?
|
16
|
+
AUTH_KEYS.any? { |key| send(key).nil? || send(key).empty? }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'fortytwo/responses/user'
|
2
|
+
|
3
|
+
module FortyTwo
|
4
|
+
module Endpoint
|
5
|
+
class User
|
6
|
+
PATH = '/v2/users'
|
7
|
+
|
8
|
+
def initialize(client)
|
9
|
+
@client = client
|
10
|
+
end
|
11
|
+
|
12
|
+
def user(username, params = {})
|
13
|
+
Response::User.new(user_request(username, params))
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def user_request(username, params = {})
|
19
|
+
@client.token.get("#{PATH}/#{username}", params: params).parsed
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# module FortyTwo
|
2
|
+
# module Error
|
3
|
+
|
4
|
+
# # Not sure if this will work...
|
5
|
+
# class ResponseValidator
|
6
|
+
# def validate(response)
|
7
|
+
# return if successful_response?(response)
|
8
|
+
# raise error_from_response(response)
|
9
|
+
# end
|
10
|
+
|
11
|
+
# def successful_response?(response)
|
12
|
+
# (200..399).include?(response.status)
|
13
|
+
# end
|
14
|
+
|
15
|
+
# def error_from_response(response)
|
16
|
+
# body = JSON.parse(response.body)
|
17
|
+
# klass = error_classes[body['error']['id']]
|
18
|
+
# klass.new(body['error']['text'], body['error'])
|
19
|
+
# end
|
20
|
+
|
21
|
+
# def error_classes
|
22
|
+
# @@error_classes ||= Hash.new do |hash, key|
|
23
|
+
# class_name = key.split('_').map(&:capitalize).join('').gsub('Oauth', 'OAuth')
|
24
|
+
# hash[key] = FortyTwo::Error.const_get(class_name)
|
25
|
+
# end
|
26
|
+
# end
|
27
|
+
# end
|
28
|
+
|
29
|
+
# def self.check_for_error(response)
|
30
|
+
# @response_validator ||= ResponseValidator.new
|
31
|
+
# @response_validator.validate(response)
|
32
|
+
# end
|
33
|
+
|
34
|
+
# class Base < StandardError
|
35
|
+
# def initialize(msg, error = nil)
|
36
|
+
# super(msg)
|
37
|
+
# end
|
38
|
+
# end
|
39
|
+
|
40
|
+
# class AlreadyConfigured < Base
|
41
|
+
# def initialize(msg = 'Gem cannot be reconfigured. Initialize a new ' +
|
42
|
+
# 'instance of FortyTwo::Client', error = nil)
|
43
|
+
# super
|
44
|
+
# end
|
45
|
+
# end
|
46
|
+
|
47
|
+
# class MissingAPIKeys < Base
|
48
|
+
# def initialize(msg = "You're missing an API key", error = nil)
|
49
|
+
# super
|
50
|
+
# end
|
51
|
+
# end
|
52
|
+
|
53
|
+
# # Not sure this will work.
|
54
|
+
# class InvalidParameter < Base
|
55
|
+
# attr_reader :text, :field
|
56
|
+
|
57
|
+
# def initialize(msg = 'One or more parameters were invalid', error = nil)
|
58
|
+
# unless error.nil?
|
59
|
+
# @text = error['text']
|
60
|
+
# @field = error['field']
|
61
|
+
# msg = msg + ': ' + @field
|
62
|
+
# end
|
63
|
+
# super(msg, error)
|
64
|
+
# end
|
65
|
+
# end
|
66
|
+
# end
|
67
|
+
# end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module FortyTwo
|
2
|
+
module Response
|
3
|
+
class Base
|
4
|
+
def initialize(json)
|
5
|
+
return if json.nil?
|
6
|
+
|
7
|
+
json.each do |key, value|
|
8
|
+
key = key.chomp('?') if key.end_with?('?')
|
9
|
+
instance_variable_set("@#{key}", value)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def parse(json, klass)
|
16
|
+
return json.map { |j| klass.new(j) } if json.is_a?(Array)
|
17
|
+
return klass.new(json) if json
|
18
|
+
nil
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'fortytwo/responses/base'
|
2
|
+
require 'fortytwo/responses/models/language'
|
3
|
+
|
4
|
+
module FortyTwo
|
5
|
+
module Response
|
6
|
+
module Model
|
7
|
+
class Campus < Response::Base
|
8
|
+
attr_reader :id, :name, :time_zone, :language, :user_count, :vogsphere_id
|
9
|
+
|
10
|
+
def initialize(json)
|
11
|
+
super(json)
|
12
|
+
|
13
|
+
@language = parse(@language, Language)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'fortytwo/responses/base'
|
2
|
+
require 'fortytwo/responses/models/skill'
|
3
|
+
require 'fortytwo/responses/models/cursus'
|
4
|
+
|
5
|
+
|
6
|
+
module FortyTwo
|
7
|
+
module Response
|
8
|
+
module Model
|
9
|
+
class CursusUser < Response::Base
|
10
|
+
attr_reader :id, :begin_at, :end_at, :grade, :level, :skills,
|
11
|
+
:cursus_id, :cursus
|
12
|
+
|
13
|
+
def initialize(json)
|
14
|
+
super(json)
|
15
|
+
|
16
|
+
@skills = parse(@cursus_users, Skill)
|
17
|
+
@cursus = parse(@cursus, Cursus)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'fortytwo/responses/base'
|
2
|
+
require 'fortytwo/responses/models/project'
|
3
|
+
|
4
|
+
module FortyTwo
|
5
|
+
module Response
|
6
|
+
module Model
|
7
|
+
class ProjectUser < Response::Base
|
8
|
+
attr_reader :id, :occurence, :final_mark, :status,
|
9
|
+
:current_team_id, :project, :cursus_ids
|
10
|
+
|
11
|
+
def initialize(json)
|
12
|
+
super(json)
|
13
|
+
|
14
|
+
@project = parse(@project, Project)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'fortytwo/responses/base'
|
2
|
+
require 'fortytwo/responses/models/cursus_user'
|
3
|
+
require 'fortytwo/responses/models/project_user'
|
4
|
+
require 'fortytwo/responses/models/expertise_user'
|
5
|
+
require 'fortytwo/responses/models/campus'
|
6
|
+
|
7
|
+
module FortyTwo
|
8
|
+
module Response
|
9
|
+
module Model
|
10
|
+
class User < Response::Base
|
11
|
+
attr_reader :id, :email, :login, :first_name, :last_name, :url, :phone,
|
12
|
+
:displayname, :image_url, :correction_point, :staff,
|
13
|
+
:pool_month, :pool_year, :location, :wallet, :cursus_users,
|
14
|
+
:projects_users, :expertises_users, :campus
|
15
|
+
|
16
|
+
def initialize(json)
|
17
|
+
super(json)
|
18
|
+
|
19
|
+
@cursus_users = parse(@cursus_users, CursusUser)
|
20
|
+
@projects_users = parse(@projects_users, ProjectUser)
|
21
|
+
@expertises_users = parse(@expertises_users, ExpertiseUser)
|
22
|
+
@campus = parse(@campus, Campus)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/tasks/console.rake
ADDED
metadata
ADDED
@@ -0,0 +1,164 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: fortytwo
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Matias Fernandez
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-11-13 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rack
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.6.4
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.6.4
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.5'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.5'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '10.0'
|
48
|
+
- - ">="
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: 10.0.0
|
51
|
+
type: :development
|
52
|
+
prerelease: false
|
53
|
+
version_requirements: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - "~>"
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: '10.0'
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 10.0.0
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: pry
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0.9'
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: 0.9.0
|
71
|
+
type: :development
|
72
|
+
prerelease: false
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - "~>"
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0.9'
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: 0.9.0
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: yard
|
83
|
+
requirement: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - "~>"
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0.8'
|
88
|
+
type: :development
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - "~>"
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0.8'
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: oauth2
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
98
|
+
requirements:
|
99
|
+
- - "~>"
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '1.2'
|
102
|
+
type: :runtime
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
requirements:
|
106
|
+
- - "~>"
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '1.2'
|
109
|
+
description: Provides an easy way to interact with the 42 API in any kind of application
|
110
|
+
email:
|
111
|
+
- matiasfmolinari@gmail.com
|
112
|
+
executables: []
|
113
|
+
extensions: []
|
114
|
+
extra_rdoc_files: []
|
115
|
+
files:
|
116
|
+
- ".gitignore"
|
117
|
+
- ".ruby-version"
|
118
|
+
- Gemfile
|
119
|
+
- README.md
|
120
|
+
- Rakefile
|
121
|
+
- fortytwo.gemspec
|
122
|
+
- lib/fortytwo.rb
|
123
|
+
- lib/fortytwo/client.rb
|
124
|
+
- lib/fortytwo/configuration.rb
|
125
|
+
- lib/fortytwo/endpoints/user.rb
|
126
|
+
- lib/fortytwo/error.rb
|
127
|
+
- lib/fortytwo/responses/base.rb
|
128
|
+
- lib/fortytwo/responses/models/campus.rb
|
129
|
+
- lib/fortytwo/responses/models/cursus.rb
|
130
|
+
- lib/fortytwo/responses/models/cursus_user.rb
|
131
|
+
- lib/fortytwo/responses/models/expertise_user.rb
|
132
|
+
- lib/fortytwo/responses/models/language.rb
|
133
|
+
- lib/fortytwo/responses/models/project.rb
|
134
|
+
- lib/fortytwo/responses/models/project_user.rb
|
135
|
+
- lib/fortytwo/responses/models/skill.rb
|
136
|
+
- lib/fortytwo/responses/models/user.rb
|
137
|
+
- lib/fortytwo/responses/user.rb
|
138
|
+
- lib/fortytwo/version.rb
|
139
|
+
- tasks/console.rake
|
140
|
+
homepage: https://github.com/MatiasFMolinari/fortytwo
|
141
|
+
licenses:
|
142
|
+
- MIT
|
143
|
+
metadata: {}
|
144
|
+
post_install_message:
|
145
|
+
rdoc_options: []
|
146
|
+
require_paths:
|
147
|
+
- lib
|
148
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - '='
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: 2.0.0
|
153
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
154
|
+
requirements:
|
155
|
+
- - ">="
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
158
|
+
requirements: []
|
159
|
+
rubyforge_project:
|
160
|
+
rubygems_version: 2.0.14.1
|
161
|
+
signing_key:
|
162
|
+
specification_version: 4
|
163
|
+
summary: Ruby client library for the 42 API
|
164
|
+
test_files: []
|