dribbble 0.0.4 → 1.0.0.beta1
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 +7 -1
- data/Guardfile +0 -5
- data/dribbble.gemspec +0 -3
- data/lib/dribbble/attachment.rb +7 -0
- data/lib/dribbble/base.rb +64 -5
- data/lib/dribbble/bucket.rb +31 -0
- data/lib/dribbble/client.rb +0 -7
- data/lib/dribbble/comment.rb +4 -0
- data/lib/dribbble/like.rb +7 -0
- data/lib/dribbble/project.rb +11 -0
- data/lib/dribbble/shot.rb +62 -0
- data/lib/dribbble/team.rb +4 -0
- data/lib/dribbble/user.rb +47 -6
- data/lib/dribbble/utils/creatable.rb +33 -0
- data/lib/dribbble/utils/deletable.rb +21 -0
- data/lib/dribbble/utils/findable.rb +17 -0
- data/lib/dribbble/utils/has_children.rb +33 -0
- data/lib/dribbble/utils/updatable.rb +24 -0
- data/lib/dribbble/utils.rb +38 -7
- data/lib/dribbble/version.rb +1 -1
- data/spec/lib/dribbble/base_spec.rb +161 -4
- data/spec/lib/dribbble/bucket_spec.rb +136 -0
- data/spec/lib/dribbble/client_spec.rb +2 -23
- data/spec/lib/dribbble/project_spec.rb +45 -0
- data/spec/lib/dribbble/shot_spec.rb +254 -0
- data/spec/lib/dribbble/user_spec.rb +173 -23
- data/spec/spec_helper.rb +14 -17
- data/spec/support/dribbble.rb +159 -20
- data/spec/support/fixtures/attachment_success.json +9 -0
- data/spec/support/fixtures/attachments_success.json +11 -0
- data/spec/support/fixtures/bucket_created.json +8 -0
- data/spec/support/fixtures/bucket_success.json +8 -0
- data/spec/support/fixtures/bucket_updated.json +8 -0
- data/spec/support/fixtures/comments_success.json +37 -0
- data/spec/support/fixtures/current_user_success.json +25 -0
- data/spec/support/fixtures/followers_success.json +33 -0
- data/spec/support/fixtures/following_success.json +33 -0
- data/spec/support/fixtures/project_success.json +8 -0
- data/spec/support/fixtures/projects_success.json +10 -0
- data/spec/support/fixtures/shot_likes_success.json +33 -0
- data/spec/support/fixtures/shot_success.json +85 -0
- data/spec/support/fixtures/shot_updated.json +85 -0
- data/spec/support/fixtures/teams_success.json +28 -0
- data/spec/support/fixtures/user_likes_success.json +91 -0
- metadata +52 -48
- data/spec/factories.rb +0 -2
@@ -3,39 +3,189 @@ require 'spec_helper'
|
|
3
3
|
RAW_USER = data_from_json 'user_success.json'
|
4
4
|
|
5
5
|
describe Dribbble::User do
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
describe 'on instance' do
|
7
|
+
before :all do
|
8
|
+
@user = Dribbble::User.new 'valid_token', RAW_USER
|
9
|
+
end
|
9
10
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
11
|
+
describe 'after initialization' do
|
12
|
+
RAW_USER.each do |field, value|
|
13
|
+
it "respond to #{field}" do
|
14
|
+
expect(@user.send field).to eq(value)
|
15
|
+
end
|
14
16
|
end
|
15
17
|
end
|
16
|
-
end
|
17
18
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
describe 'on #buckets' do
|
20
|
+
subject do
|
21
|
+
stub_dribbble :get, '/users/483195/buckets', DribbbleAPI::BucketsSuccess
|
22
|
+
@user.buckets
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'responds with buckets' do
|
26
|
+
expect(subject.size).to eq 1
|
27
|
+
expect(subject.first).to be_a Dribbble::Bucket
|
28
|
+
end
|
22
29
|
end
|
23
30
|
|
24
|
-
|
25
|
-
|
26
|
-
|
31
|
+
describe '#followers' do
|
32
|
+
subject do
|
33
|
+
stub_dribbble :get, '/users/483195/followers', DribbbleAPI::FollowersSuccess
|
34
|
+
@user.followers
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'responds with users' do
|
38
|
+
expect(subject.size).to eq 1
|
39
|
+
expect(subject.first).to be_a Dribbble::User
|
40
|
+
end
|
27
41
|
end
|
28
|
-
end
|
29
42
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
43
|
+
describe '#following' do
|
44
|
+
subject do
|
45
|
+
stub_dribbble :get, '/users/483195/following', DribbbleAPI::FollowingSuccess
|
46
|
+
@user.following
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'responds with users' do
|
50
|
+
expect(subject.size).to eq 1
|
51
|
+
expect(subject.first).to be_a Dribbble::User
|
52
|
+
expect(subject.first.name).to eq('Dan Cederholm')
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe 'on #following?' do
|
57
|
+
describe 'for current logged user' do
|
58
|
+
describe 'on a not followed user' do
|
59
|
+
subject do
|
60
|
+
stub_dribbble :get, '/user/following/483195', DribbbleAPI::UserFollowNotFound
|
61
|
+
@user.following?
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'return false' do
|
65
|
+
expect(subject).to be_falsy
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe 'on a followed user' do
|
70
|
+
subject do
|
71
|
+
stub_dribbble :get, '/user/following/483195', DribbbleAPI::UserFollowSuccess
|
72
|
+
@user.following?
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'return true' do
|
76
|
+
expect(subject).to be_truthy
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
describe 'for another user' do
|
82
|
+
describe 'on a not followed user' do
|
83
|
+
subject do
|
84
|
+
stub_dribbble :get, '/users/483195/following/1', DribbbleAPI::UserFollowNotFound
|
85
|
+
@user.following? 1
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'return false' do
|
89
|
+
expect(subject).to be_falsy
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
describe 'on a followed user' do
|
94
|
+
subject do
|
95
|
+
stub_dribbble :get, '/users/483195/following/1', DribbbleAPI::UserFollowSuccess
|
96
|
+
@user.following? 1
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'return true' do
|
100
|
+
expect(subject).to be_truthy
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
describe 'on #follow!' do
|
107
|
+
subject do
|
108
|
+
stub_dribbble :put, '/users/483195/follow', DribbbleAPI::UserFollowCreated
|
109
|
+
@user.follow!
|
110
|
+
end
|
111
|
+
|
112
|
+
it 'return true' do
|
113
|
+
expect(subject).to be_truthy
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
describe 'on #unfollow!' do
|
118
|
+
subject do
|
119
|
+
stub_dribbble :delete, '/users/483195/follow', DribbbleAPI::UserFollowDeleted
|
120
|
+
@user.unfollow!
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'return true' do
|
124
|
+
expect(subject).to be_truthy
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
describe '#likes' do
|
129
|
+
subject do
|
130
|
+
stub_dribbble :get, '/users/483195/likes', DribbbleAPI::UserLikesSuccess
|
131
|
+
@user.likes
|
132
|
+
end
|
133
|
+
|
134
|
+
it 'responds with shots' do
|
135
|
+
expect(subject.size).to eq 1
|
136
|
+
expect(subject.first).to be_a Dribbble::Shot
|
137
|
+
expect(subject.first.title).to eq('Sasquatch')
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
describe '#projects' do
|
142
|
+
subject do
|
143
|
+
stub_dribbble :get, '/users/483195/projects', DribbbleAPI::ProjectsSuccess
|
144
|
+
@user.projects
|
145
|
+
end
|
146
|
+
|
147
|
+
it 'responds with projects' do
|
148
|
+
expect(subject.size).to eq 1
|
149
|
+
expect(subject.first).to be_a Dribbble::Project
|
150
|
+
end
|
34
151
|
end
|
35
152
|
|
36
|
-
|
37
|
-
|
38
|
-
|
153
|
+
describe '#shots' do
|
154
|
+
subject do
|
155
|
+
stub_dribbble :get, '/users/483195/shots', DribbbleAPI::ShotsSuccess
|
156
|
+
@user.shots
|
157
|
+
end
|
158
|
+
|
159
|
+
it 'responds with buckets' do
|
160
|
+
expect(subject.size).to eq 2
|
161
|
+
expect(subject.first).to be_a Dribbble::Shot
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
describe '#teams' do
|
166
|
+
subject do
|
167
|
+
stub_dribbble :get, '/users/483195/teams', DribbbleAPI::TeamsSuccess
|
168
|
+
@user.teams
|
169
|
+
end
|
170
|
+
|
171
|
+
it 'responds with teams' do
|
172
|
+
expect(subject.size).to eq 1
|
173
|
+
expect(subject.first).to be_a Dribbble::Team
|
174
|
+
end
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
describe 'on class' do
|
179
|
+
describe 'on #find' do
|
180
|
+
subject do
|
181
|
+
stub_dribbble :get, '/users/483195', DribbbleAPI::UserSuccess
|
182
|
+
Dribbble::User.find 'valid_token', 483_195
|
183
|
+
end
|
184
|
+
|
185
|
+
it 'return a user' do
|
186
|
+
expect(subject).to be_a Dribbble::User
|
187
|
+
expect(subject.id).to eq(483_195)
|
188
|
+
end
|
39
189
|
end
|
40
190
|
end
|
41
191
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,25 +1,22 @@
|
|
1
|
-
require '
|
1
|
+
require 'dribbble'
|
2
|
+
require 'webmock/rspec'
|
2
3
|
|
3
|
-
|
4
|
-
require 'dribbble'
|
5
|
-
require 'webmock/rspec'
|
6
|
-
require 'faker'
|
7
|
-
require 'factory_girl'
|
4
|
+
Dir[File.dirname(__FILE__) + '/support/**/*.rb'].each { |f| require f }
|
8
5
|
|
9
|
-
|
6
|
+
# WebMock.disable_net_connect! allow_localhost: true, allow: 'codeclimate.com'
|
10
7
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
stub_request(:any, /api\.dribbble\.com/).to_rack(response_class)
|
15
|
-
end
|
16
|
-
|
17
|
-
def data_from_json(json_name)
|
18
|
-
JSON.parse File.open(File.dirname(__FILE__) + "/support/fixtures/#{json_name}", 'rb').read
|
8
|
+
RSpec.configure do |config|
|
9
|
+
config.before :all do
|
10
|
+
WebMock.reset!
|
19
11
|
end
|
20
12
|
end
|
21
13
|
|
22
|
-
|
23
|
-
|
14
|
+
def stub_dribbble(method, path, response_class)
|
15
|
+
url = /api.dribbble.com\/v1#{Regexp.escape path}(\?.*)?$/
|
16
|
+
stub_request(method, url).to_rack(response_class)
|
17
|
+
end
|
24
18
|
|
19
|
+
def data_from_json(json_name)
|
20
|
+
file_name = "#{File.dirname(__FILE__)}/support/fixtures/#{json_name}"
|
21
|
+
JSON.parse File.open(file_name, 'rb').read
|
25
22
|
end
|
data/spec/support/dribbble.rb
CHANGED
@@ -1,50 +1,189 @@
|
|
1
1
|
require 'sinatra/base'
|
2
2
|
|
3
|
+
class String
|
4
|
+
def underscore
|
5
|
+
self.gsub(/::/, '/').
|
6
|
+
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
7
|
+
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
8
|
+
tr("-", "_").
|
9
|
+
downcase
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
3
13
|
module DribbbleAPI
|
4
14
|
class Base < Sinatra::Base
|
15
|
+
get '/*' do
|
16
|
+
json_response
|
17
|
+
end
|
18
|
+
|
19
|
+
post '/*' do
|
20
|
+
json_response
|
21
|
+
end
|
22
|
+
|
23
|
+
put '/*' do
|
24
|
+
json_response
|
25
|
+
end
|
26
|
+
|
27
|
+
delete '/*' do
|
28
|
+
json_response
|
29
|
+
end
|
30
|
+
|
5
31
|
protected
|
6
32
|
|
7
|
-
def
|
33
|
+
def json_file_name
|
34
|
+
@json_file_name ||= self.class.name.split('::').last.underscore
|
35
|
+
end
|
36
|
+
|
37
|
+
def json_response
|
8
38
|
content_type :json
|
9
|
-
status
|
10
|
-
|
39
|
+
status status_code
|
40
|
+
headers response_headers
|
41
|
+
file_name = "#{File.dirname(__FILE__)}/fixtures/#{json_file_name}.json"
|
42
|
+
|
43
|
+
return {}.to_json unless File.exist? file_name
|
44
|
+
|
45
|
+
File.open(file_name, 'rb')
|
46
|
+
end
|
47
|
+
|
48
|
+
def response_headers
|
49
|
+
{}
|
11
50
|
end
|
12
51
|
end
|
13
52
|
|
14
|
-
class
|
15
|
-
|
16
|
-
|
53
|
+
class Found < Base
|
54
|
+
def status_code
|
55
|
+
200
|
17
56
|
end
|
18
57
|
end
|
19
58
|
|
20
|
-
class
|
21
|
-
|
22
|
-
|
59
|
+
class Updated < Found
|
60
|
+
end
|
61
|
+
|
62
|
+
class Created < Base
|
63
|
+
def status_code
|
64
|
+
201
|
23
65
|
end
|
24
66
|
end
|
25
67
|
|
26
|
-
class
|
27
|
-
|
28
|
-
|
68
|
+
class Accepted < Base
|
69
|
+
def status_code
|
70
|
+
202
|
29
71
|
end
|
30
72
|
end
|
31
73
|
|
32
|
-
class
|
33
|
-
|
34
|
-
|
35
|
-
{}.to_json
|
74
|
+
class Deleted < Base
|
75
|
+
def status_code
|
76
|
+
204
|
36
77
|
end
|
37
78
|
end
|
38
79
|
|
80
|
+
class NoContent < Deleted
|
81
|
+
end
|
82
|
+
|
39
83
|
class NotFound < Base
|
40
|
-
|
41
|
-
|
84
|
+
def status_code
|
85
|
+
404
|
42
86
|
end
|
43
87
|
end
|
44
88
|
|
45
89
|
class Unauthorized < Base
|
46
|
-
|
47
|
-
|
90
|
+
def status_code
|
91
|
+
401
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
class AttachmentsSuccess < Found
|
96
|
+
end
|
97
|
+
|
98
|
+
class AttachmentSuccess < Found
|
99
|
+
end
|
100
|
+
|
101
|
+
class CommentsSuccess < Found
|
102
|
+
end
|
103
|
+
|
104
|
+
class CurrentUserSuccess < Found
|
105
|
+
end
|
106
|
+
|
107
|
+
class BucketSuccess < Found
|
108
|
+
end
|
109
|
+
|
110
|
+
class BucketCreated < Created
|
111
|
+
end
|
112
|
+
|
113
|
+
class BucketUpdated < Updated
|
114
|
+
end
|
115
|
+
|
116
|
+
class BucketDeleted < Deleted
|
117
|
+
end
|
118
|
+
|
119
|
+
class BucketsSuccess < Found
|
120
|
+
end
|
121
|
+
|
122
|
+
class FollowersSuccess < Found
|
123
|
+
end
|
124
|
+
|
125
|
+
class FollowingSuccess < Found
|
126
|
+
end
|
127
|
+
|
128
|
+
class UserFollowSuccess < Found
|
129
|
+
end
|
130
|
+
|
131
|
+
class UserFollowNotFound < NotFound
|
132
|
+
end
|
133
|
+
|
134
|
+
class UserFollowCreated < NoContent
|
135
|
+
end
|
136
|
+
|
137
|
+
class UserFollowDeleted < Deleted
|
138
|
+
end
|
139
|
+
|
140
|
+
class UserLikesSuccess < Found
|
141
|
+
end
|
142
|
+
|
143
|
+
class ProjectSuccess < Found
|
144
|
+
end
|
145
|
+
|
146
|
+
class ProjectsSuccess < Found
|
147
|
+
end
|
148
|
+
|
149
|
+
class ShotUpdated < Updated
|
150
|
+
end
|
151
|
+
|
152
|
+
class ShotDeleted < Deleted
|
153
|
+
end
|
154
|
+
|
155
|
+
class ShotSuccess < Found
|
156
|
+
end
|
157
|
+
|
158
|
+
class ShotAccepted < Accepted
|
159
|
+
def response_headers
|
160
|
+
{
|
161
|
+
'Location' => 'https://api.dribbble.com/v1/shots/471756'
|
162
|
+
}
|
48
163
|
end
|
49
164
|
end
|
165
|
+
|
166
|
+
class ShotLikeSuccess < Found
|
167
|
+
end
|
168
|
+
|
169
|
+
class ShotLikeNotFound < NotFound
|
170
|
+
end
|
171
|
+
|
172
|
+
class ShotLikeCreated < Created
|
173
|
+
end
|
174
|
+
|
175
|
+
class ShotLikeDeleted < Deleted
|
176
|
+
end
|
177
|
+
|
178
|
+
class ShotLikesSuccess < Found
|
179
|
+
end
|
180
|
+
|
181
|
+
class ShotsSuccess < Found
|
182
|
+
end
|
183
|
+
|
184
|
+
class TeamsSuccess < Found
|
185
|
+
end
|
186
|
+
|
187
|
+
class UserSuccess < Found
|
188
|
+
end
|
50
189
|
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
{
|
2
|
+
"id" : 206165,
|
3
|
+
"url" : "https://d13yacurqjgara.cloudfront.net/users/1/screenshots/1412410/attachments/206165/weathered-ball-detail.jpg",
|
4
|
+
"thumbnail_url" : "https://d13yacurqjgara.cloudfront.net/users/1/screenshots/1412410/attachments/206165/thumbnail/weathered-ball-detail.jpg",
|
5
|
+
"size" : 116375,
|
6
|
+
"content_type" : "image/jpeg",
|
7
|
+
"views_count" : 325,
|
8
|
+
"created_at" : "2014-02-07T16:35:09Z"
|
9
|
+
}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
[
|
2
|
+
{
|
3
|
+
"id" : 206165,
|
4
|
+
"url" : "https://d13yacurqjgara.cloudfront.net/users/1/screenshots/1412410/attachments/206165/weathered-ball-detail.jpg",
|
5
|
+
"thumbnail_url" : "https://d13yacurqjgara.cloudfront.net/users/1/screenshots/1412410/attachments/206165/thumbnail/weathered-ball-detail.jpg",
|
6
|
+
"size" : 116375,
|
7
|
+
"content_type" : "image/jpeg",
|
8
|
+
"views_count" : 325,
|
9
|
+
"created_at" : "2014-02-07T16:35:09Z"
|
10
|
+
}
|
11
|
+
]
|
@@ -0,0 +1,37 @@
|
|
1
|
+
[
|
2
|
+
{
|
3
|
+
"id" : 1145736,
|
4
|
+
"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>",
|
5
|
+
"likes_count" : 1,
|
6
|
+
"likes_url" : "https://api.dribbble.com/v1/shots/471756/comments/1145736/likes",
|
7
|
+
"created_at" : "2012-03-15T04:24:39Z",
|
8
|
+
"updated_at" : "2012-03-15T04:24:39Z",
|
9
|
+
"user" : {
|
10
|
+
"id" : 1,
|
11
|
+
"name" : "Dan Cederholm",
|
12
|
+
"username" : "simplebits",
|
13
|
+
"html_url" : "https://dribbble.com/simplebits",
|
14
|
+
"avatar_url" : "https://d13yacurqjgara.cloudfront.net/users/1/avatars/normal/dc.jpg?1371679243",
|
15
|
+
"bio" : "Co-founder & designer of <a href=\"https://dribbble.com/dribbble\">@Dribbble</a>. Principal of SimpleBits. Aspiring clawhammer banjoist.",
|
16
|
+
"location" : "Salem, MA",
|
17
|
+
"links" : {
|
18
|
+
"web" : "http://simplebits.com",
|
19
|
+
"twitter" : "https://twitter.com/simplebits"
|
20
|
+
},
|
21
|
+
"followers_count" : 29262,
|
22
|
+
"followings_count" : 1728,
|
23
|
+
"likes_count" : 34954,
|
24
|
+
"shots_count" : 214,
|
25
|
+
"type" : "User",
|
26
|
+
"pro" : true,
|
27
|
+
"buckets_url" : "https://dribbble.com/v1/users/1/buckets",
|
28
|
+
"followers_url" : "https://dribbble.com/v1/users/1/followers",
|
29
|
+
"following_url" : "https://dribbble.com/v1/users/1/following",
|
30
|
+
"likes_url" : "https://dribbble.com/v1/users/1/likes",
|
31
|
+
"shots_url" : "https://dribbble.com/v1/users/1/shots",
|
32
|
+
"teams_url" : "https://dribbble.com/v1/users/1/teams",
|
33
|
+
"created_at" : "2009-07-08T02:51:22Z",
|
34
|
+
"updated_at" : "2014-02-22T17:10:33Z"
|
35
|
+
}
|
36
|
+
}
|
37
|
+
]
|
@@ -0,0 +1,25 @@
|
|
1
|
+
{
|
2
|
+
"id" : 8008135,
|
3
|
+
"name" : "Charley D.",
|
4
|
+
"username" : "Calyhre",
|
5
|
+
"html_url" : "https://dribbble.com/Calyhre",
|
6
|
+
"avatar_url" : "https://d13yacurqjgara.cloudfront.net/users/483195/avatars/normal/493064787.png?1390292526",
|
7
|
+
"bio" : "",
|
8
|
+
"location" : null,
|
9
|
+
"links" : {},
|
10
|
+
"followers_count" : 1,
|
11
|
+
"followings_count" : 4,
|
12
|
+
"likes_count" : 4,
|
13
|
+
"shots_count" : 0,
|
14
|
+
"type" : "Player",
|
15
|
+
"pro" : false,
|
16
|
+
"buckets_url" : "https://api.dribbble.com/v1/users/483195/buckets",
|
17
|
+
"followers_url" : "https://api.dribbble.com/v1/users/483195/followers",
|
18
|
+
"following_url" : "https://api.dribbble.com/v1/users/483195/following",
|
19
|
+
"likes_url" : "https://api.dribbble.com/v1/users/483195/likes",
|
20
|
+
"projects_url" : "https://api.dribbble.com/v1/users/483195/projects",
|
21
|
+
"shots_url" : "https://api.dribbble.com/v1/users/483195/shots",
|
22
|
+
"teams_url" : "https://api.dribbble.com/v1/users/483195/teams",
|
23
|
+
"created_at" : "2014-01-21T08:22:06Z",
|
24
|
+
"updated_at" : "2014-09-29T19:39:00Z"
|
25
|
+
}
|
@@ -0,0 +1,33 @@
|
|
1
|
+
[
|
2
|
+
{
|
3
|
+
"id" : 9843830,
|
4
|
+
"created_at" : "2014-02-21T15:41:14Z",
|
5
|
+
"follower" : {
|
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
|
+
"followers_count" : 29262,
|
18
|
+
"followings_count" : 1728,
|
19
|
+
"likes_count" : 34954,
|
20
|
+
"shots_count" : 214,
|
21
|
+
"type" : "User",
|
22
|
+
"pro" : true,
|
23
|
+
"buckets_url" : "https://dribbble.com/v1/users/1/buckets",
|
24
|
+
"followers_url" : "https://dribbble.com/v1/users/1/followers",
|
25
|
+
"following_url" : "https://dribbble.com/v1/users/1/following",
|
26
|
+
"likes_url" : "https://dribbble.com/v1/users/1/likes",
|
27
|
+
"shots_url" : "https://dribbble.com/v1/users/1/shots",
|
28
|
+
"teams_url" : "https://dribbble.com/v1/users/1/teams",
|
29
|
+
"created_at" : "2009-07-08T02:51:22Z",
|
30
|
+
"updated_at" : "2014-02-22T17:10:33Z"
|
31
|
+
}
|
32
|
+
}
|
33
|
+
]
|
@@ -0,0 +1,33 @@
|
|
1
|
+
[
|
2
|
+
{
|
3
|
+
"id" : 9843830,
|
4
|
+
"created_at" : "2014-02-21T15:41:14Z",
|
5
|
+
"followee" : {
|
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
|
+
"followers_count" : 29262,
|
18
|
+
"followings_count" : 1728,
|
19
|
+
"likes_count" : 34954,
|
20
|
+
"shots_count" : 214,
|
21
|
+
"type" : "User",
|
22
|
+
"pro" : true,
|
23
|
+
"buckets_url" : "https://dribbble.com/v1/users/1/buckets",
|
24
|
+
"followers_url" : "https://dribbble.com/v1/users/1/followers",
|
25
|
+
"following_url" : "https://dribbble.com/v1/users/1/following",
|
26
|
+
"likes_url" : "https://dribbble.com/v1/users/1/likes",
|
27
|
+
"shots_url" : "https://dribbble.com/v1/users/1/shots",
|
28
|
+
"teams_url" : "https://dribbble.com/v1/users/1/teams",
|
29
|
+
"created_at" : "2009-07-08T02:51:22Z",
|
30
|
+
"updated_at" : "2014-02-22T17:10:33Z"
|
31
|
+
}
|
32
|
+
}
|
33
|
+
]
|
@@ -0,0 +1,8 @@
|
|
1
|
+
{
|
2
|
+
"id" : 3,
|
3
|
+
"name" : "Web Standards Sherpa",
|
4
|
+
"description" : "I did visual design and art direction for this project, working with the <a href=\"http://webstandards.org\">Web Standards Project</a> and Microsoft.",
|
5
|
+
"shots_count" : 4,
|
6
|
+
"created_at" : "2011-04-14T03:43:47Z",
|
7
|
+
"updated_at" : "2012-04-04T22:39:53Z"
|
8
|
+
}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
[
|
2
|
+
{
|
3
|
+
"id" : 3,
|
4
|
+
"name" : "Web Standards Sherpa",
|
5
|
+
"description" : "I did visual design and art direction for this project, working with the <a href=\"http://webstandards.org\">Web Standards Project</a> and Microsoft.",
|
6
|
+
"shots_count" : 4,
|
7
|
+
"created_at" : "2011-04-14T03:43:47Z",
|
8
|
+
"updated_at" : "2012-04-04T22:39:53Z"
|
9
|
+
}
|
10
|
+
]
|