wes-data-api 1.0.0
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/Gemfile +3 -0
- data/lib/wes/data/api.rb +11 -0
- data/lib/wes/data/api/brand.rb +51 -0
- data/lib/wes/data/api/challenge.rb +75 -0
- data/lib/wes/data/api/client.rb +30 -0
- data/lib/wes/data/api/configuration.rb +27 -0
- data/lib/wes/data/api/error/response.rb +9 -0
- data/lib/wes/data/api/error/unexpected.rb +9 -0
- data/lib/wes/data/api/request.rb +63 -0
- data/lib/wes/data/api/response.rb +46 -0
- data/lib/wes/data/api/submission.rb +40 -0
- data/lib/wes/data/api/user.rb +55 -0
- data/lib/wes/data/api/version.rb +7 -0
- data/lib/wes/data/api/video.rb +32 -0
- data/wes-data-api.gemspec +28 -0
- metadata +156 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 2f091fd968c4b703a2cb83a16b042aa458bbcdad
|
4
|
+
data.tar.gz: 057216bd58c98af84f3e138475c74e86932d2eae
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5ce405d9d311d542fae229a155d2df987ca33e49d0894a587dccb7ce3bfc6deeae5be50ea4f5d97f379bc452e16522df45f9a2888e1bfe7098947072813c8372
|
7
|
+
data.tar.gz: 05b08f4426711d175d72dff2759eb7a16f4da7d998746c6f3f0ebaa8676c38ab409a81df088002c46b58cd9d7fa9030ed073c9518fde19465a2ef81caa069722
|
data/Gemfile
ADDED
data/lib/wes/data/api.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
require "wes/data/api/client"
|
2
|
+
require "wes/data/api/configuration"
|
3
|
+
|
4
|
+
module Wes
|
5
|
+
module Data
|
6
|
+
module API
|
7
|
+
class Brand
|
8
|
+
def initialize(id = nil)
|
9
|
+
@id = id
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.all
|
13
|
+
new.all
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.find(id)
|
17
|
+
new.find id
|
18
|
+
end
|
19
|
+
|
20
|
+
def all
|
21
|
+
client.get "#{routes.brands}"
|
22
|
+
end
|
23
|
+
|
24
|
+
def challenges
|
25
|
+
raise(ArgumentError, "ID not set for Brand") if id.nil?
|
26
|
+
client.get "#{routes.brand}/#{id}#{routes.challenges}"
|
27
|
+
end
|
28
|
+
|
29
|
+
def find(id)
|
30
|
+
client.get("#{routes.brand}/#{id}").first
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
attr_reader :id
|
36
|
+
|
37
|
+
def client
|
38
|
+
Client.new
|
39
|
+
end
|
40
|
+
|
41
|
+
def configuration
|
42
|
+
Configuration
|
43
|
+
end
|
44
|
+
|
45
|
+
def routes
|
46
|
+
configuration.routes
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require "wes/data/api/client"
|
2
|
+
require "wes/data/api/configuration"
|
3
|
+
|
4
|
+
module Wes
|
5
|
+
module Data
|
6
|
+
module API
|
7
|
+
class Challenge
|
8
|
+
def initialize(id = nil)
|
9
|
+
@id = id
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.all
|
13
|
+
new.all
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.closed
|
17
|
+
new.closed
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.drafts
|
21
|
+
new.drafts
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.find(id)
|
25
|
+
new.find id
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.open
|
29
|
+
new.open
|
30
|
+
end
|
31
|
+
|
32
|
+
def all
|
33
|
+
client.get routes.challenges
|
34
|
+
end
|
35
|
+
|
36
|
+
def closed
|
37
|
+
client.get "#{routes.challenges}/closed"
|
38
|
+
end
|
39
|
+
|
40
|
+
def drafts
|
41
|
+
client.get "#{routes.challenges}/drafts"
|
42
|
+
end
|
43
|
+
|
44
|
+
def find(id)
|
45
|
+
client.get("#{routes.challenge}/#{id}").first
|
46
|
+
end
|
47
|
+
|
48
|
+
def open
|
49
|
+
client.get "#{routes.challenges}/open"
|
50
|
+
end
|
51
|
+
|
52
|
+
def videos
|
53
|
+
raise(ArgumentError, "ID not set for Challenge") if id.nil?
|
54
|
+
client.get "#{routes.challenge}/#{id}#{routes.videos}"
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
attr_reader :id
|
60
|
+
|
61
|
+
def client
|
62
|
+
Client.new
|
63
|
+
end
|
64
|
+
|
65
|
+
def configuration
|
66
|
+
Configuration
|
67
|
+
end
|
68
|
+
|
69
|
+
def routes
|
70
|
+
configuration.routes
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require "wes/data/api/request"
|
2
|
+
require "wes/data/api/response"
|
3
|
+
|
4
|
+
module Wes
|
5
|
+
module Data
|
6
|
+
module API
|
7
|
+
class Client
|
8
|
+
def get(path)
|
9
|
+
api_response = request.get path
|
10
|
+
response api_response
|
11
|
+
end
|
12
|
+
|
13
|
+
def post(path, options)
|
14
|
+
api_response = request.post(path, options)
|
15
|
+
response api_response
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def request
|
21
|
+
Request
|
22
|
+
end
|
23
|
+
|
24
|
+
def response(api_response)
|
25
|
+
Response.build api_response
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Wes
|
2
|
+
module Data
|
3
|
+
module API
|
4
|
+
class Configuration
|
5
|
+
DEFAULT_VERSION = "v1".freeze
|
6
|
+
|
7
|
+
class << self
|
8
|
+
attr_accessor :endpoint
|
9
|
+
attr_writer :routes, :version
|
10
|
+
|
11
|
+
def configure(&block)
|
12
|
+
yield self
|
13
|
+
self
|
14
|
+
end
|
15
|
+
|
16
|
+
def routes
|
17
|
+
OpenStruct.new @routes
|
18
|
+
end
|
19
|
+
|
20
|
+
def version
|
21
|
+
@version ||= DEFAULT_VERSION
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require "faraday"
|
2
|
+
require "faraday_middleware"
|
3
|
+
require "wes/data/api/configuration"
|
4
|
+
|
5
|
+
module Wes
|
6
|
+
module Data
|
7
|
+
module API
|
8
|
+
class Request
|
9
|
+
def self.get(path)
|
10
|
+
new.get path
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.post(path, options = {})
|
14
|
+
new.post(path, options)
|
15
|
+
end
|
16
|
+
|
17
|
+
def get(path)
|
18
|
+
connection.get do |r|
|
19
|
+
r.url complete_path(path)
|
20
|
+
r.options.timeout = TIMEOUT
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def post(path, options)
|
25
|
+
connection.post do |r|
|
26
|
+
r.body = options.to_json
|
27
|
+
r.headers["Content-Type"] = "application/json"
|
28
|
+
r.url complete_path(path)
|
29
|
+
r.options.timeout = TIMEOUT
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
TIMEOUT = 2
|
36
|
+
|
37
|
+
def complete_path(path)
|
38
|
+
"/#{version}#{path}"
|
39
|
+
end
|
40
|
+
|
41
|
+
def configuration
|
42
|
+
Configuration
|
43
|
+
end
|
44
|
+
|
45
|
+
def connection
|
46
|
+
Faraday.new(:url => endpoint) do |c|
|
47
|
+
c.adapter Faraday.default_adapter
|
48
|
+
c.use Faraday::Response::RaiseError
|
49
|
+
c.response :json, :content_type => /\bjson$/
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def endpoint
|
54
|
+
configuration.endpoint
|
55
|
+
end
|
56
|
+
|
57
|
+
def version
|
58
|
+
configuration.version
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require "wes/data/api/error/response"
|
2
|
+
require "wes/data/api/error/unexpected"
|
3
|
+
|
4
|
+
module Wes
|
5
|
+
module Data
|
6
|
+
module API
|
7
|
+
class Response
|
8
|
+
def self.build(response)
|
9
|
+
new(response).data
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(response)
|
13
|
+
@response = response
|
14
|
+
end
|
15
|
+
|
16
|
+
def data
|
17
|
+
raise unexpected_error unless response.body
|
18
|
+
data = response.body["data"] || raise(response_error)
|
19
|
+
data.map { |e| OpenStruct.new e }
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
attr_reader :response
|
25
|
+
|
26
|
+
def error_details
|
27
|
+
response.body.fetch "details"
|
28
|
+
end
|
29
|
+
|
30
|
+
def error_status
|
31
|
+
response.body.fetch "status"
|
32
|
+
end
|
33
|
+
|
34
|
+
def response_error
|
35
|
+
Error::Response.new(
|
36
|
+
"#{error_status} - #{error_details}"
|
37
|
+
)
|
38
|
+
end
|
39
|
+
|
40
|
+
def unexpected_error
|
41
|
+
Error::Unexpected
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require "wes/data/api/client"
|
2
|
+
require "wes/data/api/configuration"
|
3
|
+
|
4
|
+
module Wes
|
5
|
+
module Data
|
6
|
+
module API
|
7
|
+
class Submission
|
8
|
+
def self.create(options)
|
9
|
+
new.create options
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.find(id)
|
13
|
+
new.find id
|
14
|
+
end
|
15
|
+
|
16
|
+
def create(options)
|
17
|
+
client.post(routes.submission, options).first
|
18
|
+
end
|
19
|
+
|
20
|
+
def find(id)
|
21
|
+
client.get("#{routes.submission}/#{id}").first
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def client
|
27
|
+
Client.new
|
28
|
+
end
|
29
|
+
|
30
|
+
def configuration
|
31
|
+
Configuration
|
32
|
+
end
|
33
|
+
|
34
|
+
def routes
|
35
|
+
configuration.routes
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require "wes/data/api/client"
|
2
|
+
require "wes/data/api/configuration"
|
3
|
+
|
4
|
+
module Wes
|
5
|
+
module Data
|
6
|
+
module API
|
7
|
+
class User
|
8
|
+
def initialize(id = nil)
|
9
|
+
@id = id
|
10
|
+
end
|
11
|
+
|
12
|
+
def closed_submissions
|
13
|
+
raise(ArgumentError, "ID not set for User") if id.nil?
|
14
|
+
client.get "#{routes.user}/#{id}#{routes.submissions}/closed"
|
15
|
+
end
|
16
|
+
|
17
|
+
def metadata
|
18
|
+
raise(ArgumentError, "ID not set for User") if id.nil?
|
19
|
+
client.get "#{routes.user}/#{id}#{routes.metadata}"
|
20
|
+
end
|
21
|
+
|
22
|
+
def open_submissions
|
23
|
+
raise(ArgumentError, "ID not set for User") if id.nil?
|
24
|
+
client.get "#{routes.user}/#{id}#{routes.submissions}/open"
|
25
|
+
end
|
26
|
+
|
27
|
+
def submissions
|
28
|
+
raise(ArgumentError, "ID not set for User") if id.nil?
|
29
|
+
client.get "#{routes.user}/#{id}#{routes.submissions}"
|
30
|
+
end
|
31
|
+
|
32
|
+
def videos
|
33
|
+
raise(ArgumentError, "ID not set for User") if id.nil?
|
34
|
+
client.get "#{routes.user}/#{id}#{routes.videos}"
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
attr_reader :id
|
40
|
+
|
41
|
+
def client
|
42
|
+
Client.new
|
43
|
+
end
|
44
|
+
|
45
|
+
def configuration
|
46
|
+
Configuration
|
47
|
+
end
|
48
|
+
|
49
|
+
def routes
|
50
|
+
configuration.routes
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require "wes/data/api/client"
|
2
|
+
require "wes/data/api/configuration"
|
3
|
+
|
4
|
+
module Wes
|
5
|
+
module Data
|
6
|
+
module API
|
7
|
+
class Video
|
8
|
+
def self.create(options)
|
9
|
+
new.create options
|
10
|
+
end
|
11
|
+
|
12
|
+
def create(options)
|
13
|
+
client.post(routes.video, options).first
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def client
|
19
|
+
Client.new
|
20
|
+
end
|
21
|
+
|
22
|
+
def configuration
|
23
|
+
Configuration
|
24
|
+
end
|
25
|
+
|
26
|
+
def routes
|
27
|
+
configuration.routes
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path("../lib", __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require "wes/data/api/version"
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "wes-data-api"
|
8
|
+
spec.version = Wes::Data::API::VERSION
|
9
|
+
spec.authors = [""]
|
10
|
+
spec.email = [""]
|
11
|
+
|
12
|
+
spec.summary = ""
|
13
|
+
spec.homepage = ""
|
14
|
+
|
15
|
+
spec.files = `git ls-files -z`.split("\x0").select { |f| f.match(%r{\A(wes-data-api.gemspec|lib|Gemfile)}) }
|
16
|
+
spec.bindir = "exe"
|
17
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
18
|
+
spec.require_paths = ["lib"]
|
19
|
+
|
20
|
+
spec.add_development_dependency "bundler", "~> 1.11"
|
21
|
+
spec.add_development_dependency "pry"
|
22
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
23
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
24
|
+
|
25
|
+
spec.add_dependency "faraday"
|
26
|
+
spec.add_dependency "faraday_middleware"
|
27
|
+
spec.add_dependency "json"
|
28
|
+
end
|
metadata
ADDED
@@ -0,0 +1,156 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: wes-data-api
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- ''
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-04-01 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: pry
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
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
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '10.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '3.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: faraday
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: faraday_middleware
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: json
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
description:
|
112
|
+
email:
|
113
|
+
- ''
|
114
|
+
executables: []
|
115
|
+
extensions: []
|
116
|
+
extra_rdoc_files: []
|
117
|
+
files:
|
118
|
+
- Gemfile
|
119
|
+
- lib/wes/data/api.rb
|
120
|
+
- lib/wes/data/api/brand.rb
|
121
|
+
- lib/wes/data/api/challenge.rb
|
122
|
+
- lib/wes/data/api/client.rb
|
123
|
+
- lib/wes/data/api/configuration.rb
|
124
|
+
- lib/wes/data/api/error/response.rb
|
125
|
+
- lib/wes/data/api/error/unexpected.rb
|
126
|
+
- lib/wes/data/api/request.rb
|
127
|
+
- lib/wes/data/api/response.rb
|
128
|
+
- lib/wes/data/api/submission.rb
|
129
|
+
- lib/wes/data/api/user.rb
|
130
|
+
- lib/wes/data/api/version.rb
|
131
|
+
- lib/wes/data/api/video.rb
|
132
|
+
- wes-data-api.gemspec
|
133
|
+
homepage: ''
|
134
|
+
licenses: []
|
135
|
+
metadata: {}
|
136
|
+
post_install_message:
|
137
|
+
rdoc_options: []
|
138
|
+
require_paths:
|
139
|
+
- lib
|
140
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - ">="
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '0'
|
145
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
146
|
+
requirements:
|
147
|
+
- - ">="
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0'
|
150
|
+
requirements: []
|
151
|
+
rubyforge_project:
|
152
|
+
rubygems_version: 2.5.1
|
153
|
+
signing_key:
|
154
|
+
specification_version: 4
|
155
|
+
summary: ''
|
156
|
+
test_files: []
|