ruby-trello 1.1.2 → 1.1.3
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/README.md +13 -3
- data/lib/trello/board.rb +11 -3
- data/lib/trello/card.rb +8 -3
- data/lib/trello/webhook.rb +14 -2
- data/spec/board_spec.rb +3 -2
- data/spec/card_spec.rb +24 -10
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 81baf76d9e58785fa9dc51f1d712b882b92db245
|
4
|
+
data.tar.gz: a73d11ce0d6308962b78802fdca44e60d5d84fec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9d99de48aaf068f1bd67db5d5f39fe8aa8b0fe04c40285b5775a0409048f75e0d17ddee6fa98a3d14f79b2319dd607feb30e0742fb79c562070463b4d7d3f648
|
7
|
+
data.tar.gz: 62a787fc187af9d034103afd7331bc3f74155750777c07e67aef1838ddb6581af853aef33f7633def4385643b83ba55d4af593aa6b1688a2ea4861366e20deb1
|
data/README.md
CHANGED
@@ -8,6 +8,8 @@ This library implements the [Trello](http://www.trello.com/) [API](http://trello
|
|
8
8
|
Trello is an awesome tool for organization. Not just aimed at developers, but everybody.
|
9
9
|
Seriously, [check it out](http://www.trello.com/).
|
10
10
|
|
11
|
+
[Full API documentation](http://www.rubydoc.info/gems/ruby-trello).
|
12
|
+
|
11
13
|
## Installation
|
12
14
|
|
13
15
|
```
|
@@ -22,14 +24,22 @@ illustrate that future versions may include ruby 1.9.3+ specific features.
|
|
22
24
|
|
23
25
|
## Configuration
|
24
26
|
|
25
|
-
Basic authorization
|
27
|
+
Basic authorization:
|
28
|
+
|
29
|
+
1. Get your API keys from [trello.com/app-key](https://trello.com/app-key).
|
30
|
+
2. Visit the URL [trello.com/1/authorize], with the following GET parameters:
|
31
|
+
- `key`: the API key you got in step 1.
|
32
|
+
- `response_type`: "token"
|
33
|
+
- `expiration`: "never" if you don't want your token to ever expire. If you leave this blank,
|
34
|
+
your generated token will expire after 30 days.
|
35
|
+
3. You should see a page asking you to authorize your Trello application. Click "allow" and you should see a second page with a long alphanumeric string. This is your member token.
|
26
36
|
|
27
37
|
```ruby
|
28
38
|
require 'trello'
|
29
39
|
|
30
40
|
Trello.configure do |config|
|
31
|
-
config.developer_public_key = TRELLO_DEVELOPER_PUBLIC_KEY
|
32
|
-
config.member_token = TRELLO_MEMBER_TOKEN
|
41
|
+
config.developer_public_key = TRELLO_DEVELOPER_PUBLIC_KEY # The "key" from step 1
|
42
|
+
config.member_token = TRELLO_MEMBER_TOKEN # The token from step 3.
|
33
43
|
end
|
34
44
|
```
|
35
45
|
|
data/lib/trello/board.rb
CHANGED
@@ -10,6 +10,8 @@ module Trello
|
|
10
10
|
|
11
11
|
class << self
|
12
12
|
# Finds a board.
|
13
|
+
#
|
14
|
+
# @return [Trello::Board]
|
13
15
|
def find(id, params = {})
|
14
16
|
client.find(:board, id, params)
|
15
17
|
end
|
@@ -23,6 +25,7 @@ module Trello
|
|
23
25
|
client.create(:board, data)
|
24
26
|
end
|
25
27
|
|
28
|
+
# @return [Array<Trello::Board>] all boards for the current user
|
26
29
|
def all
|
27
30
|
client.get("/members/#{Member.find(:me).username}/boards").json_into(self)
|
28
31
|
end
|
@@ -45,9 +48,10 @@ module Trello
|
|
45
48
|
@changed_attributes.clear
|
46
49
|
|
47
50
|
client.put("/boards/#{self.id}/", {
|
48
|
-
:name
|
49
|
-
:description
|
50
|
-
:closed
|
51
|
+
:name => attributes[:name],
|
52
|
+
:description => attributes[:description],
|
53
|
+
:closed => attributes[:closed],
|
54
|
+
:idOrganization => attributes[:organization_id]
|
51
55
|
}).json_into(self)
|
52
56
|
end
|
53
57
|
|
@@ -62,14 +66,18 @@ module Trello
|
|
62
66
|
self
|
63
67
|
end
|
64
68
|
|
69
|
+
# @return [Boolean]
|
65
70
|
def closed?
|
66
71
|
attributes[:closed]
|
67
72
|
end
|
68
73
|
|
74
|
+
# @return [Boolean]
|
69
75
|
def has_lists?
|
70
76
|
lists.size > 0
|
71
77
|
end
|
72
78
|
|
79
|
+
# Find a card on this Board with the given ID.
|
80
|
+
# @return [Trello::Card]
|
73
81
|
def find_card(card_id)
|
74
82
|
client.get("/boards/#{self.id}/cards/#{card_id}").json_into(Card)
|
75
83
|
end
|
data/lib/trello/card.rb
CHANGED
@@ -211,9 +211,14 @@ module Trello
|
|
211
211
|
MultiAssociation.new(self, labels).proxy
|
212
212
|
end
|
213
213
|
|
214
|
+
# Label colours
|
215
|
+
def label_colours
|
216
|
+
%w{green yellow orange red purple blue sky lime pink black}
|
217
|
+
end
|
218
|
+
|
214
219
|
# Add a label
|
215
220
|
def add_label(colour)
|
216
|
-
unless
|
221
|
+
unless label_colours.include? colour
|
217
222
|
errors.add(:label, "colour '#{colour}' does not exist")
|
218
223
|
return Trello.logger.warn "The label colour '#{colour}' does not exist."
|
219
224
|
end
|
@@ -222,9 +227,9 @@ module Trello
|
|
222
227
|
|
223
228
|
# Remove a label
|
224
229
|
def remove_label(colour)
|
225
|
-
unless
|
230
|
+
unless label_colours.include? colour
|
226
231
|
errors.add(:label, "colour '#{colour}' does not exist")
|
227
|
-
return Trello.logger.warn "The label colour '#{colour}' does not exist." unless
|
232
|
+
return Trello.logger.warn "The label colour '#{colour}' does not exist." unless label_colours.include? colour
|
228
233
|
end
|
229
234
|
client.delete("/cards/#{id}/labels/#{colour}")
|
230
235
|
end
|
data/lib/trello/webhook.rb
CHANGED
@@ -7,12 +7,21 @@ module Trello
|
|
7
7
|
validates_length_of :description, :in => 1..16384
|
8
8
|
|
9
9
|
class << self
|
10
|
-
# Find a specific webhook by its
|
10
|
+
# Find a specific webhook by its ID.
|
11
|
+
#
|
12
|
+
# @raise [Trello::Error] if a Webhook with the given ID can't be found.
|
13
|
+
# @return [Trello::Webhook] the Webhook with the given ID.
|
11
14
|
def find(id, params = {})
|
12
15
|
client.find(:webhook, id, params)
|
13
16
|
end
|
14
17
|
|
15
|
-
# Create a new webhook and save it
|
18
|
+
# Create a new webhook and save it to Trello.
|
19
|
+
#
|
20
|
+
# @param [Hash] options
|
21
|
+
# @option options [String] :description (optional) A string with a length from 0 to 16384
|
22
|
+
# @option options [String] :callback_url (required) A valid URL that is reachable with a HEAD request
|
23
|
+
# @option options [String] :id_model (required) id of the model that should be hooked
|
24
|
+
# @return [Trello::Webhook]
|
16
25
|
def create(options)
|
17
26
|
client.create(:webhook,
|
18
27
|
'description' => options[:description],
|
@@ -21,6 +30,7 @@ module Trello
|
|
21
30
|
end
|
22
31
|
end
|
23
32
|
|
33
|
+
# return [Trello::Webhook] self
|
24
34
|
def update_fields(fields)
|
25
35
|
attributes[:id] = fields['id']
|
26
36
|
attributes[:description] = fields['description']
|
@@ -56,6 +66,8 @@ module Trello
|
|
56
66
|
end
|
57
67
|
|
58
68
|
# Check if the webhook is activated
|
69
|
+
#
|
70
|
+
# @return [Boolean]
|
59
71
|
def activated?
|
60
72
|
active
|
61
73
|
end
|
data/spec/board_spec.rb
CHANGED
@@ -169,7 +169,7 @@ module Trello
|
|
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 idOrganization}.map { |s| s.to_sym }
|
173
173
|
|
174
174
|
client.should_receive(:put) do |anything, body|
|
175
175
|
body.keys.should =~ expected_fields
|
@@ -222,7 +222,8 @@ module Trello
|
|
222
222
|
client.should_receive(:put).with("/boards/#{board.id}/", {
|
223
223
|
:name => "new name",
|
224
224
|
:description => "new description",
|
225
|
-
:closed => true
|
225
|
+
:closed => true,
|
226
|
+
:idOrganization => nil
|
226
227
|
}).and_return any_board_json
|
227
228
|
board.update!
|
228
229
|
end
|
data/spec/card_spec.rb
CHANGED
@@ -51,7 +51,8 @@ module Trello
|
|
51
51
|
|
52
52
|
result = JSON.generate(cards_details.first.merge(payload.merge(:idList => lists_details.first['id'])))
|
53
53
|
|
54
|
-
expected_payload = {name: "Test Card", desc: nil, idList: "abcdef123456789123456789",
|
54
|
+
expected_payload = {name: "Test Card", desc: nil, idList: "abcdef123456789123456789",
|
55
|
+
idMembers: nil, labels: nil, pos: nil }
|
55
56
|
|
56
57
|
client.should_receive(:post).with("/cards", expected_payload).and_return result
|
57
58
|
|
@@ -119,6 +120,10 @@ module Trello
|
|
119
120
|
it "gets its cover image id" do
|
120
121
|
card.cover_image_id.should_not be_nil
|
121
122
|
end
|
123
|
+
|
124
|
+
it "gets its pos" do
|
125
|
+
card.pos.should_not be_nil
|
126
|
+
end
|
122
127
|
end
|
123
128
|
|
124
129
|
context "actions" do
|
@@ -250,41 +255,50 @@ module Trello
|
|
250
255
|
client.stub(:get).with("/cards/abcdef123456789123456789/labels").
|
251
256
|
and_return label_payload
|
252
257
|
labels = card.labels
|
253
|
-
labels.size.
|
258
|
+
expect(labels.size).to eq(2)
|
254
259
|
|
255
|
-
labels[0].color.
|
256
|
-
labels[0].name.
|
260
|
+
expect(labels[0].color).to eq('yellow')
|
261
|
+
expect(labels[0].name).to eq('iOS')
|
257
262
|
|
258
|
-
labels[1].color.
|
259
|
-
labels[1].name.
|
263
|
+
expect(labels[1].color).to eq('purple')
|
264
|
+
expect(labels[1].name).to eq('Issue or bug')
|
260
265
|
end
|
261
266
|
|
262
267
|
it "can add a label" do
|
263
268
|
client.stub(:post).with("/cards/abcdef123456789123456789/labels", { :value => 'green' }).
|
264
269
|
and_return "not important"
|
265
270
|
card.add_label('green')
|
266
|
-
card.errors.
|
271
|
+
expect(card.errors).to be_empty
|
267
272
|
end
|
268
273
|
|
269
274
|
it "can remove a label" do
|
270
275
|
client.stub(:delete).with("/cards/abcdef123456789123456789/labels/green").
|
271
276
|
and_return "not important"
|
272
277
|
card.remove_label('green')
|
273
|
-
card.errors.
|
278
|
+
expect(card.errors).to be_empty
|
279
|
+
end
|
280
|
+
|
281
|
+
it "can add a label of any valid color" do
|
282
|
+
%w(green yellow orange red purple blue sky lime pink black).each do |color|
|
283
|
+
client.stub(:post).with("/cards/abcdef123456789123456789/labels", { :value => color }).
|
284
|
+
and_return "not important"
|
285
|
+
card.add_label(color)
|
286
|
+
expect(card.errors).to be_empty
|
287
|
+
end
|
274
288
|
end
|
275
289
|
|
276
290
|
it "throws an error when trying to add a label with an unknown colour" do
|
277
291
|
client.stub(:post).with("/cards/abcdef123456789123456789/labels", { :value => 'green' }).
|
278
292
|
and_return "not important"
|
279
293
|
card.add_label('mauve')
|
280
|
-
card.errors.full_messages.to_sentence.
|
294
|
+
expect(card.errors.full_messages.to_sentence).to eq("Label colour 'mauve' does not exist")
|
281
295
|
end
|
282
296
|
|
283
297
|
it "throws an error when trying to remove a label with an unknown colour" do
|
284
298
|
client.stub(:delete).with("/cards/abcdef123456789123456789/labels/mauve").
|
285
299
|
and_return "not important"
|
286
300
|
card.remove_label('mauve')
|
287
|
-
card.errors.full_messages.to_sentence.
|
301
|
+
expect(card.errors.full_messages.to_sentence).to eq("Label colour 'mauve' does not exist")
|
288
302
|
end
|
289
303
|
end
|
290
304
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-trello
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeremy Tregunna
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|