ruby-trello 1.1.3 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 81baf76d9e58785fa9dc51f1d712b882b92db245
4
- data.tar.gz: a73d11ce0d6308962b78802fdca44e60d5d84fec
3
+ metadata.gz: 260b90a4f5cc53cb0c695edb040c75144a24a2f0
4
+ data.tar.gz: 1b6e24750bb32ae29d798912b43a60e98ece7088
5
5
  SHA512:
6
- metadata.gz: 9d99de48aaf068f1bd67db5d5f39fe8aa8b0fe04c40285b5775a0409048f75e0d17ddee6fa98a3d14f79b2319dd607feb30e0742fb79c562070463b4d7d3f648
7
- data.tar.gz: 62a787fc187af9d034103afd7331bc3f74155750777c07e67aef1838ddb6581af853aef33f7633def4385643b83ba55d4af593aa6b1688a2ea4861366e20deb1
6
+ metadata.gz: 913d7972b22fce3998ea166fc1dc94c8d4e699ef2f1b2b686fd585fb951b430769b74dbb8d3e2d90bd3e99791da8b5018f15839bbf79a636917e52fbb1d492c6
7
+ data.tar.gz: f68c3097b8e2c8cf043587b98aa7559b8aeb14c35891bea11de1edab13cf6e04be0adaf48df7dd0db4be4afb17211fd21cc5e865105435c5fd139f1fc6ac18fd
data/README.md CHANGED
@@ -26,12 +26,14 @@ illustrate that future versions may include ruby 1.9.3+ specific features.
26
26
 
27
27
  Basic authorization:
28
28
 
29
- 1. Get your API keys from [trello.com/app-key](https://trello.com/app-key).
29
+ 1. Get your API keys from [trello.com/app-key](https://trello.com/app-key).
30
30
  2. Visit the URL [trello.com/1/authorize], with the following GET parameters:
31
31
  - `key`: the API key you got in step 1.
32
32
  - `response_type`: "token"
33
33
  - `expiration`: "never" if you don't want your token to ever expire. If you leave this blank,
34
34
  your generated token will expire after 30 days.
35
+ - The URL will look like this:
36
+ `https://trello.com/1/authorize?key=YOURAPIKEY&response_type=token&expiration=never`
35
37
  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.
36
38
 
37
39
  ```ruby
data/lib/trello/action.rb CHANGED
@@ -1,8 +1,21 @@
1
1
  module Trello
2
2
  # Action represents some event that occurred. For instance, when a card is created.
3
+ #
4
+ # @!attribute [r] id
5
+ # @return [String]
6
+ # @!attribute [r] type
7
+ # @return [String]
8
+ # @!attribute [r] data
9
+ # @return [Hash]
10
+ # @!attribute [r] date
11
+ # @return [Datetime]
12
+ # @!attribute [r] member_creator_id
13
+ # @return [String]
14
+ # @!attribute [r] member_participant
15
+ # @return [Object]
3
16
  class Action < BasicData
4
17
  register_attributes :id, :type, :data, :date, :member_creator_id, :member_participant,
5
- :readonly => [ :id, :type, :data, :date, :member_creator_id, :member_participant ]
18
+ readonly: [ :id, :type, :data, :date, :member_creator_id, :member_participant ]
6
19
  validates_presence_of :id, :type, :date, :member_creator_id
7
20
 
8
21
  class << self
@@ -13,9 +26,8 @@ module Trello
13
26
 
14
27
  def search(query, opts={})
15
28
  response = client.get("/search/", { query: query }.merge(opts))
16
- formatted_response = JSON.parse(response).except("options").inject({}) do |res, key|
17
- res.merge!({ key.first => key.last.jsoned_into("Trello::#{key.first.singularize.capitalize}".constantize) })
18
- res
29
+ JSON.parse(response).except("options").inject({}) do |res, key|
30
+ res.merge({ key.first => key.last.jsoned_into("Trello::#{key.first.singularize.capitalize}".constantize) })
19
31
  end
20
32
  end
21
33
  end
@@ -50,6 +62,6 @@ module Trello
50
62
  end
51
63
 
52
64
  # Returns the member who created the action.
53
- one :member_creator, :via => Member, :path => :members, :using => :member_creator_id
65
+ one :member_creator, via: Member, path: :members, using: :member_creator_id
54
66
  end
55
67
  end
@@ -1,5 +1,20 @@
1
1
  module Trello
2
2
  # A file or url that is linked to a Trello card
3
+ #
4
+ # @!attribute id
5
+ # @return [String]
6
+ # @!attribute name
7
+ # @return [String]
8
+ # @!attribute url
9
+ # @return [String]
10
+ # @!attribute bytes
11
+ # @return [Fixnum]
12
+ # @!attribute date
13
+ # @return [Datetime]
14
+ # @!attribute is_upload
15
+ # @return [Boolean]
16
+ # @!attribute mime_type
17
+ # @return [String]
3
18
  class Attachment < BasicData
4
19
  register_attributes :name, :id, :url, :bytes, :member_id, :date, :is_upload, :mime_type
5
20
  # Update the fields of an attachment.
@@ -31,7 +31,7 @@ module Trello
31
31
  def authorize(request)
32
32
  the_uri = Addressable::URI.parse(request.uri)
33
33
  existing_values = the_uri.query_values.nil? ? {} : the_uri.query_values
34
- new_values = { :key => @developer_public_key, :token => @member_token }
34
+ new_values = { key: @developer_public_key, token: @member_token }
35
35
  the_uri.query_values = new_values.merge existing_values
36
36
 
37
37
  Request.new request.verb, the_uri, request.headers, request.body
@@ -100,8 +100,8 @@ module Trello
100
100
  request.headers = {"Authorization" => get_auth_header(request.uri, :get)}
101
101
  request
102
102
  else
103
- consumer(:return_url => return_url, :callback_method => :postMessage)
104
- request_token = consumer.get_request_token(:oauth_callback => return_url)
103
+ consumer(return_url: return_url, callback_method: :postMessage)
104
+ request_token = consumer.get_request_token(oauth_callback: return_url)
105
105
  callback.call request_token
106
106
  return nil
107
107
  end
@@ -151,12 +151,12 @@ module Trello
151
151
 
152
152
  def consumer_params(params = {})
153
153
  {
154
- :scheme => :header,
155
- :scope => 'read,write,account',
156
- :http_method => :get,
157
- :request_token_path => "https://trello.com/1/OAuthGetRequestToken",
158
- :authorize_path => "https://trello.com/1/OAuthAuthorizeToken",
159
- :access_token_path => "https://trello.com/1/OAuthGetAccessToken"
154
+ scheme: :header,
155
+ scope: 'read,write,account',
156
+ http_method: :get,
157
+ request_token_path: "https://trello.com/1/OAuthGetRequestToken",
158
+ authorize_path: "https://trello.com/1/OAuthAuthorizeToken",
159
+ access_token_path: "https://trello.com/1/OAuthGetAccessToken"
160
160
  }.merge!(params)
161
161
  end
162
162
 
@@ -44,7 +44,7 @@ module Trello
44
44
  end
45
45
 
46
46
  def self.register_attributes(*names)
47
- options = { :readonly => [] }
47
+ options = { readonly: [] }
48
48
  options.merge!(names.pop) if names.last.kind_of? Hash
49
49
 
50
50
  # Defines the attribute getter and setters.
@@ -102,7 +102,7 @@ module Trello
102
102
  Trello.client
103
103
  end
104
104
 
105
- register_attributes :id, :readonly => [ :id ]
105
+ register_attributes :id, readonly: [ :id ]
106
106
 
107
107
  attr_writer :client
108
108
 
data/lib/trello/board.rb CHANGED
@@ -1,16 +1,40 @@
1
1
  module Trello
2
+
3
+ # A board on Trello
4
+ #
5
+ # @!attribute [r] id
6
+ # @return [String]
7
+ # @!attribute [r] name
8
+ # @return [String]
9
+ # @!attribute [rw] description
10
+ # @return [String]
11
+ # @!attribute [rw] closed
12
+ # @return [Boolean]
13
+ # @!attribute [r] url
14
+ # @return [String]
15
+ # @!attribute [rw] organization_id
16
+ # @return [String] A 24-character hex string
17
+ # @!attribute [r] prefs
18
+ # @return [Hash] A 24-character hex string
2
19
  class Board < BasicData
3
- register_attributes :id, :name, :description, :closed, :url, :organization_id, :prefs,
4
- :readonly => [ :id, :url, :prefs ]
20
+ register_attributes :id, :name, :description, :closed, :starred, :url, :organization_id, :prefs,
21
+ readonly: [ :id, :url, :prefs ]
5
22
  validates_presence_of :id, :name
6
- validates_length_of :name, :in => 1..16384
7
- validates_length_of :description, :maximum => 16384
23
+ validates_length_of :name, in: 1..16384
24
+ validates_length_of :description, maximum: 16384
8
25
 
9
26
  include HasActions
10
27
 
11
28
  class << self
12
29
  # Finds a board.
13
30
  #
31
+ # @param [String] id Either the board's short ID (an alphanumeric string,
32
+ # found e.g. in the board's URL) or its long ID (a 24-character hex
33
+ # string.)
34
+ # @param [Hash] params
35
+ #
36
+ # @raise [Trello::Board] if a board with the given ID could not be found.
37
+ #
14
38
  # @return [Trello::Board]
15
39
  def find(id, params = {})
16
40
  client.find(:board, id, params)
@@ -20,8 +44,10 @@ module Trello
20
44
  data = {
21
45
  'name' => fields[:name],
22
46
  'desc' => fields[:description],
23
- 'closed' => fields[:closed] || false }
47
+ 'closed' => fields[:closed] || false,
48
+ 'starred' => fields[:starred] || false }
24
49
  data.merge!('idOrganization' => fields[:organization_id]) if fields[:organization_id]
50
+ data.merge!('prefs' => fields[:prefs]) if fields[:prefs]
25
51
  client.create(:board, data)
26
52
  end
27
53
 
@@ -34,9 +60,10 @@ module Trello
34
60
  def save
35
61
  return update! if id
36
62
 
37
- fields = { :name => name }
38
- fields.merge!(:desc => description) if description
39
- fields.merge!(:idOrganization => organization_id) if organization_id
63
+ fields = { name: name }
64
+ fields.merge!(desc: description) if description
65
+ fields.merge!(idOrganization: organization_id) if organization_id
66
+ fields.merge!(flat_prefs)
40
67
 
41
68
  client.post("/boards", fields).json_into(self)
42
69
  end
@@ -47,12 +74,16 @@ module Trello
47
74
  @previously_changed = changes
48
75
  @changed_attributes.clear
49
76
 
50
- client.put("/boards/#{self.id}/", {
51
- :name => attributes[:name],
52
- :description => attributes[:description],
53
- :closed => attributes[:closed],
54
- :idOrganization => attributes[:organization_id]
55
- }).json_into(self)
77
+ fields = {
78
+ name: attributes[:name],
79
+ description: attributes[:description],
80
+ closed: attributes[:closed],
81
+ starred: attributes[:starred],
82
+ idOrganization: attributes[:organization_id]
83
+ }
84
+ fields.merge!(flat_prefs)
85
+
86
+ client.put("/boards/#{self.id}/", fields).json_into(self)
56
87
  end
57
88
 
58
89
  def update_fields(fields)
@@ -60,6 +91,7 @@ module Trello
60
91
  attributes[:name] = fields['name'] if fields['name']
61
92
  attributes[:description] = fields['desc'] if fields['desc']
62
93
  attributes[:closed] = fields['closed'] if fields.has_key?('closed')
94
+ attributes[:starred] = fields['starred'] if fields.has_key?('starred')
63
95
  attributes[:url] = fields['url'] if fields['url']
64
96
  attributes[:organization_id] = fields['idOrganization'] if fields['idOrganization']
65
97
  attributes[:prefs] = fields['prefs'] || {}
@@ -71,6 +103,11 @@ module Trello
71
103
  attributes[:closed]
72
104
  end
73
105
 
106
+ # @return [Boolean]
107
+ def starred?
108
+ attributes[:starred]
109
+ end
110
+
74
111
  # @return [Boolean]
75
112
  def has_lists?
76
113
  lists.size > 0
@@ -82,29 +119,40 @@ module Trello
82
119
  client.get("/boards/#{self.id}/cards/#{card_id}").json_into(Card)
83
120
  end
84
121
 
122
+ # Add a member to this Board.
123
+ # type => [ :admin, :normal, :observer ]
124
+ def add_member(member, type = :normal)
125
+ client.put("/boards/#{self.id}/members/#{member.id}", { type: type })
126
+ end
127
+
128
+ # Remove a member of this Board.
129
+ def remove_member(member)
130
+ client.delete("/boards/#{self.id}/members/#{member.id}")
131
+ end
132
+
85
133
  # Return all the cards on this board.
86
134
  #
87
135
  # This method, when called, can take a hash table with a filter key containing any
88
136
  # of the following values:
89
137
  # :filter => [ :none, :open, :closed, :all ] # default :open
90
- many :cards, :filter => :open
138
+ many :cards, filter: :open
91
139
 
92
140
  # Returns all the lists on this board.
93
141
  #
94
142
  # This method, when called, can take a hash table with a filter key containing any
95
143
  # of the following values:
96
144
  # :filter => [ :none, :open, :closed, :all ] # default :open
97
- many :lists, :filter => :open
145
+ many :lists, filter: :open
98
146
 
99
147
  # Returns an array of members who are associated with this board.
100
148
  #
101
149
  # This method, when called, can take a hash table with a filter key containing any
102
150
  # of the following values:
103
151
  # :filter => [ :none, :normal, :owners, :all ] # default :all
104
- many :members, :filter => :all
152
+ many :members, filter: :all
105
153
 
106
154
  # Returns a reference to the organization this board belongs to.
107
- one :organization, :path => :organizations, :using => :organization_id
155
+ one :organization, path: :organizations, using: :organization_id
108
156
 
109
157
  def labels
110
158
  labels = client.get("/boards/#{id}/labelnames").json_into(LabelName)
@@ -115,5 +163,29 @@ module Trello
115
163
  def request_prefix
116
164
  "/boards/#{id}"
117
165
  end
166
+
167
+ private
168
+
169
+ # On creation
170
+ # https://trello.com/docs/api/board/#post-1-boards
171
+ # - permissionLevel
172
+ # - voting
173
+ # - comments
174
+ # - invitations
175
+ # - selfJoin
176
+ # - cardCovers
177
+ # - background
178
+ # - cardAging
179
+ #
180
+ # On update
181
+ # https://trello.com/docs/api/board/#put-1-boards-board-id
182
+ # Same as above plus:
183
+ # - calendarFeedEnabled
184
+ def flat_prefs
185
+ separator = id ? "/" : "_"
186
+ attributes[:prefs].inject({}) do |hash, (pref, v)|
187
+ hash.merge("prefs#{separator}#{pref}" => v)
188
+ end
189
+ end
118
190
  end
119
191
  end
data/lib/trello/card.rb CHANGED
@@ -1,13 +1,48 @@
1
1
  module Trello
2
2
  # A Card is a container that can house checklists and comments; it resides inside a List.
3
+ #
4
+ # @!attribute [r] id
5
+ # @return [String]
6
+ # @!attribute [r] short_id
7
+ # @return [Fixnum]
8
+ # @!attribute [rw] name
9
+ # @return [String]
10
+ # @!attribute [rw] desc
11
+ # @return [String]
12
+ # @!attribute [rw] due
13
+ # @return [Datetime]
14
+ # @!attribute [rw] closed
15
+ # @return [Boolean]
16
+ # @!attribute [r] url
17
+ # @return [String]
18
+ # @!attribute [r] short_url
19
+ # @return [String]
20
+ # @!attribute [rw] board_id
21
+ # @return [String] A 24-character hex string
22
+ # @!attribute [rw] member_ids
23
+ # @return [Array<String>] An Array of 24-character hex strings
24
+ # @!attribute [rw] list_id
25
+ # @return [String] A 24-character hex string
26
+ # @!attribute [rw] pos
27
+ # @return [Float]
28
+ # @!attribute [r] last_activity_date
29
+ # @return [Dateime]
30
+ # @!attribute [rw] card_labels
31
+ # @return [Array<Hash>]
32
+ # @!attribute [rw] cover_image_id
33
+ # @return [String] A 24-character hex string
34
+ # @!attribute [r] badges
35
+ # @return [Hash]
36
+ # @!attribute [r] card_members
37
+ # @return [Object]
3
38
  class Card < BasicData
4
39
  register_attributes :id, :short_id, :name, :desc, :due, :closed, :url, :short_url,
5
40
  :board_id, :member_ids, :list_id, :pos, :last_activity_date, :card_labels,
6
41
  :cover_image_id, :badges, :card_members,
7
- :readonly => [ :id, :short_id, :url, :short_url, :last_activity_date, :badges, :card_members ]
42
+ readonly: [ :id, :short_id, :url, :short_url, :last_activity_date, :badges, :card_members ]
8
43
  validates_presence_of :id, :name, :list_id
9
- validates_length_of :name, :in => 1..16384
10
- validates_length_of :desc, :in => 0..16384
44
+ validates_length_of :name, in: 1..16384
45
+ validates_length_of :desc, in: 0..16384
11
46
 
12
47
  include HasActions
13
48
 
@@ -33,11 +68,32 @@ module Trello
33
68
 
34
69
  class << self
35
70
  # Find a specific card by its id.
71
+ #
72
+ # @raise [Trello::Error] if the card could not be found.
73
+ #
74
+ # @return [Trello::Card]
36
75
  def find(id, params = {})
37
76
  client.find(:card, id, params)
38
77
  end
39
78
 
40
79
  # Create a new card and save it on Trello.
80
+ #
81
+ # @param [Hash] options # @option options [String] :name The name of the new card.
82
+ # @option options [String] :list_id ID of the list that the card should
83
+ # be added to.
84
+ # @option options [String] :desc A string with a
85
+ # length from 0 to 16384.
86
+ # @option options [String] :member_ids A comma-separated list of
87
+ # objectIds (24-character hex strings).
88
+ # @option options [String] :card_labels A comma-separated list of
89
+ # objectIds (24-character hex strings).
90
+ # @option options [Date] :due A date, or `nil`.
91
+ # @option options [String] :pos A position. `"top"`, `"bottom"`, or a
92
+ # positive number. Defaults to `"bottom"`.
93
+ #
94
+ # @raise [Trello::Error] if the card could not be created.
95
+ #
96
+ # @return [Trello::Card]
41
97
  def create(options)
42
98
  client.create(:card,
43
99
  'name' => options[:name],
@@ -55,6 +111,34 @@ module Trello
55
111
  #
56
112
  # Supply a hash of string keyed data retrieved from the Trello API representing
57
113
  # a card.
114
+ #
115
+ # Note that this this method does not save anything new to the Trello API,
116
+ # it just assigns the input attributes to your local object. If you use
117
+ # this method to assign attributes, call `save` or `update!` afterwards if
118
+ # you want to persist your changes to Trello.
119
+ #
120
+ # @param [Hash] fields
121
+ # @option fields [String] :id
122
+ # @option fields [String] :short_id
123
+ # @option fields [String] :name The new name of the card.
124
+ # @option fields [String] :desc A string with a length from 0 to
125
+ # 16384.
126
+ # @option fields [Date] :due A date, or `nil`.
127
+ # @option fields [Boolean] :closed
128
+ # @option fields [String] :url
129
+ # @option fields [String] :short_url
130
+ # @option fields [String] :board_id
131
+ # @option fields [String] :member_ids A comma-separated list of objectIds
132
+ # (24-character hex strings).
133
+ # @option fields [String] :pos A position. `"top"`, `"bottom"`, or a
134
+ # positive number. Defaults to `"bottom"`.
135
+ # @option fields [String] :card_labels A comma-separated list of
136
+ # objectIds (24-character hex strings).
137
+ # @option fields [Object] :cover_image_id
138
+ # @option fields [Object] :badges
139
+ # @option fields [Object] :card_members
140
+ #
141
+ # @return [Trello::Card] self
58
142
  def update_fields(fields)
59
143
  attributes[:id] = fields[SYMBOL_TO_STRING[:id]]
60
144
  attributes[:short_id] = fields[SYMBOL_TO_STRING[:short_id]]
@@ -77,16 +161,16 @@ module Trello
77
161
  end
78
162
 
79
163
  # Returns a reference to the board this card is part of.
80
- one :board, :path => :boards, :using => :board_id
164
+ one :board, path: :boards, using: :board_id
81
165
  # Returns a reference to the cover image attachment
82
- one :cover_image, :path => :attachments, :using => :cover_image_id
166
+ one :cover_image, path: :attachments, using: :cover_image_id
83
167
 
84
168
  # Returns a list of checklists associated with the card.
85
169
  #
86
170
  # The options hash may have a filter key which can have its value set as any
87
171
  # of the following values:
88
172
  # :filter => [ :none, :all ] # default :all
89
- many :checklists, :filter => :all
173
+ many :checklists, filter: :all
90
174
 
91
175
  def check_item_states
92
176
  states = client.get("/cards/#{self.id}/checkItemStates").json_into(CheckItemState)
@@ -95,9 +179,11 @@ module Trello
95
179
 
96
180
 
97
181
  # Returns a reference to the list this card is currently in.
98
- one :list, :path => :lists, :using => :list_id
182
+ one :list, path: :lists, using: :list_id
99
183
 
100
184
  # Returns a list of members who are assigned to this card.
185
+ #
186
+ # @return [Array<Trello::Member>]
101
187
  def members
102
188
  members = member_ids.map do |member_id|
103
189
  client.get("/members/#{member_id}").json_into(Member)
@@ -106,6 +192,11 @@ module Trello
106
192
  end
107
193
 
108
194
  # Saves a record.
195
+ #
196
+ # @raise [Trello::Error] if the card could not be saved
197
+ #
198
+ # @return [String] The JSON representation of the saved card returned by
199
+ # the Trello API.
109
200
  def save
110
201
  # If we have an id, just update our fields.
111
202
  return update! if id
@@ -121,9 +212,15 @@ module Trello
121
212
  end
122
213
 
123
214
  # Update an existing record.
124
- # Warning, this updates all fields using values already in memory. If
215
+ #
216
+ # Warning: this updates all fields using values already in memory. If
125
217
  # an external resource has updated these fields, you should refresh!
126
218
  # this object before making your changes, and before updating the record.
219
+ #
220
+ # @raise [Trello::Error] if the card could not be updated.
221
+ #
222
+ # @return [String] The JSON representation of the updated card returned by
223
+ # the Trello API.
127
224
  def update!
128
225
  @previously_changed = changes
129
226
  # extract only new values to build payload
@@ -133,7 +230,10 @@ module Trello
133
230
  client.put("/cards/#{id}", payload)
134
231
  end
135
232
 
233
+
136
234
  # Delete this card
235
+ #
236
+ # @return [String] the JSON response from the Trello API
137
237
  def delete
138
238
  client.delete("/cards/#{id}")
139
239
  end
@@ -143,6 +243,15 @@ module Trello
143
243
  closed
144
244
  end
145
245
 
246
+ # Close the card.
247
+ #
248
+ # This only marks your local copy card as closed. Use `close!` if you
249
+ # want to close the card and persist the change to the Trello API.
250
+ #
251
+ # @return [Boolean] always returns true
252
+ #
253
+ # @return [String] The JSON representation of the closed card returned by
254
+ # the Trello API.
146
255
  def close
147
256
  self.closed = true
148
257
  end
@@ -159,13 +268,13 @@ module Trello
159
268
 
160
269
  # Add a comment with the supplied text.
161
270
  def add_comment(text)
162
- client.post("/cards/#{id}/actions/comments", :text => text)
271
+ client.post("/cards/#{id}/actions/comments", text: text)
163
272
  end
164
273
 
165
274
  # Add a checklist to this card
166
275
  def add_checklist(checklist)
167
276
  client.post("/cards/#{id}/checklists", {
168
- :value => checklist.id
277
+ value: checklist.id
169
278
  })
170
279
  end
171
280
 
@@ -187,7 +296,7 @@ module Trello
187
296
  # Move this card to the given board (and optional list on this board)
188
297
  def move_to_board(new_board, new_list = nil)
189
298
  unless board_id == new_board.id
190
- payload = { :value => new_board.id }
299
+ payload = { value: new_board.id }
191
300
  payload[:idList] = new_list.id if new_list
192
301
  client.put("/cards/#{id}/idBoard", payload)
193
302
  end
@@ -196,7 +305,7 @@ module Trello
196
305
  # Add a member to this card
197
306
  def add_member(member)
198
307
  client.post("/cards/#{id}/members", {
199
- :value => member.id
308
+ value: member.id
200
309
  })
201
310
  end
202
311
 
@@ -222,7 +331,7 @@ module Trello
222
331
  errors.add(:label, "colour '#{colour}' does not exist")
223
332
  return Trello.logger.warn "The label colour '#{colour}' does not exist."
224
333
  end
225
- client.post("/cards/#{id}/labels", { :value => colour })
334
+ client.post("/cards/#{id}/labels", { value: colour })
226
335
  end
227
336
 
228
337
  # Remove a label
@@ -238,13 +347,13 @@ module Trello
238
347
  def add_attachment(attachment, name='')
239
348
  if attachment.is_a? File
240
349
  client.post("/cards/#{id}/attachments", {
241
- :file => attachment,
242
- :name => name
350
+ file: attachment,
351
+ name: name
243
352
  })
244
353
  else
245
354
  client.post("/cards/#{id}/attachments", {
246
- :url => attachment,
247
- :name => name
355
+ url: attachment,
356
+ name: name
248
357
  })
249
358
  end
250
359
  end
@@ -255,7 +364,7 @@ module Trello
255
364
  MultiAssociation.new(self, attachments).proxy
256
365
  end
257
366
 
258
- # Remove an attachment from this card
367
+ # Remove an attachment from this card
259
368
  def remove_attachment(attachment)
260
369
  client.delete("/cards/#{id}/attachments/#{attachment.id}")
261
370
  end