noun-project-api 2.0.0 → 3.1.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 +4 -4
- data/Rakefile +9 -7
- data/lib/noun_project_api/base_item.rb +30 -0
- data/lib/{noun-project-api → noun_project_api}/collection.rb +10 -8
- data/lib/noun_project_api/collection_retriever.rb +14 -0
- data/lib/{noun-project-api → noun_project_api}/connection.rb +3 -1
- data/lib/{noun-project-api → noun_project_api}/errors.rb +2 -0
- data/lib/{noun-project-api → noun_project_api}/icon.rb +9 -7
- data/lib/noun_project_api/icon_retriever.rb +14 -0
- data/lib/noun_project_api/icons_retriever.rb +66 -0
- data/lib/{noun-project-api → noun_project_api}/reporter.rb +5 -3
- data/lib/{noun-project-api → noun_project_api}/retriever.rb +3 -1
- data/lib/noun_project_api.rb +38 -0
- data/spec/lib/{noun-project-api → noun_project_api}/base_item_spec.rb +2 -0
- data/spec/lib/{noun-project-api → noun_project_api}/collection_retriever_spec.rb +6 -4
- data/spec/lib/{noun-project-api → noun_project_api}/collection_spec.rb +7 -5
- data/spec/lib/{noun-project-api → noun_project_api}/icon_retriever_spec.rb +6 -4
- data/spec/lib/{noun-project-api → noun_project_api}/icon_spec.rb +5 -3
- data/spec/lib/{noun-project-api → noun_project_api}/icons_retriever_spec.rb +9 -7
- data/spec/lib/{noun-project-api → noun_project_api}/reporter_spec.rb +8 -8
- data/spec/lib/{noun-project-api → noun_project_api}/retriever_spec.rb +6 -4
- data/spec/lib/{nount_project_api_spec.rb → noun_project_api_spec.rb} +2 -0
- data/spec/spec_helper.rb +3 -1
- data/spec/support/fakes.rb +14 -12
- metadata +65 -52
- data/lib/noun-project-api/base_item.rb +0 -26
- data/lib/noun-project-api/collection_retriever.rb +0 -12
- data/lib/noun-project-api/icon_retriever.rb +0 -12
- data/lib/noun-project-api/icons_retriever.rb +0 -59
- data/lib/noun-project-api.rb +0 -33
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d70a4e859c4f5df70a20d14388aaa8ff844e152a1a65ab0db7f8931d37a59078
|
4
|
+
data.tar.gz: e00a93508c63d34333c095af7ab6fb83163852c890a8d0205a7d77f58c2c1a8e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5aaf5a101160a9ec69a7f015b0718c6290c393f937e99c67662f79557926df079661803c39e78e24725754d05fb5c5d6eb4a8ba64372e69c28f523aabc4c5e47
|
7
|
+
data.tar.gz: 7aa5cd4a716a75bdde86e231c8979820aeadc3a8b0d78d8a73932170abb35a6145d7c7be143fe8232f8edfe8449e5fe22350e743c26e3ae2d001832a25d66dce
|
data/Rakefile
CHANGED
@@ -1,14 +1,16 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "bundler"
|
2
4
|
Bundler::GemHelper.install_tasks
|
3
5
|
|
4
|
-
|
6
|
+
$LOAD_PATH.unshift "lib"
|
5
7
|
|
6
|
-
desc
|
7
|
-
task :
|
8
|
+
desc "Default: run unit tests."
|
9
|
+
task default: [:spec]
|
8
10
|
|
9
|
-
require
|
11
|
+
require "rspec/core/rake_task"
|
10
12
|
|
11
|
-
desc
|
13
|
+
desc "Run specs"
|
12
14
|
RSpec::Core::RakeTask.new do |t|
|
13
|
-
t.pattern =
|
15
|
+
t.pattern = "./spec/**/*_spec.rb"
|
14
16
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module NounProjectApi
|
4
|
+
# A basis to Items returned by the noun project.
|
5
|
+
class BaseItem
|
6
|
+
attr_accessor :original_hash
|
7
|
+
ITEM_NAME = nil
|
8
|
+
|
9
|
+
def initialize(origin)
|
10
|
+
raise NotImplementedError, "Must use a subclass" if self.class::ITEM_NAME.nil?
|
11
|
+
|
12
|
+
origin = JSON.parse(origin, symbolize_names: true) if origin.is_a? String
|
13
|
+
if origin.key? self.class::ITEM_NAME
|
14
|
+
origin = origin.delete(
|
15
|
+
self.class::ITEM_NAME
|
16
|
+
)
|
17
|
+
end
|
18
|
+
|
19
|
+
@original_hash = origin
|
20
|
+
end
|
21
|
+
|
22
|
+
def id
|
23
|
+
original_hash[:id].to_i
|
24
|
+
end
|
25
|
+
|
26
|
+
def to_json(*_args)
|
27
|
+
JSON.dump(to_hash)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -1,24 +1,26 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "noun_project_api/base_item"
|
2
4
|
|
3
5
|
module NounProjectApi
|
4
6
|
# A single Collection as an abstracted ruby object.
|
5
7
|
class Collection < BaseItem
|
6
|
-
ITEM_NAME =
|
8
|
+
ITEM_NAME = :collection
|
7
9
|
|
8
10
|
def author_id
|
9
|
-
original_hash[
|
11
|
+
original_hash[:author_id].to_i
|
10
12
|
end
|
11
13
|
|
12
14
|
def author_name
|
13
|
-
original_hash[
|
15
|
+
original_hash[:author][:name]
|
14
16
|
end
|
15
17
|
|
16
18
|
def icon_count
|
17
|
-
original_hash[
|
19
|
+
original_hash[:icon_count].to_i
|
18
20
|
end
|
19
21
|
|
20
|
-
def
|
21
|
-
original_hash[
|
22
|
+
def published?
|
23
|
+
original_hash[:is_published].to_i == 1
|
22
24
|
end
|
23
25
|
|
24
26
|
def to_hash
|
@@ -27,7 +29,7 @@ module NounProjectApi
|
|
27
29
|
author_id: author_id,
|
28
30
|
author_name: author_name,
|
29
31
|
icon_count: icon_count,
|
30
|
-
|
32
|
+
published: published?
|
31
33
|
}
|
32
34
|
end
|
33
35
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "noun_project_api/collection"
|
4
|
+
require "noun_project_api/retriever"
|
5
|
+
|
6
|
+
module NounProjectApi
|
7
|
+
# Retrieve a collection.
|
8
|
+
class CollectionRetriever < Retriever
|
9
|
+
API_PATH = "/collection/"
|
10
|
+
ITEM_CLASS = Collection
|
11
|
+
|
12
|
+
alias find_by_slug find
|
13
|
+
end
|
14
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module NounProjectApi
|
2
4
|
# Basic connection methods and setup.
|
3
5
|
module Connection
|
@@ -6,7 +8,7 @@ module NounProjectApi
|
|
6
8
|
def initialize(token, secret)
|
7
9
|
@token = token
|
8
10
|
@secret = secret
|
9
|
-
raise ArgumentError
|
11
|
+
raise ArgumentError, "Missing token or secret" unless @token && @secret
|
10
12
|
|
11
13
|
@access_token = OAuth::AccessToken.new(OAuth::Consumer.new(token, secret))
|
12
14
|
end
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "noun_project_api/base_item"
|
2
4
|
|
3
5
|
module NounProjectApi
|
4
6
|
# A single Icon as an abstracted ruby object.
|
@@ -7,23 +9,23 @@ module NounProjectApi
|
|
7
9
|
PREVIEW_SIZE_42 = 42
|
8
10
|
PREVIEW_SIZE_84 = 84
|
9
11
|
|
10
|
-
PUBLIC_DOMAIN_LICENSE = "public-domain"
|
12
|
+
PUBLIC_DOMAIN_LICENSE = "public-domain"
|
11
13
|
|
12
|
-
ITEM_NAME =
|
14
|
+
ITEM_NAME = :icon
|
13
15
|
|
14
16
|
def public_domain?
|
15
|
-
original_hash[
|
17
|
+
original_hash[:license_description] == PUBLIC_DOMAIN_LICENSE
|
16
18
|
end
|
17
19
|
|
18
20
|
def svg_url
|
19
|
-
original_hash[
|
21
|
+
original_hash[:icon_url]
|
20
22
|
end
|
21
23
|
|
22
24
|
def preview_url(size = PREVIEW_SIZE_200)
|
23
25
|
if size == PREVIEW_SIZE_200
|
24
|
-
original_hash[
|
26
|
+
original_hash[:preview_url]
|
25
27
|
else
|
26
|
-
original_hash["preview_url_#{size}"]
|
28
|
+
original_hash[:"preview_url_#{size}"]
|
27
29
|
end
|
28
30
|
end
|
29
31
|
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "noun_project_api/icon"
|
4
|
+
require "noun_project_api/retriever"
|
5
|
+
|
6
|
+
module NounProjectApi
|
7
|
+
# Retrieve an icon.
|
8
|
+
class IconRetriever < Retriever
|
9
|
+
API_PATH = "/icon/"
|
10
|
+
ITEM_CLASS = Icon
|
11
|
+
|
12
|
+
alias find_by_slug find
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "noun_project_api/retriever"
|
4
|
+
|
5
|
+
module NounProjectApi
|
6
|
+
# Retrieve icons.
|
7
|
+
class IconsRetriever < Retriever
|
8
|
+
API_PATH = "/icons/"
|
9
|
+
|
10
|
+
# Finds multiple icons based on the term
|
11
|
+
# * term - search term
|
12
|
+
# * limit - limit the amount of results
|
13
|
+
# * offset - offset the results
|
14
|
+
# * page - page number
|
15
|
+
def find(term, limit = nil, offset = nil, page = nil)
|
16
|
+
cache_key = Digest::MD5.hexdigest("#{term}+#{limit}+#{offset}+#{page}")
|
17
|
+
cache_ttl = NounProjectApi.configuration.cache_ttl
|
18
|
+
|
19
|
+
NounProjectApi.configuration.cache.fetch(cache_key, expires_in: cache_ttl) do
|
20
|
+
raise ArgumentError, "Missing search term" unless term
|
21
|
+
|
22
|
+
search = OAuth::Helper.escape(term)
|
23
|
+
search += "?limit_to_public_domain=#{NounProjectApi.configuration.public_domain ? 1 : 0}"
|
24
|
+
|
25
|
+
args = {
|
26
|
+
"limit" => limit,
|
27
|
+
"offset" => offset,
|
28
|
+
"page" => page
|
29
|
+
}.reject { |_, v| v.nil? }
|
30
|
+
args.each { |k, v| search += "&#{k}=#{v}" } unless args.empty?
|
31
|
+
|
32
|
+
result = access_token.get("#{API_BASE}#{API_PATH}#{search}")
|
33
|
+
raise ServiceError.new(result.code, result.body) unless ["200", "404"].include? result.code
|
34
|
+
|
35
|
+
if result.code == "200"
|
36
|
+
JSON.parse(result.body, symbolize_names: true)[:icons].map { |icon| Icon.new(icon) }
|
37
|
+
else
|
38
|
+
[]
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# List recent uploads
|
44
|
+
# * limit - limit the amount of results
|
45
|
+
# * offset - offset the results
|
46
|
+
# * page - page number
|
47
|
+
def recent_uploads(limit = nil, offset = nil, page = nil)
|
48
|
+
args = {
|
49
|
+
"limit" => limit,
|
50
|
+
"offset" => offset,
|
51
|
+
"page" => page
|
52
|
+
}.reject { |_, v| v.nil? }
|
53
|
+
if !args.empty?
|
54
|
+
search = "?"
|
55
|
+
args.each { |k, v| search += "#{k}=#{v}&" }
|
56
|
+
else
|
57
|
+
search = ""
|
58
|
+
end
|
59
|
+
|
60
|
+
result = access_token.get("#{API_BASE}#{API_PATH}recent_uploads#{search}")
|
61
|
+
raise ServiceError.new(result.code, result.body) unless result.code == "200"
|
62
|
+
|
63
|
+
JSON.parse(result.body, symbolize_names: true)[:recent_uploads].map { |icon| Icon.new(icon) }
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -1,13 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module NounProjectApi
|
2
4
|
# Main class to hold reporting actions back to the Noun Project.
|
3
5
|
class Reporter
|
4
6
|
include Connection
|
5
7
|
|
6
|
-
API_PATH = "/notify/publish"
|
8
|
+
API_PATH = "/notify/publish"
|
7
9
|
|
8
10
|
def report_used(ids)
|
9
|
-
ids = [ids] if ids.is_a?(String) || ids.is_a?(
|
10
|
-
raise ArgumentError
|
11
|
+
ids = [ids] if ids.is_a?(String) || ids.is_a?(Integer)
|
12
|
+
raise ArgumentError, "Missing ids" if ids.nil? || ids.empty?
|
11
13
|
|
12
14
|
result = access_token.post(
|
13
15
|
"#{API_BASE}#{API_PATH}",
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module NounProjectApi
|
2
4
|
# A base class for different retriever classes.
|
3
5
|
class Retriever
|
@@ -5,7 +7,7 @@ module NounProjectApi
|
|
5
7
|
|
6
8
|
# Find an item based on it's id.
|
7
9
|
def find(id)
|
8
|
-
raise ArgumentError
|
10
|
+
raise ArgumentError, "Missing id/slug" unless id
|
9
11
|
|
10
12
|
result = access_token.get("#{API_BASE}#{self.class::API_PATH}#{id}")
|
11
13
|
raise ServiceError.new(result.code, result.body) unless result.code == "200"
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "oauth"
|
4
|
+
require "active_support"
|
5
|
+
require "json"
|
6
|
+
require "noun_project_api/errors"
|
7
|
+
require "noun_project_api/connection"
|
8
|
+
require "noun_project_api/icon_retriever"
|
9
|
+
require "noun_project_api/reporter"
|
10
|
+
require "noun_project_api/icons_retriever"
|
11
|
+
require "noun_project_api/icon"
|
12
|
+
require "noun_project_api/collection_retriever"
|
13
|
+
require "noun_project_api/collection"
|
14
|
+
|
15
|
+
# Top level name space for the entire Gem.
|
16
|
+
module NounProjectApi
|
17
|
+
API_BASE = "http://api.thenounproject.com"
|
18
|
+
|
19
|
+
def self.configuration
|
20
|
+
@configuration ||= Configuration.new
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.configure
|
24
|
+
self.configuration ||= Configuration.new
|
25
|
+
yield(configuration) if block_given?
|
26
|
+
end
|
27
|
+
|
28
|
+
# Main configuration class.
|
29
|
+
class Configuration
|
30
|
+
attr_accessor :public_domain, :cache, :cache_ttl
|
31
|
+
|
32
|
+
def initialize
|
33
|
+
@public_domain = false
|
34
|
+
@cache = ActiveSupport::Cache::NullStore.new
|
35
|
+
@cache_ttl = 604800 # Week in seconds
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -1,10 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "spec_helper"
|
2
4
|
require "ostruct"
|
3
5
|
|
4
6
|
RSpec.describe NounProjectApi::CollectionRetriever do
|
5
7
|
before :each do
|
6
|
-
@collection = NounProjectApi::CollectionRetriever.new(Faker::Internet.password(16), Faker::Internet.password(16))
|
7
|
-
@valid_hash = JSON.parse(Fakes::Results::COLLECTION_VALID)
|
8
|
+
@collection = NounProjectApi::CollectionRetriever.new(Faker::Internet.password(min_length: 16), Faker::Internet.password(min_length: 16))
|
9
|
+
@valid_hash = JSON.parse(Fakes::Results::COLLECTION_VALID, symbolize_names: true)
|
8
10
|
@valid_response = OpenStruct.new(
|
9
11
|
body: Fakes::Results::COLLECTION_VALID,
|
10
12
|
code: "200"
|
@@ -32,7 +34,7 @@ RSpec.describe NounProjectApi::CollectionRetriever do
|
|
32
34
|
|
33
35
|
result = @collection.find(id)
|
34
36
|
expect(result).to be_a(NounProjectApi::Collection)
|
35
|
-
expect(result.original_hash).to eq(@valid_hash[
|
37
|
+
expect(result.original_hash).to eq(@valid_hash[:collection])
|
36
38
|
end
|
37
39
|
|
38
40
|
it "raises an error with a missing id" do
|
@@ -66,7 +68,7 @@ RSpec.describe NounProjectApi::CollectionRetriever do
|
|
66
68
|
|
67
69
|
result = @collection.find(slug)
|
68
70
|
expect(result).to be_a(NounProjectApi::Collection)
|
69
|
-
expect(result.original_hash).to eq(@valid_hash[
|
71
|
+
expect(result.original_hash).to eq(@valid_hash[:collection])
|
70
72
|
end
|
71
73
|
|
72
74
|
it "raises an error with a missing slug" do
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "spec_helper"
|
2
4
|
require "ostruct"
|
3
5
|
|
@@ -27,7 +29,7 @@ RSpec.describe NounProjectApi::CollectionRetriever do
|
|
27
29
|
end
|
28
30
|
|
29
31
|
it "id as number" do
|
30
|
-
expect(@valid_collection.id).to be_a(
|
32
|
+
expect(@valid_collection.id).to be_a(Integer)
|
31
33
|
expect(@valid_collection.id).to eq(@json["collection"]["id"].to_i)
|
32
34
|
end
|
33
35
|
|
@@ -44,17 +46,17 @@ RSpec.describe NounProjectApi::CollectionRetriever do
|
|
44
46
|
end
|
45
47
|
|
46
48
|
it "is published" do
|
47
|
-
expect(@valid_collection.
|
49
|
+
expect(@valid_collection.published?).to eq(@json["collection"]["is_published"].to_i == 1)
|
48
50
|
end
|
49
51
|
|
50
52
|
it "builds a simple hash" do
|
51
|
-
expect(@valid_collection.to_hash).to eq(
|
53
|
+
expect(@valid_collection.to_hash).to eq(
|
52
54
|
id: @valid_collection.id,
|
53
55
|
author_id: @valid_collection.author_id,
|
54
56
|
author_name: @valid_collection.author_name,
|
55
57
|
icon_count: @valid_collection.icon_count,
|
56
|
-
|
57
|
-
|
58
|
+
published: @valid_collection.published?
|
59
|
+
)
|
58
60
|
end
|
59
61
|
|
60
62
|
it "json formats the hash" do
|
@@ -1,10 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "spec_helper"
|
2
4
|
require "ostruct"
|
3
5
|
|
4
6
|
RSpec.describe NounProjectApi::IconRetriever do
|
5
7
|
before :each do
|
6
|
-
@icon = NounProjectApi::IconRetriever.new(Faker::Internet.password(16), Faker::Internet.password(16))
|
7
|
-
@valid_hash = JSON.parse(Fakes::Results::ICON_VALID)
|
8
|
+
@icon = NounProjectApi::IconRetriever.new(Faker::Internet.password(min_length: 16), Faker::Internet.password(min_length: 16))
|
9
|
+
@valid_hash = JSON.parse(Fakes::Results::ICON_VALID, symbolize_names: true)
|
8
10
|
@valid_response = OpenStruct.new(
|
9
11
|
body: Fakes::Results::ICON_VALID,
|
10
12
|
code: "200"
|
@@ -32,7 +34,7 @@ RSpec.describe NounProjectApi::IconRetriever do
|
|
32
34
|
|
33
35
|
result = @icon.find(id)
|
34
36
|
expect(result).to be_a(NounProjectApi::Icon)
|
35
|
-
expect(result.original_hash).to eq(@valid_hash[
|
37
|
+
expect(result.original_hash).to eq(@valid_hash[:icon])
|
36
38
|
end
|
37
39
|
|
38
40
|
it "raises an error with a missing id" do
|
@@ -66,7 +68,7 @@ RSpec.describe NounProjectApi::IconRetriever do
|
|
66
68
|
|
67
69
|
result = @icon.find(slug)
|
68
70
|
expect(result).to be_a(NounProjectApi::Icon)
|
69
|
-
expect(result.original_hash).to eq(@valid_hash[
|
71
|
+
expect(result.original_hash).to eq(@valid_hash[:icon])
|
70
72
|
end
|
71
73
|
|
72
74
|
it "raises an error with a missing slug" do
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "spec_helper"
|
2
4
|
require "ostruct"
|
3
5
|
|
@@ -57,17 +59,17 @@ RSpec.describe NounProjectApi::IconRetriever do
|
|
57
59
|
end
|
58
60
|
|
59
61
|
it "id as number" do
|
60
|
-
expect(@valid_icon.id).to be_a(
|
62
|
+
expect(@valid_icon.id).to be_a(Integer)
|
61
63
|
expect(@valid_icon.id).to eq(@json["icon"]["id"].to_i)
|
62
64
|
end
|
63
65
|
|
64
66
|
it "builds a simple hash" do
|
65
|
-
expect(@valid_icon.to_hash).to eq(
|
67
|
+
expect(@valid_icon.to_hash).to eq(
|
66
68
|
id: @valid_icon.id,
|
67
69
|
preview_url_200: @valid_icon.preview_url(NounProjectApi::Icon::PREVIEW_SIZE_200),
|
68
70
|
preview_url_84: @valid_icon.preview_url(NounProjectApi::Icon::PREVIEW_SIZE_84),
|
69
71
|
preview_url_42: @valid_icon.preview_url(NounProjectApi::Icon::PREVIEW_SIZE_42)
|
70
|
-
|
72
|
+
)
|
71
73
|
end
|
72
74
|
|
73
75
|
it "json formats the hash" do
|
@@ -1,8 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "spec_helper"
|
2
4
|
|
3
5
|
RSpec.describe NounProjectApi::IconsRetriever do
|
4
6
|
before :each do
|
5
|
-
@icons = NounProjectApi::IconsRetriever.new(Faker::Internet.password(16), Faker::Internet.password(16))
|
7
|
+
@icons = NounProjectApi::IconsRetriever.new(Faker::Internet.password(min_length: 16), Faker::Internet.password(min_length: 16))
|
6
8
|
end
|
7
9
|
|
8
10
|
context "recent uploads" do
|
@@ -64,11 +66,11 @@ RSpec.describe NounProjectApi::IconsRetriever do
|
|
64
66
|
code: "200"
|
65
67
|
)
|
66
68
|
|
67
|
-
term =
|
69
|
+
term = 'some search with ",] bad chars'
|
68
70
|
expect(@icons.access_token).to receive(
|
69
71
|
:get
|
70
72
|
).with(
|
71
|
-
"#{NounProjectApi::API_BASE}#{NounProjectApi::IconsRetriever::API_PATH}#{OAuth::Helper
|
73
|
+
"#{NounProjectApi::API_BASE}#{NounProjectApi::IconsRetriever::API_PATH}#{OAuth::Helper.escape(term)}?limit_to_public_domain=0"
|
72
74
|
).and_return(
|
73
75
|
valid_response
|
74
76
|
)
|
@@ -91,7 +93,7 @@ RSpec.describe NounProjectApi::IconsRetriever do
|
|
91
93
|
expect(@icons.access_token).to receive(
|
92
94
|
:get
|
93
95
|
).with(
|
94
|
-
"#{NounProjectApi::API_BASE}#{NounProjectApi::IconsRetriever::API_PATH}#{OAuth::Helper
|
96
|
+
"#{NounProjectApi::API_BASE}#{NounProjectApi::IconsRetriever::API_PATH}#{OAuth::Helper.escape(term)}?limit_to_public_domain=0"
|
95
97
|
).and_return(
|
96
98
|
valid_response
|
97
99
|
)
|
@@ -114,7 +116,7 @@ RSpec.describe NounProjectApi::IconsRetriever do
|
|
114
116
|
expect(@icons.access_token).to receive(
|
115
117
|
:get
|
116
118
|
).with(
|
117
|
-
"#{NounProjectApi::API_BASE}#{NounProjectApi::IconsRetriever::API_PATH}#{OAuth::Helper
|
119
|
+
"#{NounProjectApi::API_BASE}#{NounProjectApi::IconsRetriever::API_PATH}#{OAuth::Helper.escape(term)}?limit_to_public_domain=1"
|
118
120
|
).and_return(
|
119
121
|
valid_response
|
120
122
|
)
|
@@ -139,7 +141,7 @@ RSpec.describe NounProjectApi::IconsRetriever do
|
|
139
141
|
expect(@icons.access_token).to receive(
|
140
142
|
:get
|
141
143
|
).with(
|
142
|
-
"#{NounProjectApi::API_BASE}#{NounProjectApi::IconsRetriever::API_PATH}#{OAuth::Helper
|
144
|
+
"#{NounProjectApi::API_BASE}#{NounProjectApi::IconsRetriever::API_PATH}#{OAuth::Helper.escape(term)}?limit_to_public_domain=0&limit=#{limit}"
|
143
145
|
).and_return(
|
144
146
|
valid_response
|
145
147
|
)
|
@@ -160,7 +162,7 @@ RSpec.describe NounProjectApi::IconsRetriever do
|
|
160
162
|
expect(@icons.access_token).to receive(
|
161
163
|
:get
|
162
164
|
).with(
|
163
|
-
"#{NounProjectApi::API_BASE}#{NounProjectApi::IconsRetriever::API_PATH}#{OAuth::Helper
|
165
|
+
"#{NounProjectApi::API_BASE}#{NounProjectApi::IconsRetriever::API_PATH}#{OAuth::Helper.escape(term)}?limit_to_public_domain=0"
|
164
166
|
).and_return(
|
165
167
|
missing_response
|
166
168
|
)
|
@@ -1,17 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "spec_helper"
|
2
4
|
|
3
5
|
RSpec.describe NounProjectApi::Reporter do
|
4
6
|
it "raises an error when initialized without token" do
|
5
|
-
expect { NounProjectApi::Reporter.new(nil, Faker::Internet.password(16)) }.to raise_error(ArgumentError)
|
7
|
+
expect { NounProjectApi::Reporter.new(nil, Faker::Internet.password(min_length: 16)) }.to raise_error(ArgumentError)
|
6
8
|
end
|
7
9
|
|
8
10
|
it "raises an error when initialized without secret" do
|
9
|
-
expect { NounProjectApi::Reporter.new(Faker::Internet.password(16), nil) }.to raise_error(ArgumentError)
|
11
|
+
expect { NounProjectApi::Reporter.new(Faker::Internet.password(min_length: 16), nil) }.to raise_error(ArgumentError)
|
10
12
|
end
|
11
13
|
|
12
14
|
it "initializes the values properly" do
|
13
|
-
token = Faker::Internet.password(16)
|
14
|
-
secret = Faker::Internet.password(16)
|
15
|
+
token = Faker::Internet.password(min_length: 16)
|
16
|
+
secret = Faker::Internet.password(min_length: 16)
|
15
17
|
reporter = NounProjectApi::Reporter.new(token, secret)
|
16
18
|
|
17
19
|
expect(reporter.token).to eq(token)
|
@@ -20,8 +22,8 @@ RSpec.describe NounProjectApi::Reporter do
|
|
20
22
|
|
21
23
|
context "reports ids usage" do
|
22
24
|
before :each do
|
23
|
-
token = Faker::Internet.password(16)
|
24
|
-
secret = Faker::Internet.password(16)
|
25
|
+
token = Faker::Internet.password(min_length: 16)
|
26
|
+
secret = Faker::Internet.password(min_length: 16)
|
25
27
|
@reporter = NounProjectApi::Reporter.new(token, secret)
|
26
28
|
end
|
27
29
|
|
@@ -69,8 +71,6 @@ RSpec.describe NounProjectApi::Reporter do
|
|
69
71
|
expect(result).to be true
|
70
72
|
end
|
71
73
|
|
72
|
-
|
73
|
-
|
74
74
|
it "reports multiple ids" do
|
75
75
|
valid_response = OpenStruct.new(
|
76
76
|
body: Fakes::Results::REPORTED_ONE,
|
@@ -1,17 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "spec_helper"
|
2
4
|
|
3
5
|
RSpec.describe NounProjectApi::Retriever do
|
4
6
|
it "raises an error when initialized without token" do
|
5
|
-
expect { NounProjectApi::Retriever.new(nil, Faker::Internet.password(16)) }.to raise_error(ArgumentError)
|
7
|
+
expect { NounProjectApi::Retriever.new(nil, Faker::Internet.password(min_length: 16)) }.to raise_error(ArgumentError)
|
6
8
|
end
|
7
9
|
|
8
10
|
it "raises an error when initialized without secret" do
|
9
|
-
expect { NounProjectApi::Retriever.new(Faker::Internet.password(16), nil) }.to raise_error(ArgumentError)
|
11
|
+
expect { NounProjectApi::Retriever.new(Faker::Internet.password(min_length: 16), nil) }.to raise_error(ArgumentError)
|
10
12
|
end
|
11
13
|
|
12
14
|
it "initializes the values properly" do
|
13
|
-
token = Faker::Internet.password(16)
|
14
|
-
secret = Faker::Internet.password(16)
|
15
|
+
token = Faker::Internet.password(min_length: 16)
|
16
|
+
secret = Faker::Internet.password(min_length: 16)
|
15
17
|
retriever = NounProjectApi::Retriever.new(token, secret)
|
16
18
|
|
17
19
|
expect(retriever.token).to eq(token)
|
data/spec/spec_helper.rb
CHANGED
data/spec/support/fakes.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Fakes
|
2
4
|
module Results
|
3
|
-
ICON_VALID = '
|
5
|
+
ICON_VALID = ""'
|
4
6
|
{
|
5
7
|
"icon": {
|
6
8
|
"term_slug": "beauty-salon",
|
@@ -83,9 +85,9 @@ module Fakes
|
|
83
85
|
"term_id": 645
|
84
86
|
}
|
85
87
|
}
|
86
|
-
'
|
88
|
+
'""
|
87
89
|
|
88
|
-
ICONS_RECENT_VALID = '
|
90
|
+
ICONS_RECENT_VALID = ""'
|
89
91
|
{
|
90
92
|
"recent_uploads": [
|
91
93
|
{
|
@@ -172,9 +174,9 @@ module Fakes
|
|
172
174
|
}
|
173
175
|
],
|
174
176
|
"generated_at": "Thu, 18 Sep 2014 18:09:34 GMT"
|
175
|
-
}'
|
177
|
+
}'""
|
176
178
|
|
177
|
-
ICONS_VALID = '
|
179
|
+
ICONS_VALID = ""'
|
178
180
|
{
|
179
181
|
"generated_at": "Thu, 18 Sep 2014 17:48:10 GMT",
|
180
182
|
"icons": [
|
@@ -295,21 +297,21 @@ module Fakes
|
|
295
297
|
"term_id": 857
|
296
298
|
}
|
297
299
|
]
|
298
|
-
}'
|
300
|
+
}'""
|
299
301
|
|
300
|
-
REPORTED_ONE = '
|
302
|
+
REPORTED_ONE = ""'
|
301
303
|
{
|
302
304
|
"licenses_consumed": 1,
|
303
305
|
"result": "success"
|
304
|
-
}'
|
306
|
+
}'""
|
305
307
|
|
306
|
-
REPORTED_THREE = '
|
308
|
+
REPORTED_THREE = ""'
|
307
309
|
{
|
308
310
|
"licenses_consumed": 1,
|
309
311
|
"result": "success"
|
310
|
-
}'
|
312
|
+
}'""
|
311
313
|
|
312
|
-
COLLECTION_VALID = '
|
314
|
+
COLLECTION_VALID = ""'
|
313
315
|
{
|
314
316
|
"collection": {
|
315
317
|
"author": {
|
@@ -388,6 +390,6 @@ module Fakes
|
|
388
390
|
"template": "24"
|
389
391
|
}
|
390
392
|
}
|
391
|
-
'
|
393
|
+
'""
|
392
394
|
end
|
393
395
|
end
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: noun-project-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- Tailor Engineering
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-01-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
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'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: oauth
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -25,61 +39,61 @@ dependencies:
|
|
25
39
|
- !ruby/object:Gem::Version
|
26
40
|
version: '0.5'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
42
|
+
name: faker
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
30
44
|
requirements:
|
31
45
|
- - "~>"
|
32
46
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
47
|
+
version: '2.13'
|
34
48
|
type: :development
|
35
49
|
prerelease: false
|
36
50
|
version_requirements: !ruby/object:Gem::Requirement
|
37
51
|
requirements:
|
38
52
|
- - "~>"
|
39
53
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
54
|
+
version: '2.13'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
56
|
+
name: pry
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
59
|
- - "~>"
|
46
60
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
61
|
+
version: '0.13'
|
48
62
|
type: :development
|
49
63
|
prerelease: false
|
50
64
|
version_requirements: !ruby/object:Gem::Requirement
|
51
65
|
requirements:
|
52
66
|
- - "~>"
|
53
67
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
68
|
+
version: '0.13'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
70
|
+
name: rake
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
73
|
- - "~>"
|
60
74
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
75
|
+
version: '13.0'
|
62
76
|
type: :development
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
80
|
- - "~>"
|
67
81
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
82
|
+
version: '13.0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
84
|
+
name: rspec
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
87
|
- - "~>"
|
74
88
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
89
|
+
version: '3.9'
|
76
90
|
type: :development
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
94
|
- - "~>"
|
81
95
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
96
|
+
version: '3.9'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: rspec_junit_formatter
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -95,46 +109,46 @@ dependencies:
|
|
95
109
|
- !ruby/object:Gem::Version
|
96
110
|
version: '0.4'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
112
|
+
name: rubocop
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
100
114
|
requirements:
|
101
|
-
- -
|
115
|
+
- - '='
|
102
116
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
117
|
+
version: 0.79.0
|
104
118
|
type: :development
|
105
119
|
prerelease: false
|
106
120
|
version_requirements: !ruby/object:Gem::Requirement
|
107
121
|
requirements:
|
108
|
-
- -
|
122
|
+
- - '='
|
109
123
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
124
|
+
version: 0.79.0
|
111
125
|
description: A Gem to expose a wrapping API for The Noun Project API's
|
112
|
-
email:
|
126
|
+
email: sloths@tailorbrands.com
|
113
127
|
executables: []
|
114
128
|
extensions: []
|
115
129
|
extra_rdoc_files: []
|
116
130
|
files:
|
117
131
|
- Rakefile
|
118
|
-
- lib/
|
119
|
-
- lib/
|
120
|
-
- lib/
|
121
|
-
- lib/
|
122
|
-
- lib/
|
123
|
-
- lib/
|
124
|
-
- lib/
|
125
|
-
- lib/
|
126
|
-
- lib/
|
127
|
-
- lib/
|
128
|
-
- lib/
|
129
|
-
- spec/lib/
|
130
|
-
- spec/lib/
|
131
|
-
- spec/lib/
|
132
|
-
- spec/lib/
|
133
|
-
- spec/lib/
|
134
|
-
- spec/lib/
|
135
|
-
- spec/lib/
|
136
|
-
- spec/lib/
|
137
|
-
- spec/lib/
|
132
|
+
- lib/noun_project_api.rb
|
133
|
+
- lib/noun_project_api/base_item.rb
|
134
|
+
- lib/noun_project_api/collection.rb
|
135
|
+
- lib/noun_project_api/collection_retriever.rb
|
136
|
+
- lib/noun_project_api/connection.rb
|
137
|
+
- lib/noun_project_api/errors.rb
|
138
|
+
- lib/noun_project_api/icon.rb
|
139
|
+
- lib/noun_project_api/icon_retriever.rb
|
140
|
+
- lib/noun_project_api/icons_retriever.rb
|
141
|
+
- lib/noun_project_api/reporter.rb
|
142
|
+
- lib/noun_project_api/retriever.rb
|
143
|
+
- spec/lib/noun_project_api/base_item_spec.rb
|
144
|
+
- spec/lib/noun_project_api/collection_retriever_spec.rb
|
145
|
+
- spec/lib/noun_project_api/collection_spec.rb
|
146
|
+
- spec/lib/noun_project_api/icon_retriever_spec.rb
|
147
|
+
- spec/lib/noun_project_api/icon_spec.rb
|
148
|
+
- spec/lib/noun_project_api/icons_retriever_spec.rb
|
149
|
+
- spec/lib/noun_project_api/reporter_spec.rb
|
150
|
+
- spec/lib/noun_project_api/retriever_spec.rb
|
151
|
+
- spec/lib/noun_project_api_spec.rb
|
138
152
|
- spec/spec_helper.rb
|
139
153
|
- spec/support/fakes.rb
|
140
154
|
homepage: https://github.com/TailorBrands/noun-project-api
|
@@ -156,20 +170,19 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
156
170
|
- !ruby/object:Gem::Version
|
157
171
|
version: '0'
|
158
172
|
requirements: []
|
159
|
-
|
160
|
-
rubygems_version: 2.7.6
|
173
|
+
rubygems_version: 3.2.32
|
161
174
|
signing_key:
|
162
175
|
specification_version: 4
|
163
176
|
summary: An API wrapper for The Noun Project API's
|
164
177
|
test_files:
|
178
|
+
- spec/lib/noun_project_api/base_item_spec.rb
|
179
|
+
- spec/lib/noun_project_api/collection_retriever_spec.rb
|
180
|
+
- spec/lib/noun_project_api/collection_spec.rb
|
181
|
+
- spec/lib/noun_project_api/icon_retriever_spec.rb
|
182
|
+
- spec/lib/noun_project_api/icon_spec.rb
|
183
|
+
- spec/lib/noun_project_api/icons_retriever_spec.rb
|
184
|
+
- spec/lib/noun_project_api/reporter_spec.rb
|
185
|
+
- spec/lib/noun_project_api/retriever_spec.rb
|
186
|
+
- spec/lib/noun_project_api_spec.rb
|
165
187
|
- spec/spec_helper.rb
|
166
188
|
- spec/support/fakes.rb
|
167
|
-
- spec/lib/nount_project_api_spec.rb
|
168
|
-
- spec/lib/noun-project-api/collection_spec.rb
|
169
|
-
- spec/lib/noun-project-api/icon_spec.rb
|
170
|
-
- spec/lib/noun-project-api/base_item_spec.rb
|
171
|
-
- spec/lib/noun-project-api/collection_retriever_spec.rb
|
172
|
-
- spec/lib/noun-project-api/retriever_spec.rb
|
173
|
-
- spec/lib/noun-project-api/icon_retriever_spec.rb
|
174
|
-
- spec/lib/noun-project-api/reporter_spec.rb
|
175
|
-
- spec/lib/noun-project-api/icons_retriever_spec.rb
|
@@ -1,26 +0,0 @@
|
|
1
|
-
module NounProjectApi
|
2
|
-
# A basis to Items returned by the noun project.
|
3
|
-
class BaseItem
|
4
|
-
attr_accessor :original_hash
|
5
|
-
ITEM_NAME = nil
|
6
|
-
|
7
|
-
def initialize(origin)
|
8
|
-
raise NotImplementedError.new("Must use a subclass") if self.class::ITEM_NAME.nil?
|
9
|
-
|
10
|
-
origin = JSON.parse(origin) if origin.is_a? String
|
11
|
-
origin = origin.delete(
|
12
|
-
self.class::ITEM_NAME
|
13
|
-
) if origin.key? self.class::ITEM_NAME
|
14
|
-
|
15
|
-
@original_hash = origin
|
16
|
-
end
|
17
|
-
|
18
|
-
def id
|
19
|
-
original_hash["id"].to_i
|
20
|
-
end
|
21
|
-
|
22
|
-
def to_json
|
23
|
-
JSON.dump(to_hash)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
require "noun-project-api/collection"
|
2
|
-
require "noun-project-api/retriever"
|
3
|
-
|
4
|
-
module NounProjectApi
|
5
|
-
# Retrieve a collection.
|
6
|
-
class CollectionRetriever < Retriever
|
7
|
-
API_PATH = "/collection/".freeze
|
8
|
-
ITEM_CLASS = Collection
|
9
|
-
|
10
|
-
alias_method :find_by_slug, :find
|
11
|
-
end
|
12
|
-
end
|
@@ -1,59 +0,0 @@
|
|
1
|
-
require "noun-project-api/retriever"
|
2
|
-
|
3
|
-
module NounProjectApi
|
4
|
-
# Retrieve icons.
|
5
|
-
class IconsRetriever < Retriever
|
6
|
-
API_PATH = "/icons/".freeze
|
7
|
-
|
8
|
-
# Finds multiple icons based on the term
|
9
|
-
# * term - search term
|
10
|
-
# * limit - limit the amount of results
|
11
|
-
# * offset - offset the results
|
12
|
-
# * page - page number
|
13
|
-
def find(term, limit = nil, offset = nil, page = nil)
|
14
|
-
raise ArgumentError.new("Missing search term") unless term
|
15
|
-
|
16
|
-
search = OAuth::Helper.escape(term)
|
17
|
-
search += "?limit_to_public_domain=#{NounProjectApi.configuration.public_domain ? 1 : 0}"
|
18
|
-
|
19
|
-
args = {
|
20
|
-
"limit" => limit,
|
21
|
-
"offset" => offset,
|
22
|
-
"page" => page
|
23
|
-
}.reject { |_, v| v.nil? }
|
24
|
-
args.each { |k, v| search += "&#{k}=#{v}" } if args.size > 0
|
25
|
-
|
26
|
-
result = access_token.get("#{API_BASE}#{API_PATH}#{search}")
|
27
|
-
raise ArgumentError.new("Bad request") unless %w(200 404).include? result.code
|
28
|
-
|
29
|
-
if result.code == "200"
|
30
|
-
JSON.parse(result.body)["icons"].map { |icon| Icon.new(icon) }
|
31
|
-
else
|
32
|
-
[]
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
# List recent uploads
|
37
|
-
# * limit - limit the amount of results
|
38
|
-
# * offset - offset the results
|
39
|
-
# * page - page number
|
40
|
-
def recent_uploads(limit = nil, offset = nil, page = nil)
|
41
|
-
args = {
|
42
|
-
"limit" => limit,
|
43
|
-
"offset" => offset,
|
44
|
-
"page" => page
|
45
|
-
}.reject { |_, v| v.nil? }
|
46
|
-
if args.size > 0
|
47
|
-
search = "?"
|
48
|
-
args.each { |k, v| search += "#{k}=#{v}&" }
|
49
|
-
else
|
50
|
-
search = ""
|
51
|
-
end
|
52
|
-
|
53
|
-
result = access_token.get("#{API_BASE}#{API_PATH}recent_uploads#{search}")
|
54
|
-
raise ArgumentError.new("Bad request") unless result.code == "200"
|
55
|
-
|
56
|
-
JSON.parse(result.body)["recent_uploads"].map { |icon| Icon.new(icon) }
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
data/lib/noun-project-api.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
require "oauth"
|
2
|
-
require "json"
|
3
|
-
require "noun-project-api/errors"
|
4
|
-
require "noun-project-api/connection"
|
5
|
-
require "noun-project-api/icon_retriever"
|
6
|
-
require "noun-project-api/reporter"
|
7
|
-
require "noun-project-api/icons_retriever"
|
8
|
-
require "noun-project-api/icon"
|
9
|
-
require "noun-project-api/collection_retriever"
|
10
|
-
require "noun-project-api/collection"
|
11
|
-
|
12
|
-
# Top level name space for the entire Gem.
|
13
|
-
module NounProjectApi
|
14
|
-
API_BASE = "http://api.thenounproject.com".freeze
|
15
|
-
|
16
|
-
def self.configuration
|
17
|
-
@configuration ||= Configuration.new
|
18
|
-
end
|
19
|
-
|
20
|
-
def self.configure
|
21
|
-
self.configuration ||= Configuration.new
|
22
|
-
yield(configuration) if block_given?
|
23
|
-
end
|
24
|
-
|
25
|
-
# Main configuration class.
|
26
|
-
class Configuration
|
27
|
-
attr_accessor :public_domain
|
28
|
-
|
29
|
-
def initialize
|
30
|
-
@public_domain = false
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|