taobaorb 0.9.0 → 0.9.1
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/lib/generators/taobao/config/config_generator.rb +13 -0
- data/lib/generators/taobao/config/taobaorb.yml +7 -0
- data/lib/rails/taobao-railtie.rb +17 -0
- data/lib/taobao/base.rb +4 -0
- data/lib/taobao/category.rb +12 -1
- data/lib/taobao/property.rb +1 -0
- data/lib/taobao/search.rb +3 -0
- data/lib/taobao/user.rb +18 -0
- data/lib/taobao/version.rb +3 -0
- data/lib/taobaorb.rb +2 -0
- data/spec/rspec/category_spec.rb +36 -31
- metadata +13 -2
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'rails/generators/named_base'
|
2
|
+
|
3
|
+
module Taobao
|
4
|
+
module Generators
|
5
|
+
class ConfigGenerator < Rails::Generators::Base
|
6
|
+
desc "Creates a taobaorb configuration file at config/taobaorb.yml"
|
7
|
+
source_root File.dirname(__FILE__)
|
8
|
+
def copy_config
|
9
|
+
copy_file 'taobaorb.yml', 'config/taobaorb.yml'
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'rails/railtie'
|
2
|
+
|
3
|
+
module Taobao
|
4
|
+
class Railtie < ::Rails::Railtie
|
5
|
+
initializer 'set API keys' do
|
6
|
+
begin
|
7
|
+
config = YAML.load_file(Rails.root.join('config', 'taobaorb.yml'))[Rails.env]
|
8
|
+
Taobao.public_key = config['public_key']
|
9
|
+
Taobao.private_key = config['private_key']
|
10
|
+
p Taobao.public_key
|
11
|
+
rescue Errno::ENOENT
|
12
|
+
puts 'Taobao config not found.'
|
13
|
+
puts 'To generate one run: rails g taobao:config'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/taobao/base.rb
CHANGED
@@ -13,6 +13,10 @@ module Taobao
|
|
13
13
|
attr_writer :private_key
|
14
14
|
end
|
15
15
|
|
16
|
+
# Performs API calls to Taobao
|
17
|
+
#
|
18
|
+
# @param options [Hash]
|
19
|
+
# @return [Hash] API request result
|
16
20
|
def self.api_request(options)
|
17
21
|
uri = URI(PRODUCTION_URL)
|
18
22
|
response = Net::HTTP.post_form uri, self.append_required_options(options)
|
data/lib/taobao/category.rb
CHANGED
@@ -1,22 +1,33 @@
|
|
1
1
|
class Taobao::Category
|
2
|
+
include Taobao::Util
|
2
3
|
attr_reader :id
|
3
4
|
|
5
|
+
# @param category_id [Integer]
|
4
6
|
def initialize(category_id)
|
5
7
|
@id = category_id.to_i
|
6
8
|
end
|
7
9
|
|
10
|
+
# @return [String]
|
8
11
|
def name
|
9
12
|
@name ||= category_request(cids: @id).first[:name]
|
10
13
|
end
|
11
14
|
|
15
|
+
# @return [Array<Taobao::Category>]
|
12
16
|
def subcategories
|
13
|
-
@subcategories
|
17
|
+
return @subcategories if @subcategories
|
18
|
+
@subcategories = category_request(parent_cid: @id).map do |cat|
|
19
|
+
category = self.class.new cat[:id]
|
20
|
+
category.to_object(cat)
|
21
|
+
category
|
22
|
+
end
|
14
23
|
end
|
15
24
|
|
25
|
+
# @return [Taobao::PropertyList]
|
16
26
|
def properties
|
17
27
|
@properties ||= Taobao::PropertyList.new(cid: @id)
|
18
28
|
end
|
19
29
|
|
30
|
+
# @return [Taobao::ProductList]
|
20
31
|
def products
|
21
32
|
@products ||= Taobao::ProductList.new(cid: @id)
|
22
33
|
end
|
data/lib/taobao/property.rb
CHANGED
data/lib/taobao/search.rb
CHANGED
data/lib/taobao/user.rb
CHANGED
@@ -2,58 +2,73 @@ require 'date'
|
|
2
2
|
|
3
3
|
class Taobao::User
|
4
4
|
|
5
|
+
# Retrive user info by nickname
|
6
|
+
# @param nickname [String]
|
5
7
|
def initialize(nickname)
|
6
8
|
@nick = nickname
|
7
9
|
end
|
8
10
|
|
11
|
+
# @return [Integer]
|
9
12
|
def good_purchases_count
|
10
13
|
cached_response[:buyer_credit][:good_num].to_i
|
11
14
|
end
|
12
15
|
|
16
|
+
# @return [Integer]
|
13
17
|
def buyer_level
|
14
18
|
cached_response[:buyer_credit][:level].to_i
|
15
19
|
end
|
16
20
|
|
21
|
+
# @return [Integer]
|
17
22
|
def buyer_score
|
18
23
|
cached_response[:buyer_credit][:score].to_i
|
19
24
|
end
|
20
25
|
|
26
|
+
# @return [Integer]
|
21
27
|
def total_purchases_count
|
22
28
|
cached_response[:buyer_credit][:total_num].to_i
|
23
29
|
end
|
24
30
|
|
31
|
+
# @return [Integer]
|
25
32
|
def good_sales_count
|
26
33
|
cached_response[:seller_credit][:good_num].to_i
|
27
34
|
end
|
28
35
|
|
36
|
+
# @return [Integer]
|
29
37
|
def seller_level
|
30
38
|
cached_response[:seller_credit][:level].to_i
|
31
39
|
end
|
32
40
|
|
41
|
+
# @return [Integer]
|
33
42
|
def seller_score
|
34
43
|
cached_response[:seller_credit][:score].to_i
|
35
44
|
end
|
36
45
|
|
46
|
+
# @return [Integer]
|
37
47
|
def total_sales_count
|
38
48
|
cached_response[:seller_credit][:total_num].to_i
|
39
49
|
end
|
40
50
|
|
51
|
+
# @return [DateTime]
|
41
52
|
def registration_date
|
42
53
|
DateTime.parse cached_response[:created]
|
43
54
|
end
|
44
55
|
|
56
|
+
# @return [DateTime]
|
45
57
|
def last_visit
|
46
58
|
DateTime.parse cached_response[:last_visit]
|
47
59
|
end
|
48
60
|
|
61
|
+
# @return [String]
|
49
62
|
def city
|
50
63
|
cached_response[:location][:city]
|
51
64
|
end
|
52
65
|
|
66
|
+
# @return [String]
|
53
67
|
def state
|
54
68
|
cached_response[:location][:state]
|
55
69
|
end
|
56
70
|
|
71
|
+
# @return [Symbol]
|
57
72
|
def sex
|
58
73
|
if cached_response.has_key? :sex
|
59
74
|
return :male if cached_response[:sex] == 'm'
|
@@ -62,14 +77,17 @@ class Taobao::User
|
|
62
77
|
:unknown
|
63
78
|
end
|
64
79
|
|
80
|
+
# @return [String]
|
65
81
|
def type
|
66
82
|
cached_response[:type]
|
67
83
|
end
|
68
84
|
|
85
|
+
# @return [String]
|
69
86
|
def uid
|
70
87
|
cached_response[:uid]
|
71
88
|
end
|
72
89
|
|
90
|
+
# @return [Integer]
|
73
91
|
def id
|
74
92
|
cached_response[:user_id].to_i
|
75
93
|
end
|
data/lib/taobaorb.rb
CHANGED
data/spec/rspec/category_spec.rb
CHANGED
@@ -2,23 +2,25 @@
|
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
4
|
describe Taobao::Category do
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
fixture = 'category.json'.json_fixture
|
11
|
-
args = {
|
12
|
-
method: 'taobao.itemcats.get',
|
13
|
-
fields: 'cid,parent_cid,name,is_parent',
|
14
|
-
cids: 28
|
15
|
-
}
|
16
|
-
Taobao.stub(:api_request).with(args).and_return(fixture)
|
17
|
-
category.name.should == 'ZIPPO/瑞士军刀/眼镜'
|
5
|
+
describe '#id' do
|
6
|
+
it 'should returns ID of the category' do
|
7
|
+
category = Taobao::Category.new(28)
|
8
|
+
category.id.should == 28
|
9
|
+
end
|
18
10
|
end
|
19
|
-
|
20
|
-
|
21
|
-
|
11
|
+
describe '#name' do
|
12
|
+
it 'should returns the name of the category' do
|
13
|
+
category = Taobao::Category.new(28)
|
14
|
+
fixture = 'category.json'.json_fixture
|
15
|
+
args = {
|
16
|
+
method: 'taobao.itemcats.get',
|
17
|
+
fields: 'cid,parent_cid,name,is_parent',
|
18
|
+
cids: 28
|
19
|
+
}
|
20
|
+
Taobao.stub(:api_request).with(args).and_return(fixture)
|
21
|
+
category.name.should == 'ZIPPO/瑞士军刀/眼镜'
|
22
|
+
end
|
23
|
+
it 'should throws an exception if the category ID is incorrect' do
|
22
24
|
fixture = 'incorrect_category.json'.json_fixture
|
23
25
|
args = {
|
24
26
|
method: 'taobao.itemcats.get',
|
@@ -33,30 +35,33 @@ describe Taobao::Category do
|
|
33
35
|
end
|
34
36
|
end
|
35
37
|
|
36
|
-
describe 'subcategories' do
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
}
|
38
|
+
describe '#subcategories' do
|
39
|
+
category = Taobao::Category.new(28)
|
40
|
+
fixture = 'subcategories.json'.json_fixture
|
41
|
+
args = {
|
42
|
+
method: 'taobao.itemcats.get',
|
43
|
+
fields: 'cid,parent_cid,name,is_parent',
|
44
|
+
parent_cid: 28
|
45
|
+
}
|
46
|
+
it 'should returns subcategories if they are exists' do
|
46
47
|
Taobao.stub(:api_request).with(args).and_return(fixture)
|
47
48
|
category.subcategories.should have_at_least(1).subcategory
|
48
49
|
end
|
50
|
+
it 'each subcategory should be an object of Taobao::Category class' do
|
51
|
+
Taobao.stub(:api_request).with(args).and_return(fixture)
|
52
|
+
category.subcategories[0].should be_a_kind_of(Taobao::Category)
|
53
|
+
end
|
49
54
|
end
|
50
55
|
|
51
|
-
describe 'properties' do
|
52
|
-
it 'should return
|
56
|
+
describe '#properties' do
|
57
|
+
it 'should return a PropertyList object' do
|
53
58
|
category = Taobao::Category.new(0)
|
54
|
-
|
59
|
+
category.properties.should be_a_kind_of(Taobao::PropertyList)
|
55
60
|
end
|
56
61
|
end
|
57
62
|
|
58
|
-
describe 'products' do
|
59
|
-
it 'should return ProductList object' do
|
63
|
+
describe '#products' do
|
64
|
+
it 'should return a ProductList object' do
|
60
65
|
category = Taobao::Category.new(28)
|
61
66
|
category.products.should be_a_kind_of(Taobao::ProductList)
|
62
67
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: taobaorb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-08-25 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Ruby wrapper for the Taobao API
|
15
15
|
email: a741su@gmail.com
|
@@ -17,6 +17,9 @@ executables: []
|
|
17
17
|
extensions: []
|
18
18
|
extra_rdoc_files: []
|
19
19
|
files:
|
20
|
+
- lib/generators/taobao/config/config_generator.rb
|
21
|
+
- lib/generators/taobao/config/taobaorb.yml
|
22
|
+
- lib/rails/taobao-railtie.rb
|
20
23
|
- lib/taobao/abstract_list.rb
|
21
24
|
- lib/taobao/base.rb
|
22
25
|
- lib/taobao/category.rb
|
@@ -30,6 +33,7 @@ files:
|
|
30
33
|
- lib/taobao/search.rb
|
31
34
|
- lib/taobao/user.rb
|
32
35
|
- lib/taobao/util.rb
|
36
|
+
- lib/taobao/version.rb
|
33
37
|
- lib/taobaorb.rb
|
34
38
|
- spec/fixtures/absent_user.json
|
35
39
|
- spec/fixtures/category.json
|
@@ -69,12 +73,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
69
73
|
- - ! '>='
|
70
74
|
- !ruby/object:Gem::Version
|
71
75
|
version: '0'
|
76
|
+
segments:
|
77
|
+
- 0
|
78
|
+
hash: 1557645060868365656
|
72
79
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
73
80
|
none: false
|
74
81
|
requirements:
|
75
82
|
- - ! '>='
|
76
83
|
- !ruby/object:Gem::Version
|
77
84
|
version: '0'
|
85
|
+
segments:
|
86
|
+
- 0
|
87
|
+
hash: 1557645060868365656
|
78
88
|
requirements: []
|
79
89
|
rubyforge_project:
|
80
90
|
rubygems_version: 1.8.24
|
@@ -82,3 +92,4 @@ signing_key:
|
|
82
92
|
specification_version: 3
|
83
93
|
summary: Ruby wrapper for the Taobao API
|
84
94
|
test_files: []
|
95
|
+
has_rdoc:
|