noun-project-api 0.2.2 → 1.0.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 11f21fc8fa8332fb270247aba04d4ac778c5cff9
4
- data.tar.gz: 9cf63e9099b5f9b1b777aa0191cf80fd516b3b90
3
+ metadata.gz: 31efd2c37c5ac37ddb6ac38054485ab56a13fb65
4
+ data.tar.gz: e2de0f1c8e3e52d09ad8a57d4854fa1f66eeb121
5
5
  SHA512:
6
- metadata.gz: 1d1e4725b6dd873d4f4f66cc9d0636123196cbd02a4b090d3fdf548df54d2ecc40b16eecac4050c2e6bbb6e9b190f84f4706cfbf4d04c5391b85bab302d715de
7
- data.tar.gz: 5ade878aa4c75eb4cd0e0875be509fd381381ce090789784307f8e5f6e74631a23b9097f05a837300200b4547aeeabef5ce9148e7f43952c6e2dd6098c9e0ea0
6
+ metadata.gz: 2aae5a8fa9d877dcdaa83cea76a7de58ec4a777671522e1600d89ea0808582471d51f8f360dc7ddbe4ab99baf9a52972156977a79434e63a961008483ff03593
7
+ data.tar.gz: a3f9934c896120832073dfbe595aab89fd6edc7de5c5eb5a5222ec9fa192fdd8bb6a28400763a1a3117e8f862eaba446b7c3daebd35dc8257ca9a37b5db5c134
@@ -1,14 +1,16 @@
1
- require 'oauth'
2
- require 'json'
3
- require 'noun-project-api/connection'
4
- require 'noun-project-api/icon_retriever'
5
- require 'noun-project-api/reporter'
6
- require 'noun-project-api/icons_retriever'
7
- require 'noun-project-api/icon'
1
+ require "oauth"
2
+ require "json"
3
+ require "noun-project-api/connection"
4
+ require "noun-project-api/icon_retriever"
5
+ require "noun-project-api/reporter"
6
+ require "noun-project-api/icons_retriever"
7
+ require "noun-project-api/icon"
8
+ require "noun-project-api/collection_retriever"
9
+ require "noun-project-api/collection"
8
10
 
9
11
  # Top level name space for the entire Gem.
10
12
  module NounProjectApi
11
- API_BASE = 'http://api.thenounproject.com'
13
+ API_BASE = "http://api.thenounproject.com".freeze
12
14
 
13
15
  def self.configuration
14
16
  @configuration ||= Configuration.new
@@ -0,0 +1,26 @@
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
+ fail(NotImplementedError, "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
@@ -0,0 +1,34 @@
1
+ require "noun-project-api/base_item"
2
+
3
+ module NounProjectApi
4
+ # A single Collection as an abstracted ruby object.
5
+ class Collection < BaseItem
6
+ ITEM_NAME = "collection".freeze
7
+
8
+ def author_id
9
+ original_hash["author_id"].to_i
10
+ end
11
+
12
+ def author_name
13
+ original_hash["author"]["name"]
14
+ end
15
+
16
+ def icon_count
17
+ original_hash["icon_count"].to_i
18
+ end
19
+
20
+ def is_published?
21
+ original_hash["is_published"].to_i == 1
22
+ end
23
+
24
+ def to_hash
25
+ {
26
+ id: id,
27
+ author_id: author_id,
28
+ author_name: author_name,
29
+ icon_count: icon_count,
30
+ is_published: is_published?
31
+ }
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,12 @@
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
@@ -6,7 +6,7 @@ module NounProjectApi
6
6
  def initialize(token, secret)
7
7
  @token = token
8
8
  @secret = secret
9
- fail(ArgumentError, 'Missing token or secret') unless @token && @secret
9
+ fail(ArgumentError, "Missing token or secret") unless @token && @secret
10
10
 
11
11
  @access_token = OAuth::AccessToken.new(OAuth::Consumer.new(token, secret))
12
12
  end
@@ -1,36 +1,27 @@
1
+ require "noun-project-api/base_item"
2
+
1
3
  module NounProjectApi
2
4
  # A single Icon as an abstracted ruby object.
3
- class Icon
5
+ class Icon < BaseItem
4
6
  PREVIEW_SIZE_200 = 200
5
7
  PREVIEW_SIZE_42 = 42
6
8
  PREVIEW_SIZE_84 = 84
7
9
 
8
- PUBLIC_DOMAIN_LICENSE = 'public-domain'
9
-
10
- attr_accessor :original_hash
11
-
12
- def initialize(origin)
13
- origin = JSON.parse(origin) if origin.is_a? String
14
- origin = origin.delete('icon') if origin.key? 'icon'
15
-
16
- @original_hash = origin
17
- end
10
+ PUBLIC_DOMAIN_LICENSE = "public-domain".freeze
18
11
 
19
- def id
20
- original_hash['id'].to_i
21
- end
12
+ ITEM_NAME = "icon".freeze
22
13
 
23
14
  def public_domain?
24
- original_hash['license_description'] == PUBLIC_DOMAIN_LICENSE
15
+ original_hash["license_description"] == PUBLIC_DOMAIN_LICENSE
25
16
  end
26
17
 
27
18
  def svg_url
28
- original_hash['icon_url']
19
+ original_hash["icon_url"]
29
20
  end
30
21
 
31
22
  def preview_url(size = PREVIEW_SIZE_200)
32
23
  if size == PREVIEW_SIZE_200
33
- original_hash['preview_url']
24
+ original_hash["preview_url"]
34
25
  else
35
26
  original_hash["preview_url_#{size}"]
36
27
  end
@@ -44,9 +35,5 @@ module NounProjectApi
44
35
  preview_url_42: preview_url(PREVIEW_SIZE_42)
45
36
  }
46
37
  end
47
-
48
- def to_json
49
- JSON.dump(to_hash)
50
- end
51
38
  end
52
39
  end
@@ -1,19 +1,11 @@
1
- require 'noun-project-api/retriever'
1
+ require "noun-project-api/icon"
2
+ require "noun-project-api/retriever"
2
3
 
3
4
  module NounProjectApi
4
5
  # Retrieve an icon.
5
6
  class IconRetriever < Retriever
6
- API_PATH = '/icon/'
7
-
8
- # Find an icon based on it's id.
9
- def find(id)
10
- fail(ArgumentError, 'Missing id/slug') unless id
11
-
12
- result = access_token.get("#{API_BASE}#{API_PATH}#{id}")
13
- fail(ArgumentError, 'Bad request') unless result.code == '200'
14
-
15
- Icon.new(result.body)
16
- end
7
+ API_PATH = "/icon/".freeze
8
+ ITEM_CLASS = Icon
17
9
 
18
10
  alias_method :find_by_slug, :find
19
11
  end
@@ -1,9 +1,9 @@
1
- require 'noun-project-api/retriever'
1
+ require "noun-project-api/retriever"
2
2
 
3
3
  module NounProjectApi
4
4
  # Retrieve icons.
5
5
  class IconsRetriever < Retriever
6
- API_PATH = '/icons/'
6
+ API_PATH = "/icons/".freeze
7
7
 
8
8
  # Finds multiple icons based on the term
9
9
  # * term - search term
@@ -11,19 +11,23 @@ module NounProjectApi
11
11
  # * offset - offset the results
12
12
  # * page - page number
13
13
  def find(term, limit = nil, offset = nil, page = nil)
14
- fail(ArgumentError, 'Missing search term') unless term
14
+ fail(ArgumentError, "Missing search term") unless term
15
15
 
16
16
  search = OAuth::Helper.escape(term)
17
17
  search += "?limit_to_public_domain=#{NounProjectApi.configuration.public_domain ? 1 : 0}"
18
18
 
19
- args = { 'limit' => limit, 'offset' => offset, 'page' => page }.reject { |_, v| v.nil? }
19
+ args = {
20
+ "limit" => limit,
21
+ "offset" => offset,
22
+ "page" => page
23
+ }.reject { |_, v| v.nil? }
20
24
  args.each { |k, v| search += "&#{k}=#{v}" } if args.size > 0
21
25
 
22
26
  result = access_token.get("#{API_BASE}#{API_PATH}#{search}")
23
- fail(ArgumentError, 'Bad request') unless %w(200 404).include? result.code
27
+ fail(ArgumentError, "Bad request") unless %w(200 404).include? result.code
24
28
 
25
- if result.code == '200'
26
- JSON.parse(result.body)['icons'].map { |icon| Icon.new(icon) }
29
+ if result.code == "200"
30
+ JSON.parse(result.body)["icons"].map { |icon| Icon.new(icon) }
27
31
  else
28
32
  []
29
33
  end
@@ -34,18 +38,22 @@ module NounProjectApi
34
38
  # * offset - offset the results
35
39
  # * page - page number
36
40
  def recent_uploads(limit = nil, offset = nil, page = nil)
37
- args = { 'limit' => limit, 'offset' => offset, 'page' => page }.reject { |k, v| v.nil? }
41
+ args = {
42
+ "limit" => limit,
43
+ "offset" => offset,
44
+ "page" => page
45
+ }.reject { |_, v| v.nil? }
38
46
  if args.size > 0
39
- search = '?'
47
+ search = "?"
40
48
  args.each { |k, v| search += "#{k}=#{v}&" }
41
49
  else
42
- search = ''
50
+ search = ""
43
51
  end
44
52
 
45
53
  result = access_token.get("#{API_BASE}#{API_PATH}recent_uploads#{search}")
46
- fail(ArgumentError, 'Bad request') unless result.code == '200'
54
+ fail(ArgumentError, "Bad request") unless result.code == "200"
47
55
 
48
- JSON.parse(result.body)['recent_uploads'].map { |icon| Icon.new(icon) }
56
+ JSON.parse(result.body)["recent_uploads"].map { |icon| Icon.new(icon) }
49
57
  end
50
58
  end
51
59
  end
@@ -3,18 +3,18 @@ module NounProjectApi
3
3
  class Reporter
4
4
  include Connection
5
5
 
6
- API_PATH = '/notify/publish'
6
+ API_PATH = "/notify/publish".freeze
7
7
 
8
8
  def report_used(ids)
9
9
  ids = [ids] if ids.is_a?(String) || ids.is_a?(Fixnum)
10
- fail(ArgumentError, 'Missing ids') if ids.nil? || ids.empty?
10
+ fail(ArgumentError, "Missing ids") if ids.nil? || ids.empty?
11
11
 
12
12
  result = access_token.post(
13
13
  "#{API_BASE}#{API_PATH}",
14
- { icons: ids.join(',') }.to_json,
15
- { 'Accept' => 'application/json', 'Content-Type' => 'application/json' }
14
+ { icons: ids.join(",") }.to_json,
15
+ "Accept" => "application/json", "Content-Type" => "application/json"
16
16
  )
17
- result.code == '200'
17
+ result.code == "200"
18
18
  end
19
19
  end
20
20
  end
@@ -2,5 +2,15 @@ module NounProjectApi
2
2
  # A base class for different retriever classes.
3
3
  class Retriever
4
4
  include Connection
5
+
6
+ # Find an item based on it's id.
7
+ def find(id)
8
+ fail(ArgumentError, "Missing id/slug") unless id
9
+
10
+ result = access_token.get("#{API_BASE}#{self.class::API_PATH}#{id}")
11
+ fail(ArgumentError, "Bad request") unless result.code == "200"
12
+
13
+ self.class::ITEM_CLASS.new(result.body)
14
+ end
5
15
  end
6
16
  end
@@ -0,0 +1,11 @@
1
+ require "spec_helper"
2
+ require "ostruct"
3
+
4
+ RSpec.describe NounProjectApi::BaseItem do
5
+ it "raises an error on direct initialization" do
6
+ data = JSON.parse(Fakes::Results::ICON_VALID)
7
+ expect {
8
+ NounProjectApi::BaseItem.new(JSON.dump(data["icon"]))
9
+ }.to raise_error(NotImplementedError)
10
+ end
11
+ end
@@ -0,0 +1,85 @@
1
+ require "spec_helper"
2
+ require "ostruct"
3
+
4
+ RSpec.describe NounProjectApi::CollectionRetriever do
5
+ 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
+ @valid_response = OpenStruct.new(
9
+ body: Fakes::Results::COLLECTION_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 { @collection.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(@collection.access_token).to receive(
26
+ :get
27
+ ).with(
28
+ "#{NounProjectApi::API_BASE}#{NounProjectApi::CollectionRetriever::API_PATH}#{id}"
29
+ ).and_return(
30
+ @valid_response
31
+ )
32
+
33
+ result = @collection.find(id)
34
+ expect(result).to be_a(NounProjectApi::Collection)
35
+ expect(result.original_hash).to eq(@valid_hash["collection"])
36
+ end
37
+
38
+ it "raises an error with a missing id" do
39
+ id = 1
40
+ expect(@collection.access_token).to receive(
41
+ :get
42
+ ).with(
43
+ "#{NounProjectApi::API_BASE}#{NounProjectApi::CollectionRetriever::API_PATH}#{id}"
44
+ ).and_return(
45
+ @missing_response
46
+ )
47
+
48
+ expect { @collection.find(id) }.to raise_error(ArgumentError)
49
+ end
50
+ end
51
+
52
+ context "slug" do
53
+ it "raises an error when no slug is provided" do
54
+ expect { @collection.find_by_slug(nil) }.to raise_error(ArgumentError)
55
+ end
56
+
57
+ it "returns a proper result with a correct slug" do
58
+ slug = "existing_slug"
59
+ expect(@collection.access_token).to receive(
60
+ :get
61
+ ).with(
62
+ "#{NounProjectApi::API_BASE}#{NounProjectApi::CollectionRetriever::API_PATH}#{slug}"
63
+ ).and_return(
64
+ @valid_response
65
+ )
66
+
67
+ result = @collection.find(slug)
68
+ expect(result).to be_a(NounProjectApi::Collection)
69
+ expect(result.original_hash).to eq(@valid_hash["collection"])
70
+ end
71
+
72
+ it "raises an error with a missing slug" do
73
+ slug = "missing_slug"
74
+ expect(@collection.access_token).to receive(
75
+ :get
76
+ ).with(
77
+ "#{NounProjectApi::API_BASE}#{NounProjectApi::CollectionRetriever::API_PATH}#{slug}"
78
+ ).and_return(
79
+ @missing_response
80
+ )
81
+
82
+ expect { @collection.find_by_slug(slug) }.to raise_error(ArgumentError)
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,64 @@
1
+ require "spec_helper"
2
+ require "ostruct"
3
+
4
+ RSpec.describe NounProjectApi::CollectionRetriever do
5
+ it "raises an error on empty initialization input" do
6
+ expect { NounProjectApi::Collection.new }.to raise_error(ArgumentError)
7
+ end
8
+
9
+ it "accepts JSON string input" do
10
+ data = JSON.parse(Fakes::Results::COLLECTION_VALID)
11
+ expect { NounProjectApi::Collection.new(JSON.dump(data["collection"])) }.to_not raise_error
12
+ end
13
+
14
+ it "accepts JSON string input with collection encapsulation" do
15
+ expect { NounProjectApi::Collection.new(Fakes::Results::COLLECTION_VALID) }.to_not raise_error
16
+ end
17
+
18
+ it "accepts hash input" do
19
+ data = JSON.parse(Fakes::Results::COLLECTION_VALID)
20
+ expect { NounProjectApi::Collection.new(data) }.to_not raise_error
21
+ end
22
+
23
+ context "exposed attributes" do
24
+ before :each do
25
+ @json = JSON.parse(Fakes::Results::COLLECTION_VALID)
26
+ @valid_collection = NounProjectApi::Collection.new(Fakes::Results::COLLECTION_VALID)
27
+ end
28
+
29
+ it "id as number" do
30
+ expect(@valid_collection.id).to be_a(Fixnum)
31
+ expect(@valid_collection.id).to eq(@json["collection"]["id"].to_i)
32
+ end
33
+
34
+ it "author id as number" do
35
+ expect(@valid_collection.author_id).to eq(@json["collection"]["author_id"].to_i)
36
+ end
37
+
38
+ it "author name" do
39
+ expect(@valid_collection.author_name).to eq(@json["collection"]["author"]["name"])
40
+ end
41
+
42
+ it "icon count as number" do
43
+ expect(@valid_collection.icon_count).to eq(@json["collection"]["icon_count"].to_i)
44
+ end
45
+
46
+ it "is published" do
47
+ expect(@valid_collection.is_published?).to eq(@json["collection"]["is_published"].to_i == 1)
48
+ end
49
+
50
+ it "builds a simple hash" do
51
+ expect(@valid_collection.to_hash).to eq({
52
+ id: @valid_collection.id,
53
+ author_id: @valid_collection.author_id,
54
+ author_name: @valid_collection.author_name,
55
+ icon_count: @valid_collection.icon_count,
56
+ is_published: @valid_collection.is_published?
57
+ })
58
+ end
59
+
60
+ it "json formats the hash" do
61
+ expect(@valid_collection.to_json).to eq JSON.dump @valid_collection.to_hash
62
+ end
63
+ end
64
+ end
@@ -1,5 +1,5 @@
1
- require 'spec_helper'
2
- require 'ostruct'
1
+ require "spec_helper"
2
+ require "ostruct"
3
3
 
4
4
  RSpec.describe NounProjectApi::IconRetriever do
5
5
  before :each do
@@ -7,20 +7,20 @@ RSpec.describe NounProjectApi::IconRetriever do
7
7
  @valid_hash = JSON.parse(Fakes::Results::ICON_VALID)
8
8
  @valid_response = OpenStruct.new(
9
9
  body: Fakes::Results::ICON_VALID,
10
- code: '200'
10
+ code: "200"
11
11
  )
12
12
 
13
13
  @missing_response = OpenStruct.new(
14
- code: '404'
14
+ code: "404"
15
15
  )
16
16
  end
17
17
 
18
18
  context "id" do
19
- it 'raises an error when no id is provided' do
19
+ it "raises an error when no id is provided" do
20
20
  expect { @icon.find(nil) }.to raise_error(ArgumentError)
21
21
  end
22
22
 
23
- it 'returns a proper result with a correct id' do
23
+ it "returns a proper result with a correct id" do
24
24
  id = 1
25
25
  expect(@icon.access_token).to receive(
26
26
  :get
@@ -35,7 +35,7 @@ RSpec.describe NounProjectApi::IconRetriever do
35
35
  expect(result.original_hash).to eq(@valid_hash["icon"])
36
36
  end
37
37
 
38
- it 'raises an error with a missing id' do
38
+ it "raises an error with a missing id" do
39
39
  id = 1
40
40
  expect(@icon.access_token).to receive(
41
41
  :get
@@ -50,12 +50,12 @@ RSpec.describe NounProjectApi::IconRetriever do
50
50
  end
51
51
 
52
52
  context "slug" do
53
- it 'raises an error when no slug is provided' do
53
+ it "raises an error when no slug is provided" do
54
54
  expect { @icon.find_by_slug(nil) }.to raise_error(ArgumentError)
55
55
  end
56
56
 
57
- it 'returns a proper result with a correct slug' do
58
- slug = 'existing_slug'
57
+ it "returns a proper result with a correct slug" do
58
+ slug = "existing_slug"
59
59
  expect(@icon.access_token).to receive(
60
60
  :get
61
61
  ).with(
@@ -69,8 +69,8 @@ RSpec.describe NounProjectApi::IconRetriever do
69
69
  expect(result.original_hash).to eq(@valid_hash["icon"])
70
70
  end
71
71
 
72
- it 'raises an error with a missing slug' do
73
- slug = 'missing_slug'
72
+ it "raises an error with a missing slug" do
73
+ slug = "missing_slug"
74
74
  expect(@icon.access_token).to receive(
75
75
  :get
76
76
  ).with(
@@ -1,21 +1,21 @@
1
- require 'spec_helper'
2
- require 'ostruct'
1
+ require "spec_helper"
2
+ require "ostruct"
3
3
 
4
4
  RSpec.describe NounProjectApi::IconRetriever do
5
- it 'raises an error on empty initialization input' do
5
+ it "raises an error on empty initialization input" do
6
6
  expect { NounProjectApi::Icon.new }.to raise_error(ArgumentError)
7
7
  end
8
8
 
9
- it 'accepts JSON string input' do
9
+ it "accepts JSON string input" do
10
10
  data = JSON.parse(Fakes::Results::ICON_VALID)
11
11
  expect { NounProjectApi::Icon.new(JSON.dump(data["icon"])) }.to_not raise_error
12
12
  end
13
13
 
14
- it 'accepts JSON string input with icon encapsulation' do
14
+ it "accepts JSON string input with icon encapsulation" do
15
15
  expect { NounProjectApi::Icon.new(Fakes::Results::ICON_VALID) }.to_not raise_error
16
16
  end
17
17
 
18
- it 'accepts hash input' do
18
+ it "accepts hash input" do
19
19
  data = JSON.parse(Fakes::Results::ICON_VALID)
20
20
  expect { NounProjectApi::Icon.new(data) }.to_not raise_error
21
21
  end
@@ -26,42 +26,42 @@ RSpec.describe NounProjectApi::IconRetriever do
26
26
  @valid_icon = NounProjectApi::Icon.new(Fakes::Results::ICON_VALID)
27
27
  end
28
28
 
29
- it 'public domain' do
29
+ it "public domain" do
30
30
  expect(@valid_icon.public_domain?).to eq(@json["icon"]["license_description"] == "public-domain")
31
31
  end
32
32
 
33
- it 'SVG url' do
33
+ it "SVG url" do
34
34
  expect(@valid_icon.svg_url).to eq(@json["icon"]["icon_url"])
35
35
  end
36
36
 
37
- it 'nil on missing SVG url' do
37
+ it "nil on missing SVG url" do
38
38
  @json["icon"].delete("icon_url")
39
39
  icon = NounProjectApi::Icon.new(@json)
40
40
  expect(icon.svg_url).to be_nil
41
41
  end
42
42
 
43
- it 'preview url defaults at 200 size' do
43
+ it "preview url defaults at 200 size" do
44
44
  expect(@valid_icon.preview_url).to eq(@json["icon"]["preview_url"])
45
45
  end
46
46
 
47
- it 'preview url for 200 size' do
47
+ it "preview url for 200 size" do
48
48
  expect(@valid_icon.preview_url(NounProjectApi::Icon::PREVIEW_SIZE_200)).to eq(@json["icon"]["preview_url"])
49
49
  end
50
50
 
51
- it 'preview url for 84 size' do
51
+ it "preview url for 84 size" do
52
52
  expect(@valid_icon.preview_url(NounProjectApi::Icon::PREVIEW_SIZE_84)).to eq(@json["icon"]["preview_url_84"])
53
53
  end
54
54
 
55
- it 'preview url for 42 size' do
55
+ it "preview url for 42 size" do
56
56
  expect(@valid_icon.preview_url(NounProjectApi::Icon::PREVIEW_SIZE_42)).to eq(@json["icon"]["preview_url_42"])
57
57
  end
58
58
 
59
- it 'id as number' do
59
+ it "id as number" do
60
60
  expect(@valid_icon.id).to be_a(Fixnum)
61
61
  expect(@valid_icon.id).to eq(@json["icon"]["id"].to_i)
62
62
  end
63
63
 
64
- it 'builds a simple hash' do
64
+ it "builds a simple hash" do
65
65
  expect(@valid_icon.to_hash).to eq({
66
66
  id: @valid_icon.id,
67
67
  preview_url_200: @valid_icon.preview_url(NounProjectApi::Icon::PREVIEW_SIZE_200),
@@ -70,7 +70,7 @@ RSpec.describe NounProjectApi::IconRetriever do
70
70
  })
71
71
  end
72
72
 
73
- it 'json formats the hash' do
73
+ it "json formats the hash" do
74
74
  expect(@valid_icon.to_json).to eq JSON.dump @valid_icon.to_hash
75
75
  end
76
76
  end
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  RSpec.describe NounProjectApi::IconsRetriever do
4
4
  before :each do
@@ -10,7 +10,7 @@ RSpec.describe NounProjectApi::IconsRetriever do
10
10
  valid_hash = JSON.parse(Fakes::Results::ICONS_RECENT_VALID)
11
11
  valid_response = OpenStruct.new(
12
12
  body: Fakes::Results::ICONS_RECENT_VALID,
13
- code: '200'
13
+ code: "200"
14
14
  )
15
15
 
16
16
  expect(@icons.access_token).to receive(
@@ -31,7 +31,7 @@ RSpec.describe NounProjectApi::IconsRetriever do
31
31
  it "returns the recent uploads and passes limit when passed" do
32
32
  valid_response = OpenStruct.new(
33
33
  body: Fakes::Results::ICONS_RECENT_VALID,
34
- code: '200'
34
+ code: "200"
35
35
  )
36
36
 
37
37
  limit = 3
@@ -53,18 +53,18 @@ RSpec.describe NounProjectApi::IconsRetriever do
53
53
  end
54
54
 
55
55
  context "Icons search" do
56
- it 'raises an error when no phrase is provided' do
56
+ it "raises an error when no phrase is provided" do
57
57
  expect { @icons.find(nil) }.to raise_error(ArgumentError)
58
58
  end
59
59
 
60
- it 'properly URI encodes search patterns' do
60
+ it "properly URI encodes search patterns" do
61
61
  valid_hash = JSON.parse(Fakes::Results::ICONS_VALID)
62
62
  valid_response = OpenStruct.new(
63
63
  body: Fakes::Results::ICONS_VALID,
64
- code: '200'
64
+ code: "200"
65
65
  )
66
66
 
67
- term = 'some search with \',] bad chars'
67
+ term = "some search with \",] bad chars"
68
68
  expect(@icons.access_token).to receive(
69
69
  :get
70
70
  ).with(
@@ -80,14 +80,14 @@ RSpec.describe NounProjectApi::IconsRetriever do
80
80
  end
81
81
  end
82
82
 
83
- it 'returns a proper result with a correct phrase' do
83
+ it "returns a proper result with a correct phrase" do
84
84
  valid_hash = JSON.parse(Fakes::Results::ICONS_VALID)
85
85
  valid_response = OpenStruct.new(
86
86
  body: Fakes::Results::ICONS_VALID,
87
- code: '200'
87
+ code: "200"
88
88
  )
89
89
 
90
- term = 'some search'
90
+ term = "some search"
91
91
  expect(@icons.access_token).to receive(
92
92
  :get
93
93
  ).with(
@@ -103,14 +103,14 @@ RSpec.describe NounProjectApi::IconsRetriever do
103
103
  end
104
104
  end
105
105
 
106
- it 'properly handles public domain only config' do
106
+ it "properly handles public domain only config" do
107
107
  valid_hash = JSON.parse(Fakes::Results::ICONS_VALID)
108
108
  valid_response = OpenStruct.new(
109
109
  body: Fakes::Results::ICONS_VALID,
110
- code: '200'
110
+ code: "200"
111
111
  )
112
112
 
113
- term = 'some search'
113
+ term = "some search"
114
114
  expect(@icons.access_token).to receive(
115
115
  :get
116
116
  ).with(
@@ -128,13 +128,13 @@ RSpec.describe NounProjectApi::IconsRetriever do
128
128
  NounProjectApi.configuration.public_domain = false
129
129
  end
130
130
 
131
- it 'returns a proper result with a correct phrase and passes along the args' do
131
+ it "returns a proper result with a correct phrase and passes the args" do
132
132
  valid_response = OpenStruct.new(
133
133
  body: Fakes::Results::ICONS_VALID,
134
- code: '200'
134
+ code: "200"
135
135
  )
136
136
 
137
- term = 'some search'
137
+ term = "some search"
138
138
  limit = 4
139
139
  expect(@icons.access_token).to receive(
140
140
  :get
@@ -151,12 +151,12 @@ RSpec.describe NounProjectApi::IconsRetriever do
151
151
  end
152
152
  end
153
153
 
154
- it 'returns an empty array for no result' do
154
+ it "returns an empty array for no result" do
155
155
  missing_response = OpenStruct.new(
156
- code: '404'
156
+ code: "404"
157
157
  )
158
158
 
159
- term = 'missing search'
159
+ term = "missing search"
160
160
  expect(@icons.access_token).to receive(
161
161
  :get
162
162
  ).with(
@@ -1,15 +1,15 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  RSpec.describe NounProjectApi::Reporter do
4
- it 'raises an error when initialized without token' do
4
+ it "raises an error when initialized without token" do
5
5
  expect { NounProjectApi::Reporter.new(nil, Faker::Internet.password(16)) }.to raise_error(ArgumentError)
6
6
  end
7
7
 
8
- it 'raises an error when initialized without secret' do
8
+ it "raises an error when initialized without secret" do
9
9
  expect { NounProjectApi::Reporter.new(Faker::Internet.password(16), nil) }.to raise_error(ArgumentError)
10
10
  end
11
11
 
12
- it 'initializes the values properly' do
12
+ it "initializes the values properly" do
13
13
  token = Faker::Internet.password(16)
14
14
  secret = Faker::Internet.password(16)
15
15
  reporter = NounProjectApi::Reporter.new(token, secret)
@@ -18,17 +18,17 @@ RSpec.describe NounProjectApi::Reporter do
18
18
  expect(reporter.secret).to eq(secret)
19
19
  end
20
20
 
21
- context 'reports ids usage' do
21
+ context "reports ids usage" do
22
22
  before :each do
23
23
  token = Faker::Internet.password(16)
24
24
  secret = Faker::Internet.password(16)
25
25
  @reporter = NounProjectApi::Reporter.new(token, secret)
26
26
  end
27
27
 
28
- it 'reports a singular id' do
28
+ it "reports a singular id" do
29
29
  valid_response = OpenStruct.new(
30
30
  body: Fakes::Results::REPORTED_ONE,
31
- code: '200'
31
+ code: "200"
32
32
  )
33
33
 
34
34
  id = 122
@@ -38,7 +38,7 @@ RSpec.describe NounProjectApi::Reporter do
38
38
  ).with(
39
39
  "#{NounProjectApi::API_BASE}#{NounProjectApi::Reporter::API_PATH}",
40
40
  { icons: id.to_s }.to_json,
41
- { 'Accept' => 'application/json', 'Content-Type' => 'application/json' }
41
+ "Accept" => "application/json", "Content-Type" => "application/json"
42
42
  ).and_return(
43
43
  valid_response
44
44
  )
@@ -47,20 +47,20 @@ RSpec.describe NounProjectApi::Reporter do
47
47
  expect(result).to be true
48
48
  end
49
49
 
50
- it 'reports a singular id for a string' do
50
+ it "reports a singular id for a string" do
51
51
  valid_response = OpenStruct.new(
52
52
  body: Fakes::Results::REPORTED_ONE,
53
- code: '200'
53
+ code: "200"
54
54
  )
55
55
 
56
- id = '122'
56
+ id = "122"
57
57
 
58
58
  expect(@reporter.access_token).to receive(
59
59
  :post
60
60
  ).with(
61
61
  "#{NounProjectApi::API_BASE}#{NounProjectApi::Reporter::API_PATH}",
62
62
  { icons: id }.to_json,
63
- { 'Accept' => 'application/json', 'Content-Type' => 'application/json' }
63
+ "Accept" => "application/json", "Content-Type" => "application/json"
64
64
  ).and_return(
65
65
  valid_response
66
66
  )
@@ -71,10 +71,10 @@ RSpec.describe NounProjectApi::Reporter do
71
71
 
72
72
 
73
73
 
74
- it 'reports multiple ids' do
74
+ it "reports multiple ids" do
75
75
  valid_response = OpenStruct.new(
76
76
  body: Fakes::Results::REPORTED_ONE,
77
- code: '200'
77
+ code: "200"
78
78
  )
79
79
 
80
80
  ids = [122, 4541, 342_11, 4352]
@@ -83,8 +83,8 @@ RSpec.describe NounProjectApi::Reporter do
83
83
  :post
84
84
  ).with(
85
85
  "#{NounProjectApi::API_BASE}#{NounProjectApi::Reporter::API_PATH}",
86
- { icons: ids.join(',') }.to_json,
87
- { 'Accept' => 'application/json', 'Content-Type' => 'application/json' }
86
+ { icons: ids.join(",") }.to_json,
87
+ "Accept" => "application/json", "Content-Type" => "application/json"
88
88
  ).and_return(
89
89
  valid_response
90
90
  )
@@ -1,15 +1,15 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  RSpec.describe NounProjectApi::Retriever do
4
- it 'raises an error when initialized without token' do
4
+ it "raises an error when initialized without token" do
5
5
  expect { NounProjectApi::Retriever.new(nil, Faker::Internet.password(16)) }.to raise_error(ArgumentError)
6
6
  end
7
7
 
8
- it 'raises an error when initialized without secret' do
8
+ it "raises an error when initialized without secret" do
9
9
  expect { NounProjectApi::Retriever.new(Faker::Internet.password(16), nil) }.to raise_error(ArgumentError)
10
10
  end
11
11
 
12
- it 'initializes the values properly' do
12
+ it "initializes the values properly" do
13
13
  token = Faker::Internet.password(16)
14
14
  secret = Faker::Internet.password(16)
15
15
  retriever = NounProjectApi::Retriever.new(token, secret)
@@ -1,11 +1,11 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  RSpec.describe NounProjectApi do
4
- it 'has the correct default' do
4
+ it "has the correct default" do
5
5
  expect(NounProjectApi.configuration.public_domain).to be false
6
6
  end
7
7
 
8
- it 'sets the correct configuration' do
8
+ it "sets the correct configuration" do
9
9
  expect(NounProjectApi.configuration.public_domain).to be false
10
10
 
11
11
  NounProjectApi.configure do |config|
@@ -308,5 +308,86 @@ module Fakes
308
308
  "licenses_consumed": 1,
309
309
  "result": "success"
310
310
  }'''
311
+
312
+ COLLECTION_VALID = '''
313
+ {
314
+ "collection": {
315
+ "author": {
316
+ "location": "US",
317
+ "name": "irene hoffman",
318
+ "permalink": "/i",
319
+ "username": "i"
320
+ },
321
+ "author_id": "5562",
322
+ "date_created": "2014-06-27 00:22:22",
323
+ "date_updated": "2014-06-27 00:22:22",
324
+ "description": "",
325
+ "icon_count": "4",
326
+ "id": "321",
327
+ "is_collaborative": "",
328
+ "is_featured": "0",
329
+ "is_published": "1",
330
+ "is_store_item": "0",
331
+ "name": "genetics",
332
+ "permalink": "/i/collection/genetics",
333
+ "slug": "genetics",
334
+ "sponsor": {},
335
+ "sponsor_campaign_link": "",
336
+ "sponsor_id": "",
337
+ "tags": [
338
+ "genetics",
339
+ "chromosome",
340
+ "gene",
341
+ "heredity",
342
+ "genetic code",
343
+ "nucleic acid",
344
+ "RNA",
345
+ "DNA",
346
+ "deoxyribonucleic acid",
347
+ "reproduction",
348
+ "genome",
349
+ "human",
350
+ "chemistry",
351
+ "Allele",
352
+ "Amelogenin",
353
+ "bases",
354
+ "building blocks",
355
+ "cytosine",
356
+ "guanine",
357
+ "thymine",
358
+ "adenine",
359
+ "c",
360
+ "G",
361
+ "T",
362
+ "CGTA",
363
+ "A",
364
+ "biological",
365
+ "cell",
366
+ "CODIS",
367
+ "blueprint of life",
368
+ "life",
369
+ "material",
370
+ "nucleus",
371
+ "inherited",
372
+ "parent",
373
+ "unique",
374
+ "analysis",
375
+ "double helix",
376
+ "helix",
377
+ "forensic",
378
+ "loci",
379
+ "genotype",
380
+ "haplotype",
381
+ "junk DNA",
382
+ "match",
383
+ "nuclear",
384
+ "paternal",
385
+ "sequence",
386
+ "sequencing"
387
+ ],
388
+ "template": "24"
389
+ }
390
+ }
391
+ '''
311
392
  end
312
393
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: noun-project-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nadav Shatz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-17 00:00:00.000000000 Z
11
+ date: 2016-06-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oauth
@@ -94,12 +94,18 @@ extra_rdoc_files: []
94
94
  files:
95
95
  - Rakefile
96
96
  - lib/noun-project-api.rb
97
+ - lib/noun-project-api/base_item.rb
98
+ - lib/noun-project-api/collection.rb
99
+ - lib/noun-project-api/collection_retriever.rb
97
100
  - lib/noun-project-api/connection.rb
98
101
  - lib/noun-project-api/icon.rb
99
102
  - lib/noun-project-api/icon_retriever.rb
100
103
  - lib/noun-project-api/icons_retriever.rb
101
104
  - lib/noun-project-api/reporter.rb
102
105
  - lib/noun-project-api/retriever.rb
106
+ - spec/lib/noun-project-api/base_item_spec.rb
107
+ - spec/lib/noun-project-api/collection_retriever_spec.rb
108
+ - spec/lib/noun-project-api/collection_spec.rb
103
109
  - spec/lib/noun-project-api/icon_retriever_spec.rb
104
110
  - spec/lib/noun-project-api/icon_spec.rb
105
111
  - spec/lib/noun-project-api/icons_retriever_spec.rb
@@ -128,11 +134,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
128
134
  version: '0'
129
135
  requirements: []
130
136
  rubyforge_project:
131
- rubygems_version: 2.4.5
137
+ rubygems_version: 2.5.1
132
138
  signing_key:
133
139
  specification_version: 4
134
140
  summary: An API wrapper for The Noun Project API's
135
141
  test_files:
142
+ - spec/lib/noun-project-api/base_item_spec.rb
143
+ - spec/lib/noun-project-api/collection_retriever_spec.rb
144
+ - spec/lib/noun-project-api/collection_spec.rb
136
145
  - spec/lib/noun-project-api/icon_retriever_spec.rb
137
146
  - spec/lib/noun-project-api/icon_spec.rb
138
147
  - spec/lib/noun-project-api/icons_retriever_spec.rb