play_asia 1.0.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|