ruby-trello 1.0.4 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/trello/association.rb +2 -2
- data/lib/trello/authorization.rb +15 -4
- data/lib/trello/basic_data.rb +1 -1
- data/lib/trello/card.rb +4 -3
- data/spec/action_spec.rb +21 -21
- data/spec/association_spec.rb +6 -6
- data/spec/basic_auth_policy_spec.rb +17 -17
- data/spec/board_spec.rb +2 -2
- data/spec/card_spec.rb +15 -9
- data/spec/checklist_spec.rb +1 -2
- data/spec/client_spec.rb +8 -10
- data/spec/configuration_spec.rb +18 -18
- data/spec/integration/how_to_authorize_spec.rb +1 -1
- data/spec/item_spec.rb +10 -10
- data/spec/list_spec.rb +33 -33
- data/spec/member_spec.rb +35 -35
- data/spec/oauth_policy_spec.rb +49 -49
- data/spec/organization_spec.rb +8 -8
- data/spec/spec_helper.rb +129 -130
- data/spec/string_spec.rb +7 -7
- data/spec/token_spec.rb +17 -17
- data/spec/trello_spec.rb +7 -7
- data/spec/webhook_spec.rb +1 -4
- metadata +13 -25
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c4d52816b20573e0e428d30639952518f52c303e
|
4
|
+
data.tar.gz: ba52ccc7483b34f53d018cdef8be47565959c1b0
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 64d9ab9659f109dca082bf07764aa695c6487e294c6b5fd9e3e951ffc8492d24ab26e80a676648a2dd3f877f7d2c2b3c00e4bf7b8fab742d7caae67f1e1a4511
|
7
|
+
data.tar.gz: 06941e4963b76afb942927c2657e07544fa44e698655bb1d4a6d74c6457b53fec9aa695615076ff3b544bafe9a7e679918f510111358bf5c690f246254530bf4
|
data/lib/trello/association.rb
CHANGED
data/lib/trello/authorization.rb
CHANGED
@@ -115,10 +115,21 @@ module Trello
|
|
115
115
|
@token ||= build_token
|
116
116
|
end
|
117
117
|
|
118
|
-
def consumer_key
|
119
|
-
|
120
|
-
|
121
|
-
|
118
|
+
def consumer_key
|
119
|
+
consumer_credential.key
|
120
|
+
end
|
121
|
+
|
122
|
+
def consumer_secret
|
123
|
+
consumer_credential.secret
|
124
|
+
end
|
125
|
+
|
126
|
+
def oauth_token
|
127
|
+
token.key
|
128
|
+
end
|
129
|
+
|
130
|
+
def oauth_token_secret
|
131
|
+
token.secret
|
132
|
+
end
|
122
133
|
|
123
134
|
private
|
124
135
|
|
data/lib/trello/basic_data.rb
CHANGED
@@ -47,7 +47,7 @@ module Trello
|
|
47
47
|
# Defines the attribute getter and setters.
|
48
48
|
class_eval do
|
49
49
|
define_method :attributes do
|
50
|
-
@attributes ||= names.
|
50
|
+
@attributes ||= names.reduce({}) { |hash, k| hash.merge(k.to_sym => nil) }
|
51
51
|
end
|
52
52
|
|
53
53
|
names.each do |key|
|
data/lib/trello/card.rb
CHANGED
@@ -90,7 +90,7 @@ module Trello
|
|
90
90
|
def update!
|
91
91
|
@previously_changed = changes
|
92
92
|
# extract only new values to build payload
|
93
|
-
payload = Hash[changes.map { |key, values| [key.to_sym, values[1]] }]
|
93
|
+
payload = Hash[changes.map { |key, values| [key.to_sym.eql?(:list_id) ? :idList : key.to_sym, values[1]] }]
|
94
94
|
@changed_attributes.clear
|
95
95
|
|
96
96
|
client.put("/cards/#{id}", payload)
|
@@ -134,9 +134,10 @@ module Trello
|
|
134
134
|
|
135
135
|
# Move this card to the given list
|
136
136
|
def move_to_list(list)
|
137
|
-
|
137
|
+
list_number = list.is_a?(String) ? list : list.id
|
138
|
+
unless list_id == list_number
|
138
139
|
client.put("/cards/#{id}/idList", {
|
139
|
-
:
|
140
|
+
value: list_number
|
140
141
|
})
|
141
142
|
end
|
142
143
|
end
|
data/spec/action_spec.rb
CHANGED
@@ -8,73 +8,73 @@ module Trello
|
|
8
8
|
let(:client) { Client.new }
|
9
9
|
|
10
10
|
before(:each) do
|
11
|
-
client.stub(:get).with(
|
11
|
+
client.stub(:get).with('/actions/4ee2482134a81a757a08af47', {}).
|
12
12
|
and_return JSON.generate(actions_details.first)
|
13
13
|
end
|
14
14
|
|
15
|
-
context
|
15
|
+
context 'finding' do
|
16
16
|
let(:client) { Trello.client }
|
17
17
|
|
18
|
-
it
|
18
|
+
it 'delegates to Trello.client#find' do
|
19
19
|
client.should_receive(:find).with(:action, '4ee2482134a81a757a08af47', {})
|
20
20
|
Action.find('4ee2482134a81a757a08af47')
|
21
21
|
end
|
22
22
|
|
23
|
-
it
|
23
|
+
it 'is equivalent to client#find' do
|
24
24
|
Action.find('4ee2482134a81a757a08af47').should eq(action)
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
-
context
|
28
|
+
context 'fields' do
|
29
29
|
let(:detail) { actions_details.first }
|
30
30
|
|
31
|
-
it
|
31
|
+
it 'gets its id' do
|
32
32
|
action.id.should == detail['id']
|
33
33
|
end
|
34
34
|
|
35
|
-
it
|
35
|
+
it 'gets its type' do
|
36
36
|
action.type.should == detail['type']
|
37
37
|
end
|
38
38
|
|
39
|
-
it
|
39
|
+
it 'has the same data' do
|
40
40
|
action.data.should == detail['data']
|
41
41
|
end
|
42
42
|
|
43
|
-
it
|
43
|
+
it 'gets the date' do
|
44
44
|
action.date.utc.iso8601.should == detail['date']
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
48
|
-
context
|
49
|
-
it
|
50
|
-
client.stub(:get).with(
|
48
|
+
context 'boards' do
|
49
|
+
it 'has a board' do
|
50
|
+
client.stub(:get).with('/actions/4ee2482134a81a757a08af47/board').
|
51
51
|
and_return JSON.generate(boards_details.first)
|
52
52
|
|
53
53
|
action.board.should_not be_nil
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
57
|
-
context
|
58
|
-
it
|
59
|
-
client.stub(:get).with(
|
57
|
+
context 'card' do
|
58
|
+
it 'has a card' do
|
59
|
+
client.stub(:get).with('/actions/4ee2482134a81a757a08af47/card').
|
60
60
|
and_return JSON.generate(cards_details.first)
|
61
61
|
|
62
62
|
action.card.should_not be_nil
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
66
|
-
context
|
67
|
-
it
|
68
|
-
client.stub(:get).with(
|
66
|
+
context 'list' do
|
67
|
+
it 'has a list of lists' do
|
68
|
+
client.stub(:get).with('/actions/4ee2482134a81a757a08af47/list').
|
69
69
|
and_return JSON.generate(lists_details.first)
|
70
70
|
|
71
71
|
action.list.should_not be_nil
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
75
|
-
context
|
76
|
-
it
|
77
|
-
client.stub(:get).with(
|
75
|
+
context 'member creator' do
|
76
|
+
it 'knows its member creator' do
|
77
|
+
client.stub(:get).with('/members/abcdef123456789123456789', {}).and_return user_payload
|
78
78
|
|
79
79
|
action.member_creator.should_not be_nil
|
80
80
|
end
|
data/spec/association_spec.rb
CHANGED
@@ -4,18 +4,18 @@ module Trello
|
|
4
4
|
describe Association do
|
5
5
|
include Helpers
|
6
6
|
|
7
|
-
let(:organization) { client.find(:organization,
|
8
|
-
let(:client) { Client.new(:consumer_key =>
|
7
|
+
let(:organization) { client.find(:organization, '4ee7e59ae582acdec8000291') }
|
8
|
+
let(:client) { Client.new(:consumer_key => 'xxx') }
|
9
9
|
|
10
10
|
before(:each) do
|
11
|
-
client.stub(:get).with(
|
11
|
+
client.stub(:get).with('/organizations/4ee7e59ae582acdec8000291', {}).
|
12
12
|
and_return organization_payload
|
13
|
-
client.stub(:get).with(
|
13
|
+
client.stub(:get).with('/organizations/4ee7e59ae582acdec8000291/boards/all').
|
14
14
|
and_return boards_payload
|
15
15
|
end
|
16
16
|
|
17
|
-
it
|
18
|
-
organization.boards.first.client.consumer_key.should ==
|
17
|
+
it 'should set the proper client for all associated boards of the organization' do
|
18
|
+
organization.boards.first.client.consumer_key.should == 'xxx'
|
19
19
|
end
|
20
20
|
|
21
21
|
end
|
@@ -1,19 +1,19 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
include Trello
|
4
4
|
include Trello::Authorization
|
5
5
|
|
6
6
|
describe BasicAuthPolicy do
|
7
7
|
before do
|
8
|
-
BasicAuthPolicy.developer_public_key =
|
9
|
-
BasicAuthPolicy.member_token =
|
8
|
+
BasicAuthPolicy.developer_public_key = 'xxx'
|
9
|
+
BasicAuthPolicy.member_token = 'xxx'
|
10
10
|
end
|
11
11
|
|
12
|
-
it
|
13
|
-
BasicAuthPolicy.developer_public_key =
|
14
|
-
BasicAuthPolicy.member_token =
|
12
|
+
it 'adds key and token query parameters' do
|
13
|
+
BasicAuthPolicy.developer_public_key = 'xxx_developer_public_key_xxx'
|
14
|
+
BasicAuthPolicy.member_token = 'xxx_member_token_xxx'
|
15
15
|
|
16
|
-
uri = Addressable::URI.parse(
|
16
|
+
uri = Addressable::URI.parse('https://xxx/')
|
17
17
|
|
18
18
|
request = Request.new :get, uri
|
19
19
|
|
@@ -21,31 +21,31 @@ describe BasicAuthPolicy do
|
|
21
21
|
|
22
22
|
the_query_parameters = Addressable::URI.parse(authorized_request.uri).query_values
|
23
23
|
|
24
|
-
the_query_parameters[
|
25
|
-
the_query_parameters[
|
24
|
+
the_query_parameters['key'].should === 'xxx_developer_public_key_xxx'
|
25
|
+
the_query_parameters['token'].should === 'xxx_member_token_xxx'
|
26
26
|
end
|
27
27
|
|
28
|
-
it
|
29
|
-
uri = Addressable::URI.parse(
|
28
|
+
it 'preserves other query parameters' do
|
29
|
+
uri = Addressable::URI.parse('https://xxx/?name=Phil')
|
30
30
|
|
31
|
-
request = Request.new :get, uri, {:example_header =>
|
31
|
+
request = Request.new :get, uri, {:example_header => 'example_value'}
|
32
32
|
|
33
33
|
authorized_request = BasicAuthPolicy.authorize request
|
34
34
|
|
35
35
|
the_query_parameters = Addressable::URI.parse(authorized_request.uri).query_values
|
36
36
|
|
37
|
-
the_query_parameters[
|
37
|
+
the_query_parameters['name'].should == 'Phil'
|
38
38
|
end
|
39
39
|
|
40
|
-
it
|
41
|
-
uri = Addressable::URI.parse(
|
40
|
+
it 'preserves headers' do
|
41
|
+
uri = Addressable::URI.parse('https://xxx/')
|
42
42
|
|
43
|
-
request = Request.new :get, uri, {:example_header =>
|
43
|
+
request = Request.new :get, uri, {:example_header => 'example_value'}
|
44
44
|
|
45
45
|
authorized_request = BasicAuthPolicy.authorize request
|
46
46
|
|
47
47
|
authorized_request.headers.should === request.headers
|
48
48
|
end
|
49
49
|
|
50
|
-
it
|
50
|
+
it 'does what when a query parameter already exists called key or token?'
|
51
51
|
end
|
data/spec/board_spec.rb
CHANGED
@@ -165,11 +165,11 @@ module Trello
|
|
165
165
|
client.should_not_receive :put
|
166
166
|
|
167
167
|
the_new_board = Board.new
|
168
|
-
|
168
|
+
-> { the_new_board.save }.should raise_error
|
169
169
|
end
|
170
170
|
|
171
171
|
it "puts all fields except id" do
|
172
|
-
expected_fields = %w{name description closed}.map{|s| s.to_sym}
|
172
|
+
expected_fields = %w{ name description closed }.map { |s| s.to_sym }
|
173
173
|
|
174
174
|
client.should_receive(:put) do |anything, body|
|
175
175
|
body.keys.should =~ expected_fields
|
data/spec/card_spec.rb
CHANGED
@@ -146,36 +146,42 @@ module Trello
|
|
146
146
|
end
|
147
147
|
|
148
148
|
it 'can be moved to another list' do
|
149
|
-
other_list =
|
149
|
+
other_list = double(:id => '987654321987654321fedcba')
|
150
150
|
payload = {:value => other_list.id}
|
151
151
|
client.should_receive(:put).with("/cards/abcdef123456789123456789/idList", payload)
|
152
152
|
card.move_to_list(other_list)
|
153
153
|
end
|
154
154
|
|
155
155
|
it 'should not be moved if new list is identical to old list' do
|
156
|
-
other_list =
|
157
|
-
payload = {:value => other_list.id}
|
156
|
+
other_list = double(:id => 'abcdef123456789123456789')
|
157
|
+
payload = { :value => other_list.id }
|
158
158
|
client.should_not_receive(:put)
|
159
159
|
card.move_to_list(other_list)
|
160
160
|
end
|
161
161
|
|
162
|
+
it "should accept a string for moving a card to list" do
|
163
|
+
payload = { value: "12345678"}
|
164
|
+
client.should_receive(:put).with("/cards/abcdef123456789123456789/idList", payload)
|
165
|
+
card.move_to_list("12345678")
|
166
|
+
end
|
167
|
+
|
162
168
|
it 'can be moved to another board' do
|
163
|
-
other_board =
|
169
|
+
other_board = double(:id => '987654321987654321fedcba')
|
164
170
|
payload = {:value => other_board.id}
|
165
171
|
client.should_receive(:put).with("/cards/abcdef123456789123456789/idBoard", payload)
|
166
172
|
card.move_to_board(other_board)
|
167
173
|
end
|
168
174
|
|
169
175
|
it 'can be moved to a list on another board' do
|
170
|
-
other_board =
|
171
|
-
other_list =
|
176
|
+
other_board = double(:id => '987654321987654321fedcba')
|
177
|
+
other_list = double(:id => '987654321987654321aalist')
|
172
178
|
payload = {:value => other_board.id, :idList => other_list.id}
|
173
179
|
client.should_receive(:put).with("/cards/abcdef123456789123456789/idBoard", payload)
|
174
180
|
card.move_to_board(other_board, other_list)
|
175
181
|
end
|
176
182
|
|
177
183
|
it 'should not be moved if new board is identical with old board', :focus => true do
|
178
|
-
other_board =
|
184
|
+
other_board = double(:id => 'abcdef123456789123456789')
|
179
185
|
client.should_not_receive(:put)
|
180
186
|
card.move_to_board(other_board)
|
181
187
|
end
|
@@ -191,7 +197,7 @@ module Trello
|
|
191
197
|
end
|
192
198
|
|
193
199
|
it "allows a member to be added to a card" do
|
194
|
-
new_member =
|
200
|
+
new_member = double(:id => '4ee7df3ce582acdec80000b2')
|
195
201
|
payload = {
|
196
202
|
:value => new_member.id
|
197
203
|
}
|
@@ -200,7 +206,7 @@ module Trello
|
|
200
206
|
end
|
201
207
|
|
202
208
|
it "allows a member to be removed from a card" do
|
203
|
-
existing_member =
|
209
|
+
existing_member = double(:id => '4ee7df3ce582acdec80000b2')
|
204
210
|
client.should_receive(:delete).with("/cards/abcdef123456789123456789/members/#{existing_member.id}")
|
205
211
|
card.remove_member(existing_member)
|
206
212
|
end
|
data/spec/checklist_spec.rb
CHANGED
@@ -70,7 +70,7 @@ module Trello
|
|
70
70
|
}
|
71
71
|
|
72
72
|
result = JSON.generate(checklists_details.first)
|
73
|
-
client.should_receive(:put).once.with(
|
73
|
+
client.should_receive(:put).once.with(expected_resource, payload).and_return result
|
74
74
|
|
75
75
|
checklist.name = expected_new_name
|
76
76
|
checklist.save
|
@@ -80,7 +80,6 @@ module Trello
|
|
80
80
|
expected_item_name = "item1"
|
81
81
|
expected_checked = true
|
82
82
|
expected_pos = 9999
|
83
|
-
expected_resource = "/checklists/abcdef123456789123456789"
|
84
83
|
payload = {
|
85
84
|
:name => expected_item_name,
|
86
85
|
:checked => expected_checked,
|
data/spec/client_spec.rb
CHANGED
@@ -4,13 +4,13 @@ include Trello
|
|
4
4
|
include Trello::Authorization
|
5
5
|
|
6
6
|
describe Client, "and how it handles authorization" do
|
7
|
-
let (:fake_ok_response)
|
8
|
-
|
7
|
+
let (:fake_ok_response) do
|
8
|
+
double "A fake OK response",
|
9
9
|
:code => 200,
|
10
10
|
:body => "A fake response body"
|
11
|
-
|
11
|
+
end
|
12
12
|
let(:client) { Client.new }
|
13
|
-
let(:auth_policy) {
|
13
|
+
let(:auth_policy) { double }
|
14
14
|
|
15
15
|
before do
|
16
16
|
TInternet.stub(:execute).and_return fake_ok_response
|
@@ -47,13 +47,13 @@ describe Client, "and how it handles authorization" do
|
|
47
47
|
|
48
48
|
it "raises an error when response has non-200 status" do
|
49
49
|
expected_error_message = "An error response"
|
50
|
-
response_with_non_200_status =
|
50
|
+
response_with_non_200_status = double "A fake OK response",
|
51
51
|
:code => 404,
|
52
52
|
:body => expected_error_message
|
53
53
|
|
54
54
|
TInternet.stub(:execute).and_return response_with_non_200_status
|
55
55
|
|
56
|
-
|
56
|
+
-> { client.get "/xxx" }.should raise_error expected_error_message
|
57
57
|
end
|
58
58
|
|
59
59
|
it "uses version 1 of the API" do
|
@@ -103,8 +103,6 @@ describe Client, "and how it handles authorization" do
|
|
103
103
|
end
|
104
104
|
|
105
105
|
it "supports put" do
|
106
|
-
expected_path = "/xxx"
|
107
|
-
|
108
106
|
TInternet.should_receive(:execute).once.and_return fake_ok_response
|
109
107
|
|
110
108
|
client.put "/xxx", { :phil => "T' north" }
|
@@ -133,14 +131,14 @@ describe Client, "and how it handles authorization" do
|
|
133
131
|
end
|
134
132
|
|
135
133
|
context "initialize" do
|
136
|
-
let(:client)
|
134
|
+
let(:client) do
|
137
135
|
Client.new(
|
138
136
|
:consumer_key => 'consumer_key',
|
139
137
|
:consumer_secret => 'consumer_secret',
|
140
138
|
:oauth_token => 'oauth_token',
|
141
139
|
:oauth_token_secret => 'oauth_token_secret'
|
142
140
|
)
|
143
|
-
|
141
|
+
end
|
144
142
|
|
145
143
|
it "is configurable" do
|
146
144
|
client.consumer_key.should eq('consumer_key')
|
data/spec/configuration_spec.rb
CHANGED
@@ -1,51 +1,51 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Trello::Configuration do
|
4
4
|
let(:configuration) { Trello::Configuration.new }
|
5
5
|
|
6
|
-
it
|
6
|
+
it 'has a consumer_key attribute' do
|
7
7
|
configuration.consumer_key = 'consumer_key'
|
8
8
|
configuration.consumer_key.should eq('consumer_key')
|
9
9
|
end
|
10
10
|
|
11
|
-
it
|
11
|
+
it 'has a consumer_secret attribute' do
|
12
12
|
configuration.consumer_secret = 'consumer_secret'
|
13
13
|
configuration.consumer_secret.should eq('consumer_secret')
|
14
14
|
end
|
15
15
|
|
16
|
-
it
|
16
|
+
it 'has a oauth_token attribute' do
|
17
17
|
configuration.oauth_token = 'oauth_token'
|
18
18
|
configuration.oauth_token.should eq('oauth_token')
|
19
19
|
end
|
20
20
|
|
21
|
-
it
|
21
|
+
it 'has a oauth_token_secret attribute' do
|
22
22
|
configuration.oauth_token_secret = 'oauth_token_secret'
|
23
23
|
configuration.oauth_token_secret.should eq('oauth_token_secret')
|
24
24
|
end
|
25
25
|
|
26
|
-
it
|
26
|
+
it 'has a developer public key attribute' do
|
27
27
|
configuration.developer_public_key = 'developer_public_key'
|
28
28
|
configuration.developer_public_key.should eq('developer_public_key')
|
29
29
|
end
|
30
30
|
|
31
|
-
it
|
31
|
+
it 'has a member token attribute' do
|
32
32
|
configuration.member_token = 'member_token'
|
33
33
|
configuration.member_token.should eq('member_token')
|
34
34
|
end
|
35
35
|
|
36
|
-
it
|
37
|
-
callback =
|
36
|
+
it 'has a callback (for oauth)' do
|
37
|
+
callback = -> { 'foobar' }
|
38
38
|
configuration.callback = callback
|
39
39
|
configuration.callback.call.should eq('foobar')
|
40
40
|
end
|
41
41
|
|
42
|
-
it
|
43
|
-
configuration.return_url =
|
44
|
-
configuration.return_url.should eq(
|
42
|
+
it 'has a return_url' do
|
43
|
+
configuration.return_url = 'http://www.example.com/callback'
|
44
|
+
configuration.return_url.should eq('http://www.example.com/callback')
|
45
45
|
end
|
46
46
|
|
47
|
-
describe
|
48
|
-
it
|
47
|
+
describe 'initialize' do
|
48
|
+
it 'sets key attributes provided as a hash' do
|
49
49
|
configuration = Trello::Configuration.new(
|
50
50
|
:consumer_key => 'consumer_key',
|
51
51
|
:consumer_secret => 'consumer_secret',
|
@@ -59,14 +59,14 @@ describe Trello::Configuration do
|
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
62
|
-
describe
|
62
|
+
describe '#credentials' do
|
63
63
|
let(:configuration) { Trello::Configuration.new(attributes) }
|
64
64
|
|
65
|
-
it
|
65
|
+
it 'returns an empty if no attributes specified' do
|
66
66
|
Trello::Configuration.new({}).credentials.should eq({})
|
67
67
|
end
|
68
68
|
|
69
|
-
it
|
69
|
+
it 'returns an empty if attributes incomplete' do
|
70
70
|
Trello::Configuration.new(:consumer_key => 'consumer_key').credentials.should eq({})
|
71
71
|
end
|
72
72
|
|
@@ -100,7 +100,7 @@ describe Trello::Configuration do
|
|
100
100
|
)
|
101
101
|
end
|
102
102
|
|
103
|
-
it
|
103
|
+
it 'returns a hash of basic auth policy attributes' do
|
104
104
|
configuration = Trello::Configuration.new(
|
105
105
|
:developer_public_key => 'developer_public_key',
|
106
106
|
:member_token => 'member_token'
|