behance 0.0.1 → 0.1.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.
- data/.gitignore +1 -0
- data/LICENSE.txt +2 -2
- data/README.md +82 -10
- data/behance.gemspec +5 -2
- data/lib/behance.rb +2 -5
- data/lib/behance/client.rb +58 -0
- data/lib/behance/project.rb +68 -0
- data/lib/behance/user.rb +111 -0
- data/lib/behance/version.rb +1 -1
- data/spec/behance/client_spec.rb +13 -0
- data/spec/behance/project_spec.rb +77 -0
- data/spec/behance/user_spec.rb +141 -0
- data/spec/fixtures/project.json +15 -0
- data/spec/fixtures/project_comments.json +282 -0
- data/spec/fixtures/projects.json +370 -0
- data/spec/fixtures/user.json +61 -0
- data/spec/fixtures/user_appreciations.json +230 -0
- data/spec/fixtures/user_projects.json +216 -0
- data/spec/fixtures/user_wips.json +55 -0
- data/spec/fixtures/users.json +112 -0
- data/spec/spec_helper.rb +23 -0
- metadata +78 -3
data/.gitignore
CHANGED
data/LICENSE.txt
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Copyright (c) 2012
|
1
|
+
Copyright (c) 2012-2013 Tractical
|
2
2
|
|
3
3
|
MIT License
|
4
4
|
|
@@ -19,4 +19,4 @@ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
19
19
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
20
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
21
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
CHANGED
@@ -1,24 +1,89 @@
|
|
1
|
-
# Behance
|
1
|
+
# The Behance Ruby Gem
|
2
2
|
|
3
|
-
|
3
|
+
A Ruby wrapper for the Behance API.
|
4
|
+
|
5
|
+
More information about the API capabilities can be found [here][api].
|
6
|
+
|
7
|
+
[api]: http://www.behance.net/devi
|
4
8
|
|
5
9
|
## Installation
|
6
10
|
|
7
|
-
|
11
|
+
$ gem install behance
|
8
12
|
|
9
|
-
|
13
|
+
## API Usage Examples
|
10
14
|
|
11
|
-
|
15
|
+
First of all, you will need to get an access token [here][register].
|
12
16
|
|
13
|
-
|
17
|
+
[register]: http://www.behance.net/dev/register
|
14
18
|
|
15
|
-
|
19
|
+
Once you get it, you'll be able to start playing
|
16
20
|
|
17
|
-
|
21
|
+
# initializing the client
|
22
|
+
$ client = Behance::Client.new(access_token: "access-token")
|
23
|
+
|
24
|
+
### Projects
|
25
|
+
|
26
|
+
[Search for projects][projects]
|
27
|
+
|
28
|
+
[projects]: http://www.behance.net/dev/api/endpoints/1#projects-get-10
|
29
|
+
|
30
|
+
$ client.projects
|
31
|
+
$ client.projects(city: "San Francisco", state: "California", field: "branding")
|
32
|
+
|
33
|
+
[Get the information and content of a project][project]
|
34
|
+
|
35
|
+
[project]: http://www.behance.net/dev/api/endpoints/1#projects-get-4
|
36
|
+
|
37
|
+
$ client.project(5133725)
|
38
|
+
|
39
|
+
[Get the comments for a project][project_comments]
|
40
|
+
|
41
|
+
[project_comments]: http://www.behance.net/dev/api/endpoints/1#projects-get-5
|
42
|
+
|
43
|
+
$ client.project_comments(5133725)
|
44
|
+
|
45
|
+
### Users
|
46
|
+
|
47
|
+
[Search for users][users]
|
48
|
+
|
49
|
+
[users]: http://www.behance.net/dev/api/endpoints/2#users-get-9
|
18
50
|
|
19
|
-
|
51
|
+
$ client.users
|
52
|
+
$ client.users(state: "California", city: "San Francisco")
|
20
53
|
|
21
|
-
|
54
|
+
[Get basic information about an user][user]
|
55
|
+
|
56
|
+
[user]: http://www.behance.net/dev/api/endpoints/2#users-get-1
|
57
|
+
|
58
|
+
$ client.user(920309)
|
59
|
+
$ client.user("foo")
|
60
|
+
|
61
|
+
[Get the projects published by an user][user_projects]
|
62
|
+
|
63
|
+
[user_projects]: http://www.behance.net/dev/api/endpoints/2#users-get-2
|
64
|
+
|
65
|
+
$ client.user_projects(920309)
|
66
|
+
$ client.user_projects("jonkap1")
|
67
|
+
$ client.user_projects("jonkap1", page: 2, sort: "views")
|
68
|
+
|
69
|
+
[Get the works-in-progress published by an user][user_wips]
|
70
|
+
|
71
|
+
[user_wips]: http://www.behance.net/dev/api/endpoints/2#users-get-3
|
72
|
+
|
73
|
+
$ client.user_wips(920309)
|
74
|
+
$ client.user_wips(920309, page: 2)
|
75
|
+
$ client.user_wips("jonkap1", sort: "comments", page: 3)
|
76
|
+
|
77
|
+
[Get a list of user's recently appreciated projects][user_appreciations]
|
78
|
+
|
79
|
+
[user_appreciations]: http://www.behance.net/dev/api/endpoints/2#users-get-13
|
80
|
+
|
81
|
+
$ client.user_appreciations(920309)
|
82
|
+
$ client.user_appreciations("jonkap1")
|
83
|
+
|
84
|
+
### Works in Progress
|
85
|
+
|
86
|
+
**This is an actual work in progress ;-)**
|
22
87
|
|
23
88
|
## Contributing
|
24
89
|
|
@@ -27,3 +92,10 @@ TODO: Write usage instructions here
|
|
27
92
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
93
|
4. Push to the branch (`git push origin my-new-feature`)
|
29
94
|
5. Create new Pull Request
|
95
|
+
|
96
|
+
## Copyright
|
97
|
+
|
98
|
+
Copyright (c) 2012-2013 Tractical.
|
99
|
+
See [LICENSE][license] for details.
|
100
|
+
|
101
|
+
[license]: https://github.com/tractical/behance/blob/master/LICENSE.txt
|
data/behance.gemspec
CHANGED
@@ -17,6 +17,9 @@ Gem::Specification.new do |gem|
|
|
17
17
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
18
|
gem.require_paths = ["lib"]
|
19
19
|
|
20
|
-
gem.
|
21
|
-
gem.
|
20
|
+
gem.add_runtime_dependency 'faraday', '~> 0.8.4'
|
21
|
+
gem.add_runtime_dependency 'faraday_middleware', '~> 0.8'
|
22
|
+
gem.add_runtime_dependency 'json', '1.7.5'
|
23
|
+
gem.add_development_dependency 'webmock', '~> 1.8.10'
|
24
|
+
gem.add_development_dependency 'rspec', '~> 2.6'
|
22
25
|
end
|
data/lib/behance.rb
CHANGED
@@ -0,0 +1,58 @@
|
|
1
|
+
require File.expand_path('../project', __FILE__)
|
2
|
+
require File.expand_path('../user', __FILE__)
|
3
|
+
require 'faraday'
|
4
|
+
require 'faraday_middleware'
|
5
|
+
|
6
|
+
# Public: Methods handled by the Client connection.
|
7
|
+
module Behance
|
8
|
+
|
9
|
+
class Client
|
10
|
+
|
11
|
+
API_URL = "http://www.behance.net/v2/"
|
12
|
+
|
13
|
+
include Behance::Client::Project
|
14
|
+
include Behance::Client::User
|
15
|
+
|
16
|
+
attr_accessor :access_token, :connection
|
17
|
+
|
18
|
+
# Public: Initialize a client for API requests.
|
19
|
+
#
|
20
|
+
# options - The Hash with options required by Behance:
|
21
|
+
# :access_token - Behance API token.
|
22
|
+
#
|
23
|
+
# Examples
|
24
|
+
#
|
25
|
+
# @client = Behance::Client.new(access_token: "aKlie12MCJa5")
|
26
|
+
#
|
27
|
+
# Returns a Faraday instance object.
|
28
|
+
def initialize(options={})
|
29
|
+
@access_token = options[:access_token]
|
30
|
+
@connection = Faraday.new(:url => Behance::Client::API_URL) do |b|
|
31
|
+
b.adapter Faraday.default_adapter
|
32
|
+
b.use FaradayMiddleware::ParseJson
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# Public: Makes a http request to the API.
|
37
|
+
#
|
38
|
+
# path - A String that represents the endpoint path.
|
39
|
+
# options - Hash of parameters to pass along.
|
40
|
+
#
|
41
|
+
# Examples
|
42
|
+
#
|
43
|
+
# request("users/1")
|
44
|
+
# request("projects", page: 2)
|
45
|
+
#
|
46
|
+
# Returns a response body from the API.
|
47
|
+
def request(path, options={})
|
48
|
+
response = @connection.get do |req|
|
49
|
+
req.url path
|
50
|
+
req.params[:api_key] = @access_token
|
51
|
+
options.each do |key, val|
|
52
|
+
req.params[key] = val
|
53
|
+
end
|
54
|
+
end
|
55
|
+
response.body
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
# Projects Endpoints.
|
2
|
+
module Behance
|
3
|
+
class Client
|
4
|
+
module Project
|
5
|
+
# Public: Search for projects.
|
6
|
+
#
|
7
|
+
# options - The Hash of options that the API would expect:
|
8
|
+
# :q - Free text query string.
|
9
|
+
# :sort - The order the results are returned in.
|
10
|
+
# Possible values: featured_date (default), apprecia-
|
11
|
+
# tions, views, comments,
|
12
|
+
# published_date.
|
13
|
+
# :time - Limits the search by time.
|
14
|
+
# Possible values: all (default), today, week, month.
|
15
|
+
# :field - Limits the search by creative field.
|
16
|
+
# Accepts a URL-encoded field name from the list of
|
17
|
+
# defined creative fields.
|
18
|
+
# :country - Limits the search by a 2-letter FIPS country code.
|
19
|
+
# :state - Limits the search by state or province name.
|
20
|
+
# :city - Limits the search by city name.
|
21
|
+
# :page - The page number of the results, always starting
|
22
|
+
# with 1.
|
23
|
+
# :tags - Limits the search by tags.
|
24
|
+
# Accepts one tag name or a pipe-separated list of
|
25
|
+
# tag names.
|
26
|
+
#
|
27
|
+
# Examples
|
28
|
+
#
|
29
|
+
# @client.projects
|
30
|
+
# @client.projects(q: "Freelance", state: "CA", field: "Branding")
|
31
|
+
#
|
32
|
+
# Returns an array of projects in JSON format.
|
33
|
+
def projects(options={})
|
34
|
+
request("projects", options)["projects"]
|
35
|
+
end
|
36
|
+
|
37
|
+
# Public: Get the information and content of a project.
|
38
|
+
#
|
39
|
+
# project_id - the ID (Integer) of the project.
|
40
|
+
#
|
41
|
+
# Examples
|
42
|
+
#
|
43
|
+
# @client.project(1123)
|
44
|
+
#
|
45
|
+
# Returns a single project in JSON format.
|
46
|
+
def project(project_id)
|
47
|
+
request("projects/#{project_id}")["project"]
|
48
|
+
end
|
49
|
+
|
50
|
+
# Public: Get the comments for a project
|
51
|
+
#
|
52
|
+
# project_id - The ID (Integer) of the project.
|
53
|
+
# options - The Hash of options that the API would expect:
|
54
|
+
# :page - The page number of the results, always
|
55
|
+
# starting with 1.
|
56
|
+
#
|
57
|
+
# Examples
|
58
|
+
#
|
59
|
+
# @client.project_comments(1)
|
60
|
+
# @client.project_comments(1, page: 1)
|
61
|
+
#
|
62
|
+
# Returns an array of project comments in JSON format.
|
63
|
+
def project_comments(project_id, options={})
|
64
|
+
request("projects/#{project_id}/comments", options)["comments"]
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
data/lib/behance/user.rb
ADDED
@@ -0,0 +1,111 @@
|
|
1
|
+
# Users Endpoints.
|
2
|
+
module Behance
|
3
|
+
class Client
|
4
|
+
module User
|
5
|
+
# Public: Search for users.
|
6
|
+
#
|
7
|
+
# options - The Hash of options that the API would expect:
|
8
|
+
# :q - Free text query string.
|
9
|
+
# :field - Limits the search by creative field.
|
10
|
+
# Accepts a URL-encoded field name from the list of
|
11
|
+
# defined creative fields.
|
12
|
+
# :country - Limits the search by a 2-letter FIPS country code.
|
13
|
+
# :state - Limits the search by state or province name.
|
14
|
+
# :city - Limits the search by city name.
|
15
|
+
# :page - The page number of the results, always starting
|
16
|
+
# with 1.
|
17
|
+
# :sort - The order the results are returned in.
|
18
|
+
# Possible values: featured_date (default), apprecia-
|
19
|
+
# tions, views, comments,
|
20
|
+
# published_date, followed.
|
21
|
+
# :tags - Limits the search by tags.
|
22
|
+
# Accepts one tag name or a pipe-separated list of
|
23
|
+
# tag names.
|
24
|
+
#
|
25
|
+
# Examples
|
26
|
+
#
|
27
|
+
# @client.users
|
28
|
+
# @client.users(q: "Juan", state: "California", :tags "freelance")
|
29
|
+
#
|
30
|
+
# Returns an array of users in JSON format.
|
31
|
+
def users(options={})
|
32
|
+
request("users", options)["users"]
|
33
|
+
end
|
34
|
+
|
35
|
+
# Public: Get basic information about a user.
|
36
|
+
#
|
37
|
+
# user - can be an ID (Integer) or username (String).
|
38
|
+
#
|
39
|
+
# Examples
|
40
|
+
#
|
41
|
+
# @client.user(1)
|
42
|
+
# @client.user("foo")
|
43
|
+
#
|
44
|
+
# Returns a single user object.
|
45
|
+
def user(user)
|
46
|
+
request("users/#{user}")["user"]
|
47
|
+
end
|
48
|
+
|
49
|
+
# Public: Get the projects published by an user.
|
50
|
+
#
|
51
|
+
# user - Can be an ID (Integer) or username (String)
|
52
|
+
# options - The Hash of options that the API would expect:
|
53
|
+
# :sort - The order the results are returned in.
|
54
|
+
# Possible values: featured_date (default), apprecia-
|
55
|
+
# tions, views, comments, published_date.
|
56
|
+
# :time - Limits the search by time.
|
57
|
+
# Possible values: all (default), today, week, month.
|
58
|
+
# :page - The page number of the results, always starting
|
59
|
+
# with 1.
|
60
|
+
#
|
61
|
+
# Examples
|
62
|
+
#
|
63
|
+
# @client.user_projects(1)
|
64
|
+
# @client.user_projects("foo")
|
65
|
+
# @client.user_projects("foo", page: 2, sort: "views")
|
66
|
+
#
|
67
|
+
# Returns an array of projects published an user in JSON format.
|
68
|
+
def user_projects(user, options={})
|
69
|
+
request("users/#{user}/projects", options)["projects"]
|
70
|
+
end
|
71
|
+
|
72
|
+
# Public: Get the works-in-progress published by a user.
|
73
|
+
#
|
74
|
+
# user - can be an ID (Integer) or username (String).
|
75
|
+
# options - The Hash of options that the API would expect:
|
76
|
+
# :sort - The order the results are returned in.
|
77
|
+
# Possible values: featured_date (default), apprecia-
|
78
|
+
# tions, views, comments, published_date.
|
79
|
+
# :time - Limits the search by time. Possible values: all
|
80
|
+
# (default), today, week, month.
|
81
|
+
# :page - The page number of the results, always starting
|
82
|
+
# with 1.
|
83
|
+
#
|
84
|
+
# Examples
|
85
|
+
#
|
86
|
+
# @client.user_wips(1)
|
87
|
+
# @client.user_wips(1, page: 2)
|
88
|
+
# @client.user_wips("foo", sort: "comments", page: 3)
|
89
|
+
#
|
90
|
+
# Returns an array of work-in-progress of an user in JSON format.
|
91
|
+
def user_wips(user, options={})
|
92
|
+
request("users/#{user}/wips", options)["wips"]
|
93
|
+
end
|
94
|
+
|
95
|
+
# Public: Get a list of user's recently appreciated projects.
|
96
|
+
#
|
97
|
+
# user - can be an ID (Integer) or username (String).
|
98
|
+
#
|
99
|
+
# Examples
|
100
|
+
#
|
101
|
+
# @client.user_appreciations(1)
|
102
|
+
# @client.user_appreciations("foo")
|
103
|
+
#
|
104
|
+
# Returns an array of user's recently appreciated projects in JSON
|
105
|
+
# format.
|
106
|
+
def user_appreciations(user)
|
107
|
+
request("users/#{user}/appreciations")["appreciations"]
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
data/lib/behance/version.rb
CHANGED
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Behance::Client::Project do
|
4
|
+
|
5
|
+
before(:all) do
|
6
|
+
@client = Behance::Client.new(:access_token => "abc123")
|
7
|
+
end
|
8
|
+
|
9
|
+
before do
|
10
|
+
@options = { api_key: @client.access_token }
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "#projects" do
|
14
|
+
context "without parameters" do
|
15
|
+
before do
|
16
|
+
stub_get("projects").with(query: @options).
|
17
|
+
to_return(body: fixture("projects.json"))
|
18
|
+
@projects = @client.projects
|
19
|
+
end
|
20
|
+
|
21
|
+
it "makes a http request" do
|
22
|
+
a_get("projects").
|
23
|
+
with(query: @options).should have_been_made
|
24
|
+
end
|
25
|
+
|
26
|
+
it "gets a list of projects" do
|
27
|
+
@projects.size.should == 7
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context "with parameters" do
|
32
|
+
before do
|
33
|
+
@options.merge!(q: "yolo", page: 2)
|
34
|
+
stub_get("projects").with(query: @options).
|
35
|
+
to_return(body: fixture("projects.json"))
|
36
|
+
end
|
37
|
+
|
38
|
+
it "gets a list of projects" do
|
39
|
+
@client.projects(@options).size.should == 7
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "#project" do
|
45
|
+
before do
|
46
|
+
stub_get("projects/4889175").with(query: @options).
|
47
|
+
to_return(body: fixture("project.json"))
|
48
|
+
@project = @client.project(4889175)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "makes a http request" do
|
52
|
+
a_get("projects/4889175").
|
53
|
+
with(query: @options).should have_been_made
|
54
|
+
end
|
55
|
+
|
56
|
+
it "gets a single project" do
|
57
|
+
@project["id"].should == 4889175
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe "#project_comments" do
|
62
|
+
before do
|
63
|
+
stub_get("projects/1/comments").with(query: @options).
|
64
|
+
to_return(body: fixture("project_comments.json"))
|
65
|
+
@comments = @client.project_comments(1)
|
66
|
+
end
|
67
|
+
|
68
|
+
it "makes a http request" do
|
69
|
+
a_get("projects/1/comments").
|
70
|
+
with(query: @options).should have_been_made
|
71
|
+
end
|
72
|
+
|
73
|
+
it "gets a list of comments" do
|
74
|
+
@comments.size.should == 9
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|