base-api-client 0.2.4.beta → 0.2.5.beta

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: 2049e5a041b193725cedb8ba838866bb0f5b893c
4
- data.tar.gz: 4bc4c3c911f59ca70117c8c6c0a784b5996e7b6e
3
+ metadata.gz: a1fed7d3ac2e80f26b6e9ff9079d0248ad2e040e
4
+ data.tar.gz: 7de0a5801e6658017d3bc0868ab91af3f623722c
5
5
  SHA512:
6
- metadata.gz: d26d8081069b011a9429e7bce75c842f0fe5670cbe1f0a15204c45263eef680795e554b1f80f6971103c192a74e9e0a8fee8e22f5a54dc4f76363ace617d4564
7
- data.tar.gz: fdf932804c2514f6d4e112902dd4e7c0cc62d44d8711b358f6858c489edc4e56e4bcd6fbb83f52ecf0a904e2a0a4eaf3eddf56d34918a2d7d728464c2d846acd
6
+ metadata.gz: c7e2b15ab31c4f215de99c64fcef91c17287837f736efac0cf8cce9aacb30035012d335a89784240f5db2553b89e7472a15de6a0e1f9f675ea4eb05d6970ad14
7
+ data.tar.gz: d7313ee4c07b28c377d29419fdcf4980d815febc4f15bf97fd2f5063d1bf40c25c2f5239dbc3016fb804f3a2d82fb6cab899373c77c71fa8ed1c328c324a2a57
data/README.md ADDED
@@ -0,0 +1,131 @@
1
+ # base-api-ruby-client
2
+ This library is in Beta, so don't expect too much.
3
+
4
+ ## Demo
5
+ [Demo](https://github.com/ysksn/base-api-ruby-client-samples)
6
+
7
+ ## Requirements
8
+ - Ruby 2.2.2 or higher
9
+ - [BASE developer account](https://developers.thebase.in/apply)
10
+
11
+ ## Installation
12
+ Add this line to your application's Gemfile:
13
+ ```
14
+ gem 'base-api-client'
15
+ ```
16
+ And then execute:
17
+ ```
18
+ $ bundle
19
+ ```
20
+
21
+ ## Usage
22
+ Don't forget to require those modules and classes.
23
+ ```ruby
24
+ require 'base/apis'
25
+ require 'base/api_client/client_secret'
26
+ ```
27
+
28
+ ### Create an instance of ClientSecret
29
+ ```ruby
30
+ # Read default from config/client_secret.json
31
+ client_secret = Base::APIClient::ClientSecret.new
32
+ ```
33
+ or
34
+ ```ruby
35
+ client_secret =
36
+ Base::APIClient::ClientSecret.new(
37
+ client_id: 'e0b20d3fbb62bb5db4ebbb4ebebd43fb',
38
+ client_secret: 'bd4b3ebbdbbebb6b6fb1d1bbb100b66b',
39
+ redirect_uri: 'http://localhost.local/oauth2callback',
40
+ search_client_id: '623fb5000b21b16163eb5b0bb646b53b',
41
+ search_client_secret: '214b4134022dfbbf0230f5b0bbbbb2db')
42
+ ```
43
+
44
+ ### Generate URI to retrieve code
45
+ ```ruby
46
+ client_secret.generate_code_uri
47
+ ```
48
+
49
+ Set code
50
+ ```ruby
51
+ client_secret.code = request['code']
52
+ ```
53
+
54
+ ### Set access token
55
+ ```ruby
56
+ client_secret.set_tokens!
57
+ ```
58
+
59
+ ### Retrieve my shop information
60
+ ```ruby
61
+ client_secret.my_info
62
+ ```
63
+
64
+ ### Retrieve my items
65
+ ```ruby
66
+ client_secret.my_items
67
+ ```
68
+
69
+ ### Retrieve my orders
70
+ ```ruby
71
+ orders = Base::Apis::Order.new(client_secret)
72
+ orders.request
73
+ ```
74
+
75
+ ### Retrieve savings
76
+ ```ruby
77
+ savings = Base::Apis::Saving.new(client_secret)
78
+ savings.request
79
+ ```
80
+
81
+ ### Retrieve delivery companies
82
+ ```ruby
83
+ dalivery_companies = Base::Apis::DeliveryCompany.new(client_secret)
84
+ dalivery_companies.request
85
+ ```
86
+
87
+ ### Retrieve item categories
88
+ ```ruby
89
+ categories = Base::Apis::Category.new(client_secret)
90
+ categories.request
91
+ ```
92
+
93
+ ### Retrieve detailed item category
94
+ ```ruby
95
+ category = Base::Apis::ItemCategory::Detail.new(client_secret)
96
+ category.request(2_453_256)
97
+ ```
98
+
99
+ ### Search items
100
+ ```ruby
101
+ search = Base::Apis::Search.new(client_secret)
102
+ search.request('Tシャツ 白 シルクスクリーン 綿')
103
+ ```
104
+ See [samples](https://github.com/ysksn/base-api-ruby-client-samples/blob/tmp/sample.rb)
105
+
106
+ ### TODO(s)
107
+ - Implement more such as:
108
+ - Add
109
+ - Item
110
+ - Item image
111
+ - Category
112
+ - Item Category
113
+ - Delete
114
+ - Item info
115
+ - Item image
116
+ - Item variation
117
+ - Category
118
+ - Update
119
+ - Item info
120
+ - Item stok
121
+ - Order status
122
+ - Search
123
+ - Refresh result
124
+
125
+ ## License
126
+ This library is licensed under Apache 2.0. Full license text is available in [LICENSE](https://github.com/ysksn/base-api-ruby-client/blob/master/LICENSE)
127
+
128
+ ## References
129
+ - [BASE](https://thebase.in/)
130
+ - [BASE API v1 Document](https://github.com/baseinc/api-docs)
131
+ - [ysksn/base-api-ruby-client](https://github.com/ysksn/base-api-ruby-client)
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = 'base-api-client'
3
- spec.version = '0.2.4.beta'
3
+ spec.version = '0.2.5.beta'
4
4
  spec.author = 'ysksn'
5
5
  spec.email = ['bluewhale1982@gmail.com']
6
6
  spec.summary = 'Client for accessing BASE APIs'
@@ -1,6 +1,7 @@
1
1
  module Base
2
2
  module Apis
3
3
  class Category
4
+ include HTTP
4
5
  attr_reader :client_secret
5
6
 
6
7
  def initialize(client_secret)
@@ -8,13 +9,9 @@ module Base
8
9
  end
9
10
 
10
11
  def request
11
- uri = URI.join(API_HOST.to_s, "/#{API_VERSION}/categories?")
12
- request = Net::HTTP::Get.new(uri, client_secret.header_parameter)
13
-
14
- Net::HTTP.start(
15
- uri.hostname,
16
- uri.port,
17
- use_ssl: uri.scheme == 'https') { |http| http.request(request) }
12
+ uri = generate_uri('categories?')
13
+ request = generate_request(uri, client_secret.header_parameter)
14
+ start(request, uri)
18
15
  end
19
16
  end
20
17
  end
@@ -1,6 +1,7 @@
1
1
  module Base
2
2
  module Apis
3
3
  class DeliveryCompany
4
+ include HTTP
4
5
  attr_reader :client_secret
5
6
 
6
7
  def initialize(client_secret)
@@ -8,13 +9,9 @@ module Base
8
9
  end
9
10
 
10
11
  def request
11
- uri = URI.join(API_HOST.to_s, "/#{API_VERSION}/delivery_companies?")
12
- request = Net::HTTP::Get.new(uri, client_secret.header_parameter)
13
-
14
- Net::HTTP.start(
15
- uri.hostname,
16
- uri.port,
17
- use_ssl: uri.scheme == 'https') { |http| http.request(request) }
12
+ uri = generate_uri('delivery_companies?')
13
+ request = generate_request(uri, client_secret.header_parameter)
14
+ start(request, uri)
18
15
  end
19
16
  end
20
17
  end
@@ -2,6 +2,7 @@ module Base
2
2
  module Apis
3
3
  module ItemCategory
4
4
  class Detail
5
+ include HTTP
5
6
  attr_reader :client_secret
6
7
 
7
8
  def initialize(client_secret)
@@ -9,17 +10,9 @@ module Base
9
10
  end
10
11
 
11
12
  def request(item_id)
12
- uri =
13
- URI.join(
14
- API_HOST.to_s,
15
- "/#{API_VERSION}/item_categories/detail/#{item_id}")
16
-
17
- request = Net::HTTP::Get.new(uri, client_secret.header_parameter)
18
-
19
- Net::HTTP.start(
20
- uri.hostname,
21
- uri.port,
22
- use_ssl: uri.scheme == 'https') { |http| http.request(request) }
13
+ uri = generate_uri("item_categories/detail/#{item_id}")
14
+ request = generate_request(uri, client_secret.header_parameter)
15
+ start(request, uri)
23
16
  end
24
17
  end
25
18
  end
@@ -1,6 +1,7 @@
1
1
  module Base
2
2
  module Apis
3
3
  class Order
4
+ include HTTP
4
5
  attr_reader :client_secret
5
6
 
6
7
  def initialize(client_secret)
@@ -22,14 +23,8 @@ module Base
22
23
  "/#{API_VERSION}/orders?",
23
24
  URI.encode_www_form(request_parameters)].join)
24
25
 
25
- request = Net::HTTP::Get.new(uri, client_secret.header_parameter)
26
-
27
- Net::HTTP.start(
28
- uri.hostname,
29
- uri.port,
30
- use_ssl: uri.scheme == 'https') do |http|
31
- http.request(request)
32
- end
26
+ request = generate_request(uri, client_secret.header_parameter)
27
+ start(request, uri)
33
28
  end
34
29
  end
35
30
  end
@@ -1,6 +1,7 @@
1
1
  module Base
2
2
  module Apis
3
3
  class Saving
4
+ include HTTP
4
5
  attr_reader :client_secret
5
6
 
6
7
  def initialize(client_secret)
@@ -22,14 +23,8 @@ module Base
22
23
  "/#{API_VERSION}/savings?",
23
24
  URI.encode_www_form(request_parameters)].join)
24
25
 
25
- request = Net::HTTP::Get.new(uri, client_secret.header_parameter)
26
-
27
- Net::HTTP.start(
28
- uri.hostname,
29
- uri.port,
30
- use_ssl: uri.scheme == 'https') do |http|
31
- http.request(request)
32
- end
26
+ request = generate_request(uri, client_secret.header_parameter)
27
+ start(request, uri)
33
28
  end
34
29
  end
35
30
  end
@@ -1,6 +1,7 @@
1
1
  module Base
2
2
  module Apis
3
3
  class Search
4
+ include HTTP
4
5
  attr_reader :client_secret
5
6
  attr_accessor :request_parameters, :uri
6
7
 
@@ -11,14 +12,8 @@ module Base
11
12
  def request(query, &block)
12
13
  send(:request_parameters=, query, &block)
13
14
  send(:uri=, request_parameters)
14
- request = Net::HTTP::Get.new(uri)
15
-
16
- Net::HTTP.start(
17
- uri.hostname,
18
- uri.port,
19
- use_ssl: uri.scheme == 'https') do |http|
20
- http.request(request)
21
- end
15
+ request = generate_request(uri)
16
+ start(request, uri)
22
17
  end
23
18
 
24
19
  private
data/lib/base/apis.rb CHANGED
@@ -2,6 +2,7 @@ require 'net/http'
2
2
  require 'open-uri'
3
3
  require 'pathname'
4
4
  require 'multi_json'
5
+ require_relative 'http'
5
6
 
6
7
  module Base
7
8
  module Apis
@@ -14,6 +15,6 @@ module Base
14
15
  { CLIENT_SECRET:
15
16
  { PATH: ROOT / 'config/client_secret.json' } } }.freeze
16
17
 
17
- Dir.glob(ROOT / 'lib/base/api*/**/*.rb').each { |file| require file }
18
+ Dir.glob(ROOT / 'lib/base/**/*.rb').each { |file| require file }
18
19
  end
19
20
  end
data/lib/base/http.rb ADDED
@@ -0,0 +1,22 @@
1
+ module Base
2
+ module HTTP
3
+ def generate_uri(partial_path)
4
+ URI.join(
5
+ Apis::API_HOST.to_s,
6
+ "/#{Apis::API_VERSION}/#{partial_path}")
7
+ end
8
+
9
+ def generate_request(uri, header_parameter = nil)
10
+ Net::HTTP::Get.new(uri, header_parameter)
11
+ end
12
+
13
+ def start(request, uri)
14
+ Net::HTTP.start(
15
+ uri.hostname,
16
+ uri.port,
17
+ use_ssl: uri.scheme == 'https') do |http|
18
+ http.request(request)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,61 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Base::HTTP do
4
+ include Base::HTTP
5
+ let(:uri) { URI.parse('https://api.thebase.in/1/categories?') }
6
+ let(:header_parameter) { { 'Authorization' => 'Bearer 888access_token888' } }
7
+
8
+ describe '#generate_uri' do
9
+ it 'returns instance of URI' do
10
+ expect(generate_uri('partial_path')).to be_kind_of URI
11
+ end
12
+
13
+ it 'returns uri' do
14
+ %w(apple google/twitter facebook?).each do |partial_path|
15
+ expect(generate_uri(partial_path)).to eq \
16
+ URI.parse("https://api.thebase.in/1/#{partial_path}")
17
+ end
18
+ end
19
+ end
20
+
21
+ describe '#generate_request' do
22
+ context 'no header_parameter is given' do
23
+ it 'returns instance of Net::HTTP::Get' do
24
+ expect(generate_request(uri)).to be_kind_of Net::HTTP::Get
25
+ end
26
+
27
+ it 'has header_parameter authorization' do
28
+ expect(
29
+ generate_request(uri)
30
+ .instance_variable_get(:@header)['authorization']).to be_nil
31
+ end
32
+ end
33
+
34
+ context 'header_parameter is given' do
35
+ it 'returns instance of Net::HTTP::Get' do
36
+ expect(generate_request(uri, header_parameter))
37
+ .to be_kind_of Net::HTTP::Get
38
+ end
39
+
40
+ it 'has header_parameter authorization' do
41
+ expect(
42
+ generate_request(uri, header_parameter)
43
+ .instance_variable_get(:@header)['authorization'])
44
+ .to eq ['Bearer 888access_token888']
45
+ end
46
+ end
47
+ end
48
+
49
+ describe '#start' do
50
+ let(:request) { generate_request(uri, header_parameter) }
51
+ let(:response) { VCR.use_cassette('HTTP_start') { start(request, uri) } }
52
+
53
+ it 'response @code is "200"' do
54
+ expect(response.code).to eq '200'
55
+ end
56
+
57
+ it 'response @body contains categories' do
58
+ expect(response.body).to match(/categories/)
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,82 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://api.thebase.in/1/oauth/token
6
+ body:
7
+ encoding: US-ASCII
8
+ string: client_id=e0920d3fba627a5da4eaab4e8e9d43fc&client_secret=a7eae9a2903235465e9b43c1116e2046&code=614e48613d8f347eb00444a40fd9e47c&redirect_uri=http%3A%2F%2Flocalhost.local&refresh_token&search_client_id=623f75000821c16163ec570ca6469539&search_client_secret=a52ad8525921ca9a40fee47a38ca429d&grant_type=authorization_code
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - Ruby
16
+ Host:
17
+ - api.thebase.in
18
+ Content-Type:
19
+ - application/x-www-form-urlencoded
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Content-Type:
26
+ - application/json; charset=UTF-8
27
+ Date:
28
+ - Mon, 08 Feb 2016 13:51:52 GMT
29
+ Server:
30
+ - Apache
31
+ Vary:
32
+ - Accept-Encoding,User-Agent
33
+ Content-Length:
34
+ - '132'
35
+ Connection:
36
+ - keep-alive
37
+ body:
38
+ encoding: ASCII-8BIT
39
+ string: '{"access_token":"888access_token888","token_type":"bearer","expires_in":3600,"refresh_token":"8aa0c1d633af7f25909c689e49aab0a1"}'
40
+ http_version:
41
+ recorded_at: Mon, 08 Feb 2016 13:51:53 GMT
42
+ - request:
43
+ method: get
44
+ uri: https://api.thebase.in/1/categories
45
+ body:
46
+ encoding: US-ASCII
47
+ string: ''
48
+ headers:
49
+ Authorization:
50
+ - Bearer 888access_token888
51
+ Accept-Encoding:
52
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
53
+ Accept:
54
+ - "*/*"
55
+ User-Agent:
56
+ - Ruby
57
+ Host:
58
+ - api.thebase.in
59
+ response:
60
+ status:
61
+ code: 200
62
+ message: OK
63
+ headers:
64
+ Content-Type:
65
+ - application/json; charset=UTF-8
66
+ Date:
67
+ - Mon, 08 Feb 2016 13:51:53 GMT
68
+ Server:
69
+ - Apache
70
+ Vary:
71
+ - Accept-Encoding,User-Agent
72
+ Content-Length:
73
+ - '37'
74
+ Connection:
75
+ - keep-alive
76
+ body:
77
+ encoding: ASCII-8BIT
78
+ string: '{"categories":[]}'
79
+ http_version:
80
+ recorded_at: Mon, 08 Feb 2016 13:51:53 GMT
81
+ recorded_with: VCR 3.0.1
82
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: base-api-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4.beta
4
+ version: 0.2.5.beta
5
5
  platform: ruby
6
6
  authors:
7
7
  - ysksn
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-23 00:00:00.000000000 Z
11
+ date: 2016-02-25 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email:
@@ -23,6 +23,7 @@ files:
23
23
  - Gemfile
24
24
  - Guardfile
25
25
  - LICENSE
26
+ - README.md
26
27
  - base-api-client.gemspec
27
28
  - config/client_secret.json
28
29
  - lib/base/api_client/client_secret.rb
@@ -30,24 +31,27 @@ files:
30
31
  - lib/base/apis/category.rb
31
32
  - lib/base/apis/delivery_company.rb
32
33
  - lib/base/apis/item_category/detail.rb
33
- - lib/base/apis/normalization.rb
34
34
  - lib/base/apis/order.rb
35
35
  - lib/base/apis/saving.rb
36
36
  - lib/base/apis/search.rb
37
+ - lib/base/http.rb
38
+ - lib/base/normalization.rb
37
39
  - spec/base/api_client/client_secret_spec.rb
38
40
  - spec/base/apis/category_spec.rb
39
41
  - spec/base/apis/delivery_company_spec.rb
40
42
  - spec/base/apis/item_category/detail_spec.rb
41
- - spec/base/apis/normalization_spec.rb
42
43
  - spec/base/apis/order_spec.rb
43
44
  - spec/base/apis/saving_spec.rb
44
45
  - spec/base/apis/search_spec.rb
46
+ - spec/base/http_spec.rb
47
+ - spec/base/normalization_spec.rb
45
48
  - spec/fixtures/files/client_secret.json
46
49
  - spec/fixtures/vcr_cassettes/Category_request.yml
47
50
  - spec/fixtures/vcr_cassettes/ClientSecret_my_info.yml
48
51
  - spec/fixtures/vcr_cassettes/ClientSecret_my_items.yml
49
52
  - spec/fixtures/vcr_cassettes/DeliveryCompany_request.yml
50
53
  - spec/fixtures/vcr_cassettes/Detail_request.yml
54
+ - spec/fixtures/vcr_cassettes/HTTP_start.yml
51
55
  - spec/fixtures/vcr_cassettes/Order_request.yml
52
56
  - spec/fixtures/vcr_cassettes/Saving_request.yml
53
57
  - spec/fixtures/vcr_cassettes/Search_request.yml
@@ -82,16 +86,18 @@ test_files:
82
86
  - spec/base/apis/category_spec.rb
83
87
  - spec/base/apis/delivery_company_spec.rb
84
88
  - spec/base/apis/item_category/detail_spec.rb
85
- - spec/base/apis/normalization_spec.rb
86
89
  - spec/base/apis/order_spec.rb
87
90
  - spec/base/apis/saving_spec.rb
88
91
  - spec/base/apis/search_spec.rb
92
+ - spec/base/http_spec.rb
93
+ - spec/base/normalization_spec.rb
89
94
  - spec/fixtures/files/client_secret.json
90
95
  - spec/fixtures/vcr_cassettes/Category_request.yml
91
96
  - spec/fixtures/vcr_cassettes/ClientSecret_my_info.yml
92
97
  - spec/fixtures/vcr_cassettes/ClientSecret_my_items.yml
93
98
  - spec/fixtures/vcr_cassettes/DeliveryCompany_request.yml
94
99
  - spec/fixtures/vcr_cassettes/Detail_request.yml
100
+ - spec/fixtures/vcr_cassettes/HTTP_start.yml
95
101
  - spec/fixtures/vcr_cassettes/Order_request.yml
96
102
  - spec/fixtures/vcr_cassettes/Saving_request.yml
97
103
  - spec/fixtures/vcr_cassettes/Search_request.yml