bigcartel 0.0.1 → 0.1.4
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/README.mkd +10 -3
- data/Rakefile +5 -0
- data/bigcartel.gemspec +1 -1
- data/lib/bigcartel.rb +143 -27
- data/lib/bigcartel/version.rb +3 -3
- data/spec/bigcartel_spec.rb +17 -0
- data/spec/helper.rb +15 -0
- metadata +10 -9
data/README.mkd
CHANGED
@@ -12,9 +12,16 @@ Usage
|
|
12
12
|
require 'bigcartel'
|
13
13
|
require 'pp'
|
14
14
|
|
15
|
-
s = BigCartel
|
16
|
-
|
17
|
-
|
15
|
+
s = BigCartel.store("tonkapark")
|
16
|
+
|
17
|
+
pp s.description
|
18
|
+
|
19
|
+
s.products.each do |product|
|
20
|
+
pp product.name
|
21
|
+
pp product.img.thumb
|
22
|
+
end
|
23
|
+
|
24
|
+
|
18
25
|
|
19
26
|
Copyright
|
20
27
|
---------
|
data/Rakefile
CHANGED
data/bigcartel.gemspec
CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.summary = %q{Ruby wrapper for the Big Cartel API}
|
13
13
|
s.description = %q{A Ruby wrapper for the Big Cartel External REST API}
|
14
14
|
|
15
|
-
s.
|
15
|
+
s.add_development_dependency 'rspec', '~> 2.3'
|
16
16
|
s.add_runtime_dependency('httparty', '~> 0.7.3')
|
17
17
|
|
18
18
|
s.rubyforge_project = s.name
|
data/lib/bigcartel.rb
CHANGED
@@ -1,27 +1,143 @@
|
|
1
|
-
require 'httparty'
|
2
|
-
|
3
|
-
module BigCartel
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
end
|
1
|
+
require 'httparty'
|
2
|
+
|
3
|
+
module BigCartel
|
4
|
+
|
5
|
+
# Alias for BigCartel::Store.find
|
6
|
+
#
|
7
|
+
# @return [BigCartel::Store]
|
8
|
+
def self.store(subdomain)
|
9
|
+
BigCartel::Store.find(subdomain)
|
10
|
+
end
|
11
|
+
|
12
|
+
# Delegate to BigCartel::Store
|
13
|
+
def self.method_missing(method, *args, &block)
|
14
|
+
return super unless client.respond_to?(method)
|
15
|
+
client.send(method, *args, &block)
|
16
|
+
end
|
17
|
+
|
18
|
+
class Base
|
19
|
+
include HTTParty
|
20
|
+
base_uri "http://api.bigcartel.com"
|
21
|
+
headers 'Content-Type' => 'application/json'
|
22
|
+
|
23
|
+
attr_reader :subdomain
|
24
|
+
|
25
|
+
def initialize(subdomain)
|
26
|
+
@subdomain = subdomain
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
class Store < Base
|
32
|
+
|
33
|
+
attr_reader :id, :description, :categories, :website, :products_count, :pages, :name, :url, :currency, :country
|
34
|
+
|
35
|
+
def initialize(id, data={})
|
36
|
+
@id = id
|
37
|
+
@description = data['description']
|
38
|
+
@website = data['website']
|
39
|
+
@products_count = data['products_count']
|
40
|
+
@pages = data['pages'].map{|p| Page.new(p, data['url'])} unless data['pages'].blank?
|
41
|
+
@name = data['name']
|
42
|
+
@url = data['url']
|
43
|
+
@currency = data['currency']['code']
|
44
|
+
@country = data['country']['name']
|
45
|
+
@categories = data['categories'].map{|cat| Category.new(cat,data['url'])} unless data['categories'].blank?
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.find(id)
|
49
|
+
Store.new(id, self.fetch(id))
|
50
|
+
end
|
51
|
+
|
52
|
+
def products
|
53
|
+
Product.all(@id, @url)
|
54
|
+
end
|
55
|
+
|
56
|
+
protected
|
57
|
+
def self.fetch(id)
|
58
|
+
get("/#{id}/store.js", :headers => {'Accept' => 'application/json'})
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
|
63
|
+
class Artist < Base
|
64
|
+
attr_reader :name, :url, :id, :permalink
|
65
|
+
def initialize(data={}, store_url)
|
66
|
+
@name = data['name']
|
67
|
+
@url = "#{store_url}#{data['url']}"
|
68
|
+
@id = data['id']
|
69
|
+
@permalink = data['permalink']
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
class Category < Artist
|
74
|
+
end
|
75
|
+
|
76
|
+
|
77
|
+
class Image < Base
|
78
|
+
attr_reader :height, :width, :url, :thumb, :medium, :large
|
79
|
+
def initialize(data={})
|
80
|
+
url_parts = data['url'].scan(/(http:\/\/cache(0|1).bigcartel.com\/product_images\/\d*\/)(.*).(jpg|png|gif)/i)
|
81
|
+
|
82
|
+
@height = data['height']
|
83
|
+
@width = data['width']
|
84
|
+
@url = data['url']
|
85
|
+
@thumb = "#{url_parts[0][0]}75.#{url_parts[0][3]}"
|
86
|
+
@medium = "#{url_parts[0][0]}175.#{url_parts[0][3]}"
|
87
|
+
@large = "#{url_parts[0][0]}300.#{url_parts[0][3]}"
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
class Page < Base
|
93
|
+
attr_reader :name, :permalink, :url
|
94
|
+
def initialize(data={}, store_url)
|
95
|
+
@name = data['name']
|
96
|
+
@permalink = data['permalink']
|
97
|
+
@url = "#{store_url}/#{data['permalink']}"
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
class Product < Base
|
102
|
+
attr_reader :name, :permalink, :url, :description, :artists, :on_sale, :status, :categories, :price, :position, :url, :id, :tax, :images, :shipping
|
103
|
+
def initialize(data={}, store_url)
|
104
|
+
@name = data['name']
|
105
|
+
@description = data['description']
|
106
|
+
@artists = data['artists'].map{|cat| Artist.new(cat,data['url'])} unless data['artists'].blank?
|
107
|
+
@on_sale= data['on_sale']
|
108
|
+
@status = data['status']
|
109
|
+
@categories = data['categories'].map{|cat| Category.new(cat,data['url'])} unless data['categories'].blank?
|
110
|
+
@price = data['price']
|
111
|
+
@position = data['position']
|
112
|
+
@url = "#{store_url}#{data['url']}"
|
113
|
+
@id = data['id']
|
114
|
+
@tax = data['tax']
|
115
|
+
@permalink = data['permalink']
|
116
|
+
@images = data['images'].blank? ? [] : data['images'].map{|img| Image.new(img)}
|
117
|
+
@shipping = data['shipping']
|
118
|
+
end
|
119
|
+
|
120
|
+
def img
|
121
|
+
self.images.first
|
122
|
+
end
|
123
|
+
|
124
|
+
def self.all(id, store_url)
|
125
|
+
self.fetch(id).map{|p| Product.new(p, store_url)}
|
126
|
+
end
|
127
|
+
|
128
|
+
protected
|
129
|
+
def self.fetch(id)
|
130
|
+
get("/#{id}/products.js", :headers => {'Accept' => 'application/json'})
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
|
135
|
+
class ProductOption < Base
|
136
|
+
attr_reader :name, :id
|
137
|
+
def initialize(data={})
|
138
|
+
@name = data['name']
|
139
|
+
@id = data['id']
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
end
|
data/lib/bigcartel/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
module BigCartel
|
2
|
-
VERSION = "0.
|
3
|
-
end
|
1
|
+
module BigCartel
|
2
|
+
VERSION = "0.1.4"
|
3
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe BigCartel do
|
4
|
+
|
5
|
+
describe ".store" do
|
6
|
+
it "should be a BigCartel::Store" do
|
7
|
+
BigCartel.store("tonkapark").should be_a BigCartel::Store
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should have id" do
|
11
|
+
store = BigCartel.store('tonkapark')
|
12
|
+
store.id.should == 'tonkapark'
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
data/spec/helper.rb
ADDED
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
- 0
|
8
7
|
- 1
|
9
|
-
|
8
|
+
- 4
|
9
|
+
version: 0.1.4
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Matt Anderson
|
@@ -14,11 +14,11 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-01-
|
17
|
+
date: 2011-01-28 00:00:00 -06:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
|
-
name:
|
21
|
+
name: rspec
|
22
22
|
prerelease: false
|
23
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
24
24
|
none: false
|
@@ -26,11 +26,10 @@ dependencies:
|
|
26
26
|
- - ~>
|
27
27
|
- !ruby/object:Gem::Version
|
28
28
|
segments:
|
29
|
-
-
|
30
|
-
-
|
31
|
-
|
32
|
-
|
33
|
-
type: :runtime
|
29
|
+
- 2
|
30
|
+
- 3
|
31
|
+
version: "2.3"
|
32
|
+
type: :development
|
34
33
|
version_requirements: *id001
|
35
34
|
- !ruby/object:Gem::Dependency
|
36
35
|
name: httparty
|
@@ -64,6 +63,8 @@ files:
|
|
64
63
|
- bigcartel.gemspec
|
65
64
|
- lib/bigcartel.rb
|
66
65
|
- lib/bigcartel/version.rb
|
66
|
+
- spec/bigcartel_spec.rb
|
67
|
+
- spec/helper.rb
|
67
68
|
has_rdoc: true
|
68
69
|
homepage: ""
|
69
70
|
licenses: []
|