taobaorb 0.9.0 → 0.9.1
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|