dribbble 1.0.0.beta1 → 1.0.0.beta2
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/.travis.yml +1 -4
- data/lib/dribbble/base.rb +18 -6
- data/lib/dribbble/client.rb +4 -0
- data/lib/dribbble/comment.rb +25 -0
- data/lib/dribbble/shot.rb +0 -13
- data/lib/dribbble/team.rb +2 -0
- data/lib/dribbble/user.rb +0 -4
- data/lib/dribbble/utils/has_children.rb +51 -12
- data/lib/dribbble/utils.rb +1 -1
- data/lib/dribbble/version.rb +1 -1
- data/spec/lib/dribbble/comment_spec.rb +77 -0
- data/spec/lib/dribbble/shot_spec.rb +83 -10
- data/spec/lib/dribbble/team_spec.rb +43 -0
- data/spec/support/{dribbble.rb → dribbble_api.rb} +54 -0
- data/spec/support/fixtures/comment_created.json +38 -0
- data/spec/support/fixtures/comment_likes_success.json +40 -0
- data/spec/support/fixtures/comment_success.json +38 -0
- data/spec/support/fixtures/comment_updated.json +38 -0
- data/spec/support/fixtures/team_success.json +26 -0
- data/spec/support/fixtures/users_success.json +27 -0
- metadata +20 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0d46c451ba190bda80438f296081283e89c089ac
|
4
|
+
data.tar.gz: 0bb8dc6141ec990797129ce5c399b79c369b33d2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f60447a7217a53c00902de8d97990ec3148081dc723dd830880b8815c6ba3a6493e9f24365f2bc1d24a7797dafcbfa1de8d85a1e864f3b6d24ff26e9384b9e61
|
7
|
+
data.tar.gz: eb41db304a4d384c7d8d698cbcc25c5ed5159d6095d4d591f765b4786554b47132439c93427b4f8bc2f0f7545c4e659130d4013c74d7d06b57c94b37d20b5f16
|
data/.travis.yml
CHANGED
data/lib/dribbble/base.rb
CHANGED
@@ -8,24 +8,26 @@ module Dribbble
|
|
8
8
|
|
9
9
|
include Dribbble::Utils::HasChildren
|
10
10
|
|
11
|
-
attr_reader :token
|
11
|
+
attr_reader :token, :dribbble_url
|
12
12
|
|
13
|
-
def initialize(token, json)
|
13
|
+
def initialize(token, json, dribbble_url = '')
|
14
14
|
@token = token
|
15
|
+
|
15
16
|
@raw = json.is_a?(Hash) ? json : JSON.parse(json)
|
17
|
+
@dribbble_url = build_dribbble_url(@raw['id'].to_s, dribbble_url)
|
16
18
|
|
17
|
-
@raw.each do |k,
|
19
|
+
@raw.each do |k, _v|
|
18
20
|
define_singleton_method(k) { @raw[k] } unless self.respond_to?(k)
|
19
21
|
end
|
20
22
|
end
|
21
23
|
|
22
|
-
def self.batch_new(token, json, kind = nil)
|
24
|
+
def self.batch_new(token, json, kind = nil, url = '')
|
23
25
|
json = JSON.parse json unless json.is_a? Hash
|
24
26
|
json.map do |obj|
|
25
27
|
if kind
|
26
|
-
new token, obj[kind]
|
28
|
+
new token, obj[kind], url
|
27
29
|
else
|
28
|
-
new token, obj
|
30
|
+
new token, obj, url
|
29
31
|
end
|
30
32
|
end
|
31
33
|
end
|
@@ -89,5 +91,15 @@ module Dribbble
|
|
89
91
|
Dribbble::User.new @token, html_get('/user')
|
90
92
|
end
|
91
93
|
end
|
94
|
+
|
95
|
+
private
|
96
|
+
|
97
|
+
def build_dribbble_url(id, dribbble_url)
|
98
|
+
if dribbble_url.end_with?(id)
|
99
|
+
dribbble_url
|
100
|
+
else
|
101
|
+
"#{dribbble_url}/#{id}"
|
102
|
+
end
|
103
|
+
end
|
92
104
|
end
|
93
105
|
end
|
data/lib/dribbble/client.rb
CHANGED
data/lib/dribbble/comment.rb
CHANGED
@@ -1,4 +1,29 @@
|
|
1
1
|
module Dribbble
|
2
2
|
class Comment < Dribbble::Base
|
3
|
+
def self.available_fields
|
4
|
+
%i(body)
|
5
|
+
end
|
6
|
+
|
7
|
+
def likes
|
8
|
+
url = "#{dribbble_url}/likes"
|
9
|
+
Dribbble::Like.batch_new token, html_get(url), nil, url
|
10
|
+
end
|
11
|
+
|
12
|
+
def like?
|
13
|
+
html_get "#{dribbble_url}/like"
|
14
|
+
true
|
15
|
+
rescue RestClient::ResourceNotFound
|
16
|
+
false
|
17
|
+
end
|
18
|
+
|
19
|
+
def like!
|
20
|
+
res = html_post "#{dribbble_url}/like"
|
21
|
+
res.code == 201 ? true : false
|
22
|
+
end
|
23
|
+
|
24
|
+
def unlike!
|
25
|
+
res = html_delete "#{dribbble_url}/like"
|
26
|
+
res.code == 204 ? true : false
|
27
|
+
end
|
3
28
|
end
|
4
29
|
end
|
data/lib/dribbble/shot.rb
CHANGED
@@ -29,19 +29,6 @@ module Dribbble
|
|
29
29
|
res.code == 202 ? res.headers[:location].split('/').last : false
|
30
30
|
end
|
31
31
|
|
32
|
-
def create_attachment(attrs = {})
|
33
|
-
res = html_post "/shots/#{id}/attachments" do |payload|
|
34
|
-
Dribbble::Attachment.available_fields.each do |field|
|
35
|
-
payload[field] = attrs[field]
|
36
|
-
end
|
37
|
-
end
|
38
|
-
res.code == 202 ? true : false
|
39
|
-
end
|
40
|
-
|
41
|
-
def find_attachment(attachment_id)
|
42
|
-
Dribbble::Attachment.new token, html_get("/shots/#{id}/attachments/#{attachment_id}")
|
43
|
-
end
|
44
|
-
|
45
32
|
def like?
|
46
33
|
html_get "/shots/#{id}/like"
|
47
34
|
true
|
data/lib/dribbble/team.rb
CHANGED
data/lib/dribbble/user.rb
CHANGED
@@ -4,23 +4,62 @@ module Dribbble
|
|
4
4
|
module ClassMethods
|
5
5
|
def has_many(*fields)
|
6
6
|
if fields[1].is_a? Hash
|
7
|
-
|
8
|
-
singularized_field = field[0...-1]
|
9
|
-
klass = fields[1][:as]
|
10
|
-
|
11
|
-
define_method field do |attrs = {}|
|
12
|
-
klass.batch_new token, html_get("/#{pluralized_class_name}/#{id}/#{klass.pluralized_class_name}", attrs)
|
13
|
-
end
|
7
|
+
generate_methods fields[0], fields[1][:as]
|
14
8
|
else
|
15
9
|
fields.each do |field|
|
16
|
-
|
10
|
+
generate_methods field
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
17
14
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
15
|
+
def generate_methods(field, klass = nil)
|
16
|
+
singularized_field = field[0...-1]
|
17
|
+
|
18
|
+
define_method field do |attrs = {}|
|
19
|
+
klass ||= Object.const_get "Dribbble::#{__method__[0...-1].capitalize}"
|
20
|
+
url = "/#{pluralized_class_name}/#{id}/#{field}"
|
21
|
+
klass.batch_new token, html_get(url, attrs), nil, url
|
22
|
+
end
|
23
|
+
|
24
|
+
define_method "find_#{singularized_field}" do |child_id|
|
25
|
+
klass ||= Object.const_get "Dribbble::#{__method__[0...-1].capitalize}"
|
26
|
+
url = "/#{pluralized_class_name}/#{id}/#{field}/#{child_id}"
|
27
|
+
klass.new token, html_get(url), url
|
28
|
+
end
|
29
|
+
|
30
|
+
define_method "create_#{singularized_field}" do |attrs = {}|
|
31
|
+
klass ||= Object.const_get "Dribbble::#{__method__[0...-1].capitalize}"
|
32
|
+
url = "/#{pluralized_class_name}/#{id}/#{field}"
|
33
|
+
res = html_post url do |payload|
|
34
|
+
klass.available_fields.each do |field|
|
35
|
+
payload[field] = attrs[field]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
case res.code
|
39
|
+
when 202
|
40
|
+
return true
|
41
|
+
when 201
|
42
|
+
return klass.new token, res, url
|
43
|
+
else
|
44
|
+
return false
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
define_method "update_#{singularized_field}" do |child_id, attrs = {}|
|
49
|
+
klass ||= Object.const_get "Dribbble::#{__method__[0...-1].capitalize}"
|
50
|
+
url = "/#{pluralized_class_name}/#{id}/#{klass.pluralized_class_name}/#{child_id}"
|
51
|
+
res = html_put url do |payload|
|
52
|
+
klass.available_fields.each do |field|
|
53
|
+
payload[field] = attrs[field]
|
22
54
|
end
|
23
55
|
end
|
56
|
+
klass.new token, res, url
|
57
|
+
end
|
58
|
+
|
59
|
+
define_method "delete_#{singularized_field}" do |child_id|
|
60
|
+
klass ||= Object.const_get "Dribbble::#{__method__[0...-1].capitalize}"
|
61
|
+
res = html_delete "/#{pluralized_class_name}/#{id}/#{klass.pluralized_class_name}/#{child_id}"
|
62
|
+
res.code == 204 ? true : false
|
24
63
|
end
|
25
64
|
end
|
26
65
|
end
|
data/lib/dribbble/utils.rb
CHANGED
@@ -8,7 +8,7 @@ module Dribbble
|
|
8
8
|
}
|
9
9
|
|
10
10
|
def class_name
|
11
|
-
@_class_name ||=
|
11
|
+
@_class_name ||= self.is_a?(Class) ? name.split('::').last.downcase : self.class.name.split('::').last.downcase
|
12
12
|
end
|
13
13
|
|
14
14
|
def pluralized_class_name
|
data/lib/dribbble/version.rb
CHANGED
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RAW_COMMENT = data_from_json 'comment_success.json'
|
4
|
+
|
5
|
+
describe Dribbble::Comment do
|
6
|
+
describe 'on instance' do
|
7
|
+
before :all do
|
8
|
+
@comment = Dribbble::Comment.new 'valid_token', RAW_COMMENT, '/shots/471756/comments'
|
9
|
+
end
|
10
|
+
|
11
|
+
describe 'after initialization' do
|
12
|
+
RAW_COMMENT.each do |field, value|
|
13
|
+
it "respond to #{field}" do
|
14
|
+
expect(@comment.send field).to eq(value)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe 'on #likes' do
|
20
|
+
subject do
|
21
|
+
stub_dribbble :get, '/shots/471756/comments/1145736/likes', DribbbleAPI::CommentLikesSuccess
|
22
|
+
@comment.likes
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'return a user' do
|
26
|
+
expect(subject.first).to be_a Dribbble::Like
|
27
|
+
expect(subject.first.user).to be_a Dribbble::User
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe 'on #like?' do
|
32
|
+
describe 'on a not liked shot' do
|
33
|
+
subject do
|
34
|
+
stub_dribbble :get, '/shots/471756/comments/1145736/like', DribbbleAPI::CommentLikeNotFound
|
35
|
+
@comment.like?
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'return a user' do
|
39
|
+
expect(subject).to be_falsy
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe 'on a liked shot' do
|
44
|
+
subject do
|
45
|
+
stub_dribbble :get, '/shots/471756/comments/1145736/like', DribbbleAPI::CommentLikeSuccess
|
46
|
+
@comment.like?
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'return a user' do
|
50
|
+
expect(subject).to be_truthy
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe 'on #like!' do
|
56
|
+
subject do
|
57
|
+
stub_dribbble :post, '/shots/471756/comments/1145736/like', DribbbleAPI::CommentLikeCreated
|
58
|
+
@comment.like!
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'return true' do
|
62
|
+
expect(subject).to be_truthy
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe 'on #unlike!' do
|
67
|
+
subject do
|
68
|
+
stub_dribbble :delete, '/shots/471756/comments/1145736/like', DribbbleAPI::CommentLikeDeleted
|
69
|
+
@comment.unlike!
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'return true' do
|
73
|
+
expect(subject).to be_truthy
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -55,13 +55,26 @@ describe Dribbble::Shot do
|
|
55
55
|
end
|
56
56
|
|
57
57
|
describe 'create' do
|
58
|
-
|
59
|
-
|
60
|
-
|
58
|
+
describe 'when shot is accepted' do
|
59
|
+
subject do
|
60
|
+
stub_dribbble :post, '/shots/471756/attachments', DribbbleAPI::Accepted
|
61
|
+
@shot.create_attachment
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'works' do
|
65
|
+
expect(subject).to eq(true)
|
66
|
+
end
|
61
67
|
end
|
62
68
|
|
63
|
-
|
64
|
-
|
69
|
+
describe 'with a 422 error' do
|
70
|
+
subject do
|
71
|
+
stub_dribbble :post, '/shots/471756/attachments', DribbbleAPI::Unprocessable
|
72
|
+
@shot.create_attachment
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'works' do
|
76
|
+
expect { subject }.to raise_error(Dribbble::Error::Unprocessable)
|
77
|
+
end
|
65
78
|
end
|
66
79
|
end
|
67
80
|
|
@@ -76,6 +89,17 @@ describe Dribbble::Shot do
|
|
76
89
|
expect(subject.id).to eq(206_165)
|
77
90
|
end
|
78
91
|
end
|
92
|
+
|
93
|
+
describe 'delete' do
|
94
|
+
subject do
|
95
|
+
stub_dribbble :delete, '/shots/471756/attachments/206165', DribbbleAPI::AttachmentDeleted
|
96
|
+
@shot.delete_attachment 206_165
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'return true' do
|
100
|
+
expect(subject).to eq(true)
|
101
|
+
end
|
102
|
+
end
|
79
103
|
end
|
80
104
|
|
81
105
|
describe 'on #buckets' do
|
@@ -90,13 +114,62 @@ describe Dribbble::Shot do
|
|
90
114
|
end
|
91
115
|
|
92
116
|
describe 'on #comments' do
|
93
|
-
|
94
|
-
|
95
|
-
|
117
|
+
describe 'all' do
|
118
|
+
subject do
|
119
|
+
stub_dribbble :get, '/shots/471756/comments', DribbbleAPI::CommentsSuccess
|
120
|
+
@shot.comments
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'return comments' do
|
124
|
+
expect(subject.first).to be_a Dribbble::Comment
|
125
|
+
end
|
96
126
|
end
|
97
127
|
|
98
|
-
|
99
|
-
|
128
|
+
describe 'create' do
|
129
|
+
subject do
|
130
|
+
stub_dribbble :post, '/shots/471756/comments', DribbbleAPI::CommentCreated
|
131
|
+
@shot.create_comment body: "<p>Could he somehow make the shape of an \"S\" with his arms? I feel like i see potential for some hidden shapes in here...</p>\n\n<p>Looks fun!\n</p>"
|
132
|
+
end
|
133
|
+
|
134
|
+
it 'return a comment' do
|
135
|
+
expect(subject).to be_a Dribbble::Comment
|
136
|
+
expect(subject.body).to eq("<p>Could he somehow make the shape of an \"S\" with his arms? I feel like i see potential for some hidden shapes in here...</p>\n\n<p>Looks fun!\n</p>")
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
describe 'find' do
|
141
|
+
subject do
|
142
|
+
stub_dribbble :get, '/shots/471756/comments/1145736', DribbbleAPI::CommentSuccess
|
143
|
+
@shot.find_comment 1_145_736
|
144
|
+
end
|
145
|
+
|
146
|
+
it 'return a comment' do
|
147
|
+
expect(subject).to be_a Dribbble::Comment
|
148
|
+
expect(subject.id).to eq(1_145_736)
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
describe 'update' do
|
153
|
+
subject do
|
154
|
+
stub_dribbble :put, '/shots/471756/comments/1145736', DribbbleAPI::CommentUpdated
|
155
|
+
@shot.update_comment 1_145_736, body: "New body"
|
156
|
+
end
|
157
|
+
|
158
|
+
it 'return a comment' do
|
159
|
+
expect(subject).to be_a Dribbble::Comment
|
160
|
+
expect(subject.body).to eq("New body")
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
describe 'delete' do
|
165
|
+
subject do
|
166
|
+
stub_dribbble :delete, '/shots/471756/comments/1145736', DribbbleAPI::CommentDeleted
|
167
|
+
@shot.delete_comment 1_145_736
|
168
|
+
end
|
169
|
+
|
170
|
+
it 'return true' do
|
171
|
+
expect(subject).to eq(true)
|
172
|
+
end
|
100
173
|
end
|
101
174
|
end
|
102
175
|
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RAW_TEAM = data_from_json 'team_success.json'
|
4
|
+
|
5
|
+
describe Dribbble::Team do
|
6
|
+
describe 'on instance' do
|
7
|
+
before :all do
|
8
|
+
@team = Dribbble::Team.new 'valid_token', RAW_TEAM, '/teams/39'
|
9
|
+
end
|
10
|
+
|
11
|
+
describe 'after initialization' do
|
12
|
+
RAW_TEAM.each do |field, value|
|
13
|
+
it "respond to #{field}" do
|
14
|
+
expect(@team.send field).to eq(value)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe 'on #shots' do
|
20
|
+
subject do
|
21
|
+
stub_dribbble :get, '/teams/39/shots', DribbbleAPI::ShotsSuccess
|
22
|
+
@team.shots
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'responds with shots' do
|
26
|
+
expect(subject.size).to eq 2
|
27
|
+
expect(subject.first).to be_a Dribbble::Shot
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe 'on #members' do
|
32
|
+
subject do
|
33
|
+
stub_dribbble :get, '/teams/39/members', DribbbleAPI::UsersSuccess
|
34
|
+
@team.members
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'responds with members' do
|
38
|
+
expect(subject.size).to eq 1
|
39
|
+
expect(subject.first).to be_a Dribbble::User
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -92,15 +92,66 @@ module DribbbleAPI
|
|
92
92
|
end
|
93
93
|
end
|
94
94
|
|
95
|
+
class Unprocessable < Base
|
96
|
+
def status_code
|
97
|
+
422
|
98
|
+
end
|
99
|
+
|
100
|
+
protected
|
101
|
+
|
102
|
+
def json_response
|
103
|
+
content_type :json
|
104
|
+
status status_code
|
105
|
+
headers response_headers
|
106
|
+
|
107
|
+
{
|
108
|
+
message: "Validation failed.",
|
109
|
+
errors: [
|
110
|
+
{ attribute: "user", message: "reached the daily limit of 5 shots" }
|
111
|
+
]
|
112
|
+
}.to_json
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
95
116
|
class AttachmentsSuccess < Found
|
96
117
|
end
|
97
118
|
|
98
119
|
class AttachmentSuccess < Found
|
99
120
|
end
|
100
121
|
|
122
|
+
class AttachmentDeleted < Deleted
|
123
|
+
end
|
124
|
+
|
101
125
|
class CommentsSuccess < Found
|
102
126
|
end
|
103
127
|
|
128
|
+
class CommentSuccess < Found
|
129
|
+
end
|
130
|
+
|
131
|
+
class CommentCreated < Created
|
132
|
+
end
|
133
|
+
|
134
|
+
class CommentUpdated < Updated
|
135
|
+
end
|
136
|
+
|
137
|
+
class CommentDeleted < Deleted
|
138
|
+
end
|
139
|
+
|
140
|
+
class CommentLikesSuccess < Found
|
141
|
+
end
|
142
|
+
|
143
|
+
class CommentLikeSuccess < Found
|
144
|
+
end
|
145
|
+
|
146
|
+
class CommentLikeNotFound < NotFound
|
147
|
+
end
|
148
|
+
|
149
|
+
class CommentLikeCreated < Created
|
150
|
+
end
|
151
|
+
|
152
|
+
class CommentLikeDeleted < Deleted
|
153
|
+
end
|
154
|
+
|
104
155
|
class CurrentUserSuccess < Found
|
105
156
|
end
|
106
157
|
|
@@ -186,4 +237,7 @@ module DribbbleAPI
|
|
186
237
|
|
187
238
|
class UserSuccess < Found
|
188
239
|
end
|
240
|
+
|
241
|
+
class UsersSuccess < Found
|
242
|
+
end
|
189
243
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
{
|
2
|
+
"id" : 1145736,
|
3
|
+
"body" : "<p>Could he somehow make the shape of an \"S\" with his arms? I feel like i see potential for some hidden shapes in here...</p>\n\n<p>Looks fun!\n</p>",
|
4
|
+
"likes_count" : 1,
|
5
|
+
"likes_url" : "https://api.dribbble.com/v1/shots/471756/comments/1145736/likes",
|
6
|
+
"created_at" : "2012-03-15T04:24:39Z",
|
7
|
+
"updated_at" : "2012-03-15T04:24:39Z",
|
8
|
+
"user" : {
|
9
|
+
"id" : 1,
|
10
|
+
"name" : "Dan Cederholm",
|
11
|
+
"username" : "simplebits",
|
12
|
+
"html_url" : "https://dribbble.com/simplebits",
|
13
|
+
"avatar_url" : "https://d13yacurqjgara.cloudfront.net/users/1/avatars/normal/dc.jpg?1371679243",
|
14
|
+
"bio" : "Co-founder & designer of <a href=\"https://dribbble.com/dribbble\">@Dribbble</a>. Principal of SimpleBits. Aspiring clawhammer banjoist.",
|
15
|
+
"location" : "Salem, MA",
|
16
|
+
"links" : {
|
17
|
+
"web" : "http://simplebits.com",
|
18
|
+
"twitter" : "https://twitter.com/simplebits"
|
19
|
+
},
|
20
|
+
"buckets_count" : 10,
|
21
|
+
"followers_count" : 29262,
|
22
|
+
"followings_count" : 1728,
|
23
|
+
"likes_count" : 34954,
|
24
|
+
"projects_count" : 8,
|
25
|
+
"shots_count" : 214,
|
26
|
+
"teams_count" : 1,
|
27
|
+
"type" : "User",
|
28
|
+
"pro" : true,
|
29
|
+
"buckets_url" : "https://dribbble.com/v1/users/1/buckets",
|
30
|
+
"followers_url" : "https://dribbble.com/v1/users/1/followers",
|
31
|
+
"following_url" : "https://dribbble.com/v1/users/1/following",
|
32
|
+
"likes_url" : "https://dribbble.com/v1/users/1/likes",
|
33
|
+
"shots_url" : "https://dribbble.com/v1/users/1/shots",
|
34
|
+
"teams_url" : "https://dribbble.com/v1/users/1/teams",
|
35
|
+
"created_at" : "2009-07-08T02:51:22Z",
|
36
|
+
"updated_at" : "2014-02-22T17:10:33Z"
|
37
|
+
}
|
38
|
+
}
|
@@ -0,0 +1,40 @@
|
|
1
|
+
[
|
2
|
+
{
|
3
|
+
"id" : 24400091,
|
4
|
+
"created_at" : "2014-01-06T17:19:59Z",
|
5
|
+
"user" : {
|
6
|
+
"id" : 1,
|
7
|
+
"name" : "Dan Cederholm",
|
8
|
+
"username" : "simplebits",
|
9
|
+
"html_url" : "https://dribbble.com/simplebits",
|
10
|
+
"avatar_url" : "https://d13yacurqjgara.cloudfront.net/users/1/avatars/normal/dc.jpg?1371679243",
|
11
|
+
"bio" : "Co-founder & designer of <a href=\"https://dribbble.com/dribbble\">@Dribbble</a>. Principal of SimpleBits. Aspiring clawhammer banjoist.",
|
12
|
+
"location" : "Salem, MA",
|
13
|
+
"links" : {
|
14
|
+
"web" : "http://simplebits.com",
|
15
|
+
"twitter" : "https://twitter.com/simplebits"
|
16
|
+
},
|
17
|
+
"buckets_count" : 10,
|
18
|
+
"comments_received_count" : 3395,
|
19
|
+
"followers_count" : 29262,
|
20
|
+
"followings_count" : 1728,
|
21
|
+
"likes_count" : 34954,
|
22
|
+
"likes_received_count" : 27568,
|
23
|
+
"projects_count" : 8,
|
24
|
+
"rebounds_received_count" : 504,
|
25
|
+
"shots_count" : 214,
|
26
|
+
"teams_count" : 1,
|
27
|
+
"can_upload_shot" : true,
|
28
|
+
"type" : "Player",
|
29
|
+
"pro" : true,
|
30
|
+
"buckets_url" : "https://dribbble.com/v1/users/1/buckets",
|
31
|
+
"followers_url" : "https://dribbble.com/v1/users/1/followers",
|
32
|
+
"following_url" : "https://dribbble.com/v1/users/1/following",
|
33
|
+
"likes_url" : "https://dribbble.com/v1/users/1/likes",
|
34
|
+
"shots_url" : "https://dribbble.com/v1/users/1/shots",
|
35
|
+
"teams_url" : "https://dribbble.com/v1/users/1/teams",
|
36
|
+
"created_at" : "2009-07-08T02:51:22Z",
|
37
|
+
"updated_at" : "2014-02-22T17:10:33Z"
|
38
|
+
}
|
39
|
+
}
|
40
|
+
]
|
@@ -0,0 +1,38 @@
|
|
1
|
+
{
|
2
|
+
"id" : 1145736,
|
3
|
+
"body" : "<p>Could he somehow make the shape of an \"S\" with his arms? I feel like i see potential for some hidden shapes in here...</p>\n\n<p>Looks fun!\n</p>",
|
4
|
+
"likes_count" : 1,
|
5
|
+
"likes_url" : "https://api.dribbble.com/v1/shots/471756/comments/1145736/likes",
|
6
|
+
"created_at" : "2012-03-15T04:24:39Z",
|
7
|
+
"updated_at" : "2012-03-15T04:24:39Z",
|
8
|
+
"user" : {
|
9
|
+
"id" : 1,
|
10
|
+
"name" : "Dan Cederholm",
|
11
|
+
"username" : "simplebits",
|
12
|
+
"html_url" : "https://dribbble.com/simplebits",
|
13
|
+
"avatar_url" : "https://d13yacurqjgara.cloudfront.net/users/1/avatars/normal/dc.jpg?1371679243",
|
14
|
+
"bio" : "Co-founder & designer of <a href=\"https://dribbble.com/dribbble\">@Dribbble</a>. Principal of SimpleBits. Aspiring clawhammer banjoist.",
|
15
|
+
"location" : "Salem, MA",
|
16
|
+
"links" : {
|
17
|
+
"web" : "http://simplebits.com",
|
18
|
+
"twitter" : "https://twitter.com/simplebits"
|
19
|
+
},
|
20
|
+
"buckets_count" : 10,
|
21
|
+
"followers_count" : 29262,
|
22
|
+
"followings_count" : 1728,
|
23
|
+
"likes_count" : 34954,
|
24
|
+
"projects_count" : 8,
|
25
|
+
"shots_count" : 214,
|
26
|
+
"teams_count" : 1,
|
27
|
+
"type" : "User",
|
28
|
+
"pro" : true,
|
29
|
+
"buckets_url" : "https://dribbble.com/v1/users/1/buckets",
|
30
|
+
"followers_url" : "https://dribbble.com/v1/users/1/followers",
|
31
|
+
"following_url" : "https://dribbble.com/v1/users/1/following",
|
32
|
+
"likes_url" : "https://dribbble.com/v1/users/1/likes",
|
33
|
+
"shots_url" : "https://dribbble.com/v1/users/1/shots",
|
34
|
+
"teams_url" : "https://dribbble.com/v1/users/1/teams",
|
35
|
+
"created_at" : "2009-07-08T02:51:22Z",
|
36
|
+
"updated_at" : "2014-02-22T17:10:33Z"
|
37
|
+
}
|
38
|
+
}
|
@@ -0,0 +1,38 @@
|
|
1
|
+
{
|
2
|
+
"id" : 1145736,
|
3
|
+
"body" : "New body",
|
4
|
+
"likes_count" : 1,
|
5
|
+
"likes_url" : "https://api.dribbble.com/v1/shots/471756/comments/1145736/likes",
|
6
|
+
"created_at" : "2012-03-15T04:24:39Z",
|
7
|
+
"updated_at" : "2012-03-15T04:24:39Z",
|
8
|
+
"user" : {
|
9
|
+
"id" : 1,
|
10
|
+
"name" : "Dan Cederholm",
|
11
|
+
"username" : "simplebits",
|
12
|
+
"html_url" : "https://dribbble.com/simplebits",
|
13
|
+
"avatar_url" : "https://d13yacurqjgara.cloudfront.net/users/1/avatars/normal/dc.jpg?1371679243",
|
14
|
+
"bio" : "Co-founder & designer of <a href=\"https://dribbble.com/dribbble\">@Dribbble</a>. Principal of SimpleBits. Aspiring clawhammer banjoist.",
|
15
|
+
"location" : "Salem, MA",
|
16
|
+
"links" : {
|
17
|
+
"web" : "http://simplebits.com",
|
18
|
+
"twitter" : "https://twitter.com/simplebits"
|
19
|
+
},
|
20
|
+
"buckets_count" : 10,
|
21
|
+
"followers_count" : 29262,
|
22
|
+
"followings_count" : 1728,
|
23
|
+
"likes_count" : 34954,
|
24
|
+
"projects_count" : 8,
|
25
|
+
"shots_count" : 214,
|
26
|
+
"teams_count" : 1,
|
27
|
+
"type" : "User",
|
28
|
+
"pro" : true,
|
29
|
+
"buckets_url" : "https://dribbble.com/v1/users/1/buckets",
|
30
|
+
"followers_url" : "https://dribbble.com/v1/users/1/followers",
|
31
|
+
"following_url" : "https://dribbble.com/v1/users/1/following",
|
32
|
+
"likes_url" : "https://dribbble.com/v1/users/1/likes",
|
33
|
+
"shots_url" : "https://dribbble.com/v1/users/1/shots",
|
34
|
+
"teams_url" : "https://dribbble.com/v1/users/1/teams",
|
35
|
+
"created_at" : "2009-07-08T02:51:22Z",
|
36
|
+
"updated_at" : "2014-02-22T17:10:33Z"
|
37
|
+
}
|
38
|
+
}
|
@@ -0,0 +1,26 @@
|
|
1
|
+
{
|
2
|
+
"id" : 39,
|
3
|
+
"name" : "Dribbble",
|
4
|
+
"username" : "dribbble",
|
5
|
+
"html_url" : "https://dribbble.com/dribbble",
|
6
|
+
"avatar_url" : "https://d13yacurqjgara.cloudfront.net/users/39/avatars/normal/apple-flat-precomposed.png?1388527574",
|
7
|
+
"bio" : "Show and tell for designers. This is Dribbble on Dribbble.",
|
8
|
+
"location" : "Salem, MA",
|
9
|
+
"links" : {
|
10
|
+
"web" : "http://dribbble.com",
|
11
|
+
"twitter" : "https://twitter.com/dribbble"
|
12
|
+
},
|
13
|
+
"followers_count" : 25011,
|
14
|
+
"followings_count" : 6120,
|
15
|
+
"likes_count" : 44,
|
16
|
+
"shots_count" : 91,
|
17
|
+
"type" : "Team",
|
18
|
+
"pro" : false,
|
19
|
+
"buckets_url" : "https://dribbble.com/v1/users/39/buckets",
|
20
|
+
"followers_url" : "https://dribbble.com/v1/users/39/followers",
|
21
|
+
"likes_url" : "https://dribbble.com/v1/users/39/likes",
|
22
|
+
"shots_url" : "https://dribbble.com/v1/users/39/shots",
|
23
|
+
"teams_url" : "https://dribbble.com/v1/users/39/teams",
|
24
|
+
"created_at" : "2009-08-18T18:34:31Z",
|
25
|
+
"updated_at" : "2014-02-14T22:32:11Z"
|
26
|
+
}
|
@@ -0,0 +1,27 @@
|
|
1
|
+
[
|
2
|
+
{
|
3
|
+
"id" : 483195,
|
4
|
+
"name" : "Charley D.",
|
5
|
+
"username" : "Calyhre",
|
6
|
+
"html_url" : "https://dribbble.com/Calyhre",
|
7
|
+
"avatar_url" : "https://d13yacurqjgara.cloudfront.net/users/483195/avatars/normal/493064787.png?1390292526",
|
8
|
+
"bio" : "",
|
9
|
+
"location" : null,
|
10
|
+
"links" : {},
|
11
|
+
"followers_count" : 1,
|
12
|
+
"followings_count" : 4,
|
13
|
+
"likes_count" : 4,
|
14
|
+
"shots_count" : 0,
|
15
|
+
"type" : "Player",
|
16
|
+
"pro" : false,
|
17
|
+
"buckets_url" : "https://api.dribbble.com/v1/users/483195/buckets",
|
18
|
+
"followers_url" : "https://api.dribbble.com/v1/users/483195/followers",
|
19
|
+
"following_url" : "https://api.dribbble.com/v1/users/483195/following",
|
20
|
+
"likes_url" : "https://api.dribbble.com/v1/users/483195/likes",
|
21
|
+
"projects_url" : "https://api.dribbble.com/v1/users/483195/projects",
|
22
|
+
"shots_url" : "https://api.dribbble.com/v1/users/483195/shots",
|
23
|
+
"teams_url" : "https://api.dribbble.com/v1/users/483195/teams",
|
24
|
+
"created_at" : "2014-01-21T08:22:06Z",
|
25
|
+
"updated_at" : "2014-09-29T19:39:00Z"
|
26
|
+
}
|
27
|
+
]
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dribbble
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.
|
4
|
+
version: 1.0.0.beta2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Calyhre
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-11-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
@@ -132,17 +132,23 @@ files:
|
|
132
132
|
- spec/lib/dribbble/base_spec.rb
|
133
133
|
- spec/lib/dribbble/bucket_spec.rb
|
134
134
|
- spec/lib/dribbble/client_spec.rb
|
135
|
+
- spec/lib/dribbble/comment_spec.rb
|
135
136
|
- spec/lib/dribbble/project_spec.rb
|
136
137
|
- spec/lib/dribbble/shot_spec.rb
|
138
|
+
- spec/lib/dribbble/team_spec.rb
|
137
139
|
- spec/lib/dribbble/user_spec.rb
|
138
140
|
- spec/spec_helper.rb
|
139
|
-
- spec/support/
|
141
|
+
- spec/support/dribbble_api.rb
|
140
142
|
- spec/support/fixtures/attachment_success.json
|
141
143
|
- spec/support/fixtures/attachments_success.json
|
142
144
|
- spec/support/fixtures/bucket_created.json
|
143
145
|
- spec/support/fixtures/bucket_success.json
|
144
146
|
- spec/support/fixtures/bucket_updated.json
|
145
147
|
- spec/support/fixtures/buckets_success.json
|
148
|
+
- spec/support/fixtures/comment_created.json
|
149
|
+
- spec/support/fixtures/comment_likes_success.json
|
150
|
+
- spec/support/fixtures/comment_success.json
|
151
|
+
- spec/support/fixtures/comment_updated.json
|
146
152
|
- spec/support/fixtures/comments_success.json
|
147
153
|
- spec/support/fixtures/current_user_success.json
|
148
154
|
- spec/support/fixtures/followers_success.json
|
@@ -155,10 +161,12 @@ files:
|
|
155
161
|
- spec/support/fixtures/shot_success.json
|
156
162
|
- spec/support/fixtures/shot_updated.json
|
157
163
|
- spec/support/fixtures/shots_success.json
|
164
|
+
- spec/support/fixtures/team_success.json
|
158
165
|
- spec/support/fixtures/teams_success.json
|
159
166
|
- spec/support/fixtures/unauthorized.json
|
160
167
|
- spec/support/fixtures/user_likes_success.json
|
161
168
|
- spec/support/fixtures/user_success.json
|
169
|
+
- spec/support/fixtures/users_success.json
|
162
170
|
homepage: http://github.com/Calyhre/dribbble
|
163
171
|
licenses:
|
164
172
|
- MIT
|
@@ -187,17 +195,23 @@ test_files:
|
|
187
195
|
- spec/lib/dribbble/base_spec.rb
|
188
196
|
- spec/lib/dribbble/bucket_spec.rb
|
189
197
|
- spec/lib/dribbble/client_spec.rb
|
198
|
+
- spec/lib/dribbble/comment_spec.rb
|
190
199
|
- spec/lib/dribbble/project_spec.rb
|
191
200
|
- spec/lib/dribbble/shot_spec.rb
|
201
|
+
- spec/lib/dribbble/team_spec.rb
|
192
202
|
- spec/lib/dribbble/user_spec.rb
|
193
203
|
- spec/spec_helper.rb
|
194
|
-
- spec/support/
|
204
|
+
- spec/support/dribbble_api.rb
|
195
205
|
- spec/support/fixtures/attachment_success.json
|
196
206
|
- spec/support/fixtures/attachments_success.json
|
197
207
|
- spec/support/fixtures/bucket_created.json
|
198
208
|
- spec/support/fixtures/bucket_success.json
|
199
209
|
- spec/support/fixtures/bucket_updated.json
|
200
210
|
- spec/support/fixtures/buckets_success.json
|
211
|
+
- spec/support/fixtures/comment_created.json
|
212
|
+
- spec/support/fixtures/comment_likes_success.json
|
213
|
+
- spec/support/fixtures/comment_success.json
|
214
|
+
- spec/support/fixtures/comment_updated.json
|
201
215
|
- spec/support/fixtures/comments_success.json
|
202
216
|
- spec/support/fixtures/current_user_success.json
|
203
217
|
- spec/support/fixtures/followers_success.json
|
@@ -210,7 +224,9 @@ test_files:
|
|
210
224
|
- spec/support/fixtures/shot_success.json
|
211
225
|
- spec/support/fixtures/shot_updated.json
|
212
226
|
- spec/support/fixtures/shots_success.json
|
227
|
+
- spec/support/fixtures/team_success.json
|
213
228
|
- spec/support/fixtures/teams_success.json
|
214
229
|
- spec/support/fixtures/unauthorized.json
|
215
230
|
- spec/support/fixtures/user_likes_success.json
|
216
231
|
- spec/support/fixtures/user_success.json
|
232
|
+
- spec/support/fixtures/users_success.json
|