etsy 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +125 -0
- data/Rakefile +40 -0
- data/lib/etsy.rb +65 -0
- data/lib/etsy/image.rb +27 -0
- data/lib/etsy/listing.rb +76 -0
- data/lib/etsy/model.rb +64 -0
- data/lib/etsy/request.rb +48 -0
- data/lib/etsy/response.rb +30 -0
- data/lib/etsy/shop.rb +50 -0
- data/lib/etsy/user.rb +54 -0
- data/lib/etsy/version.rb +13 -0
- data/test/fixtures/getShopDetails.json +70 -0
- data/test/fixtures/getShopListings.json +135 -0
- data/test/fixtures/getUserDetails.json +34 -0
- data/test/test_helper.rb +54 -0
- data/test/unit/etsy/image_test.rb +22 -0
- data/test/unit/etsy/listing_test.rb +92 -0
- data/test/unit/etsy/request_test.rb +74 -0
- data/test/unit/etsy/response_test.rb +49 -0
- data/test/unit/etsy/shop_test.rb +63 -0
- data/test/unit/etsy/user_test.rb +75 -0
- data/test/unit/etsy_test.rb +21 -0
- metadata +88 -0
@@ -0,0 +1,30 @@
|
|
1
|
+
module Etsy
|
2
|
+
|
3
|
+
# = Response
|
4
|
+
#
|
5
|
+
# Basic wrapper around the Etsy JSON response data
|
6
|
+
#
|
7
|
+
class Response
|
8
|
+
|
9
|
+
# Create a new response based on the raw JSON
|
10
|
+
def initialize(data)
|
11
|
+
@data = data
|
12
|
+
end
|
13
|
+
|
14
|
+
# Convert the raw JSON data to a hash
|
15
|
+
def to_hash
|
16
|
+
@hash ||= JSON.parse(@data)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Number of records in the response results
|
20
|
+
def count
|
21
|
+
to_hash['count']
|
22
|
+
end
|
23
|
+
|
24
|
+
# Results of the API request
|
25
|
+
def result
|
26
|
+
count == 1 ? to_hash['results'].first : to_hash['results']
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
data/lib/etsy/shop.rb
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
module Etsy
|
2
|
+
|
3
|
+
# = Shop
|
4
|
+
#
|
5
|
+
# Represents a single Etsy shop. Users may or may not have an associated shop -
|
6
|
+
# check the result of User#seller? to find out.
|
7
|
+
#
|
8
|
+
# A shop has the following attributes:
|
9
|
+
#
|
10
|
+
# [name] The shop's name
|
11
|
+
# [title] A brief heading for the shop's main page
|
12
|
+
# [announcement] An announcement to buyers (displays on the shop's home page)
|
13
|
+
# [message] The message sent to users who buy from this shop
|
14
|
+
# [banner_image_url] The full URL to the shops's banner image
|
15
|
+
# [listing_count] The total number of active listings contained in this shop
|
16
|
+
#
|
17
|
+
class Shop
|
18
|
+
|
19
|
+
include Etsy::Model
|
20
|
+
|
21
|
+
finder :one, '/shops/:user_id'
|
22
|
+
|
23
|
+
attribute :name, :from => :shop_name
|
24
|
+
attribute :updated, :from => :last_updated_epoch
|
25
|
+
attribute :created, :from => :creation_epoch
|
26
|
+
attribute :message, :from => :sale_message
|
27
|
+
|
28
|
+
attributes :banner_image_url, :listing_count, :title, :announcement, :user_id
|
29
|
+
|
30
|
+
# Time that this shop was created
|
31
|
+
#
|
32
|
+
def created_at
|
33
|
+
Time.at(created)
|
34
|
+
end
|
35
|
+
|
36
|
+
# Time that this shop was last updated
|
37
|
+
#
|
38
|
+
def updated_at
|
39
|
+
Time.at(updated)
|
40
|
+
end
|
41
|
+
|
42
|
+
# A collection of listings in this user's shop. See Etsy::Listing for
|
43
|
+
# more information
|
44
|
+
#
|
45
|
+
def listings
|
46
|
+
Listing.find_all_by_user_id(user_id)
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
data/lib/etsy/user.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
module Etsy
|
2
|
+
|
3
|
+
# = User
|
4
|
+
#
|
5
|
+
# Represents a single Etsy user - has the following attributes:
|
6
|
+
#
|
7
|
+
# [id] The unique identifier for this user
|
8
|
+
# [username] This user's username
|
9
|
+
# [url] The full URL to this user's profile page / shop (if seller)
|
10
|
+
# [city] The user's city / state (optional)
|
11
|
+
# [gender] The user's gender
|
12
|
+
# [bio] User's biography
|
13
|
+
#
|
14
|
+
class User
|
15
|
+
|
16
|
+
include Etsy::Model
|
17
|
+
|
18
|
+
finder :one, '/users/:username'
|
19
|
+
|
20
|
+
attribute :username, :from => :user_name
|
21
|
+
attribute :id, :from => :user_id
|
22
|
+
attribute :joined, :from => :join_epoch
|
23
|
+
attribute :seller, :from => :is_seller
|
24
|
+
attribute :last_login, :from => :last_login_epoch
|
25
|
+
|
26
|
+
attributes :url, :city, :gender, :bio
|
27
|
+
|
28
|
+
# This user's shop, returns nil if user is not a seller. See Etsy::Shop
|
29
|
+
# for more information.
|
30
|
+
#
|
31
|
+
def shop
|
32
|
+
Shop.find_by_user_id(id) if seller?
|
33
|
+
end
|
34
|
+
|
35
|
+
# Is this user a seller?
|
36
|
+
#
|
37
|
+
def seller?
|
38
|
+
seller
|
39
|
+
end
|
40
|
+
|
41
|
+
# Time that this user joined the site
|
42
|
+
#
|
43
|
+
def joined_at
|
44
|
+
Time.at(joined)
|
45
|
+
end
|
46
|
+
|
47
|
+
# Time that this user last logged in
|
48
|
+
#
|
49
|
+
def last_login_at
|
50
|
+
Time.at(last_login)
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
data/lib/etsy/version.rb
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
{
|
2
|
+
"count": 1,
|
3
|
+
"results": [{
|
4
|
+
"user_name": "littletjane",
|
5
|
+
"user_id": 5327518,
|
6
|
+
"url": "http:\/\/www.etsy.com\/shop.php?user_id=5327518",
|
7
|
+
"image_url_25x25": "http:\/\/ny-image3.etsy.com\/iusa_25x25.5874999.jpg",
|
8
|
+
"image_url_30x30": "http:\/\/ny-image3.etsy.com\/iusa_30x30.5874999.jpg",
|
9
|
+
"image_url_50x50": "http:\/\/ny-image3.etsy.com\/iusa_50x50.5874999.jpg",
|
10
|
+
"image_url_75x75": "http:\/\/ny-image3.etsy.com\/iusa_75x75.5874999.jpg",
|
11
|
+
"join_epoch": 1191381757.93,
|
12
|
+
"city": "Washington, DC",
|
13
|
+
"gender": "female",
|
14
|
+
"lat": null,
|
15
|
+
"lon": null,
|
16
|
+
"transaction_buy_count": 199,
|
17
|
+
"transaction_sold_count": 0,
|
18
|
+
"is_seller": true,
|
19
|
+
"was_featured_seller": false,
|
20
|
+
"materials": ["paper", "pen_and_pencil", "crayon_and_coloring_books", "ink_and_stamps", "collage", "decoupage_medium", "paint_and_canvas", "stickers", "magnets", "fabric_and_plush", "toys", "vintage_and_found_objects", "ecofriendly_and_recycled_goods"],
|
21
|
+
"last_login_epoch": 1239797927.39,
|
22
|
+
"feedback_count": "171",
|
23
|
+
"feedback_percent_positive": "100",
|
24
|
+
"referred_user_count": 1,
|
25
|
+
"birth_day": "20",
|
26
|
+
"birth_month": "3",
|
27
|
+
"bio": "hello! :D \r\n\r\n:about me:\r\n\r\nBA, dance \r\ncertified massage therapist\r\nwife & stay-at-home mama to 3 little ones\r\n\r\n:love love love:\r\n\r\nmy family\r\nmy children's drawings\r\nmy dear friends\r\nmusic \r\ndance!\r\nyoga\r\narts & craftiness...etsy!\r\nbaking\r\nmy mac\r\ndreaming\r\nlaughing\r\nplaying\r\nreading\r\ncute happy things\r\n=^..^=\r\n\r\nhttp:\/\/littletjane.com\r\nplease say hi!\r\n\r\ni'm flip...hip...zappy zowie zip!",
|
28
|
+
"banner_image_url": "http:\/\/ny-image0.etsy.com\/iusb_760x100.6158980.jpg",
|
29
|
+
"last_updated_epoch": 1239717723.36,
|
30
|
+
"creation_epoch": 1237430331.15,
|
31
|
+
"listing_count": 13,
|
32
|
+
"shop_name": "littletjane",
|
33
|
+
"title": "title text",
|
34
|
+
"sale_message": "message text",
|
35
|
+
"announcement": "announcement text",
|
36
|
+
"is_vacation": "",
|
37
|
+
"vacation_message": "",
|
38
|
+
"currency_code": "USD",
|
39
|
+
"policy_welcome": "oh hi! i'm so glad you've come by my shop! thank you so much for swinging in and taking a peek around :D\r\n\r\nwell, here are the 'ol policy-os. please do read carefully:",
|
40
|
+
"policy_payment": "payment method accepted: \r\npaypal (hooray!)\r\n\r\nterms: \r\nsubmit payment promptly. payment is due 3 days after purchase of the item. \r\n\r\nupon receipt of payment, the order will be shipped within 1 week.",
|
41
|
+
"policy_shipping": "method: usps first-class mail.\r\n \r\nplease feel free to contact me for rates on expedited shipping. \r\n\r\ni am not responsible for taxes or duties for your country.",
|
42
|
+
"policy_refunds": "oh help!\r\nif you are not happy with your item, please let me know. we can work this out! i will try my best to replace the item or refund your money, as the goal of my shop is to create and share in crafty happiness. right on!",
|
43
|
+
"policy_additional": "ok. well, that's about it! mostly, just be good, nice, honest, and fair, and this will return to you tenfold.\r\n\r\nif you have any questions, please don't hesitate to ask me.\r\n\r\nthanks a bunch, you! cheers!",
|
44
|
+
"sections": [{
|
45
|
+
"section_id": 6008529,
|
46
|
+
"title": "matchboxes",
|
47
|
+
"listing_count": 3
|
48
|
+
},
|
49
|
+
{
|
50
|
+
"section_id": 6008530,
|
51
|
+
"title": "original paintings",
|
52
|
+
"listing_count": 3
|
53
|
+
},
|
54
|
+
{
|
55
|
+
"section_id": 6059955,
|
56
|
+
"title": "sachets",
|
57
|
+
"listing_count": 5
|
58
|
+
},
|
59
|
+
{
|
60
|
+
"section_id": 6061498,
|
61
|
+
"title": "hand carved stamps",
|
62
|
+
"listing_count": 2
|
63
|
+
}]
|
64
|
+
}],
|
65
|
+
"params": {
|
66
|
+
"user_id": 5327518,
|
67
|
+
"detail_level": "high"
|
68
|
+
},
|
69
|
+
"type": "shop"
|
70
|
+
}
|
@@ -0,0 +1,135 @@
|
|
1
|
+
{
|
2
|
+
"count": 2,
|
3
|
+
"results": [{
|
4
|
+
"listing_id": 24165902,
|
5
|
+
"state": "active",
|
6
|
+
"title": "hanging with the bad boys matchbox",
|
7
|
+
"url": "http:\/\/www.etsy.com\/view_listing.php?listing_id=24165902",
|
8
|
+
"image_url_25x25": "http:\/\/ny-image2.etsy.com\/il_25x25.67765346.jpg",
|
9
|
+
"image_url_50x50": "http:\/\/ny-image2.etsy.com\/il_50x50.67765346.jpg",
|
10
|
+
"image_url_75x75": "http:\/\/ny-image2.etsy.com\/il_75x75.67765346.jpg",
|
11
|
+
"image_url_155x125": "http:\/\/ny-image2.etsy.com\/il_155x125.67765346.jpg",
|
12
|
+
"image_url_200x200": "http:\/\/ny-image2.etsy.com\/il_200x200.67765346.jpg",
|
13
|
+
"image_url_430xN": "http:\/\/ny-image2.etsy.com\/il_430xN.67765346.jpg",
|
14
|
+
"creation_epoch": 1240673494.49,
|
15
|
+
"views": 18,
|
16
|
+
"tags": ["accessories", "matchbox"],
|
17
|
+
"materials": ["standard_matchbox", "notebook_paper"],
|
18
|
+
"price": 3,
|
19
|
+
"currency_code": "USD",
|
20
|
+
"ending_epoch": 1251214294.49,
|
21
|
+
"hsv_color": "0;0;100",
|
22
|
+
"rgb_color": "#FFFFFF",
|
23
|
+
"user_id": 5327518,
|
24
|
+
"user_name": "littletjane",
|
25
|
+
"quantity": 1,
|
26
|
+
"description": "standard size matchbox ...",
|
27
|
+
"section_id": 6008529,
|
28
|
+
"section_title": "matchboxes",
|
29
|
+
"lat": null,
|
30
|
+
"lon": null,
|
31
|
+
"user_image_id": 5874999,
|
32
|
+
"city": "Washington, DC",
|
33
|
+
"all_images": [{
|
34
|
+
"image_url_25x25": "http:\/\/ny-image2.etsy.com\/il_25x25.67765346.jpg",
|
35
|
+
"image_url_50x50": "http:\/\/ny-image2.etsy.com\/il_50x50.67765346.jpg",
|
36
|
+
"image_url_75x75": "http:\/\/ny-image2.etsy.com\/il_75x75.67765346.jpg",
|
37
|
+
"image_url_155x125": "http:\/\/ny-image2.etsy.com\/il_155x125.67765346.jpg",
|
38
|
+
"image_url_200x200": "http:\/\/ny-image2.etsy.com\/il_200x200.67765346.jpg",
|
39
|
+
"image_url_430xN": "http:\/\/ny-image2.etsy.com\/il_430xN.67765346.jpg",
|
40
|
+
"hsv_color": "0;0;100",
|
41
|
+
"rgb_color": "#FFFFFF"
|
42
|
+
},
|
43
|
+
{
|
44
|
+
"image_url_25x25": "http:\/\/ny-image2.etsy.com\/il_25x25.67765298.jpg",
|
45
|
+
"image_url_50x50": "http:\/\/ny-image2.etsy.com\/il_50x50.67765298.jpg",
|
46
|
+
"image_url_75x75": "http:\/\/ny-image2.etsy.com\/il_75x75.67765298.jpg",
|
47
|
+
"image_url_155x125": "http:\/\/ny-image2.etsy.com\/il_155x125.67765298.jpg",
|
48
|
+
"image_url_200x200": "http:\/\/ny-image2.etsy.com\/il_200x200.67765298.jpg",
|
49
|
+
"image_url_430xN": "http:\/\/ny-image2.etsy.com\/il_430xN.67765298.jpg",
|
50
|
+
"hsv_color": "0;0;100",
|
51
|
+
"rgb_color": "#FFFFFF"
|
52
|
+
}]
|
53
|
+
},
|
54
|
+
{
|
55
|
+
"listing_id": 23555714,
|
56
|
+
"state": "active",
|
57
|
+
"title": "little t jane head hand carved stamp",
|
58
|
+
"url": "http:\/\/www.etsy.com\/view_listing.php?listing_id=23555714",
|
59
|
+
"image_url_25x25": "http:\/\/ny-image1.etsy.com\/il_25x25.65719221.jpg",
|
60
|
+
"image_url_50x50": "http:\/\/ny-image1.etsy.com\/il_50x50.65719221.jpg",
|
61
|
+
"image_url_75x75": "http:\/\/ny-image1.etsy.com\/il_75x75.65719221.jpg",
|
62
|
+
"image_url_155x125": "http:\/\/ny-image1.etsy.com\/il_155x125.65719221.jpg",
|
63
|
+
"image_url_200x200": "http:\/\/ny-image1.etsy.com\/il_200x200.65719221.jpg",
|
64
|
+
"image_url_430xN": "http:\/\/ny-image1.etsy.com\/il_430xN.65719221.jpg",
|
65
|
+
"creation_epoch": 1239482599.57,
|
66
|
+
"views": 42,
|
67
|
+
"tags": ["supplies", "handmade", "handcarved", "rubber_stamp", "embellishment", "scrapbooking", "ink", "paper_goods", "illustration", "happy", "smile", "littletjane", "cute", "funny"],
|
68
|
+
"materials": ["lino_cutters", "speedball_speedy_carve_block", "xacto_knife", "tracing_papers", "pencil", "ink", "wood", "foam_mounting_medium"],
|
69
|
+
"price": 7,
|
70
|
+
"currency_code": "USD",
|
71
|
+
"ending_epoch": 1250023399.57,
|
72
|
+
"hsv_color": "0;0;100",
|
73
|
+
"rgb_color": "#FFFFFF",
|
74
|
+
"user_id": 5327518,
|
75
|
+
"user_name": "littletjane",
|
76
|
+
"quantity": 1,
|
77
|
+
"description": "why, hello! a happy little head to stamp on all your papers.\r\n\r\nhand carved stamp lovingly carved on a highly durable, pink color eraser-like material that will not crack or crumble.\r\n\r\nfoam mounted on an approx. 1 x 1 inch wooden square. \r\n\r\n",
|
78
|
+
"section_id": 6061498,
|
79
|
+
"section_title": "hand carved stamps",
|
80
|
+
"lat": null,
|
81
|
+
"lon": null,
|
82
|
+
"user_image_id": 5874999,
|
83
|
+
"city": "Washington, DC",
|
84
|
+
"all_images": [{
|
85
|
+
"image_url_25x25": "http:\/\/ny-image1.etsy.com\/il_25x25.65719221.jpg",
|
86
|
+
"image_url_50x50": "http:\/\/ny-image1.etsy.com\/il_50x50.65719221.jpg",
|
87
|
+
"image_url_75x75": "http:\/\/ny-image1.etsy.com\/il_75x75.65719221.jpg",
|
88
|
+
"image_url_155x125": "http:\/\/ny-image1.etsy.com\/il_155x125.65719221.jpg",
|
89
|
+
"image_url_200x200": "http:\/\/ny-image1.etsy.com\/il_200x200.65719221.jpg",
|
90
|
+
"image_url_430xN": "http:\/\/ny-image1.etsy.com\/il_430xN.65719221.jpg",
|
91
|
+
"hsv_color": "0;0;100",
|
92
|
+
"rgb_color": "#FFFFFF"
|
93
|
+
},
|
94
|
+
{
|
95
|
+
"image_url_25x25": "http:\/\/ny-image1.etsy.com\/il_25x25.65719189.jpg",
|
96
|
+
"image_url_50x50": "http:\/\/ny-image1.etsy.com\/il_50x50.65719189.jpg",
|
97
|
+
"image_url_75x75": "http:\/\/ny-image1.etsy.com\/il_75x75.65719189.jpg",
|
98
|
+
"image_url_155x125": "http:\/\/ny-image1.etsy.com\/il_155x125.65719189.jpg",
|
99
|
+
"image_url_200x200": "http:\/\/ny-image1.etsy.com\/il_200x200.65719189.jpg",
|
100
|
+
"image_url_430xN": "http:\/\/ny-image1.etsy.com\/il_430xN.65719189.jpg",
|
101
|
+
"hsv_color": "0;0;100",
|
102
|
+
"rgb_color": "#FFFFFF"
|
103
|
+
},
|
104
|
+
{
|
105
|
+
"image_url_25x25": "http:\/\/ny-image1.etsy.com\/il_25x25.65719273.jpg",
|
106
|
+
"image_url_50x50": "http:\/\/ny-image1.etsy.com\/il_50x50.65719273.jpg",
|
107
|
+
"image_url_75x75": "http:\/\/ny-image1.etsy.com\/il_75x75.65719273.jpg",
|
108
|
+
"image_url_155x125": "http:\/\/ny-image1.etsy.com\/il_155x125.65719273.jpg",
|
109
|
+
"image_url_200x200": "http:\/\/ny-image1.etsy.com\/il_200x200.65719273.jpg",
|
110
|
+
"image_url_430xN": "http:\/\/ny-image1.etsy.com\/il_430xN.65719273.jpg",
|
111
|
+
"hsv_color": "0;0;100",
|
112
|
+
"rgb_color": "#FFFFFF"
|
113
|
+
},
|
114
|
+
{
|
115
|
+
"image_url_25x25": "http:\/\/ny-image0.etsy.com\/il_25x25.65719252.jpg",
|
116
|
+
"image_url_50x50": "http:\/\/ny-image0.etsy.com\/il_50x50.65719252.jpg",
|
117
|
+
"image_url_75x75": "http:\/\/ny-image0.etsy.com\/il_75x75.65719252.jpg",
|
118
|
+
"image_url_155x125": "http:\/\/ny-image0.etsy.com\/il_155x125.65719252.jpg",
|
119
|
+
"image_url_200x200": "http:\/\/ny-image0.etsy.com\/il_200x200.65719252.jpg",
|
120
|
+
"image_url_430xN": "http:\/\/ny-image0.etsy.com\/il_430xN.65719252.jpg",
|
121
|
+
"hsv_color": "0;0;100",
|
122
|
+
"rgb_color": "#FFFFFF"
|
123
|
+
}]
|
124
|
+
}],
|
125
|
+
"params": {
|
126
|
+
"user_id": 5327518,
|
127
|
+
"sort_on": "created",
|
128
|
+
"sort_order": "down",
|
129
|
+
"section_id": null,
|
130
|
+
"offset": 0,
|
131
|
+
"limit": 10,
|
132
|
+
"detail_level": "high"
|
133
|
+
},
|
134
|
+
"type": "listing"
|
135
|
+
}
|
@@ -0,0 +1,34 @@
|
|
1
|
+
{
|
2
|
+
"count": 1,
|
3
|
+
"results": [{
|
4
|
+
"user_name": "littletjane",
|
5
|
+
"user_id": 5327518,
|
6
|
+
"url": "http:\/\/www.etsy.com\/shop.php?user_id=5327518",
|
7
|
+
"image_url_25x25": "http:\/\/ny-image3.etsy.com\/iusa_25x25.5874999.jpg",
|
8
|
+
"image_url_30x30": "http:\/\/ny-image3.etsy.com\/iusa_30x30.5874999.jpg",
|
9
|
+
"image_url_50x50": "http:\/\/ny-image3.etsy.com\/iusa_50x50.5874999.jpg",
|
10
|
+
"image_url_75x75": "http:\/\/ny-image3.etsy.com\/iusa_75x75.5874999.jpg",
|
11
|
+
"join_epoch": 1191381757.93,
|
12
|
+
"city": "Washington, DC",
|
13
|
+
"gender": "female",
|
14
|
+
"lat": null,
|
15
|
+
"lon": null,
|
16
|
+
"transaction_buy_count": 199,
|
17
|
+
"transaction_sold_count": 0,
|
18
|
+
"is_seller": true,
|
19
|
+
"was_featured_seller": false,
|
20
|
+
"materials": ["paper", "pen_and_pencil", "crayon_and_coloring_books", "ink_and_stamps", "collage", "decoupage_medium", "paint_and_canvas", "stickers", "magnets", "fabric_and_plush", "toys", "vintage_and_found_objects", "ecofriendly_and_recycled_goods"],
|
21
|
+
"last_login_epoch": 1239797927.39,
|
22
|
+
"feedback_count": "171",
|
23
|
+
"feedback_percent_positive": "100",
|
24
|
+
"referred_user_count": 1,
|
25
|
+
"birth_day": "20",
|
26
|
+
"birth_month": "3",
|
27
|
+
"bio": "hello!"
|
28
|
+
}],
|
29
|
+
"params": {
|
30
|
+
"user_id": 5327518,
|
31
|
+
"detail_level": "high"
|
32
|
+
},
|
33
|
+
"type": "user"
|
34
|
+
}
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
# http://sneaq.net/textmate-wtf
|
2
|
+
$:.reject! { |e| e.include? 'TextMate' }
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
require 'throat_punch'
|
6
|
+
|
7
|
+
require File.dirname(__FILE__) + '/../lib/etsy'
|
8
|
+
|
9
|
+
class Test::Unit::TestCase
|
10
|
+
|
11
|
+
def self.read_fixture(method_name)
|
12
|
+
file = File.dirname(__FILE__) + "/fixtures/#{method_name}.json"
|
13
|
+
JSON.parse(File.read(file))['results']
|
14
|
+
end
|
15
|
+
|
16
|
+
def read_fixture(method_name)
|
17
|
+
self.class.read_fixture(method_name)
|
18
|
+
end
|
19
|
+
|
20
|
+
def mock_request_cycle(options)
|
21
|
+
response = Etsy::Response.new(stub())
|
22
|
+
|
23
|
+
data = read_fixture(options[:data])
|
24
|
+
data = data.first if data.size == 1
|
25
|
+
|
26
|
+
response.stubs(:result).with().returns(data)
|
27
|
+
|
28
|
+
Etsy::Request.stubs(:get).with(options[:for]).returns(response)
|
29
|
+
|
30
|
+
response
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.when_populating(klass, options, &block)
|
34
|
+
data = options[:from].is_a?(String) ? read_fixture(options[:from])[0] : options[:from].call
|
35
|
+
|
36
|
+
class_eval do
|
37
|
+
define_method "setup_for_population" do
|
38
|
+
@object = klass.new(data)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
block.call
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.value_for(method_name, options)
|
46
|
+
class_eval do
|
47
|
+
it "should have a value for :#{method_name}" do
|
48
|
+
setup_for_population
|
49
|
+
@object.send(method_name).should == options[:is]
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|