ruby-trello 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +26 -0
- data/lib/trello.rb +14 -0
- data/lib/trello/board.rb +54 -0
- data/lib/trello/card.rb +53 -0
- data/lib/trello/client.rb +42 -0
- data/lib/trello/member.rb +62 -0
- data/lib/trello/organization.rb +40 -0
- data/spec/board_spec.rb +52 -0
- data/spec/card_spec.rb +66 -0
- data/spec/client_spec.rb +30 -0
- data/spec/member_spec.rb +68 -0
- data/spec/organization_spec.rb +0 -0
- data/spec/spec_helper.rb +86 -0
- metadata +109 -0
data/README.md
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# Ruby Trello API
|
2
|
+
|
3
|
+
[![Build Status](https://secure.travis-ci.org/jeremytregunna/ruby-trello.png)](http://travis-ci.org/jeremytregunna/ruby-trello)
|
4
|
+
|
5
|
+
This library implements the [Trello](http://www.trello.com/) [API](http://trello.com/api).
|
6
|
+
|
7
|
+
Trello is an awesome tool for organization. Not just aimed at developers, but everybody.
|
8
|
+
Seriously, [check it out](http://www.trello.com/).
|
9
|
+
|
10
|
+
## Installation
|
11
|
+
|
12
|
+
Full disclosure: It doesn't presently work. I'm in the process of implementing
|
13
|
+
the specs and the functionality. But if you want to check it out, clone the
|
14
|
+
repo for now. I will produce a gem when it's at least minimally usable. When
|
15
|
+
that is the case, I'll post that information here.
|
16
|
+
|
17
|
+
## Contributing
|
18
|
+
|
19
|
+
Pick up an editor, fix a test! (If you want to, of course.) Send a pull
|
20
|
+
request, and I'll look at it. I only ask a few things:
|
21
|
+
|
22
|
+
1. Feature branches please!
|
23
|
+
2. Adding or refactoring existing features, ensure there are tests.
|
24
|
+
|
25
|
+
Also, don't be afraid to send a pull request if your changes aren't done. Just
|
26
|
+
let me know.
|
data/lib/trello.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
# Ruby wrapper around the Trello API
|
2
|
+
# Copyright (c) 2012, Jeremy Tregunna
|
3
|
+
# Use and distribution terms may be found in the file LICENSE included in this distribution.
|
4
|
+
|
5
|
+
require 'oauth'
|
6
|
+
require 'yajl'
|
7
|
+
|
8
|
+
module Trello
|
9
|
+
autoload :Board, 'trello/board'
|
10
|
+
autoload :Card, 'trello/card'
|
11
|
+
autoload :Client, 'trello/client'
|
12
|
+
autoload :Member, 'trello/member'
|
13
|
+
autoload :Organization, 'trello/organization'
|
14
|
+
end
|
data/lib/trello/board.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
# Ruby wrapper around the Trello API
|
2
|
+
# Copyright (c) 2012, Jeremy Tregunna
|
3
|
+
# Use and distribution terms may be found in the file LICENSE included in this distribution.
|
4
|
+
|
5
|
+
module Trello
|
6
|
+
class Board
|
7
|
+
class << self
|
8
|
+
def find(id)
|
9
|
+
response = Client.query("/1/boards/#{id}")
|
10
|
+
new(Yajl::Parser.parse(response.read_body))
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(fields = {})
|
15
|
+
@fields = fields
|
16
|
+
end
|
17
|
+
|
18
|
+
# Fields
|
19
|
+
|
20
|
+
def id
|
21
|
+
@fields['id']
|
22
|
+
end
|
23
|
+
|
24
|
+
def name
|
25
|
+
@fields['name']
|
26
|
+
end
|
27
|
+
|
28
|
+
def description
|
29
|
+
@fields['desc']
|
30
|
+
end
|
31
|
+
|
32
|
+
def closed
|
33
|
+
@fields['closed']
|
34
|
+
end
|
35
|
+
|
36
|
+
def url
|
37
|
+
@fields['url']
|
38
|
+
end
|
39
|
+
|
40
|
+
# Links to other data structures
|
41
|
+
|
42
|
+
def cards
|
43
|
+
response = Client.query("/1/boards/#{id}/cards/all")
|
44
|
+
all_cards = Yajl::Parser.parse(response.read_body)
|
45
|
+
all_cards.map do |card_fields|
|
46
|
+
Card.new(card_fields)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def organization
|
51
|
+
Organization.find(@fields['idOrganization'])
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/lib/trello/card.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
# Ruby wrapper around the Trello API
|
2
|
+
# Copyright (c) 2012, Jeremy Tregunna
|
3
|
+
# Use and distribution terms may be found in the file LICENSE included in this distribution.
|
4
|
+
|
5
|
+
module Trello
|
6
|
+
class Card
|
7
|
+
class << self
|
8
|
+
def find(id)
|
9
|
+
response = Client.query("/1/cards/#{id}")
|
10
|
+
new(Yajl::Parser.parse(response.read_body))
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(fields = {})
|
15
|
+
@fields = fields
|
16
|
+
end
|
17
|
+
|
18
|
+
# Fields
|
19
|
+
|
20
|
+
def id
|
21
|
+
@fields['id']
|
22
|
+
end
|
23
|
+
|
24
|
+
def name
|
25
|
+
@fields['name']
|
26
|
+
end
|
27
|
+
|
28
|
+
def description
|
29
|
+
@fields['desc']
|
30
|
+
end
|
31
|
+
|
32
|
+
def closed
|
33
|
+
@fields['closed']
|
34
|
+
end
|
35
|
+
|
36
|
+
def url
|
37
|
+
@fields['url']
|
38
|
+
end
|
39
|
+
|
40
|
+
# Links to other data structures
|
41
|
+
|
42
|
+
def board
|
43
|
+
Board.find(@fields['idBoard'])
|
44
|
+
end
|
45
|
+
|
46
|
+
def members
|
47
|
+
@fields['idMembers'].map do |member_id|
|
48
|
+
response = Client.query("/1/members/#{member_id}")
|
49
|
+
Member.new(Yajl::Parser.parse(response.read_body))
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# Ruby wrapper around the Trello API
|
2
|
+
# Copyright (c) 2012, Jeremy Tregunna
|
3
|
+
# Use and distribution terms may be found in the file LICENSE included in this distribution.
|
4
|
+
|
5
|
+
require 'addressable/uri'
|
6
|
+
|
7
|
+
module Trello
|
8
|
+
class Client
|
9
|
+
class EnterYourPublicKey < StandardError; end
|
10
|
+
class EnterYourSecret < StandardError; end
|
11
|
+
|
12
|
+
class << self
|
13
|
+
attr_writer :public_key, :secret, :app_name
|
14
|
+
|
15
|
+
def query(path, options = { :method => :get, :params => {} })
|
16
|
+
uri = Addressable::URI.parse("https://api.trello.com#{path}")
|
17
|
+
uri.query_values = options[:params]
|
18
|
+
|
19
|
+
access_token.send(options[:method], uri.to_s)
|
20
|
+
end
|
21
|
+
|
22
|
+
protected
|
23
|
+
|
24
|
+
def consumer
|
25
|
+
raise EnterYourPublicKey if @public_key.to_s.empty?
|
26
|
+
raise EnterYourSecret if @secret.to_s.empty?
|
27
|
+
|
28
|
+
OAuth::Consumer.new(@public_key, @secret, :site => 'https://trello.com',
|
29
|
+
:request_token_path => '/1/OAuthGetRequestToken',
|
30
|
+
:authorize_path => '/1/OAuthAuthorizeToken',
|
31
|
+
:access_token_path => '/1/OAuthGetAccessToken',
|
32
|
+
:http_method => :get)
|
33
|
+
end
|
34
|
+
|
35
|
+
def access_token
|
36
|
+
return @access_token if @access_token
|
37
|
+
|
38
|
+
@access_token = OAuth::AccessToken.new(consumer)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# Ruby wrapper around the Trello API
|
2
|
+
# Copyright (c) 2012, Jeremy Tregunna
|
3
|
+
# Use and distribution terms may be found in the file LICENSE included in this distribution.
|
4
|
+
|
5
|
+
module Trello
|
6
|
+
class Member
|
7
|
+
class << self
|
8
|
+
def find(id_or_username)
|
9
|
+
response = Client.query("/1/members/#{id_or_username}")
|
10
|
+
new(Yajl::Parser.parse(response.read_body))
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(fields = {})
|
15
|
+
@fields = fields
|
16
|
+
end
|
17
|
+
|
18
|
+
# Fields of a user
|
19
|
+
|
20
|
+
def id
|
21
|
+
@fields['id']
|
22
|
+
end
|
23
|
+
|
24
|
+
def full_name
|
25
|
+
@fields['fullName']
|
26
|
+
end
|
27
|
+
|
28
|
+
def username
|
29
|
+
@fields['username']
|
30
|
+
end
|
31
|
+
|
32
|
+
def gravatar_id
|
33
|
+
@fields['gravatar']
|
34
|
+
end
|
35
|
+
|
36
|
+
def bio
|
37
|
+
@fields['bio']
|
38
|
+
end
|
39
|
+
|
40
|
+
def url
|
41
|
+
@fields['url']
|
42
|
+
end
|
43
|
+
|
44
|
+
# Links to other data structures
|
45
|
+
|
46
|
+
def boards
|
47
|
+
response = Client.query("/1/members/#{username}/boards/all")
|
48
|
+
all_boards = Yajl::Parser.parse(response.read_body)
|
49
|
+
all_boards.map do |board_fields|
|
50
|
+
Board.new(board_fields)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def organizations
|
55
|
+
response = Client.query("/1/members/#{username}/organizations/all")
|
56
|
+
all_orgs = Yajl::Parser.parse(response.read_body)
|
57
|
+
all_orgs.map do |org_fields|
|
58
|
+
Organization.new(org_fields)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# Ruby wrapper around the Trello API
|
2
|
+
# Copyright (c) 2012, Jeremy Tregunna
|
3
|
+
# Use and distribution terms may be found in the file LICENSE included in this distribution.
|
4
|
+
|
5
|
+
module Trello
|
6
|
+
class Organization
|
7
|
+
class << self
|
8
|
+
def find(id)
|
9
|
+
response = Client.query("/1/organizations/#{id}")
|
10
|
+
new(Yajl::Parser.parse(response.read_body))
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(fields = {})
|
15
|
+
@fields = fields
|
16
|
+
end
|
17
|
+
|
18
|
+
# Fields
|
19
|
+
|
20
|
+
def id
|
21
|
+
@fields['id']
|
22
|
+
end
|
23
|
+
|
24
|
+
def name
|
25
|
+
@fields['name']
|
26
|
+
end
|
27
|
+
|
28
|
+
def display_name
|
29
|
+
@fields['display_name']
|
30
|
+
end
|
31
|
+
|
32
|
+
def description
|
33
|
+
@fields['desc']
|
34
|
+
end
|
35
|
+
|
36
|
+
def url
|
37
|
+
@fields['url']
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/spec/board_spec.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Trello
|
4
|
+
describe Board do
|
5
|
+
include Helpers
|
6
|
+
|
7
|
+
before(:all) do
|
8
|
+
Client.public_key = 'dummy'
|
9
|
+
Client.secret = 'dummy'
|
10
|
+
end
|
11
|
+
|
12
|
+
before(:each) do
|
13
|
+
stub_request(:get, "https://api.trello.com/1/boards/abcdef123456789123456789?").
|
14
|
+
with(:headers => {'Accept'=>'*/*', 'Authorization'=>/.*/, 'User-Agent' => /.*/}).
|
15
|
+
to_return(:status => 200, :headers => {}, :body => Yajl::Encoder.encode(boards_details.first))
|
16
|
+
|
17
|
+
@board = Board.find('abcdef123456789123456789')
|
18
|
+
end
|
19
|
+
|
20
|
+
context "fields" do
|
21
|
+
it "gets an id" do
|
22
|
+
@board.id.should_not be_nil
|
23
|
+
end
|
24
|
+
|
25
|
+
it "gets a name" do
|
26
|
+
@board.name.should_not be_nil
|
27
|
+
end
|
28
|
+
|
29
|
+
it "gets the description" do
|
30
|
+
@board.description.should_not be_nil
|
31
|
+
end
|
32
|
+
|
33
|
+
it "knows if it is closed or open" do
|
34
|
+
@board.closed.should_not be_nil
|
35
|
+
end
|
36
|
+
|
37
|
+
it "gets its url" do
|
38
|
+
@board.url.should_not be_nil
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context "cards" do
|
43
|
+
it "gets its list of cards" do
|
44
|
+
stub_request(:get, "https://api.trello.com/1/boards/abcdef123456789123456789/cards/all?").
|
45
|
+
with(:headers => {'Accept'=>'*/*', 'Authorization'=>/.*/, 'User-Agent' => /.*/}).
|
46
|
+
to_return(:status => 200, :headers => {}, :body => cards_payload)
|
47
|
+
|
48
|
+
@board.cards.count.should be > 0
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
data/spec/card_spec.rb
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Trello
|
4
|
+
describe Card do
|
5
|
+
include Helpers
|
6
|
+
|
7
|
+
before(:all) do
|
8
|
+
Client.public_key = 'dummy'
|
9
|
+
Client.secret = 'dummy'
|
10
|
+
end
|
11
|
+
|
12
|
+
before(:each) do
|
13
|
+
stub_request(:get, "https://api.trello.com/1/cards/abcdef123456789123456789?").
|
14
|
+
with(:headers => {'Accept'=>'*/*', 'Authorization'=>/.*/, 'User-Agent' => /.*/}).
|
15
|
+
to_return(:status => 200, :headers => {}, :body => Yajl::Encoder.encode(cards_details.first))
|
16
|
+
|
17
|
+
@card = Card.find('abcdef123456789123456789')
|
18
|
+
end
|
19
|
+
|
20
|
+
context "fields" do
|
21
|
+
it "gets its id" do
|
22
|
+
@card.id.should_not be_nil
|
23
|
+
end
|
24
|
+
|
25
|
+
it "gets its name" do
|
26
|
+
@card.name.should_not be_nil
|
27
|
+
end
|
28
|
+
|
29
|
+
it "gets its description" do
|
30
|
+
@card.description.should_not be_nil
|
31
|
+
end
|
32
|
+
|
33
|
+
it "knows if it is open or closed" do
|
34
|
+
@card.closed.should_not be_nil
|
35
|
+
end
|
36
|
+
|
37
|
+
it "gets its url" do
|
38
|
+
@card.url.should_not be_nil
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context "boards" do
|
43
|
+
it "has a board" do
|
44
|
+
stub_request(:get, "https://api.trello.com/1/boards/abcdef123456789123456789?").
|
45
|
+
with(:headers => {'Accept'=>'*/*', 'Authorization'=>/.*/, 'User-Agent' => /.*/}).
|
46
|
+
to_return(:status => 200, :headers => {}, :body => Yajl::Encoder.encode(boards_details.first))
|
47
|
+
|
48
|
+
@card.board.should_not be_nil
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context "members" do
|
53
|
+
it "has a list of members" do
|
54
|
+
stub_request(:get, "https://api.trello.com/1/boards/abcdef123456789123456789?").
|
55
|
+
with(:headers => {'Accept'=>'*/*', 'Authorization'=>/.*/, 'User-Agent' => /.*/}).
|
56
|
+
to_return(:status => 200, :headers => {}, :body => Yajl::Encoder.encode(boards_details.first))
|
57
|
+
stub_request(:get, "https://api.trello.com/1/members/abcdef123456789123456789?").
|
58
|
+
with(:headers => {'Accept'=>'*/*', 'Authorization'=>/.*/, 'User-Agent' => /.*/}).
|
59
|
+
to_return(:status => 200, :headers => {}, :body => user_payload)
|
60
|
+
|
61
|
+
@card.board.should_not be_nil
|
62
|
+
@card.members.should_not be_nil
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
data/spec/client_spec.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Trello
|
4
|
+
describe Client do
|
5
|
+
before(:all) do
|
6
|
+
Client.public_key = 'dummy'
|
7
|
+
Client.secret = 'dummy'
|
8
|
+
end
|
9
|
+
|
10
|
+
context 'keys' do
|
11
|
+
after do
|
12
|
+
Client.public_key = 'dummy'
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'throws an error if the public key is ommitted' do
|
16
|
+
Client.public_key = ''
|
17
|
+
lambda { Client.send(:consumer) }.should raise_error(Client::EnterYourPublicKey)
|
18
|
+
end
|
19
|
+
|
20
|
+
after do
|
21
|
+
Client.secret = 'dummy'
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'throws an error if the secret is ommitted' do
|
25
|
+
Client.secret = ''
|
26
|
+
lambda { Client.send(:consumer) }.should raise_error(Client::EnterYourSecret)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/spec/member_spec.rb
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
# Specs covering the members namespace in the Trello API
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Trello
|
6
|
+
describe Member do
|
7
|
+
include Helpers
|
8
|
+
|
9
|
+
before(:all) do
|
10
|
+
Client.public_key = 'dummy'
|
11
|
+
Client.secret = 'dummy'
|
12
|
+
end
|
13
|
+
|
14
|
+
before(:each) do
|
15
|
+
stub_oauth!
|
16
|
+
@member = Member.find('me')
|
17
|
+
end
|
18
|
+
|
19
|
+
context "actions" do
|
20
|
+
# This spec needs a better name
|
21
|
+
it "retrieves a list of actions"
|
22
|
+
end
|
23
|
+
|
24
|
+
context "boards" do
|
25
|
+
it "has a list of boards" do
|
26
|
+
stub_request(:get, "https://api.trello.com/1/members/me/boards/all?").
|
27
|
+
with(:headers => {'Accept'=>'*/*', 'Authorization'=>/.*/, 'User-Agent' => /.*/}).
|
28
|
+
to_return(:status => 200, :headers => {}, :body => boards_payload)
|
29
|
+
|
30
|
+
boards = @member.boards
|
31
|
+
boards.count.should be > 0
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context "organizations" do
|
36
|
+
it "has a list of organizations" do
|
37
|
+
stub_request(:get, "https://api.trello.com/1/members/me/organizations/all?").
|
38
|
+
with(:headers => {'Accept'=>'*/*', 'Authorization'=>/.*/, 'User-Agent' => /.*/}).
|
39
|
+
to_return(:status => 200, :headers => {}, :body => orgs_payload)
|
40
|
+
|
41
|
+
orgs = @member.organizations
|
42
|
+
orgs.count.should be > 0
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context "personal" do
|
47
|
+
it "gets the members bio" do
|
48
|
+
@member.bio.should_not be_nil
|
49
|
+
end
|
50
|
+
|
51
|
+
it "gets the full name" do
|
52
|
+
@member.full_name.should_not be_nil
|
53
|
+
end
|
54
|
+
|
55
|
+
it "gets the gravatar id" do
|
56
|
+
@member.gravatar_id.should_not be_nil
|
57
|
+
end
|
58
|
+
|
59
|
+
it "gets the url" do
|
60
|
+
@member.url.should_not be_nil
|
61
|
+
end
|
62
|
+
|
63
|
+
it "gets the username" do
|
64
|
+
@member.username.should_not be_nil
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
File without changes
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
|
3
|
+
# Set up gems listed in the Gemfile.
|
4
|
+
begin
|
5
|
+
ENV['BUNDLE_GEMFILE'] = File.expand_path('../Gemfile', File.dirname(__FILE__))
|
6
|
+
require 'bundler'
|
7
|
+
Bundler.setup
|
8
|
+
rescue Bundler::GemNotFound => e
|
9
|
+
STDERR.puts e.message
|
10
|
+
STDERR.puts "Try running `bundle install`."
|
11
|
+
exit!
|
12
|
+
end
|
13
|
+
|
14
|
+
Bundler.require(:spec)
|
15
|
+
|
16
|
+
require 'trello'
|
17
|
+
require 'webmock/rspec'
|
18
|
+
|
19
|
+
module Helpers
|
20
|
+
def user_details
|
21
|
+
{
|
22
|
+
"id" => "abcdef123456789012345678",
|
23
|
+
"fullName" => "Test User",
|
24
|
+
"username" => "me",
|
25
|
+
"gravatar" => "abcdef1234567890abcdef1234567890",
|
26
|
+
"bio" => "a rather dumb user",
|
27
|
+
"url" => "https://trello.com/me"
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
def user_payload
|
32
|
+
Yajl::Encoder.encode(user_details)
|
33
|
+
end
|
34
|
+
|
35
|
+
def boards_details
|
36
|
+
[{
|
37
|
+
"id" => "abcdef123456789123456789",
|
38
|
+
"name" => "Test",
|
39
|
+
"desc" => "This is a test board",
|
40
|
+
"closed" => false,
|
41
|
+
"idOrganization" => "abcdef123456789123456789",
|
42
|
+
"url" => "https://trello.com/board/test/abcdef123456789123456789"
|
43
|
+
}]
|
44
|
+
end
|
45
|
+
|
46
|
+
def boards_payload
|
47
|
+
Yajl::Encoder.encode(boards_details)
|
48
|
+
end
|
49
|
+
|
50
|
+
def cards_details
|
51
|
+
[{
|
52
|
+
"id" => "abcdef123456789123456789",
|
53
|
+
"name" => "Do something awesome",
|
54
|
+
"desc" => "Awesome things are awesome.",
|
55
|
+
"closed" => false,
|
56
|
+
"idList" => "abcdef123456789123456789",
|
57
|
+
"idBoard" => "abcdef123456789123456789",
|
58
|
+
"idMembers" => ["abcdef123456789123456789"],
|
59
|
+
"url" => "https://trello.com/card/board/specify-the-type-and-scope-of-the-jit-in-a-lightweight-spec/abcdef123456789123456789/abcdef123456789123456789"
|
60
|
+
}]
|
61
|
+
end
|
62
|
+
|
63
|
+
def cards_payload
|
64
|
+
Yajl::Encoder.encode(cards_details)
|
65
|
+
end
|
66
|
+
|
67
|
+
def orgs_details
|
68
|
+
[{
|
69
|
+
"id" => "abcdef123456789123456789",
|
70
|
+
"name" => "test",
|
71
|
+
"displayName" => "Test Organization",
|
72
|
+
"desc" => "This is a test organization",
|
73
|
+
"url" => "https://trello.com/test"
|
74
|
+
}]
|
75
|
+
end
|
76
|
+
|
77
|
+
def orgs_payload
|
78
|
+
Yajl::Encoder.encode(orgs_details)
|
79
|
+
end
|
80
|
+
|
81
|
+
def stub_oauth!
|
82
|
+
stub_request(:get, "https://api.trello.com/1/members/me?").
|
83
|
+
with(:headers => {'Accept'=>'*/*', 'Authorization'=>/.*/, 'User-Agent' => /.*/}).
|
84
|
+
to_return(:status => 200, :headers => {}, :body => user_payload)
|
85
|
+
end
|
86
|
+
end
|
metadata
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ruby-trello
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Jeremy Tregunna
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-01-07 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: yajl-ruby
|
16
|
+
requirement: &70132949849940 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.1.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70132949849940
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: oauth
|
27
|
+
requirement: &70132949849480 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ~>
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.4.5
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70132949849480
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: addressable
|
38
|
+
requirement: &70132949849020 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ~>
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 2.2.6
|
44
|
+
type: :runtime
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70132949849020
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: bundler
|
49
|
+
requirement: &70132949874400 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.0.0
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *70132949874400
|
58
|
+
description: A wrapper around the trello.com API.
|
59
|
+
email: jeremy@tregunna.ca
|
60
|
+
executables: []
|
61
|
+
extensions: []
|
62
|
+
extra_rdoc_files:
|
63
|
+
- README.md
|
64
|
+
files:
|
65
|
+
- lib/trello/board.rb
|
66
|
+
- lib/trello/card.rb
|
67
|
+
- lib/trello/client.rb
|
68
|
+
- lib/trello/member.rb
|
69
|
+
- lib/trello/organization.rb
|
70
|
+
- lib/trello.rb
|
71
|
+
- README.md
|
72
|
+
- spec/board_spec.rb
|
73
|
+
- spec/card_spec.rb
|
74
|
+
- spec/client_spec.rb
|
75
|
+
- spec/member_spec.rb
|
76
|
+
- spec/organization_spec.rb
|
77
|
+
- spec/spec_helper.rb
|
78
|
+
homepage: https://github.com/jeremytregunna/ruby-trello
|
79
|
+
licenses: []
|
80
|
+
post_install_message:
|
81
|
+
rdoc_options:
|
82
|
+
- --charset=UTF-8
|
83
|
+
require_paths:
|
84
|
+
- lib
|
85
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
86
|
+
none: false
|
87
|
+
requirements:
|
88
|
+
- - ! '>='
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
92
|
+
none: false
|
93
|
+
requirements:
|
94
|
+
- - ! '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 1.3.6
|
97
|
+
requirements: []
|
98
|
+
rubyforge_project: ruby-trello
|
99
|
+
rubygems_version: 1.8.10
|
100
|
+
signing_key:
|
101
|
+
specification_version: 3
|
102
|
+
summary: A wrapper around the trello.com API.
|
103
|
+
test_files:
|
104
|
+
- spec/board_spec.rb
|
105
|
+
- spec/card_spec.rb
|
106
|
+
- spec/client_spec.rb
|
107
|
+
- spec/member_spec.rb
|
108
|
+
- spec/organization_spec.rb
|
109
|
+
- spec/spec_helper.rb
|