noun-project-api 0.0.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d9ab862e12777068635829cbd6886a6738334834
4
+ data.tar.gz: d728bfa28a6e5be508db1f2f4e11db56d7eb92c1
5
+ SHA512:
6
+ metadata.gz: db6b7561514ffaa8ff2e11e80b594357bcdcac60606e4a4d206d8e386cebb52552471b1d2c0d8a20f12c09c822da319990d0abd7a808be1d2141818feca516cf
7
+ data.tar.gz: aac17875220554f4c77b4ac89033f7c5b031de60d8f7e4398af811fddd9c5022709f2551ca2c4f607c4d32c751a02520fb589f221c81f015b6d7cc4f82a7b400
data/Rakefile ADDED
@@ -0,0 +1,14 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ $:.unshift 'lib'
5
+
6
+ desc 'Default: run unit tests.'
7
+ task :default => [:spec]
8
+
9
+ require 'rspec/core/rake_task'
10
+
11
+ desc 'Run specs'
12
+ RSpec::Core::RakeTask.new do |t|
13
+ t.pattern = './spec/**/*_spec.rb'
14
+ end
@@ -0,0 +1,5 @@
1
+ require 'noun-project-api/icon'
2
+ require 'noun-project-api/icons'
3
+
4
+ module NounProjectApi
5
+ end
@@ -0,0 +1,18 @@
1
+ require 'noun-project-api/retriever'
2
+
3
+ module NounProjectApi
4
+ class Icon < Retriever
5
+ API_PATH = "/icon/"
6
+
7
+ def find(id)
8
+ raise ArgumentError.new('Missing id/slug') unless id
9
+
10
+ result = self.access_token.get("#{API_BASE}#{API_PATH}#{id}")
11
+ raise ArgumentError.new('Bad request') unless result.code == '200'
12
+
13
+ JSON.parse(result.body)
14
+ end
15
+
16
+ alias_method :find_by_slug, :find
17
+ end
18
+ end
@@ -0,0 +1,44 @@
1
+ require 'noun-project-api/retriever'
2
+ require 'open-uri'
3
+
4
+ module NounProjectApi
5
+ class Icons < Retriever
6
+ API_PATH = "/icons/"
7
+
8
+ def find(term, limit = nil, offset = nil, page = nil)
9
+ raise ArgumentError.new('Missing search term') unless term
10
+
11
+ search = URI::encode(term)
12
+
13
+ args = { "limit" => limit, "offset" => offset, "page" => page }.reject { |k, v| v.nil? }
14
+ if args.size > 0
15
+ search += '?'
16
+ args.each { |k, v| search += "#{k}=#{v}&" }
17
+ end
18
+
19
+ result = self.access_token.get("#{API_BASE}#{API_PATH}#{search}")
20
+ raise ArgumentError.new('Bad request') unless ['200', '404'].include? result.code
21
+
22
+ if result.code == '200'
23
+ JSON.parse(result.body)["icons"]
24
+ else
25
+ []
26
+ end
27
+ end
28
+
29
+ def recent_uploads(limit = nil, offset = nil, page = nil)
30
+ args = { "limit" => limit, "offset" => offset, "page" => page }.reject { |k, v| v.nil? }
31
+ if args.size > 0
32
+ search = '?'
33
+ args.each { |k, v| search += "#{k}=#{v}&" }
34
+ else
35
+ search = ''
36
+ end
37
+
38
+ result = self.access_token.get("#{API_BASE}#{API_PATH}recent_uploads#{search}")
39
+ raise ArgumentError.new('Bad request') unless result.code == '200'
40
+
41
+ JSON.parse(result.body)["recent_uploads"]
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,16 @@
1
+ require "oauth"
2
+
3
+ module NounProjectApi
4
+ API_BASE = 'http://api.thenounproject.com'
5
+
6
+ class Retriever
7
+ attr_accessor :token, :secret, :access_token
8
+ def initialize(token, secret)
9
+ @token = token
10
+ @secret = secret
11
+ raise ArgumentError.new('Missing token or secret') unless @token && @secret
12
+
13
+ @access_token = OAuth::AccessToken.new(OAuth::Consumer.new(token, secret))
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,81 @@
1
+ require 'spec_helper'
2
+ require 'ostruct'
3
+
4
+ RSpec.describe NounProjectApi::Icon do
5
+ before :each do
6
+ @icon = NounProjectApi::Icon.new(Faker::Internet.password(16), Faker::Internet.password(16))
7
+ @valid_hash = JSON.parse(Fakes::Results::ICON_VALID)
8
+ @valid_response = OpenStruct.new(
9
+ body: Fakes::Results::ICON_VALID,
10
+ code: '200'
11
+ )
12
+
13
+ @missing_response = OpenStruct.new(
14
+ code: '404'
15
+ )
16
+ end
17
+
18
+ context "id" do
19
+ it 'raises an error when no id is provided' do
20
+ expect { @icon.find(nil) }.to raise_error(ArgumentError)
21
+ end
22
+
23
+ it 'returns a proper result with a correct id' do
24
+ id = 1
25
+ expect(@icon.access_token).to receive(
26
+ :get
27
+ ).with(
28
+ "#{NounProjectApi::API_BASE}#{NounProjectApi::Icon::API_PATH}#{id}"
29
+ ).and_return(
30
+ @valid_response
31
+ )
32
+
33
+ expect(@icon.find(id)).to eq(@valid_hash)
34
+ end
35
+
36
+ it 'raises an error with a missing id' do
37
+ id = 1
38
+ expect(@icon.access_token).to receive(
39
+ :get
40
+ ).with(
41
+ "#{NounProjectApi::API_BASE}#{NounProjectApi::Icon::API_PATH}#{id}"
42
+ ).and_return(
43
+ @missing_response
44
+ )
45
+
46
+ expect { @icon.find(id) }.to raise_error(ArgumentError)
47
+ end
48
+ end
49
+
50
+ context "slug" do
51
+ it 'raises an error when no slug is provided' do
52
+ expect { @icon.find_by_slug(nil) }.to raise_error(ArgumentError)
53
+ end
54
+
55
+ it 'returns a proper result with a correct slug' do
56
+ slug = 'existing_slug'
57
+ expect(@icon.access_token).to receive(
58
+ :get
59
+ ).with(
60
+ "#{NounProjectApi::API_BASE}#{NounProjectApi::Icon::API_PATH}#{slug}"
61
+ ).and_return(
62
+ @valid_response
63
+ )
64
+
65
+ expect(@icon.find_by_slug(slug)).to eq(@valid_hash)
66
+ end
67
+
68
+ it 'raises an error with a missing slug' do
69
+ slug = 'missing_slug'
70
+ expect(@icon.access_token).to receive(
71
+ :get
72
+ ).with(
73
+ "#{NounProjectApi::API_BASE}#{NounProjectApi::Icon::API_PATH}#{slug}"
74
+ ).and_return(
75
+ @missing_response
76
+ )
77
+
78
+ expect { @icon.find_by_slug(slug) }.to raise_error(ArgumentError)
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,128 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe NounProjectApi::Icons do
4
+ before :each do
5
+ @icons = NounProjectApi::Icons.new(Faker::Internet.password(16), Faker::Internet.password(16))
6
+ end
7
+
8
+ context "recent uploads" do
9
+ it "returns the recent uploads" do
10
+ valid_hash = JSON.parse(Fakes::Results::ICONS_RECENT_VALID)
11
+ valid_response = OpenStruct.new(
12
+ body: Fakes::Results::ICONS_RECENT_VALID,
13
+ code: '200'
14
+ )
15
+
16
+ expect(@icons.access_token).to receive(
17
+ :get
18
+ ).with(
19
+ "#{NounProjectApi::API_BASE}#{NounProjectApi::Icons::API_PATH}recent_uploads"
20
+ ).and_return(
21
+ valid_response
22
+ )
23
+
24
+ expect(@icons.recent_uploads).to eq(valid_hash["recent_uploads"])
25
+ end
26
+
27
+ it "returns the recent uploads and passes limit when passed" do
28
+ valid_hash = JSON.parse(Fakes::Results::ICONS_RECENT_VALID)
29
+ valid_response = OpenStruct.new(
30
+ body: Fakes::Results::ICONS_RECENT_VALID,
31
+ code: '200'
32
+ )
33
+
34
+ limit = 10
35
+
36
+ expect(@icons.access_token).to receive(
37
+ :get
38
+ ).with(
39
+ "#{NounProjectApi::API_BASE}#{NounProjectApi::Icons::API_PATH}recent_uploads?limit=#{limit}&"
40
+ ).and_return(
41
+ valid_response
42
+ )
43
+
44
+ expect(@icons.recent_uploads(limit)).to eq(valid_hash["recent_uploads"])
45
+ end
46
+ end
47
+
48
+ context "Icons search" do
49
+ it 'raises an error when no phrase is provided' do
50
+ expect { @icons.find(nil) }.to raise_error(ArgumentError)
51
+ end
52
+
53
+ it 'properly URI encodes search patterns' do
54
+ valid_hash = JSON.parse(Fakes::Results::ICONS_VALID)
55
+ valid_response = OpenStruct.new(
56
+ body: Fakes::Results::ICONS_VALID,
57
+ code: '200'
58
+ )
59
+
60
+ term = 'some search'
61
+ expect(@icons.access_token).to receive(
62
+ :get
63
+ ).with(
64
+ "#{NounProjectApi::API_BASE}#{NounProjectApi::Icons::API_PATH}#{URI::encode(term)}"
65
+ ).and_return(
66
+ valid_response
67
+ )
68
+
69
+ expect(@icons.find(term)).to eq(valid_hash["icons"])
70
+ end
71
+
72
+ it 'returns a proper result with a correct phrase' do
73
+ valid_hash = JSON.parse(Fakes::Results::ICONS_VALID)
74
+ valid_response = OpenStruct.new(
75
+ body: Fakes::Results::ICONS_VALID,
76
+ code: '200'
77
+ )
78
+
79
+ term = 'some search'
80
+ expect(@icons.access_token).to receive(
81
+ :get
82
+ ).with(
83
+ "#{NounProjectApi::API_BASE}#{NounProjectApi::Icons::API_PATH}#{URI::encode(term)}"
84
+ ).and_return(
85
+ valid_response
86
+ )
87
+
88
+ expect(@icons.find(term)).to eq(valid_hash["icons"])
89
+ end
90
+
91
+ it 'returns a proper result with a correct phrase and passes along the args' do
92
+ valid_hash = JSON.parse(Fakes::Results::ICONS_VALID)
93
+ valid_response = OpenStruct.new(
94
+ body: Fakes::Results::ICONS_VALID,
95
+ code: '200'
96
+ )
97
+
98
+ term = 'some search'
99
+ limit = 10
100
+ expect(@icons.access_token).to receive(
101
+ :get
102
+ ).with(
103
+ "#{NounProjectApi::API_BASE}#{NounProjectApi::Icons::API_PATH}#{URI::encode(term)}?limit=#{limit}&"
104
+ ).and_return(
105
+ valid_response
106
+ )
107
+
108
+ expect(@icons.find(term, limit)).to eq(valid_hash["icons"])
109
+ end
110
+
111
+ it 'returns an empty array for no result' do
112
+ missing_response = OpenStruct.new(
113
+ code: '404'
114
+ )
115
+
116
+ term = 'missing search'
117
+ expect(@icons.access_token).to receive(
118
+ :get
119
+ ).with(
120
+ "#{NounProjectApi::API_BASE}#{NounProjectApi::Icons::API_PATH}#{URI::encode(term)}"
121
+ ).and_return(
122
+ missing_response
123
+ )
124
+
125
+ expect(@icons.find(term)).to eq([])
126
+ end
127
+ end
128
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe NounProjectApi::Retriever do
4
+ it 'raises an error when initialized without token' do
5
+ expect { NounProjectApi::Retriever.new(nil, Faker::Internet.password(16)) }.to raise_error(ArgumentError)
6
+ end
7
+
8
+ it 'raises an error when initialized without secret' do
9
+ expect { NounProjectApi::Retriever.new(Faker::Internet.password(16), nil) }.to raise_error(ArgumentError)
10
+ end
11
+
12
+ it 'initializes the values properly' do
13
+ token = Faker::Internet.password(16)
14
+ secret = Faker::Internet.password(16)
15
+ retriever = NounProjectApi::Retriever.new(token, secret)
16
+
17
+ expect(retriever.token).to eq(token)
18
+ expect(retriever.secret).to eq(secret)
19
+ end
20
+ end
@@ -0,0 +1,16 @@
1
+ require "codeclimate-test-reporter"
2
+ CodeClimate::TestReporter.start
3
+
4
+ require "bundler/setup"
5
+ require "noun-project-api"
6
+ require "pry"
7
+ require "faker"
8
+ require 'json'
9
+
10
+ require_relative "support/fakes"
11
+
12
+ RSpec.configure do |config|
13
+ config.disable_monkey_patching!
14
+ config.formatter = "documentation"
15
+ config.color = true
16
+ end
@@ -0,0 +1,300 @@
1
+ module Fakes
2
+ module Results
3
+ ICON_VALID = '''
4
+ {
5
+ "icon": {
6
+ "term_slug": "beauty-salon",
7
+ "sponsor": {},
8
+ "year": 1974,
9
+ "license_description": "public-domain",
10
+ "id": "15",
11
+ "sponsor_campaign_link": null,
12
+ "icon_url": "https://d31dxqxrdzrtn7.cloudfront.net/svg/15.svg?Expires=1411066387&Signature=MfI5irHrMJDC94agEybPDdOPbriCkWibM-xmarR~g8wtz32oFSvEM9oECXazZfZrRCxixPeGSGxtOhSs~h0FZJeBchgR6tEMyhL7cWi8Phq-Z~cDNXTMy9mXmMWcy6fu0aBF5epiN38Ma3QCTAJhMWQn1pZJ1VOpSrsI4IB7zso_&Key-Pair-Id=APKAI5ZVHAXN65CHVU2Q",
13
+ "tags": [
14
+ {
15
+ "id": "10",
16
+ "slug": "haircut"
17
+ }
18
+ ],
19
+ "collections": [
20
+ {
21
+ "permalink": "/edward/collection/aiga",
22
+ "is_collaborative": "",
23
+ "description": "",
24
+ "author": {
25
+ "permalink": "/edward",
26
+ "location": "Los Angeles, US",
27
+ "name": "Edward Boatman"
28
+ },
29
+ "date_updated": "2012-09-27 13:27:02",
30
+ "slug": "aiga",
31
+ "sponsor_campaign_link": "",
32
+ "is_featured": "1",
33
+ "name": "AIGA",
34
+ "is_store_item": "0",
35
+ "sponsor": {},
36
+ "template": "24",
37
+ "sponsor_id": "",
38
+ "date_created": "2012-01-27 19:15:26",
39
+ "author_id": "6",
40
+ "id": "3",
41
+ "tags": [],
42
+ "is_published": "1"
43
+ },
44
+ {
45
+ "permalink": "/edward/collection/noun-collection",
46
+ "is_collaborative": "",
47
+ "description": "",
48
+ "author": {
49
+ "permalink": "/edward",
50
+ "location": "Los Angeles, US",
51
+ "name": "Edward Boatman"
52
+ },
53
+ "date_updated": "2012-10-16 15:37:06",
54
+ "slug": "noun-collection",
55
+ "sponsor_campaign_link": "",
56
+ "is_featured": "0",
57
+ "name": "Noun Collection",
58
+ "is_store_item": "0",
59
+ "sponsor": {},
60
+ "template": "24",
61
+ "sponsor_id": "",
62
+ "date_created": "2012-01-27 19:15:07",
63
+ "author_id": "6",
64
+ "id": "1",
65
+ "tags": [],
66
+ "is_published": "0"
67
+ }
68
+ ],
69
+ "date_uploaded": "",
70
+ "attribution": "Beauty Salon from The Noun Project",
71
+ "preview_url_84": "https://d31dxqxrdzrtn7.cloudfront.net/png/15-84.png",
72
+ "is_active": "1",
73
+ "permalink": "/term/beauty-salon/15",
74
+ "uploader": "",
75
+ "count_purchase": 0,
76
+ "sponsor_id": "",
77
+ "uploader_id": "",
78
+ "count_view": 1.0,
79
+ "term": "Beauty Salon",
80
+ "preview_url_42": "https://d31dxqxrdzrtn7.cloudfront.net/png/15-42.png",
81
+ "preview_url": "https://d31dxqxrdzrtn7.cloudfront.net/png/15-200.png",
82
+ "count_download": 0,
83
+ "term_id": 645
84
+ }
85
+ }
86
+ '''
87
+
88
+ ICONS_RECENT_VALID = '''
89
+ {
90
+ "recent_uploads": [
91
+ {
92
+ "term_slug": "mesh-network",
93
+ "sponsor": {},
94
+ "year": 2014,
95
+ "license_description": "public-domain",
96
+ "id": "74809",
97
+ "sponsor_campaign_link": null,
98
+ "icon_url": "https://d30y9cdsu7xlg0.cloudfront.net/icon_uploads/d8483846-e304-4191-9706-d10cf38ffaed.svg?Expires=1411066174&Signature=hc5-Zbi4d6i7kLqW~YF-sEvUzLUJaOdCvRsXN4ltT-OG1bOxmf8xz6Bw9EpCpZ85N5Z~Q6gRMHLMIGq2dgGZSwn75Ug3vsDFQkvsi5BybkyJuP7w7HqA-1jmYMGw8kJR00R9cryCrELmg7-k3qTrr8gqCgu0bH69brFvj87yjvs_&Key-Pair-Id=APKAI5ZVHAXN65CHVU2Q",
99
+ "date_uploaded": "2014-09-17",
100
+ "attribution": "Mesh Network by Jake Ingman from The Noun Project",
101
+ "preview_url_84": "https://d30y9cdsu7xlg0.cloudfront.net/png/74809-84.png",
102
+ "is_active": "1",
103
+ "permalink": "/term/mesh-network/74809",
104
+ "uploader": {
105
+ "permalink": "/jingman",
106
+ "location": "",
107
+ "name": "Jake Ingman"
108
+ },
109
+ "count_purchase": 0,
110
+ "sponsor_id": "",
111
+ "uploader_id": "60120",
112
+ "count_view": 4.0,
113
+ "term": "Mesh Network",
114
+ "preview_url_42": "https://d30y9cdsu7xlg0.cloudfront.net/png/74809-42.png",
115
+ "preview_url": "https://d30y9cdsu7xlg0.cloudfront.net/png/74809-200.png",
116
+ "count_download": 0,
117
+ "term_id": 3572
118
+ },
119
+ {
120
+ "term": "Hour Glass",
121
+ "count_view": 147.0,
122
+ "permalink": "/term/hour-glass/74808",
123
+ "attribution": "Hour Glass by Thomas Helbig from The Noun Project",
124
+ "preview_url_42": "https://d30y9cdsu7xlg0.cloudfront.net/png/74808-42.png",
125
+ "preview_url_84": "https://d30y9cdsu7xlg0.cloudfront.net/png/74808-84.png",
126
+ "term_id": 1745,
127
+ "sponsor_campaign_link": null,
128
+ "is_active": "1",
129
+ "preview_url": "https://d30y9cdsu7xlg0.cloudfront.net/png/74808-200.png",
130
+ "count_download": 6.0,
131
+ "uploader_id": "38412",
132
+ "year": 2014,
133
+ "sponsor": {},
134
+ "uploader": {
135
+ "permalink": "/dergraph",
136
+ "location": "Berlin, DE",
137
+ "name": "Thomas Helbig"
138
+ },
139
+ "count_purchase": 0,
140
+ "sponsor_id": "",
141
+ "license_description": "creative-commons-attribution",
142
+ "term_slug": "hour-glass",
143
+ "id": "74808",
144
+ "date_uploaded": "2014-09-17"
145
+ },
146
+ {
147
+ "term": "Hour Glass",
148
+ "count_view": 8.0,
149
+ "permalink": "/term/hour-glass/74807",
150
+ "attribution": "Hour Glass by Matthieu Rodrigues from The Noun Project",
151
+ "preview_url_42": "https://d30y9cdsu7xlg0.cloudfront.net/png/74807-42.png",
152
+ "preview_url_84": "https://d30y9cdsu7xlg0.cloudfront.net/png/74807-84.png",
153
+ "term_id": 1745,
154
+ "sponsor_campaign_link": null,
155
+ "is_active": "1",
156
+ "preview_url": "https://d30y9cdsu7xlg0.cloudfront.net/png/74807-200.png",
157
+ "count_download": 0,
158
+ "uploader_id": "354457",
159
+ "year": 2014,
160
+ "sponsor": {},
161
+ "uploader": {
162
+ "permalink": "/mattrodrigues2",
163
+ "location": "Paris, FR",
164
+ "name": "Matthieu Rodrigues"
165
+ },
166
+ "count_purchase": 0,
167
+ "sponsor_id": "",
168
+ "license_description": "creative-commons-attribution",
169
+ "term_slug": "hour-glass",
170
+ "id": "74807",
171
+ "date_uploaded": "2014-09-17"
172
+ }
173
+ ],
174
+ "generated_at": "Thu, 18 Sep 2014 18:09:34 GMT"
175
+ }'''
176
+
177
+ ICONS_VALID = '''
178
+ {
179
+ "generated_at": "Thu, 18 Sep 2014 17:48:10 GMT",
180
+ "icons": [
181
+ {
182
+ "term_slug": "fish",
183
+ "sponsor": {},
184
+ "year": 2012,
185
+ "license_description": "public-domain",
186
+ "id": "7770",
187
+ "sponsor_campaign_link": null,
188
+ "icon_url": "https://d31dxqxrdzrtn7.cloudfront.net/svg/3377c517-a6a9-477a-a446-cfcba9a4bca1.svg?Expires=1411066090&Signature=b1cvUOL9J2WPI2NK7gSG67as~CE9Abue4t4-i5insZMiVOgpu19xJVCiEdxLaAXs9ntK4BvHIe-KXB9FfkWZbWQ3lJFLq8Wxft0U-8y1Y9oPdU6jzVJhLr9AAtsma~dJLY7Fl3VYKGureUnarcibnl9w1k~kcJvHsv6myAWISAQ_&Key-Pair-Id=APKAI5ZVHAXN65CHVU2Q",
189
+ "collections": [],
190
+ "date_uploaded": "2012-11-15",
191
+ "attribution": "Fish by Tonielle Krisanski from The Noun Project",
192
+ "preview_url_84": "https://d31dxqxrdzrtn7.cloudfront.net/png/7770-84.png",
193
+ "is_active": "1",
194
+ "permalink": "/term/fish/7770",
195
+ "uploader": {
196
+ "permalink": "/tonikdesigns",
197
+ "location": "Melbourne, VIC, AU",
198
+ "name": "Tonielle Krisanski"
199
+ },
200
+ "count_purchase": 0,
201
+ "sponsor_id": "",
202
+ "uploader_id": "8916",
203
+ "count_view": 0,
204
+ "term": "Fish",
205
+ "preview_url_42": "https://d31dxqxrdzrtn7.cloudfront.net/png/7770-42.png",
206
+ "preview_url": "https://d31dxqxrdzrtn7.cloudfront.net/png/7770-200.png",
207
+ "count_download": 0,
208
+ "term_id": 857
209
+ },
210
+ {
211
+ "term_slug": "fish",
212
+ "sponsor": {},
213
+ "year": 2013,
214
+ "license_description": "public-domain",
215
+ "id": "11742",
216
+ "sponsor_campaign_link": null,
217
+ "icon_url": "https://d31dxqxrdzrtn7.cloudfront.net/svg/aa552ef8-421c-4e51-86ae-d0a5af88603c.svg?Expires=1411066090&Signature=MINm35kcUBNMwPKdCMhPPuTI04Q0cYKnUqmnhtym-6Dz5ZrgIHmnKcduQDAeQvtWCn3TH6hAWaIVB1ex9-Mr7JtSg6VCaXB0MzLd1o80ASqaYEWq9AYkaVGOPag7qs2SFZkBjQInK9zM-hgfKJuGIGdfi5MWQdBTru9lWmHw90M_&Key-Pair-Id=APKAI5ZVHAXN65CHVU2Q",
218
+ "collections": [],
219
+ "date_uploaded": "2013-02-16",
220
+ "attribution": "Fish by James Keuning from The Noun Project",
221
+ "preview_url_84": "https://d31dxqxrdzrtn7.cloudfront.net/png/11742-84.png",
222
+ "is_active": "1",
223
+ "permalink": "/term/fish/11742",
224
+ "uploader": {
225
+ "permalink": "/jmkeuning",
226
+ "location": "Saint Paul, Minnesota, US",
227
+ "name": "James Keuning"
228
+ },
229
+ "count_purchase": 0,
230
+ "sponsor_id": "",
231
+ "uploader_id": "12121",
232
+ "count_view": 0,
233
+ "term": "Fish",
234
+ "preview_url_42": "https://d31dxqxrdzrtn7.cloudfront.net/png/11742-42.png",
235
+ "preview_url": "https://d31dxqxrdzrtn7.cloudfront.net/png/11742-200.png",
236
+ "count_download": 0,
237
+ "term_id": 857
238
+ },
239
+ {
240
+ "term_slug": "fish",
241
+ "sponsor": {},
242
+ "year": 2009,
243
+ "license_description": "public-domain",
244
+ "id": "12563",
245
+ "sponsor_campaign_link": null,
246
+ "icon_url": "https://d31dxqxrdzrtn7.cloudfront.net/svg/a5d6d6a1-5089-4be7-8726-264370be5795.svg?Expires=1411066090&Signature=hw-bWeETFTu~oKm59X8lq4eBGpljjf2S-8W3d5kOM1WAb67iM7nJIaPqjkUpf2L0fXKaGEZWz518MClZtCWlNjZWAM6wFf0hPSdvPIPa3pJ2TSuvaxe9a6m2Rd7kfWGAVuP361WiqCYKDV9KzrjfobD6N0HKBrSLDuEs1v9pJuo_&Key-Pair-Id=APKAI5ZVHAXN65CHVU2Q",
247
+ "collections": [],
248
+ "date_uploaded": "2013-03-02",
249
+ "attribution": "Fish by Jesse Jacob / iBureauet / Information Daily from The Noun Project",
250
+ "preview_url_84": "https://d31dxqxrdzrtn7.cloudfront.net/png/12563-84.png",
251
+ "is_active": "1",
252
+ "permalink": "/term/fish/12563",
253
+ "uploader": {
254
+ "permalink": "/Jesse Jacob",
255
+ "location": "",
256
+ "name": "Jesse Jacob / iBureauet / Information Daily"
257
+ },
258
+ "count_purchase": 0,
259
+ "sponsor_id": "",
260
+ "uploader_id": "50959",
261
+ "count_view": 0,
262
+ "term": "Fish",
263
+ "preview_url_42": "https://d31dxqxrdzrtn7.cloudfront.net/png/12563-42.png",
264
+ "preview_url": "https://d31dxqxrdzrtn7.cloudfront.net/png/12563-200.png",
265
+ "count_download": 0,
266
+ "term_id": 857
267
+ },
268
+ {
269
+ "term_slug": "fish",
270
+ "sponsor": {},
271
+ "year": 2013,
272
+ "license_description": "public-domain",
273
+ "id": "24913",
274
+ "sponsor_campaign_link": null,
275
+ "icon_url": "https://d31dxqxrdzrtn7.cloudfront.net/svg/3671fe0b-56db-498f-ba71-5c344379a126.svg?Expires=1411066090&Signature=Tu7hros2kT3wY84Gb-H2QlVQKYvSVwVv9xbl78AB~6pRlR0RUwzeSckeTY4GolBIo2XJigwzXvKo~M-6nfOlqbFfjyWwb0vsCuPI8ay1HOKUZZDJIZDI~dl2xpjbKLJfmOeafa0q1B0a9OEkxJoa81bS4g-83X0mTGCYQM8yLBs_&Key-Pair-Id=APKAI5ZVHAXN65CHVU2Q",
276
+ "collections": [],
277
+ "date_uploaded": "2013-10-20",
278
+ "attribution": "Fish by Teresa S Garner from The Noun Project",
279
+ "preview_url_84": "https://d31dxqxrdzrtn7.cloudfront.net/png/24913-84.png",
280
+ "is_active": "1",
281
+ "permalink": "/term/fish/24913",
282
+ "uploader": {
283
+ "permalink": "/sgarner",
284
+ "location": "US",
285
+ "name": "Teresa S Garner"
286
+ },
287
+ "count_purchase": 0,
288
+ "sponsor_id": "",
289
+ "uploader_id": "214620",
290
+ "count_view": 0,
291
+ "term": "Fish",
292
+ "preview_url_42": "https://d31dxqxrdzrtn7.cloudfront.net/png/24913-42.png",
293
+ "preview_url": "https://d31dxqxrdzrtn7.cloudfront.net/png/24913-200.png",
294
+ "count_download": 0,
295
+ "term_id": 857
296
+ }
297
+ ]
298
+ }'''
299
+ end
300
+ end
metadata ADDED
@@ -0,0 +1,120 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: noun-project-api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Nadav Shatz
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-11-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: oauth
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.1'
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: 3.1.0
51
+ type: :development
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - "~>"
56
+ - !ruby/object:Gem::Version
57
+ version: '3.1'
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: 3.1.0
61
+ - !ruby/object:Gem::Dependency
62
+ name: faker
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ description: A Gem to expose a wrapping API for The Noun Project API's
76
+ email: nadav@tailorbrands.com
77
+ executables: []
78
+ extensions: []
79
+ extra_rdoc_files: []
80
+ files:
81
+ - Rakefile
82
+ - lib/noun-project-api.rb
83
+ - lib/noun-project-api/icon.rb
84
+ - lib/noun-project-api/icons.rb
85
+ - lib/noun-project-api/retriever.rb
86
+ - spec/lib/noun-project-api/icon_spec.rb
87
+ - spec/lib/noun-project-api/icons_spec.rb
88
+ - spec/lib/noun-project-api/retriever_spec.rb
89
+ - spec/spec_helper.rb
90
+ - spec/support/fakes.rb
91
+ homepage: https://github.com/TailorBrands/noun-project-api
92
+ licenses:
93
+ - MIT
94
+ metadata: {}
95
+ post_install_message:
96
+ rdoc_options: []
97
+ require_paths:
98
+ - lib
99
+ required_ruby_version: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ required_rubygems_version: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ requirements: []
110
+ rubyforge_project:
111
+ rubygems_version: 2.2.2
112
+ signing_key:
113
+ specification_version: 4
114
+ summary: An API wrapper for The Noun Project API's
115
+ test_files:
116
+ - spec/lib/noun-project-api/icon_spec.rb
117
+ - spec/lib/noun-project-api/icons_spec.rb
118
+ - spec/lib/noun-project-api/retriever_spec.rb
119
+ - spec/spec_helper.rb
120
+ - spec/support/fakes.rb