threetaps-client 1.0.2 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/client/posting_client.rb +3 -2
- data/lib/client/search_client.rb +1 -1
- data/lib/client/status_client.rb +1 -1
- data/lib/dto/posting/exists_response.rb +5 -5
- data/lib/dto/search/best_match_response.rb +6 -1
- data/lib/models/posting.rb +13 -9
- data/spec/client/posting_client_spec.rb +3 -1
- data/spec/client/search_client_spec.rb +2 -1
- data/test/client/test_posting_client.rb +38 -27
- data/test/client/test_search_client.rb +3 -3
- metadata +4 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.
|
1
|
+
1.0.3
|
@@ -81,8 +81,9 @@ class PostingClient < Client
|
|
81
81
|
# Returns information on the existence of postings.
|
82
82
|
#
|
83
83
|
def exists_posting(posting)
|
84
|
-
params = "ids
|
84
|
+
params = "ids=[#{posting.to_json_for_status}]"
|
85
85
|
response = execute_post("/posting/exists", params)
|
86
|
-
|
86
|
+
p decode(response)[0]
|
87
|
+
ExistsResponse.new(decode(response)[0])
|
87
88
|
end
|
88
89
|
end
|
data/lib/client/search_client.rb
CHANGED
data/lib/client/status_client.rb
CHANGED
@@ -54,7 +54,7 @@ class StatusClient < Client
|
|
54
54
|
data = "["
|
55
55
|
data << postings.collect{|posting| "{#{posting.to_json_for_status_client}}"}.join(',')
|
56
56
|
data << "]"
|
57
|
-
params = "
|
57
|
+
params = "postings=#{data}"
|
58
58
|
response = execute_post("status/get", params)
|
59
59
|
GetStatusResponse.from_array(decode(response))
|
60
60
|
end
|
@@ -7,10 +7,10 @@
|
|
7
7
|
# response = ExistsResponse.from_hash("success" => "true")
|
8
8
|
# response.success # => true
|
9
9
|
#
|
10
|
-
class ExistsResponse
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
10
|
+
class ExistsResponse < Struct.new(:indexed, :postKey, :exists, :failures)
|
11
|
+
def initialize(hash = {})
|
12
|
+
hash.each do |key, value|
|
13
|
+
self.send("#{key}=".to_sym, value )
|
14
|
+
end
|
15
15
|
end
|
16
16
|
end
|
@@ -12,9 +12,14 @@
|
|
12
12
|
# response.numResults # => 20
|
13
13
|
# response.num_results # => 20
|
14
14
|
#
|
15
|
-
class BestMatchResponse < Struct.new(:category, :numResults) do
|
15
|
+
class BestMatchResponse < Struct.new(:category, :numResults, :error) do
|
16
16
|
def num_results
|
17
17
|
numResults
|
18
18
|
end
|
19
19
|
end
|
20
|
+
def initialize(hash = {})
|
21
|
+
hash.each do |key, value|
|
22
|
+
self.send("#{key}=".to_sym, value )
|
23
|
+
end
|
24
|
+
end
|
20
25
|
end
|
data/lib/models/posting.rb
CHANGED
@@ -33,10 +33,10 @@
|
|
33
33
|
# posting.to_json_for_status # => Array of JSON objects
|
34
34
|
class Posting < SuperModel::Base
|
35
35
|
attributes :postKey, :heading, :body, :category, :source, :location,
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
36
|
+
:longitude, :latitude, :language, :price, :currency, :images,
|
37
|
+
:externalURL, :externalID, :accountName, :accountID, :clickCount,
|
38
|
+
:timestamp, :expiration, :indexed, :trustedAnnotations,
|
39
|
+
:annotations, :errors, :status, :history
|
40
40
|
|
41
41
|
def initialize(*params)
|
42
42
|
super(*params)
|
@@ -46,10 +46,14 @@ class Posting < SuperModel::Base
|
|
46
46
|
end
|
47
47
|
|
48
48
|
def to_json
|
49
|
-
posting = "{"+'source:'+"'#{self.source}'" + ',category:' + "'#{self.category}'" + ',location:' + "'#{self.location}'" + ',heading:' + "'#{CGI.escape self.heading}'"
|
50
|
-
|
49
|
+
posting = "{"+'source:'+"'#{self.source}'" + ',category:' + "'#{self.category}'" + ',location:' + "'#{self.location}'" + ',heading:' + "'#{CGI.escape self.heading.to_json}'"
|
50
|
+
if self.timestamp
|
51
|
+
posting << ",timestamp: '#{(self.timestamp.utc.to_s(:db)).gsub(/\s/,"+")}'"
|
52
|
+
else
|
53
|
+
posting << ",timestamp: '#{(Time.now.utc.to_s(:db)).gsub(/\s/,"+")}'"
|
54
|
+
end
|
51
55
|
posting << ',images:' + "[#{images.collect{ |image| "'#{image}'"}.join(',')}]"
|
52
|
-
posting << ',body:' + "'#{CGI.escape self.body.
|
56
|
+
posting << ',body:' + "'#{CGI.escape self.body.to_json}'" unless self.body.blank?
|
53
57
|
posting << ',price:' + "'#{self.price}'"
|
54
58
|
posting << ',currency:' + "'#{self.currency}'"
|
55
59
|
posting << ',accountName:' + "'#{self.accountName}'"
|
@@ -66,12 +70,12 @@ class Posting < SuperModel::Base
|
|
66
70
|
|
67
71
|
def to_json_for_update
|
68
72
|
data = "['#{self.postKey}',"
|
69
|
-
data << "{heading:"+ "'#{CGI.escape self.heading}'" unless self.heading.blank?
|
73
|
+
data << "{heading:"+ "'#{CGI.escape self.heading.to_json}'" unless self.heading.blank?
|
70
74
|
data << ",images:" + "[#{images.collect{ |image| "'#{image}'"}.join(',')}]"
|
71
75
|
data << ",source:'#{self.source}'" unless self.source.blank?
|
72
76
|
data << ",category:'#{self.category}'" unless self.category.blank?
|
73
77
|
data << ",location:'#{self.location}'" unless self.location.blank?
|
74
|
-
data << ",body:" + "'#{CGI.escape self.body.
|
78
|
+
data << ",body:" + "'#{CGI.escape self.body.to_json}'" unless self.body.blank?
|
75
79
|
data << ',price:' + "'#{self.price}'"
|
76
80
|
data << ',currency:' + "'#{self.currency}'"
|
77
81
|
data << ',accountName:' + "'#{self.accountName}'"
|
@@ -30,7 +30,9 @@ describe PostingClient do
|
|
30
30
|
|
31
31
|
it "should return boolean value" do
|
32
32
|
stub_post_and_json_decode
|
33
|
-
|
33
|
+
ExistsResponse.stub!(:new).and_return mock("ExistsResponse", :exists => true)
|
34
|
+
ExistsResponse.should_receive(:new).with(nil)
|
35
|
+
@posting_client.exists_posting(mock("Posting", :to_json_for_status=>"")).exists.should be_true
|
34
36
|
end
|
35
37
|
end
|
36
38
|
|
@@ -44,7 +44,8 @@ describe SearchClient do
|
|
44
44
|
it "should send GET request and create BestMatchResponse from result" do
|
45
45
|
keywords = ""
|
46
46
|
bestmatch_response = mock "bestmatch_response"
|
47
|
-
|
47
|
+
stub_get_and_json_decode
|
48
|
+
BestMatchResponse.stub!(:new).and_return bestmatch_response
|
48
49
|
|
49
50
|
@search_client.best_match(keywords).should == bestmatch_response
|
50
51
|
end
|
@@ -7,6 +7,8 @@ class TestPostingClient < Test::Unit::TestCase
|
|
7
7
|
posting = Posting.new(
|
8
8
|
:source => "3TAPS",
|
9
9
|
:heading => "Svitla posting",
|
10
|
+
:location => "ZZZ",
|
11
|
+
:category => "ZZZZ",
|
10
12
|
:timestamp => Time.now
|
11
13
|
)
|
12
14
|
response = client.create_posting(posting)
|
@@ -14,29 +16,33 @@ class TestPostingClient < Test::Unit::TestCase
|
|
14
16
|
assert_equal CreateResponse, response.first.class
|
15
17
|
assert_nil response.first.error
|
16
18
|
posting_key = response.first.post_key
|
17
|
-
|
18
|
-
posting.
|
19
|
-
posting.
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
:
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
19
|
+
p posting_key
|
20
|
+
# posting.heading = "Svitla posting +++#{rand(100)}+++"
|
21
|
+
# posting.postKey = posting_key
|
22
|
+
# posting.body = "posting"
|
23
|
+
# # sleep(50)
|
24
|
+
# response = client.update_posting(posting)
|
25
|
+
# p response
|
26
|
+
# assert_equal true, response.success
|
27
|
+
#
|
28
|
+
# keys << posting_key
|
29
|
+
#
|
30
|
+
# posting = Posting.new(
|
31
|
+
# :source => "3TAPS",
|
32
|
+
# :heading => "Svitla posting",
|
33
|
+
# :location => "ZZZ",
|
34
|
+
# :category => "ZZZZ",
|
35
|
+
# :timestamp => Time.now
|
36
|
+
# )
|
37
|
+
# response = client.create_posting(posting)
|
38
|
+
# assert_equal Array, response.class
|
39
|
+
# assert_equal CreateResponse, response.first.class
|
40
|
+
# assert_nil response.first.error
|
41
|
+
# posting_key = response.first.post_key
|
42
|
+
# keys << posting_key
|
43
|
+
p "waiting while indexed by server"
|
44
|
+
sleep(10)
|
45
|
+
response = client.delete_posting(posting_key)
|
40
46
|
assert_equal DeleteResponse, response.class
|
41
47
|
assert_equal true, response.success
|
42
48
|
end
|
@@ -46,18 +52,23 @@ class TestPostingClient < Test::Unit::TestCase
|
|
46
52
|
posting1 = Posting.new(
|
47
53
|
:source => "3TAPS",
|
48
54
|
:heading => "Svitla posting1",
|
55
|
+
:location => "ZZZ",
|
56
|
+
:category => "ZZZZ",
|
49
57
|
:timestamp => Time.now
|
50
58
|
)
|
51
59
|
posting2 = Posting.new(
|
52
60
|
:source => "3TAPS",
|
53
61
|
:heading => "Svitla posting2",
|
54
|
-
:
|
62
|
+
:location => "ZZZ",
|
63
|
+
:category => "ZZZZ"
|
55
64
|
)
|
56
65
|
response = client.create_posting([posting1, posting2])
|
66
|
+
p response
|
57
67
|
assert_equal Array, response.class
|
58
68
|
assert_equal CreateResponse, response.first.class
|
59
69
|
assert_nil response.first.error
|
60
|
-
|
70
|
+
p "waiting while indexed by server"
|
71
|
+
sleep(15)
|
61
72
|
posting_key = response[0].post_key
|
62
73
|
posting1.postKey = posting_key
|
63
74
|
posting_key = response[1].post_key
|
@@ -75,9 +86,9 @@ class TestPostingClient < Test::Unit::TestCase
|
|
75
86
|
|
76
87
|
should "test posting retrieval" do
|
77
88
|
client = PostingClient.new
|
78
|
-
posting = client.get_posting("
|
89
|
+
posting = client.get_posting("BLQ7YJD")
|
79
90
|
assert_equal Posting, posting.class
|
80
|
-
assert_equal "
|
91
|
+
assert_equal "BLQ7YJD", posting.postKey
|
81
92
|
end
|
82
93
|
|
83
94
|
should "test posting deletion" do
|
@@ -23,7 +23,7 @@ class TestSearchClient < Test::Unit::TestCase
|
|
23
23
|
search_response = client.search(search_request)
|
24
24
|
assert_equal SearchResponse, search_response.class
|
25
25
|
assert_equal Array, search_response.results.class
|
26
|
-
assert_equal
|
26
|
+
assert_equal Hash, search_response.results.first.class
|
27
27
|
end
|
28
28
|
|
29
29
|
should "get the count request result" do
|
@@ -47,9 +47,9 @@ class TestSearchClient < Test::Unit::TestCase
|
|
47
47
|
end
|
48
48
|
|
49
49
|
should "get the best match result" do
|
50
|
-
search_keywords = "iPad
|
50
|
+
search_keywords = "iPad Apple iPhone"
|
51
51
|
client = SearchClient.new
|
52
|
-
best_match_response = client.best_match(search_keywords)
|
52
|
+
best_match_response = client.best_match(CGI.escape search_keywords)
|
53
53
|
assert_equal BestMatchResponse, best_match_response.class
|
54
54
|
assert_equal 'SELE', best_match_response.category
|
55
55
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 1
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 1.0.
|
8
|
+
- 3
|
9
|
+
version: 1.0.3
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- 3taps.com
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-04-
|
17
|
+
date: 2011-04-10 00:00:00 +03:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -220,7 +220,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
220
220
|
requirements:
|
221
221
|
- - ">="
|
222
222
|
- !ruby/object:Gem::Version
|
223
|
-
hash: -
|
223
|
+
hash: -228372899
|
224
224
|
segments:
|
225
225
|
- 0
|
226
226
|
version: "0"
|