spty_api 0.0.4 → 0.0.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6ed6613bc872a019f0895fe59eb3b910e65ca574
4
- data.tar.gz: 005e2a8c510e7cfcb7fef17b890bb694ecaa700b
3
+ metadata.gz: 6ff0541668998ec258814bfecedf829d3f769d2f
4
+ data.tar.gz: 17dc493027d2235902950b7dfca889c4e9e11fce
5
5
  SHA512:
6
- metadata.gz: 3c65421cf07ebefcbcd6d87b38dfaec2cbdc0aa297f51355624c0c3c646b00b488d9d8e5b1d811d74ffc86338d4c38e196f6921fe79402ffd1608c1e89d6b98e
7
- data.tar.gz: cb7f25f83c05cbfe88936d2ecba71067bf2dbc4ecdce2433bdffd238b362c1d6d88fd0d8bf6417baade0e1c66067cc0fd66c556480460fca90ee3c0df204d8c9
6
+ metadata.gz: b6f453161d6f12243c1d8d561b56fda6fcdff4fb43b3033aa13039e24400a8b5e4ae3ae064438e5aa2a99186848d5023ba2e73112bfaf79e49c70e3a1c1f8be9
7
+ data.tar.gz: 841b3618d86973092d178e2a23d121114fc6eb7fa51ba1465633dbe3da53fa0c2f1087b97facfdcfdab5c79b2dc223ad9771fdcd40779738dd14eef51984e33a
data/.gitignore CHANGED
@@ -10,3 +10,6 @@
10
10
 
11
11
  # rspec failure tracking
12
12
  .rspec_status
13
+
14
+ # do not track credential files
15
+ spec/spec_config_helper.rb
data/.travis.yml CHANGED
@@ -10,6 +10,7 @@ before_script:
10
10
  - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
11
11
  - chmod +x ./cc-test-reporter
12
12
  - ./cc-test-reporter before-build
13
+ - cp spec/spec_config_helper.sample.rb spec/spec_config_helper.rb
13
14
  script:
14
15
  - bundle exec rspec
15
16
  after_script:
data/README.md CHANGED
@@ -38,8 +38,19 @@ for the 'Authorization Code Flow' will be added in later versions.
38
38
  ## Development
39
39
 
40
40
  After checking out the repo, run `bin/setup` to install dependencies. Then, run
41
- rake spec` to run the tests. You can also run `bin/console` for an interactive
42
- prompt that will allow you to experiment.
41
+ `bundle exec rake spec` to run the tests. You can also run `bin/console` for an
42
+ interactive prompt that will allow you to experiment.
43
+
44
+ Run `VCR_RECORD=true bundle exec rake spec` to re-record the VCR cassettes. This
45
+ will make the test hit the actual API and VCR will record the response. You will
46
+ need to setup your credentials first in order to the test to get the correct
47
+ result.
48
+
49
+ To setup your credentials, copy the file `spec/spec_config_helper.sample.rb` to
50
+ `spec/spec_config_helper.rb` and add your API `client_id` and `secret_key`.
51
+
52
+ You don't need to record new VCR cassettes, unless you are adding the new
53
+ endpoint are that the API response has change.
43
54
 
44
55
  ## Contributing
45
56
 
data/bin/console CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require "bundler/setup"
4
- require "SptyAPI_rb"
4
+ require "spty_api"
5
5
 
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
@@ -0,0 +1,64 @@
1
+ require 'base64'
2
+
3
+ module SptyAPI
4
+ class Authorization
5
+ attr_accessor :access_token, :token_type, :expires_in, :scope,
6
+ :authorized, :errors
7
+
8
+ ACCOUNT_API = 'https://accounts.spotify.com/api/'
9
+
10
+ def initialize(type:)
11
+ if type == 'client_credentials'
12
+ self.class.via_client_credentials(self)
13
+ end
14
+ end
15
+
16
+ def self.via_client_credentials(auth)
17
+ auth.login
18
+ end
19
+
20
+ def login
21
+ client_id = SptyAPI.configuration.client_id
22
+ secret_key = SptyAPI.configuration.secret_key
23
+ auth_cred = Base64.strict_encode64("#{client_id}:#{secret_key}")
24
+
25
+ http = SptyAPI::HTTP::Client.new(
26
+ http_method: 'post',
27
+ token_type: 'Basic',
28
+ access_token: auth_cred,
29
+ endpoint: 'token'
30
+ )
31
+
32
+ http.api_overwrite = ACCOUNT_API
33
+ http.content_type_overwrite = 'application/x-www-form-urlencoded'
34
+ http.body_parameter = 'grant_type=client_credentials'
35
+
36
+ res = JSON.parse(http.request.read_body)
37
+
38
+ res['access_token'] ? authorize(res) : reject(res)
39
+ end
40
+
41
+ def client_is_authorized?
42
+ authorized
43
+ end
44
+
45
+ def authorize(res)
46
+ self.authorized = true
47
+ self.access_token = res['access_token']
48
+ self.token_type = res['token_type']
49
+ self.expires_in = Time.now + res['expires_in']
50
+ self.scope = res['scope']
51
+ end
52
+
53
+ def reject(res)
54
+ self.authorized = false
55
+ self.errors = res
56
+ end
57
+
58
+ private
59
+
60
+ def setup_credentials
61
+
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,99 @@
1
+ require 'net/http'
2
+ require 'open-uri'
3
+ require 'openssl'
4
+ require 'json'
5
+
6
+ module SptyAPI::HTTP
7
+ class Client
8
+ attr_accessor :path_parameter, :query_parameter, :body_parameter,
9
+ :http_method, :token_type, :access_token, :endpoint,
10
+ :api_overwrite, :content_type_overwrite
11
+
12
+ DEFAULT_API = 'https://api.spotify.com/v1/'
13
+ CONTENT_TYPE = 'application/json'
14
+
15
+ def initialize(http_method:, token_type:, access_token: nil, endpoint:)
16
+ self.http_method = http_method
17
+ self.token_type = token_type
18
+ self.access_token = access_token
19
+ self.endpoint = endpoint
20
+ end
21
+
22
+ def request
23
+ uri = prepare_uri
24
+ http = prepare_http(uri)
25
+ http.request(prepare_request(uri))
26
+ end
27
+
28
+ private
29
+
30
+ def prepare_uri
31
+ id = (path_parameter.nil?) ? '' : path_parameter[:id]
32
+ api = (api_overwrite.nil?) ? DEFAULT_API : api_overwrite
33
+ uri = "#{api}#{endpoint}"
34
+ uri += "/#{id}" if id != ''
35
+ uri += "?#{prepare_query_parameter}"
36
+ URI.parse(uri)
37
+ end
38
+
39
+ def prepare_query_parameter
40
+ return '' if query_parameter.nil?
41
+
42
+ q_params = ''
43
+ query_parameter.each_with_index do |(key, value), index|
44
+ q_params += '&' if index > 0
45
+ q_params += "#{key}=#{value}"
46
+ end
47
+
48
+ q_params
49
+ end
50
+
51
+ def prepare_http(uri)
52
+ http = Net::HTTP.new(uri.host, uri.port)
53
+ http.use_ssl = true
54
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
55
+
56
+ http
57
+ end
58
+
59
+ def prepare_request(uri)
60
+ req = self.send("setup_request_#{http_method}", uri)
61
+ req['Authorization'] = "#{token_type} #{access_token}"
62
+
63
+ req
64
+ end
65
+
66
+ def prepare_content_type
67
+ (content_type_overwrite.nil?) ? CONTENT_TYPE : content_type_overwrite
68
+ end
69
+
70
+ def prepare_body_parameter
71
+ return body_parameter.to_json if content_type_overwrite.nil?
72
+ body_parameter
73
+ end
74
+
75
+ def setup_request_get(uri)
76
+ Net::HTTP::Get.new(uri.request_uri)
77
+ end
78
+
79
+ def setup_request_post(uri)
80
+ req = Net::HTTP::Post.new(uri.request_uri)
81
+ req.body = prepare_body_parameter
82
+ req["Content-Type"] = prepare_content_type
83
+
84
+ req
85
+ end
86
+
87
+ def setup_request_put(uri)
88
+ req = Net::HTTP::Put.new(uri.request_uri)
89
+ req.body = prepare_body_parameter
90
+ req["Content-Type"] = prepare_content_type
91
+
92
+ req
93
+ end
94
+
95
+ def setup_request_delete(uri)
96
+ Net::HTTP::Delete.new(uri.request_uri)
97
+ end
98
+ end
99
+ end
@@ -1,3 +1,3 @@
1
1
  module SptyAPI
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
data/lib/spty_api.rb CHANGED
@@ -1,13 +1,24 @@
1
1
  require 'spty_api/version'
2
2
  require 'spty_api/configuration'
3
+ require 'spty_api/authorization'
4
+ require 'spty_api/http/client'
3
5
 
4
6
  module SptyAPI
5
7
  class << self
6
- attr_accessor :configuration
8
+ attr_accessor :configuration, :authorization
7
9
 
8
10
  def configure
9
11
  self.configuration ||= Configuration.new
10
12
  yield(configuration)
11
13
  end
14
+
15
+ def client_authorize
16
+ self.authorization ||= Authorization.new(type: 'client_credentials')
17
+ end
18
+
19
+ def reset
20
+ self.configuration = nil
21
+ self.authorization = nil
22
+ end
12
23
  end
13
24
  end
data/spty_api.gemspec CHANGED
@@ -28,4 +28,6 @@ Gem::Specification.new do |spec|
28
28
  spec.add_development_dependency 'rspec', "~> 3.0"
29
29
  spec.add_development_dependency 'simplecov'
30
30
  spec.add_development_dependency 'simplecov-console'
31
+ spec.add_development_dependency 'webmock'
32
+ spec.add_development_dependency 'vcr'
31
33
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spty_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - J Shamsul
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-12-23 00:00:00.000000000 Z
11
+ date: 2018-12-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -80,6 +80,34 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: webmock
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
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: vcr
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
83
111
  description:
84
112
  email:
85
113
  - jibone@gmail.com
@@ -100,7 +128,9 @@ files:
100
128
  - bin/console
101
129
  - bin/setup
102
130
  - lib/spty_api.rb
131
+ - lib/spty_api/authorization.rb
103
132
  - lib/spty_api/configuration.rb
133
+ - lib/spty_api/http/client.rb
104
134
  - lib/spty_api/version.rb
105
135
  - spty_api.gemspec
106
136
  homepage: https://github.com/jibone/sptyapi_rb