play_asia 1.0.0 → 2.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.
- data/.gitignore +1 -0
- data/README.md +6 -2
- data/Rakefile +0 -1
- data/lib/play_asia.rb +2 -1
- data/lib/play_asia/api.rb +11 -21
- data/lib/play_asia/{api_listing.rb → listing_query.rb} +3 -11
- data/lib/play_asia/query.rb +34 -0
- data/lib/play_asia/response.rb +2 -0
- data/lib/play_asia/version.rb +2 -2
- data/play_asia.gemspec +1 -0
- data/test/test_api.rb +7 -6
- data/test/test_api_listing.rb +41 -72
- metadata +27 -4
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -20,9 +20,13 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
api = PlayAsia::Api.new
|
22
22
|
key: # your API key,
|
23
|
-
user: # your API user
|
23
|
+
user: # your API user
|
24
24
|
|
25
|
-
api.listing
|
25
|
+
api.listing(mask: [:price, :name], type: [:game]).exec
|
26
|
+
# => PlayAsia::Response
|
27
|
+
|
28
|
+
api.listing(mask: [:price, :name], type: [:game]).url
|
29
|
+
# => http://www.play-asia.com/__api__.php?...
|
26
30
|
|
27
31
|
## Contributing
|
28
32
|
|
data/Rakefile
CHANGED
data/lib/play_asia.rb
CHANGED
data/lib/play_asia/api.rb
CHANGED
@@ -1,35 +1,25 @@
|
|
1
|
-
require 'nokogiri'
|
2
|
-
|
3
1
|
class PlayAsia::Api
|
4
|
-
attr_accessor :endpoint
|
5
2
|
attr_accessor :headers
|
6
|
-
attr_accessor :http_client
|
7
3
|
|
8
4
|
def initialize(opts = {})
|
9
5
|
@opts = opts
|
10
|
-
@endpoint = 'http://www.play-asia.com/__api__.php'
|
11
6
|
@http_client = PlayAsia::HttpClient.new
|
12
7
|
end
|
13
8
|
|
14
9
|
def query(opts = {})
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
PlayAsia::Response.new @http_client.request(url, headers).read
|
10
|
+
query = PlayAsia::Query.new http_client
|
11
|
+
query.build(@headers || {}, @opts.merge(opts))
|
12
|
+
query
|
20
13
|
end
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
params = opts.map { |k,v| "#{k}=#{v}" }.join '&'
|
27
|
-
"#{endpoint}?#{params}"
|
14
|
+
|
15
|
+
def listing(opts = {})
|
16
|
+
query = PlayAsia::ListingQuery.new http_client
|
17
|
+
query.build(@headers || {}, @opts.merge(opts))
|
18
|
+
query
|
28
19
|
end
|
29
20
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
raise ArgumentError, 'Missing Query type (expected :query)' unless opts[:query]
|
21
|
+
private
|
22
|
+
def http_client
|
23
|
+
@http_client
|
34
24
|
end
|
35
25
|
end
|
@@ -1,13 +1,4 @@
|
|
1
|
-
class PlayAsia::
|
2
|
-
def listing(opts = {})
|
3
|
-
opts = process_friendly_keys opts.merge({ query: :listing })
|
4
|
-
response = query opts
|
5
|
-
|
6
|
-
raise "Query error: '#{response.error_message}'" if response.error?
|
7
|
-
|
8
|
-
response
|
9
|
-
end
|
10
|
-
|
1
|
+
class PlayAsia::ListingQuery < PlayAsia::Query
|
11
2
|
private
|
12
3
|
MASK = {
|
13
4
|
price: 'p',
|
@@ -318,7 +309,8 @@ class PlayAsia::Api
|
|
318
309
|
us: 4
|
319
310
|
}
|
320
311
|
|
321
|
-
def
|
312
|
+
def prepare_opts(opts)
|
313
|
+
opts[:query] = :listing
|
322
314
|
opts[:mask] = map_array_to_string opts[:mask], MASK if opts[:mask]
|
323
315
|
opts[:type] = map_array_to_string opts[:type], TYPES, ',' if opts[:type]
|
324
316
|
opts[:genre] = map_array_to_string opts[:genre], GENRES, ',' if opts[:genre]
|
@@ -0,0 +1,34 @@
|
|
1
|
+
class PlayAsia::Query
|
2
|
+
attr_reader :url
|
3
|
+
|
4
|
+
def initialize(http_client)
|
5
|
+
@endpoint = 'http://www.play-asia.com/__api__.php'
|
6
|
+
@http_client = http_client
|
7
|
+
end
|
8
|
+
|
9
|
+
def build(headers, opts)
|
10
|
+
@url = build_url(@endpoint, opts)
|
11
|
+
end
|
12
|
+
|
13
|
+
def exec
|
14
|
+
PlayAsia::Response.new @http_client.request(@url, headers).read
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
def build_url(endpoint, opts)
|
19
|
+
opts = prepare_opts opts
|
20
|
+
ensure_required_parameters opts
|
21
|
+
params = opts.map { |k,v| "#{k}=#{v}" }.join '&'
|
22
|
+
"#{endpoint}?#{params}"
|
23
|
+
end
|
24
|
+
|
25
|
+
def prepare_opts(opts)
|
26
|
+
opts
|
27
|
+
end
|
28
|
+
|
29
|
+
def ensure_required_parameters opts
|
30
|
+
raise ArgumentError, 'Missing API key (expected :key)' unless opts[:key]
|
31
|
+
raise ArgumentError, 'Missing User ID (expected :user)' unless opts[:user]
|
32
|
+
raise ArgumentError, 'Missing Query type (expected :query)' unless opts[:query]
|
33
|
+
end
|
34
|
+
end
|
data/lib/play_asia/response.rb
CHANGED
data/lib/play_asia/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
module PlayAsia
|
2
|
-
VERSION = '
|
3
|
-
end
|
2
|
+
VERSION = '2.0.0'
|
3
|
+
end
|
data/play_asia.gemspec
CHANGED
@@ -9,6 +9,7 @@ Gem::Specification.new do |gem|
|
|
9
9
|
gem.homepage = 'http://www.onthegame.com.au/about/opensource'
|
10
10
|
|
11
11
|
gem.add_runtime_dependency 'nokogiri'
|
12
|
+
gem.add_development_dependency 'rake'
|
12
13
|
gem.add_development_dependency 'minitest-reporters'
|
13
14
|
|
14
15
|
gem.files = `git ls-files`.split($\)
|
data/test/test_api.rb
CHANGED
@@ -8,19 +8,20 @@ class ApiTest < MiniTest::Unit::TestCase
|
|
8
8
|
def setup
|
9
9
|
@api = PlayAsia::Api.new
|
10
10
|
@http_client = StubbedHttpClient.new STUBBED_RESPONSE
|
11
|
-
@api.http_client
|
11
|
+
def @api.http_client
|
12
|
+
@http_client
|
13
|
+
end
|
12
14
|
end
|
13
15
|
|
14
16
|
def test_query_defaults_to_using_play_asia_domain
|
15
|
-
@api.query
|
17
|
+
query = @api.query(key: 'api_key', user: 1, query: 'test')
|
16
18
|
|
17
|
-
assert
|
19
|
+
assert query.url.start_with? 'http://www.play-asia.com/__api__.php'
|
18
20
|
end
|
19
21
|
|
20
22
|
def test_query_uses_arguments_as_query_string
|
21
|
-
@api.query
|
22
|
-
|
23
|
-
query_string = parse_hash_from_query_string url.split('?').last
|
23
|
+
query = @api.query(key: 'api_key', user: 1, query: 'test', a: 1, b: 2, c: 3)
|
24
|
+
query_string = parse_hash_from_query_string query.url.split('?').last
|
24
25
|
|
25
26
|
assert_equal query_string['key'], 'api_key'
|
26
27
|
assert_equal query_string['user'], '1'
|
data/test/test_api_listing.rb
CHANGED
@@ -4,137 +4,106 @@ require 'minitest/mock'
|
|
4
4
|
require_relative 'stubs/stubbed_http_client'
|
5
5
|
|
6
6
|
class ApiListingTest < MiniTest::Unit::TestCase
|
7
|
+
KEY = 'abc'
|
8
|
+
USER = 1
|
7
9
|
OK_RESPONSE = PlayAsia::Response.new '<message><status><query>test</query><error>0</error><errorstring /><items>1</items></status><content><item>1</item></content></message>'
|
8
10
|
|
11
|
+
def setup
|
12
|
+
@api = PlayAsia::Api.new
|
13
|
+
@http_client = StubbedHttpClient.new OK_RESPONSE
|
14
|
+
def @api.http_client
|
15
|
+
@http_client
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
9
19
|
def test_should_map_mask_array_to_string
|
10
|
-
|
11
|
-
|
12
|
-
:url, :affiliate_url, :genre, :version, :encoding, :compatible]
|
20
|
+
query = @api.listing(key: KEY, user: USER, mask: [:price, :barcodes, :manufacturer_codes, :sale_info, :release_date, :name, :image,
|
21
|
+
:url, :affiliate_url, :genre, :version, :encoding, :compatible])
|
13
22
|
|
14
|
-
assert_equal 'pjmsrnilagvec',
|
23
|
+
assert_equal 'http://www.play-asia.com/__api__.php?key=abc&user=1&mask=pjmsrnilagvec&query=listing', query.url
|
15
24
|
end
|
16
25
|
|
17
26
|
def test_should_use_string_for_mask_if_given
|
18
|
-
|
19
|
-
api.listing mask: 'string'
|
27
|
+
query = @api.listing key: KEY, user: USER, mask: 'string'
|
20
28
|
|
21
|
-
assert_equal 'string',
|
29
|
+
assert_equal 'http://www.play-asia.com/__api__.php?key=abc&user=1&mask=string&query=listing', query.url
|
22
30
|
end
|
23
31
|
|
24
32
|
def test_should_map_type_array_to_csv_of_integers
|
25
|
-
|
26
|
-
api.listing type: [:accessory, :cd, :groceries, :apparel, :electronics, :movie, :book, :game, :toy]
|
33
|
+
query = @api.listing key: KEY, user: USER, type: [:accessory, :cd, :groceries, :apparel, :electronics, :movie, :book, :game, :toy]
|
27
34
|
|
28
|
-
assert_equal '2,3,7,8,9,4,6,1,5',
|
35
|
+
assert_equal 'http://www.play-asia.com/__api__.php?key=abc&user=1&type=2,3,7,8,9,4,6,1,5&query=listing', query.url
|
29
36
|
end
|
30
37
|
|
31
38
|
def test_should_use_string_for_type_if_given
|
32
|
-
|
33
|
-
api.listing type: 'string'
|
39
|
+
query = @api.listing key: KEY, user: USER, type: 'string'
|
34
40
|
|
35
|
-
assert_equal 'string',
|
41
|
+
assert_equal 'http://www.play-asia.com/__api__.php?key=abc&user=1&type=string&query=listing', query.url
|
36
42
|
end
|
37
43
|
|
38
44
|
def test_should_map_genre_array_to_csv_of_integers
|
39
|
-
|
40
|
-
api.listing genre: [:strategy_video_game, :racing_video_game, :simulation_video_game, :tv_series_dvd_vcd]
|
45
|
+
query = @api.listing key: KEY, user: USER, genre: [:strategy_video_game, :racing_video_game, :simulation_video_game, :tv_series_dvd_vcd]
|
41
46
|
|
42
|
-
assert_equal '10,11,12,122',
|
47
|
+
assert_equal 'http://www.play-asia.com/__api__.php?key=abc&user=1&genre=10,11,12,122&query=listing', query.url
|
43
48
|
end
|
44
49
|
|
45
50
|
def test_should_use_string_for_genre_if_given
|
46
|
-
|
47
|
-
api.listing genre: 'string'
|
51
|
+
query = @api.listing key: KEY, user: USER, genre: 'string'
|
48
52
|
|
49
|
-
assert_equal 'string',
|
53
|
+
assert_equal 'http://www.play-asia.com/__api__.php?key=abc&user=1&genre=string&query=listing', query.url
|
50
54
|
end
|
51
55
|
|
52
56
|
def test_should_map_compatible_array_to_csv_of_integers
|
53
|
-
|
54
|
-
api.listing compatible: [:dreamcast, :ipad]
|
57
|
+
query = @api.listing key: KEY, user: USER, compatible: [:dreamcast, :ipad]
|
55
58
|
|
56
|
-
assert_equal '9,111',
|
59
|
+
assert_equal 'http://www.play-asia.com/__api__.php?key=abc&user=1&compatible=9,111&query=listing', query.url
|
57
60
|
end
|
58
61
|
|
59
62
|
def test_should_use_string_for_compatible_if_given
|
60
|
-
|
61
|
-
api.listing compatibility: 'string'
|
63
|
+
query = @api.listing key: KEY, user: USER, compatibility: 'string'
|
62
64
|
|
63
|
-
assert_equal 'string',
|
65
|
+
assert_equal 'http://www.play-asia.com/__api__.php?key=abc&user=1&compatibility=string&query=listing', query.url
|
64
66
|
end
|
65
67
|
|
66
68
|
def test_should_map_encoding_array_to_csv_of_integers
|
67
|
-
|
68
|
-
api.listing encoding: [:pal, :aac]
|
69
|
+
query = @api.listing key: KEY, user: USER, encoding: [:pal, :aac]
|
69
70
|
|
70
|
-
assert_equal '4,31',
|
71
|
+
assert_equal 'http://www.play-asia.com/__api__.php?key=abc&user=1&encoding=4,31&query=listing', query.url
|
71
72
|
end
|
72
73
|
|
73
74
|
def test_should_use_string_for_encoding_if_given
|
74
|
-
|
75
|
-
api.listing encoding: 'string'
|
75
|
+
query = @api.listing key: KEY, user: USER, encoding: 'string'
|
76
76
|
|
77
|
-
assert_equal 'string',
|
77
|
+
assert_equal 'http://www.play-asia.com/__api__.php?key=abc&user=1&encoding=string&query=listing', query.url
|
78
78
|
end
|
79
79
|
|
80
80
|
def test_should_map_version_array_to_csv_of_integers
|
81
|
-
|
82
|
-
api.listing version: [:asia, :hong_kong]
|
81
|
+
query = @api.listing key: KEY, user: USER, version: [:asia, :hong_kong]
|
83
82
|
|
84
|
-
assert_equal '6,19',
|
83
|
+
assert_equal 'http://www.play-asia.com/__api__.php?key=abc&user=1&version=6,19&query=listing', query.url
|
85
84
|
end
|
86
85
|
|
87
86
|
def test_should_use_version_for_encoding_if_given
|
88
|
-
|
89
|
-
api.listing version: 'string'
|
87
|
+
query = @api.listing key: KEY, user: USER, version: 'string'
|
90
88
|
|
91
|
-
assert_equal 'string',
|
89
|
+
assert_equal 'http://www.play-asia.com/__api__.php?key=abc&user=1&version=string&query=listing', query.url
|
92
90
|
end
|
93
91
|
|
94
92
|
def test_should_map_skip_preowned_boolean_true_to_1
|
95
|
-
|
96
|
-
api.listing skip_preowned: true
|
93
|
+
query = @api.listing key: KEY, user: USER, skip_preowned: true
|
97
94
|
|
98
|
-
assert_equal '1',
|
95
|
+
assert_equal 'http://www.play-asia.com/__api__.php?key=abc&user=1&skip_preowned=1&query=listing', query.url
|
99
96
|
end
|
100
97
|
|
101
98
|
def test_should_map_skip_preowned_boolean_false_to_0
|
102
|
-
|
103
|
-
api.listing skip_preowned: false
|
99
|
+
query = @api.listing key: KEY, user: USER, skip_preowned: false
|
104
100
|
|
105
|
-
assert_equal '0',
|
101
|
+
assert_equal 'http://www.play-asia.com/__api__.php?key=abc&user=1&skip_preowned=0&query=listing', query.url
|
106
102
|
end
|
107
103
|
|
108
104
|
def test_should_allow_string_for_skip_preowned
|
109
|
-
|
110
|
-
api.listing skip_preowned: 'yes'
|
111
|
-
|
112
|
-
assert_equal 'yes', api.queried_options[:skip_preowned]
|
113
|
-
end
|
114
|
-
|
115
|
-
def test_should_only_use_supplied_parameters_and_query
|
116
|
-
api = api_with_stubbed_query
|
117
|
-
api.listing type: [:game], mask: [:name]
|
118
|
-
|
119
|
-
refute_nil api.queried_options[:type]
|
120
|
-
refute_nil api.queried_options[:mask]
|
121
|
-
assert_equal [:type, :mask, :query], api.queried_options.keys
|
122
|
-
end
|
123
|
-
|
124
|
-
private
|
125
|
-
def api_with_stubbed_query
|
126
|
-
api = PlayAsia::Api.new
|
127
|
-
|
128
|
-
# overwrite the query method so we can grab the options passed to it
|
129
|
-
class << api
|
130
|
-
attr_reader :queried_options
|
131
|
-
|
132
|
-
def query(opts = {})
|
133
|
-
@queried_options = opts
|
134
|
-
OK_RESPONSE
|
135
|
-
end
|
136
|
-
end
|
105
|
+
query = @api.listing key: KEY, user: USER, skip_preowned: 'yes'
|
137
106
|
|
138
|
-
|
107
|
+
assert_equal 'http://www.play-asia.com/__api__.php?key=abc&user=1&skip_preowned=yes&query=listing', query.url
|
139
108
|
end
|
140
109
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: play_asia
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-
|
13
|
+
date: 2013-03-05 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: nokogiri
|
@@ -28,6 +28,22 @@ dependencies:
|
|
28
28
|
- - ! '>='
|
29
29
|
- !ruby/object:Gem::Version
|
30
30
|
version: '0'
|
31
|
+
- !ruby/object:Gem::Dependency
|
32
|
+
name: rake
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
35
|
+
requirements:
|
36
|
+
- - ! '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
type: :development
|
40
|
+
prerelease: false
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ! '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
31
47
|
- !ruby/object:Gem::Dependency
|
32
48
|
name: minitest-reporters
|
33
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,8 +74,9 @@ files:
|
|
58
74
|
- Rakefile
|
59
75
|
- lib/play_asia.rb
|
60
76
|
- lib/play_asia/api.rb
|
61
|
-
- lib/play_asia/api_listing.rb
|
62
77
|
- lib/play_asia/http_client.rb
|
78
|
+
- lib/play_asia/listing_query.rb
|
79
|
+
- lib/play_asia/query.rb
|
63
80
|
- lib/play_asia/response.rb
|
64
81
|
- lib/play_asia/version.rb
|
65
82
|
- play_asia.gemspec
|
@@ -79,15 +96,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
79
96
|
- - ! '>='
|
80
97
|
- !ruby/object:Gem::Version
|
81
98
|
version: '0'
|
99
|
+
segments:
|
100
|
+
- 0
|
101
|
+
hash: 4515185138541930384
|
82
102
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
103
|
none: false
|
84
104
|
requirements:
|
85
105
|
- - ! '>='
|
86
106
|
- !ruby/object:Gem::Version
|
87
107
|
version: '0'
|
108
|
+
segments:
|
109
|
+
- 0
|
110
|
+
hash: 4515185138541930384
|
88
111
|
requirements: []
|
89
112
|
rubyforge_project:
|
90
|
-
rubygems_version: 1.8.
|
113
|
+
rubygems_version: 1.8.25
|
91
114
|
signing_key:
|
92
115
|
specification_version: 3
|
93
116
|
summary: Play Asia API
|