dribbble 1.0.1 → 2.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 +5 -5
- data/.rubocop.yml +33 -0
- data/.travis.yml +3 -6
- data/CHANGELOG.md +58 -0
- data/Gemfile +10 -0
- data/Guardfile +4 -2
- data/README.md +44 -285
- data/Rakefile +2 -0
- data/dribbble.gemspec +10 -8
- data/lib/dribbble.rb +3 -1
- data/lib/dribbble/attachment.rb +9 -1
- data/lib/dribbble/base.rb +3 -1
- data/lib/dribbble/client.rb +5 -30
- data/lib/dribbble/errors.rb +3 -3
- data/lib/dribbble/project.rb +10 -2
- data/lib/dribbble/shot.rb +3 -33
- data/lib/dribbble/user.rb +1 -51
- data/lib/dribbble/utils.rb +5 -3
- data/lib/dribbble/utils/creatable.rb +3 -1
- data/lib/dribbble/utils/deletable.rb +3 -1
- data/lib/dribbble/utils/findable.rb +2 -0
- data/lib/dribbble/utils/has_children.rb +16 -12
- data/lib/dribbble/utils/updatable.rb +2 -0
- data/lib/dribbble/version.rb +3 -1
- data/spec/lib/dribbble/base_spec.rb +10 -8
- data/spec/lib/dribbble/client_spec.rb +16 -69
- data/spec/lib/dribbble/project_spec.rb +52 -16
- data/spec/lib/dribbble/shot_spec.rb +14 -197
- data/spec/lib/dribbble/user_spec.rb +5 -175
- data/spec/spec_helper.rb +5 -3
- data/spec/support/dribbble_api.rb +17 -88
- data/spec/support/fixtures/current_user_success.json +35 -24
- data/spec/support/fixtures/project_success.json +1 -1
- data/spec/support/fixtures/projects_accepted.json +8 -0
- data/spec/support/fixtures/projects_deleted.json +8 -0
- data/spec/support/fixtures/projects_success.json +1 -1
- data/spec/support/fixtures/projects_updated.json +8 -0
- data/spec/support/fixtures/shot_success.json +16 -16
- data/spec/support/fixtures/shot_updated.json +78 -78
- data/spec/support/fixtures/shots_success.json +81 -103
- data/spec/support/fixtures/user_success.json +35 -24
- metadata +33 -67
- data/lib/dribbble/bucket.rb +0 -33
- data/lib/dribbble/comment.rb +0 -29
- data/lib/dribbble/like.rb +0 -7
- data/lib/dribbble/team.rb +0 -6
- data/spec/lib/dribbble/bucket_spec.rb +0 -136
- data/spec/lib/dribbble/comment_spec.rb +0 -77
- data/spec/lib/dribbble/team_spec.rb +0 -43
- data/spec/support/fixtures/attachments_success.json +0 -11
- data/spec/support/fixtures/bucket_created.json +0 -8
- data/spec/support/fixtures/bucket_success.json +0 -8
- data/spec/support/fixtures/bucket_updated.json +0 -8
- data/spec/support/fixtures/buckets_success.json +0 -10
- data/spec/support/fixtures/comment_created.json +0 -38
- data/spec/support/fixtures/comment_likes_success.json +0 -40
- data/spec/support/fixtures/comment_success.json +0 -38
- data/spec/support/fixtures/comment_updated.json +0 -38
- data/spec/support/fixtures/comments_success.json +0 -37
- data/spec/support/fixtures/followers_success.json +0 -33
- data/spec/support/fixtures/following_success.json +0 -33
- data/spec/support/fixtures/shot_likes_success.json +0 -33
- data/spec/support/fixtures/team_success.json +0 -26
- data/spec/support/fixtures/teams_success.json +0 -28
- data/spec/support/fixtures/user_likes_success.json +0 -91
- data/spec/support/fixtures/users_success.json +0 -27
data/Rakefile
CHANGED
data/dribbble.gemspec
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require File.expand_path('lib/dribbble/version', __dir__)
|
2
4
|
|
3
5
|
Gem::Specification.new do |s|
|
4
6
|
s.name = 'dribbble'
|
@@ -14,12 +16,12 @@ Gem::Specification.new do |s|
|
|
14
16
|
s.files = `git ls-files`.split("\n")
|
15
17
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
18
|
|
17
|
-
s.required_ruby_version = '>= 2.0.0'
|
18
|
-
s.add_runtime_dependency 'rest-client', '~>
|
19
|
+
s.required_ruby_version = ['>= 2.5.0', '< 3.0']
|
20
|
+
s.add_runtime_dependency 'rest-client', '~> 2.0'
|
19
21
|
|
20
|
-
s.add_development_dependency '
|
21
|
-
s.add_development_dependency '
|
22
|
-
s.add_development_dependency '
|
23
|
-
s.add_development_dependency 'sinatra', '~> 1
|
24
|
-
s.add_development_dependency 'webmock', '~>
|
22
|
+
s.add_development_dependency 'guard-rspec', '~> 4.7'
|
23
|
+
s.add_development_dependency 'rake', '~> 12.3.3'
|
24
|
+
s.add_development_dependency 'rspec', '~> 3.10'
|
25
|
+
s.add_development_dependency 'sinatra', '~> 2.1'
|
26
|
+
s.add_development_dependency 'webmock', '~> 3.13'
|
25
27
|
end
|
data/lib/dribbble.rb
CHANGED
data/lib/dribbble/attachment.rb
CHANGED
@@ -1,7 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'dribbble/utils/creatable'
|
4
|
+
require 'dribbble/utils/deletable'
|
5
|
+
|
1
6
|
module Dribbble
|
2
7
|
class Attachment < Dribbble::Base
|
8
|
+
include Dribbble::Utils::Creatable
|
9
|
+
include Dribbble::Utils::Deletable
|
10
|
+
|
3
11
|
def self.available_fields
|
4
|
-
%i
|
12
|
+
%i[file]
|
5
13
|
end
|
6
14
|
end
|
7
15
|
end
|
data/lib/dribbble/base.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'dribbble/utils'
|
2
4
|
require 'dribbble/utils/has_children'
|
3
5
|
|
@@ -17,7 +19,7 @@ module Dribbble
|
|
17
19
|
@dribbble_url = build_dribbble_url(@raw['id'].to_s, dribbble_url)
|
18
20
|
|
19
21
|
@raw.each do |k, _v|
|
20
|
-
define_singleton_method(k) { @raw[k] } unless
|
22
|
+
define_singleton_method(k) { @raw[k] } unless respond_to?(k)
|
21
23
|
end
|
22
24
|
end
|
23
25
|
|
data/lib/dribbble/client.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'dribbble/base'
|
4
|
+
require 'dribbble/shot'
|
2
5
|
require 'dribbble/user'
|
3
|
-
require 'dribbble/bucket'
|
4
6
|
require 'dribbble/project'
|
5
|
-
require 'dribbble/shot'
|
6
|
-
require 'dribbble/team'
|
7
7
|
require 'dribbble/errors'
|
8
8
|
|
9
9
|
require 'rest_client'
|
@@ -16,22 +16,8 @@ module Dribbble
|
|
16
16
|
def initialize(token = nil)
|
17
17
|
token = token.is_a?(Hash) ? token[:token] : token
|
18
18
|
@token = token
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
# Get authenticated user's buckets
|
23
|
-
def buckets(attrs = {})
|
24
|
-
Dribbble::Bucket.batch_new token, html_get('/user/buckets', attrs)
|
25
|
-
end
|
26
|
-
|
27
|
-
# Get authenticated user's followers
|
28
|
-
def followers(attrs = {})
|
29
|
-
Dribbble::User.batch_new token, html_get('/user/followers', attrs)
|
30
|
-
end
|
31
|
-
|
32
|
-
# Get authenticated user's likes
|
33
|
-
def likes(attrs = {})
|
34
|
-
Dribbble::Shot.batch_new token, html_get('/user/likes', attrs), 'shot'
|
19
|
+
super(token, {})
|
20
|
+
raise Dribbble::Error::MissingToken if @token.nil?
|
35
21
|
end
|
36
22
|
|
37
23
|
# Get authenticated user's followers
|
@@ -44,17 +30,6 @@ module Dribbble
|
|
44
30
|
Dribbble::Shot.batch_new token, html_get('/user/shots', attrs)
|
45
31
|
end
|
46
32
|
|
47
|
-
# Get authenticated user's followees shots
|
48
|
-
# Limited to first 600 shots regardless of the pagination
|
49
|
-
def following_shots(attrs = {})
|
50
|
-
Dribbble::Shot.batch_new token, html_get('/user/following/shots', attrs)
|
51
|
-
end
|
52
|
-
|
53
|
-
# Get authenticated user's teams
|
54
|
-
def teams(attrs = {})
|
55
|
-
Dribbble::Team.batch_new token, html_get('/user/teams', attrs)
|
56
|
-
end
|
57
|
-
|
58
33
|
# Get a single User or the authenticated one
|
59
34
|
def user
|
60
35
|
Dribbble::User.new @token, html_get('/user')
|
data/lib/dribbble/errors.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Dribbble
|
2
4
|
module Error
|
3
|
-
ISSUES_URL = 'https://github.com/Calyhre/dribbble/issues/new'
|
4
|
-
|
5
5
|
# Standard error we will inherit
|
6
6
|
class Standard < StandardError
|
7
7
|
def initialize(message = nil)
|
8
|
-
if message
|
8
|
+
if message&.response
|
9
9
|
super message.response
|
10
10
|
else
|
11
11
|
super(message || self.message)
|
data/lib/dribbble/project.rb
CHANGED
@@ -1,11 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'dribbble/utils/findable'
|
4
|
+
require 'dribbble/utils/creatable'
|
5
|
+
require 'dribbble/utils/updatable'
|
6
|
+
require 'dribbble/utils/deletable'
|
2
7
|
|
3
8
|
module Dribbble
|
4
9
|
class Project < Dribbble::Base
|
5
10
|
include Dribbble::Utils::Findable
|
11
|
+
include Dribbble::Utils::Creatable
|
12
|
+
include Dribbble::Utils::Updatable
|
13
|
+
include Dribbble::Utils::Deletable
|
6
14
|
|
7
|
-
def
|
8
|
-
|
15
|
+
def self.available_fields
|
16
|
+
%i[name description]
|
9
17
|
end
|
10
18
|
end
|
11
19
|
end
|
data/lib/dribbble/shot.rb
CHANGED
@@ -1,10 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'dribbble/utils/findable'
|
2
4
|
require 'dribbble/utils/creatable'
|
3
5
|
require 'dribbble/utils/updatable'
|
4
6
|
require 'dribbble/utils/deletable'
|
5
|
-
require 'dribbble/attachment'
|
6
|
-
require 'dribbble/comment'
|
7
|
-
require 'dribbble/like'
|
8
7
|
|
9
8
|
module Dribbble
|
10
9
|
class Shot < Dribbble::Base
|
@@ -13,41 +12,12 @@ module Dribbble
|
|
13
12
|
include Dribbble::Utils::Updatable
|
14
13
|
include Dribbble::Utils::Deletable
|
15
14
|
|
16
|
-
has_many :attachments, :buckets, :comments, :likes, :projects
|
17
|
-
has_many :rebounds, as: Dribbble::Shot
|
18
|
-
|
19
|
-
def self.all(token, attrs = {})
|
20
|
-
@token = token
|
21
|
-
batch_new token, html_get('/shots', attrs)
|
22
|
-
end
|
23
|
-
|
24
15
|
def self.available_fields
|
25
|
-
%i
|
16
|
+
%i[image title description low_profile rebound_source_id scheduled_for tags team_id]
|
26
17
|
end
|
27
18
|
|
28
19
|
def self.after_create(res)
|
29
20
|
res.code == 202 ? res.headers[:location].split('/').last : false
|
30
21
|
end
|
31
|
-
|
32
|
-
def like?
|
33
|
-
html_get "/shots/#{id}/like"
|
34
|
-
true
|
35
|
-
rescue RestClient::ResourceNotFound
|
36
|
-
false
|
37
|
-
end
|
38
|
-
|
39
|
-
def like!
|
40
|
-
res = html_post "/shots/#{id}/like"
|
41
|
-
res.code == 201 ? true : false
|
42
|
-
end
|
43
|
-
|
44
|
-
def unlike!
|
45
|
-
res = html_delete "/shots/#{id}/like"
|
46
|
-
res.code == 204 ? true : false
|
47
|
-
end
|
48
|
-
|
49
|
-
def rebounds(attrs = {})
|
50
|
-
Dribbble::Shot.batch_new token, html_get("/shots/#{id}/rebounds", attrs)
|
51
|
-
end
|
52
22
|
end
|
53
23
|
end
|
data/lib/dribbble/user.rb
CHANGED
@@ -1,56 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Dribbble
|
4
4
|
class User < Dribbble::Base
|
5
|
-
include Dribbble::Utils::Findable
|
6
|
-
|
7
|
-
def buckets(attrs = {})
|
8
|
-
Dribbble::Bucket.batch_new token, html_get("/users/#{id}/buckets", attrs)
|
9
|
-
end
|
10
|
-
|
11
|
-
def followers(attrs = {})
|
12
|
-
Dribbble::User.batch_new token, html_get("/users/#{id}/followers", attrs)
|
13
|
-
end
|
14
|
-
|
15
|
-
def following(attrs = {})
|
16
|
-
Dribbble::User.batch_new token, html_get("/users/#{id}/following", attrs), 'followee'
|
17
|
-
end
|
18
|
-
|
19
|
-
def following?(other_user_id = nil)
|
20
|
-
if other_user_id
|
21
|
-
html_get "/users/#{id}/following/#{other_user_id}"
|
22
|
-
else
|
23
|
-
html_get "/user/following/#{id}"
|
24
|
-
end
|
25
|
-
true
|
26
|
-
rescue RestClient::ResourceNotFound
|
27
|
-
false
|
28
|
-
end
|
29
|
-
|
30
|
-
def follow!
|
31
|
-
res = html_put "/users/#{id}/follow"
|
32
|
-
res.code == 204 ? true : false
|
33
|
-
end
|
34
|
-
|
35
|
-
def unfollow!
|
36
|
-
res = html_delete "/users/#{id}/follow"
|
37
|
-
res.code == 204 ? true : false
|
38
|
-
end
|
39
|
-
|
40
|
-
def likes(attrs = {})
|
41
|
-
Dribbble::Shot.batch_new token, html_get("/users/#{id}/likes", attrs), 'shot'
|
42
|
-
end
|
43
|
-
|
44
|
-
def projects(attrs = {})
|
45
|
-
Dribbble::Project.batch_new token, html_get("/users/#{id}/projects", attrs)
|
46
|
-
end
|
47
|
-
|
48
|
-
def shots(attrs = {})
|
49
|
-
Dribbble::Shot.batch_new token, html_get("/users/#{id}/shots", attrs)
|
50
|
-
end
|
51
|
-
|
52
|
-
def teams(attrs = {})
|
53
|
-
Dribbble::Team.batch_new token, html_get("/users/#{id}/teams", attrs)
|
54
|
-
end
|
55
5
|
end
|
56
6
|
end
|
data/lib/dribbble/utils.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'uri'
|
2
4
|
|
3
5
|
module Dribbble
|
@@ -5,14 +7,14 @@ module Dribbble
|
|
5
7
|
DEFAULT_ATTRIBUTES = {
|
6
8
|
page: 1,
|
7
9
|
per_page: 100
|
8
|
-
}
|
10
|
+
}.freeze
|
9
11
|
|
10
12
|
def class_name
|
11
|
-
@
|
13
|
+
@class_name ||= is_a?(Class) ? name.split('::').last.downcase : self.class.name.split('::').last.downcase
|
12
14
|
end
|
13
15
|
|
14
16
|
def pluralized_class_name
|
15
|
-
@
|
17
|
+
@pluralized_class_name ||= "#{class_name}s"
|
16
18
|
end
|
17
19
|
|
18
20
|
def full_url(path, attrs = {})
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Dribbble
|
2
4
|
module Utils
|
3
5
|
module Creatable
|
@@ -17,7 +19,7 @@ module Dribbble
|
|
17
19
|
|
18
20
|
# Need to be redeclared in the model
|
19
21
|
def available_fields
|
20
|
-
|
22
|
+
raise 'You need to redeclare this methods in your model'
|
21
23
|
end
|
22
24
|
|
23
25
|
def after_create(res)
|
@@ -1,10 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Dribbble
|
2
4
|
module Utils
|
3
5
|
module HasChildren
|
4
6
|
module ClassMethods
|
5
|
-
def has_many(*fields)
|
7
|
+
def has_many(*fields) # rubocop:disable Naming/PredicateName
|
6
8
|
if fields[1].is_a? Hash
|
7
|
-
generate_methods fields[0], fields[1][:as]
|
9
|
+
generate_methods fields[0], fields[1][:as], fields[1][:key]
|
8
10
|
else
|
9
11
|
fields.each do |field|
|
10
12
|
generate_methods field
|
@@ -12,27 +14,28 @@ module Dribbble
|
|
12
14
|
end
|
13
15
|
end
|
14
16
|
|
15
|
-
|
17
|
+
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
|
18
|
+
def generate_methods(field, klass = nil, key = nil)
|
16
19
|
singularized_field = field[0...-1]
|
17
20
|
|
18
21
|
define_method field do |attrs = {}|
|
19
|
-
klass ||= Object.const_get "Dribbble::#{
|
22
|
+
klass ||= Object.const_get "Dribbble::#{singularized_field.capitalize}"
|
20
23
|
url = "/#{pluralized_class_name}/#{id}/#{field}"
|
21
|
-
klass.batch_new token, html_get(url, attrs),
|
24
|
+
klass.batch_new token, html_get(url, attrs), key, url
|
22
25
|
end
|
23
26
|
|
24
27
|
define_method "find_#{singularized_field}" do |child_id|
|
25
|
-
klass ||= Object.const_get "Dribbble::#{
|
28
|
+
klass ||= Object.const_get "Dribbble::#{singularized_field.capitalize}"
|
26
29
|
url = "/#{pluralized_class_name}/#{id}/#{field}/#{child_id}"
|
27
30
|
klass.new token, html_get(url), url
|
28
31
|
end
|
29
32
|
|
30
33
|
define_method "create_#{singularized_field}" do |attrs = {}|
|
31
|
-
klass ||= Object.const_get "Dribbble::#{
|
34
|
+
klass ||= Object.const_get "Dribbble::#{singularized_field.capitalize}"
|
32
35
|
url = "/#{pluralized_class_name}/#{id}/#{field}"
|
33
36
|
res = html_post url do |payload|
|
34
|
-
klass.available_fields.each do |
|
35
|
-
payload[
|
37
|
+
klass.available_fields.each do |available_field|
|
38
|
+
payload[available_field] = attrs[available_field]
|
36
39
|
end
|
37
40
|
end
|
38
41
|
case res.code
|
@@ -49,8 +52,8 @@ module Dribbble
|
|
49
52
|
klass ||= Object.const_get "Dribbble::#{__method__[0...-1].capitalize}"
|
50
53
|
url = "/#{pluralized_class_name}/#{id}/#{klass.pluralized_class_name}/#{child_id}"
|
51
54
|
res = html_put url do |payload|
|
52
|
-
klass.available_fields.each do |
|
53
|
-
payload[
|
55
|
+
klass.available_fields.each do |available_field|
|
56
|
+
payload[available_field] = attrs[available_field]
|
54
57
|
end
|
55
58
|
end
|
56
59
|
klass.new token, res, url
|
@@ -59,10 +62,11 @@ module Dribbble
|
|
59
62
|
define_method "delete_#{singularized_field}" do |child_id|
|
60
63
|
klass ||= Object.const_get "Dribbble::#{__method__[0...-1].capitalize}"
|
61
64
|
res = html_delete "/#{pluralized_class_name}/#{id}/#{klass.pluralized_class_name}/#{child_id}"
|
62
|
-
res.code == 204
|
65
|
+
res.code == 204
|
63
66
|
end
|
64
67
|
end
|
65
68
|
end
|
69
|
+
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
|
66
70
|
|
67
71
|
def self.included(base)
|
68
72
|
base.extend(ClassMethods)
|
data/lib/dribbble/version.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
|
-
describe Dribbble::
|
4
|
-
before
|
5
|
-
@base =
|
5
|
+
describe Dribbble::Base do
|
6
|
+
before do
|
7
|
+
@base = described_class.new 'valid_token', {}
|
6
8
|
end
|
7
9
|
|
8
10
|
describe 'on #full_url_with_default_params' do
|
@@ -10,7 +12,7 @@ describe Dribbble::Client do
|
|
10
12
|
subject { @base.full_url_with_default_params '/shots' }
|
11
13
|
|
12
14
|
it 'return a valid url' do
|
13
|
-
expect(subject).to eq('https://api.dribbble.com/
|
15
|
+
expect(subject).to eq('https://api.dribbble.com/v2/shots?page=1&per_page=100')
|
14
16
|
end
|
15
17
|
end
|
16
18
|
|
@@ -18,7 +20,7 @@ describe Dribbble::Client do
|
|
18
20
|
subject { @base.full_url_with_default_params '/shots', page: 2, per_page: 10 }
|
19
21
|
|
20
22
|
it 'return a valid url' do
|
21
|
-
expect(subject).to eq('https://api.dribbble.com/
|
23
|
+
expect(subject).to eq('https://api.dribbble.com/v2/shots?page=2&per_page=10')
|
22
24
|
end
|
23
25
|
end
|
24
26
|
|
@@ -26,7 +28,7 @@ describe Dribbble::Client do
|
|
26
28
|
subject { @base.full_url_with_default_params '/shots', params1: 'custom' }
|
27
29
|
|
28
30
|
it 'return a valid url' do
|
29
|
-
expect(subject).to eq('https://api.dribbble.com/
|
31
|
+
expect(subject).to eq('https://api.dribbble.com/v2/shots?page=1&per_page=100¶ms1=custom')
|
30
32
|
end
|
31
33
|
end
|
32
34
|
end
|
@@ -36,7 +38,7 @@ describe Dribbble::Client do
|
|
36
38
|
subject { @base.full_url '/shots' }
|
37
39
|
|
38
40
|
it 'return a valid url' do
|
39
|
-
expect(subject).to eq('https://api.dribbble.com/
|
41
|
+
expect(subject).to eq('https://api.dribbble.com/v2/shots?')
|
40
42
|
end
|
41
43
|
end
|
42
44
|
|
@@ -44,7 +46,7 @@ describe Dribbble::Client do
|
|
44
46
|
subject { @base.full_url '/shots', custom: 1 }
|
45
47
|
|
46
48
|
it 'return a valid url' do
|
47
|
-
expect(subject).to eq('https://api.dribbble.com/
|
49
|
+
expect(subject).to eq('https://api.dribbble.com/v2/shots?custom=1')
|
48
50
|
end
|
49
51
|
end
|
50
52
|
end
|