ruby-trello 2.3.1 → 3.0.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.
- checksums.yaml +4 -4
- data/README.md +13 -2
- data/lib/trello.rb +13 -7
- data/lib/trello/action.rb +27 -21
- data/lib/trello/attachment.rb +40 -27
- data/lib/trello/basic_data.rb +104 -9
- data/lib/trello/board.rb +88 -102
- data/lib/trello/card.rb +34 -235
- data/lib/trello/checklist.rb +17 -71
- data/lib/trello/comment.rb +32 -22
- data/lib/trello/cover_image.rb +20 -0
- data/lib/trello/custom_field.rb +31 -84
- data/lib/trello/custom_field_item.rb +36 -58
- data/lib/trello/custom_field_option.rb +40 -13
- data/lib/trello/item.rb +27 -16
- data/lib/trello/item_state.rb +7 -15
- data/lib/trello/json_utils.rb +1 -1
- data/lib/trello/label.rb +14 -101
- data/lib/trello/label_name.rb +22 -25
- data/lib/trello/list.rb +31 -44
- data/lib/trello/member.rb +77 -32
- data/lib/trello/notification.rb +27 -20
- data/lib/trello/organization.rb +53 -25
- data/lib/trello/plugin_datum.rb +11 -16
- data/lib/trello/schema.rb +31 -0
- data/lib/trello/schema/attribute/base.rb +79 -0
- data/lib/trello/schema/attribute/board_pref.rb +45 -0
- data/lib/trello/schema/attribute/custom_field_display.rb +45 -0
- data/lib/trello/schema/attribute/default.rb +45 -0
- data/lib/trello/schema/attribute_builder.rb +42 -0
- data/lib/trello/schema/attribute_registration.rb +47 -0
- data/lib/trello/schema/serializer/default.rb +17 -0
- data/lib/trello/schema/serializer/labels.rb +23 -0
- data/lib/trello/schema/serializer/time.rb +25 -0
- data/lib/trello/schema/serializer/webhooks.rb +25 -0
- data/lib/trello/token.rb +15 -12
- data/lib/trello/webhook.rb +18 -71
- data/spec/action_spec.rb +1 -2
- data/spec/board_spec.rb +43 -103
- data/spec/card_spec.rb +51 -50
- data/spec/cassettes/action_find_with_id_and_get_all_fields.yml +104 -0
- data/spec/cassettes/board_find_with_id_and_get_all_fields.yml +96 -0
- data/spec/cassettes/board_find_with_id_and_get_specific_fields.yml +96 -0
- data/spec/cassettes/can_add_a_member_to_a_board.yml +191 -0
- data/spec/cassettes/can_arvhice_all_cards_of_list.yml +397 -0
- data/spec/cassettes/can_get_actions_of_board.yml +188 -0
- data/spec/cassettes/can_get_actions_of_list.yml +202 -0
- data/spec/cassettes/can_get_actions_of_members.yml +199 -0
- data/spec/cassettes/can_get_actions_of_organization.yml +201 -0
- data/spec/cassettes/can_get_boards_of_custom_field.yml +198 -0
- data/spec/cassettes/can_get_boards_of_label.yml +197 -0
- data/spec/cassettes/can_get_boards_of_organization.yml +207 -0
- data/spec/cassettes/can_get_cards_of_board.yml +193 -0
- data/spec/cassettes/can_get_cards_of_list.yml +201 -0
- data/spec/cassettes/can_get_cards_of_member.yml +204 -0
- data/spec/cassettes/can_get_checklists_of_board.yml +187 -0
- data/spec/cassettes/can_get_custom_field_options_of_custom_field.yml +197 -0
- data/spec/cassettes/can_get_custom_fields_of_board.yml +187 -0
- data/spec/cassettes/can_get_label_names_of_board.yml +187 -0
- data/spec/cassettes/can_get_labels_of_board.yml +187 -0
- data/spec/cassettes/can_get_lists_of_board.yml +187 -0
- data/spec/cassettes/can_get_members_of_board.yml +188 -0
- data/spec/cassettes/can_get_members_of_organization.yml +200 -0
- data/spec/cassettes/can_get_notifications_of_member.yml +199 -0
- data/spec/cassettes/can_get_organization_of_board.yml +189 -0
- data/spec/cassettes/can_get_organizations_of_member.yml +203 -0
- data/spec/cassettes/can_get_plugin_data_of_board.yml +187 -0
- data/spec/cassettes/can_move_all_cards_to_another_list.yml +886 -0
- data/spec/cassettes/can_success_create_a_board.yml +98 -0
- data/spec/cassettes/can_success_create_a_board_with_full_parameters.yml +97 -0
- data/spec/cassettes/can_success_create_a_board_without_clone_from_other.yml +98 -0
- data/spec/cassettes/can_success_create_a_card_when_due_is_datetime.yml +98 -0
- data/spec/cassettes/can_success_create_a_card_when_due_is_time.yml +98 -0
- data/spec/cassettes/can_success_create_a_checklist.yml +102 -0
- data/spec/cassettes/can_success_create_a_custom_field.yml +102 -0
- data/spec/cassettes/can_success_create_a_custom_field_option.yml +102 -0
- data/spec/cassettes/can_success_create_a_label.yml +102 -0
- data/spec/cassettes/can_success_create_a_list.yml +102 -0
- data/spec/cassettes/can_success_create_a_list_with_full_parameters.yml +102 -0
- data/spec/cassettes/can_success_create_a_organization.yml +104 -0
- data/spec/cassettes/can_success_create_a_webhook.yml +102 -0
- data/spec/cassettes/can_success_delete_a_custom_field_option.yml +389 -0
- data/spec/cassettes/can_success_delete_checklist.yml +284 -0
- data/spec/cassettes/can_success_get_card_of_board_by_card_id.yml +188 -0
- data/spec/cassettes/can_success_remove_member_from_board.yml +186 -0
- data/spec/cassettes/can_success_return_all_boards_of_current_user.yml +195 -0
- data/spec/cassettes/can_success_upate_a_board.yml +191 -0
- data/spec/cassettes/can_success_upate_a_list.yml +296 -0
- data/spec/cassettes/can_success_update_bong_a_board.yml +39 -39
- data/spec/cassettes/can_success_update_bong_a_board_with_specific_fields.yml +284 -0
- data/spec/cassettes/can_success_update_bong_a_checklist_with_specific_fields.yml +296 -0
- data/spec/cassettes/can_success_update_bong_a_custom_field.yml +200 -0
- data/spec/cassettes/can_success_update_bong_a_label.yml +200 -0
- data/spec/cassettes/can_success_update_bong_a_list.yml +199 -0
- data/spec/cassettes/can_success_update_bong_a_list_with_specific_fields.yml +296 -0
- data/spec/cassettes/can_success_update_bong_a_organization.yml +203 -0
- data/spec/cassettes/can_success_update_bong_a_webhook.yml +296 -0
- data/spec/cassettes/checklist_can_add_an_item.yml +296 -0
- data/spec/cassettes/checklist_can_update_the_item_state.yml +296 -0
- data/spec/cassettes/checklist_find_with_id_and_get_all_fields.yml +100 -0
- data/spec/cassettes/custom_field_find_with_id_and_get_all_fields.yml +100 -0
- data/spec/cassettes/custom_field_find_with_id_and_get_specific_fields.yml +100 -0
- data/spec/cassettes/custom_field_item_save_1.yml +1 -1
- data/spec/cassettes/custom_field_item_save_2.yml +1 -1
- data/spec/cassettes/custom_field_option_find_with_id.yml +100 -0
- data/spec/cassettes/get_board_of_list.yml +197 -0
- data/spec/cassettes/get_boards_of_member.yml +207 -0
- data/spec/cassettes/label_delete.yml +285 -0
- data/spec/cassettes/label_find_with_id.yml +100 -0
- data/spec/cassettes/list_find_with_id_and_get_all_fields.yml +100 -0
- data/spec/cassettes/list_find_with_id_and_get_specific_fields.yml +100 -0
- data/spec/cassettes/member_find_with_id_and_get_all_fields.yml +101 -0
- data/spec/cassettes/member_find_with_id_and_get_specific_fields.yml +100 -0
- data/spec/cassettes/notification_find_with_id.yml +103 -0
- data/spec/cassettes/organization_find_with_id_and_get_all_fields.yml +102 -0
- data/spec/cassettes/organization_find_with_id_and_get_specific_fields.yml +100 -0
- data/spec/cassettes/token_find_with_token_string.yml +100 -0
- data/spec/cassettes/webhook_delete.yml +286 -0
- data/spec/cassettes/webhook_find_with_id.yml +100 -0
- data/spec/checklist_spec.rb +27 -43
- data/spec/custom_field_item_spec.rb +2 -2
- data/spec/custom_field_option_spec.rb +2 -2
- data/spec/custom_field_spec.rb +25 -13
- data/spec/integration/action/find_spec.rb +23 -0
- data/spec/integration/basic_data/many_spec.rb +4 -0
- data/spec/integration/basic_data/schema_spec.rb +156 -0
- data/spec/integration/board/add_member_spec.rb +21 -0
- data/spec/integration/board/all_spec.rb +20 -0
- data/spec/integration/board/associations/actions_spec.rb +18 -0
- data/spec/integration/board/associations/cards_spec.rb +18 -0
- data/spec/integration/board/associations/checklists_spec.rb +18 -0
- data/spec/integration/board/associations/custom_fields_spec.rb +18 -0
- data/spec/integration/board/associations/label_names_spec.rb +17 -0
- data/spec/integration/board/associations/labels_spec.rb +18 -0
- data/spec/integration/board/associations/lists_spec.rb +18 -0
- data/spec/integration/board/associations/members_spec.rb +18 -0
- data/spec/integration/board/associations/organization_spec.rb +19 -0
- data/spec/integration/board/associations/plugin_data_spec.rb +18 -0
- data/spec/integration/board/create_spec.rb +95 -0
- data/spec/integration/board/find_card_spec.rb +18 -0
- data/spec/integration/board/find_spec.rb +42 -0
- data/spec/integration/board/remove_member_spec.rb +21 -0
- data/spec/integration/board/save_spec.rb +37 -0
- data/spec/integration/board/update!_spec.rb +33 -2
- data/spec/integration/card/associations/plugin_data_spec.rb +1 -1
- data/spec/integration/card/create_spec.rb +36 -2
- data/spec/integration/card/find_spec.rb +1 -1
- data/spec/integration/card/save_spec.rb +2 -2
- data/spec/integration/checklist/add_item_spec.rb +20 -0
- data/spec/integration/checklist/create_spec.rb +23 -0
- data/spec/integration/checklist/delete_spec.rb +17 -0
- data/spec/integration/checklist/find_spec.rb +22 -0
- data/spec/integration/checklist/update!_spec.rb +21 -0
- data/spec/integration/checklist/update_item_state_spec.rb +20 -0
- data/spec/integration/custom_field/association/board_spec.rb +18 -0
- data/spec/integration/custom_field/association/custom_field_options_spec.rb +18 -0
- data/spec/integration/custom_field/create_spec.rb +29 -0
- data/spec/integration/custom_field/find_spec.rb +41 -0
- data/spec/integration/custom_field/update!_spec.rb +25 -0
- data/spec/integration/custom_field_option/create_spec.rb +23 -0
- data/spec/integration/custom_field_option/delete_spec.rb +19 -0
- data/spec/integration/custom_field_option/find_spec.rb +21 -0
- data/spec/integration/label/association/board_spec.rb +18 -0
- data/spec/integration/label/create_spec.rb +23 -0
- data/spec/integration/label/delete_spec.rb +21 -0
- data/spec/integration/label/find_spec.rb +20 -0
- data/spec/integration/label/update!_spec.rb +25 -0
- data/spec/integration/list/archive_all_cards_spec.rb +20 -0
- data/spec/integration/list/associations/actions_spec.rb +18 -0
- data/spec/integration/list/associations/board_spec.rb +18 -0
- data/spec/integration/list/associations/cards_spec.rb +18 -0
- data/spec/integration/list/create_spec.rb +44 -0
- data/spec/integration/list/find_spec.rb +37 -0
- data/spec/integration/list/move_all_cards_spec.rb +31 -0
- data/spec/integration/list/save_spec.rb +40 -0
- data/spec/integration/list/update!_spec.rb +43 -0
- data/spec/integration/member/associations/actions_spec.rb +17 -0
- data/spec/integration/member/associations/boards_spec.rb +18 -0
- data/spec/integration/member/associations/cards_spec.rb +18 -0
- data/spec/integration/member/associations/notifications_spec.rb +18 -0
- data/spec/integration/member/associations/organizations_spec.rb +18 -0
- data/spec/integration/member/find_spec.rb +39 -0
- data/spec/integration/member/update!_spec.rb +18 -0
- data/spec/integration/notification/find_spec.rb +27 -0
- data/spec/integration/organization/associations/actions_spec.rb +18 -0
- data/spec/integration/organization/associations/boards_spec.rb +18 -0
- data/spec/integration/organization/associations/members_spec.rb +18 -0
- data/spec/integration/organization/create_spec.rb +23 -0
- data/spec/integration/organization/find_spec.rb +37 -0
- data/spec/integration/organization/update!_spec.rb +28 -0
- data/spec/integration/token/find_spec.rb +24 -0
- data/spec/integration/webhook/create_spec.rb +27 -0
- data/spec/integration/webhook/delete_spec.rb +21 -0
- data/spec/integration/webhook/find_spec.rb +22 -0
- data/spec/integration/webhook/update!_spec.rb +24 -0
- data/spec/item_spec.rb +2 -2
- data/spec/label_spec.rb +31 -33
- data/spec/list_spec.rb +32 -14
- data/spec/notification_spec.rb +3 -3
- data/spec/organization_spec.rb +6 -5
- data/spec/spec_helper.rb +22 -14
- data/spec/token_spec.rb +10 -11
- data/spec/unit/trello/basic_data_spec.rb +67 -8
- data/spec/unit/trello/board/new_spec.rb +370 -0
- data/spec/unit/trello/board/save_spec.rb +49 -0
- data/spec/unit/trello/board/update_fields_spec.rb +129 -0
- data/spec/unit/trello/board/update_spec.rb +197 -0
- data/spec/unit/trello/member/new_spec.rb +62 -0
- data/spec/unit/trello/member/update_fields_spec.rb +80 -0
- data/spec/unit/trello/schema/attribute/base_spec.rb +349 -0
- data/spec/unit/trello/schema/attribute/board_pref_spec.rb +208 -0
- data/spec/unit/trello/schema/attribute/default_spec.rb +236 -0
- data/spec/unit/trello/schema/attribute_builder_spec.rb +55 -0
- data/spec/unit/trello/schema/attribute_registration_spec.rb +59 -0
- data/spec/unit/trello/schema/serializer/default_spec.rb +19 -0
- data/spec/unit/trello/schema/serializer/time_spec.rb +39 -0
- data/spec/unit/trello/schema_spec.rb +25 -0
- data/spec/webhook_spec.rb +23 -7
- metadata +422 -102
- data/lib/trello/register_attributes.rb +0 -54
- data/spec/integration/basic_data/register_attributes_spec.rb +0 -75
data/lib/trello/card.rb
CHANGED
@@ -43,147 +43,46 @@ module Trello
|
|
43
43
|
# @return [Array<String>] Array of strings
|
44
44
|
|
45
45
|
class Card < BasicData
|
46
|
-
|
47
|
-
|
48
|
-
:
|
49
|
-
|
46
|
+
schema do
|
47
|
+
# readonly
|
48
|
+
attribute :id, readonly: true, primary_key: true
|
49
|
+
attribute :short_id, readonly: true, remote_key: 'idShort'
|
50
|
+
attribute :url, readonly: true
|
51
|
+
attribute :short_url, readonly: true, remote_key: 'shortUrl'
|
52
|
+
attribute :last_activity_date, readonly: true, remote_key: 'dateLastActivity', serializer: 'Time'
|
53
|
+
attribute :labels, readonly: true, default: [], serializer: 'Labels'
|
54
|
+
attribute :badges, readonly: true
|
55
|
+
attribute :card_members, readonly: true, remote_key: 'members'
|
56
|
+
|
57
|
+
# Writable
|
58
|
+
attribute :name
|
59
|
+
attribute :desc
|
60
|
+
attribute :due, serializer: 'Time'
|
61
|
+
attribute :due_complete, remote_key: 'dueComplete'
|
62
|
+
attribute :member_ids, remote_key: 'idMembers'
|
63
|
+
attribute :list_id, remote_key: 'idList'
|
64
|
+
attribute :pos
|
65
|
+
attribute :card_labels, remote_key: 'idLabels'
|
66
|
+
|
67
|
+
# Writable but for create only
|
68
|
+
attribute :source_card_id, create_only: true, remote_key: 'idCardSource'
|
69
|
+
attribute :keep_from_source, create_only: true, remote_key: 'keepFromSource'
|
70
|
+
|
71
|
+
# Writable but for update only
|
72
|
+
attribute :closed, update_only: true
|
73
|
+
attribute :board_id, update_only: true, remote_key: 'idBoard'
|
74
|
+
attribute :cover_image_id, update_only: true, remote_key: 'idAttachmentCover'
|
75
|
+
|
76
|
+
# Deprecated
|
77
|
+
attribute :source_card_properties, create_only: true, remote_key: 'keepFromSource'
|
78
|
+
end
|
79
|
+
|
50
80
|
validates_presence_of :id, :name, :list_id
|
51
81
|
validates_length_of :name, in: 1..16384
|
52
82
|
validates_length_of :desc, in: 0..16384
|
53
83
|
|
54
84
|
include HasActions
|
55
85
|
|
56
|
-
SYMBOL_TO_STRING = {
|
57
|
-
id: 'id',
|
58
|
-
short_id: 'idShort',
|
59
|
-
name: 'name',
|
60
|
-
desc: 'desc',
|
61
|
-
due: 'due',
|
62
|
-
due_complete: 'dueComplete',
|
63
|
-
closed: 'closed',
|
64
|
-
url: 'url',
|
65
|
-
short_url: 'shortUrl',
|
66
|
-
board_id: 'idBoard',
|
67
|
-
member_ids: 'idMembers',
|
68
|
-
cover_image_id: 'idAttachmentCover',
|
69
|
-
list_id: 'idList',
|
70
|
-
pos: 'pos',
|
71
|
-
last_activity_date: 'dateLastActivity',
|
72
|
-
card_labels: 'idLabels',
|
73
|
-
labels: 'labels',
|
74
|
-
badges: 'badges',
|
75
|
-
card_members: 'members',
|
76
|
-
source_card_id: "idCardSource",
|
77
|
-
source_card_properties: "keepFromSource"
|
78
|
-
}
|
79
|
-
|
80
|
-
class << self
|
81
|
-
# Find a specific card by its id.
|
82
|
-
#
|
83
|
-
# @raise [Trello::Error] if the card could not be found.
|
84
|
-
#
|
85
|
-
# @return [Trello::Card]
|
86
|
-
def find(id, params = {})
|
87
|
-
client.find(:card, id, params)
|
88
|
-
end
|
89
|
-
|
90
|
-
# Create a new card and save it on Trello.
|
91
|
-
#
|
92
|
-
# If using source_card_id to duplicate a card, make sure to save
|
93
|
-
# the source card to Trello before calling this method to assure
|
94
|
-
# the correct data is used in the duplication.
|
95
|
-
#
|
96
|
-
# @param [Hash] options
|
97
|
-
# @option options [String] :name The name of the new card.
|
98
|
-
# @option options [String] :list_id ID of the list that the card should
|
99
|
-
# be added to.
|
100
|
-
# @option options [String] :desc A string with a
|
101
|
-
# length from 0 to 16384.
|
102
|
-
# @option options [String] :member_ids A comma-separated list of
|
103
|
-
# objectIds (24-character hex strings).
|
104
|
-
# @option options [String] :card_labels A comma-separated list of
|
105
|
-
# objectIds (24-character hex strings).
|
106
|
-
# @option options [Date] :due A date, or `nil`.
|
107
|
-
# @option options [String] :pos A position. `"top"`, `"bottom"`, or a
|
108
|
-
# positive number. Defaults to `"bottom"`.
|
109
|
-
# @option options [String] :source_card_id ID of the card to copy
|
110
|
-
# @option options [String] :source_card_properties A single, or array of,
|
111
|
-
# string properties to copy from source card.
|
112
|
-
# `"all"`, `"checklists"`, `"due"`, `"members"`, or `nil`.
|
113
|
-
# Defaults to `"all"`.
|
114
|
-
#
|
115
|
-
# @raise [Trello::Error] if the card could not be created.
|
116
|
-
#
|
117
|
-
# @return [Trello::Card]
|
118
|
-
def create(options)
|
119
|
-
client.create(:card,
|
120
|
-
'name' => options[:name],
|
121
|
-
'idList' => options[:list_id],
|
122
|
-
'desc' => options[:desc],
|
123
|
-
'idMembers' => options[:member_ids],
|
124
|
-
'idLabels' => options[:card_labels],
|
125
|
-
'due' => options[:due],
|
126
|
-
'due_complete' => options[:due_complete] || false,
|
127
|
-
'pos' => options[:pos],
|
128
|
-
'idCardSource' => options[:source_card_id],
|
129
|
-
'keepFromSource' => options.key?(:source_card_properties) ? options[:source_card_properties] : 'all'
|
130
|
-
)
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
# Update the fields of a card.
|
135
|
-
#
|
136
|
-
# Supply a hash of string keyed data retrieved from the Trello API representing
|
137
|
-
# a card.
|
138
|
-
#
|
139
|
-
# Note that this this method does not save anything new to the Trello API,
|
140
|
-
# it just assigns the input attributes to your local object. If you use
|
141
|
-
# this method to assign attributes, call `save` or `update!` afterwards if
|
142
|
-
# you want to persist your changes to Trello.
|
143
|
-
#
|
144
|
-
# @param [Hash] fields
|
145
|
-
# @option fields [String] :id
|
146
|
-
# @option fields [String] :short_id
|
147
|
-
# @option fields [String] :name The new name of the card.
|
148
|
-
# @option fields [String] :desc A string with a length from 0 to
|
149
|
-
# 16384.
|
150
|
-
# @option fields [Date] :due A date, or `nil`.
|
151
|
-
# @option fields [Boolean] :due_complete
|
152
|
-
# @option fields [Boolean] :closed
|
153
|
-
# @option fields [String] :url
|
154
|
-
# @option fields [String] :short_url
|
155
|
-
# @option fields [String] :board_id
|
156
|
-
# @option fields [String] :member_ids A comma-separated list of objectIds
|
157
|
-
# (24-character hex strings).
|
158
|
-
# @option fields [String] :pos A position. `"top"`, `"bottom"`, or a
|
159
|
-
# positive number. Defaults to `"bottom"`.
|
160
|
-
# @option fields [Array] :labels An Array of Trello::Label objects
|
161
|
-
# derived from the JSON response
|
162
|
-
# @option fields [String] :card_labels A comma-separated list of
|
163
|
-
# objectIds (24-character hex strings).
|
164
|
-
# @option fields [Object] :cover_image_id
|
165
|
-
# @option fields [Object] :badges
|
166
|
-
# @option fields [Object] :card_members
|
167
|
-
# @option fields [String] :source_card_id
|
168
|
-
# @option fields [Array] :source_card_properties
|
169
|
-
#
|
170
|
-
# @return [Trello::Card] self
|
171
|
-
def update_fields(fields)
|
172
|
-
%i[
|
173
|
-
name desc due due_complete closed
|
174
|
-
board_id member_ids list_id pos
|
175
|
-
card_labels cover_image_id
|
176
|
-
].each do |key|
|
177
|
-
send("#{key}_will_change!") if fields_has_key?(fields, key)
|
178
|
-
end
|
179
|
-
|
180
|
-
initialize_fields(fields)
|
181
|
-
end
|
182
|
-
|
183
|
-
def initialize(fields = {})
|
184
|
-
initialize_fields(fields)
|
185
|
-
end
|
186
|
-
|
187
86
|
# Returns a reference to the board this card is part of.
|
188
87
|
one :board, path: :boards, using: :board_id
|
189
88
|
|
@@ -232,75 +131,6 @@ module Trello
|
|
232
131
|
Member.from_response client.get("/cards/#{id}/membersVoted")
|
233
132
|
end
|
234
133
|
|
235
|
-
# Saves a record.
|
236
|
-
#
|
237
|
-
# @raise [Trello::Error] if the card could not be saved
|
238
|
-
#
|
239
|
-
# @return [String] The JSON representation of the saved card returned by
|
240
|
-
# the Trello API.
|
241
|
-
def save
|
242
|
-
# If we have an id, just update our fields.
|
243
|
-
return update! if id
|
244
|
-
|
245
|
-
from_response client.post("/cards", {
|
246
|
-
name: name,
|
247
|
-
desc: desc,
|
248
|
-
idList: list_id,
|
249
|
-
idMembers: member_ids,
|
250
|
-
idLabels: card_labels,
|
251
|
-
pos: pos,
|
252
|
-
due: due,
|
253
|
-
dueComplete: due_complete,
|
254
|
-
idCardSource: source_card_id,
|
255
|
-
keepFromSource: source_card_properties
|
256
|
-
})
|
257
|
-
end
|
258
|
-
|
259
|
-
# Update an existing record.
|
260
|
-
#
|
261
|
-
# Warning: this updates all fields using values already in memory. If
|
262
|
-
# an external resource has updated these fields, you should refresh!
|
263
|
-
# this object before making your changes, and before updating the record.
|
264
|
-
#
|
265
|
-
# @raise [Trello::Error] if the card could not be updated.
|
266
|
-
#
|
267
|
-
# @return [Trello::Card] updated self
|
268
|
-
def update!
|
269
|
-
@previously_changed = changes
|
270
|
-
# extract only new values to build payload
|
271
|
-
payload = Hash[changes.map { |key, values| [SYMBOL_TO_STRING[key.to_sym].to_sym, values[1]] }]
|
272
|
-
|
273
|
-
response = client.put("/cards/#{id}", payload)
|
274
|
-
updated_card = from_response(response)
|
275
|
-
|
276
|
-
@changed_attributes.clear if @changed_attributes.respond_to?(:clear)
|
277
|
-
changes_applied if respond_to?(:changes_applied)
|
278
|
-
|
279
|
-
attributes[:id] = updated_card.id
|
280
|
-
attributes[:short_id] = updated_card.short_id
|
281
|
-
attributes[:name] = updated_card.name
|
282
|
-
attributes[:desc] = updated_card.desc
|
283
|
-
attributes[:due] = updated_card.due
|
284
|
-
attributes[:due_complete] = updated_card.due_complete
|
285
|
-
attributes[:closed] = updated_card.closed
|
286
|
-
attributes[:url] = updated_card.url
|
287
|
-
attributes[:short_url] = updated_card.short_url
|
288
|
-
attributes[:board_id] = updated_card.board_id
|
289
|
-
attributes[:member_ids] = updated_card.member_ids
|
290
|
-
attributes[:list_id] = updated_card.list_id
|
291
|
-
attributes[:pos] = updated_card.pos
|
292
|
-
attributes[:labels] = updated_card.labels
|
293
|
-
attributes[:card_labels] = updated_card.card_labels
|
294
|
-
attributes[:last_activity_date] = updated_card.last_activity_date
|
295
|
-
attributes[:cover_image_id] = updated_card.cover_image_id
|
296
|
-
attributes[:badges] = updated_card.badges
|
297
|
-
attributes[:card_members] = updated_card.card_members
|
298
|
-
attributes[:source_card_id] = updated_card.source_card_id
|
299
|
-
attributes[:source_card_properties] = updated_card.source_card_properties
|
300
|
-
|
301
|
-
self
|
302
|
-
end
|
303
|
-
|
304
134
|
# Delete this card
|
305
135
|
#
|
306
136
|
# @return [String] the JSON response from the Trello API
|
@@ -486,36 +316,5 @@ module Trello
|
|
486
316
|
@me ||= Member.find(:me)
|
487
317
|
end
|
488
318
|
|
489
|
-
def fields_has_key?(fields, key)
|
490
|
-
fields.key?(SYMBOL_TO_STRING[key]) || fields.key?(key)
|
491
|
-
end
|
492
|
-
|
493
|
-
def initialize_fields(fields)
|
494
|
-
attributes[:id] = fields[SYMBOL_TO_STRING[:id]] || attributes[:id]
|
495
|
-
attributes[:short_id] = fields[SYMBOL_TO_STRING[:short_id]] || attributes[:short_id]
|
496
|
-
attributes[:name] = fields[SYMBOL_TO_STRING[:name]] || fields[:name] || attributes[:name]
|
497
|
-
attributes[:desc] = fields[SYMBOL_TO_STRING[:desc]] || fields[:desc] || attributes[:desc]
|
498
|
-
attributes[:due] = Time.iso8601(fields[SYMBOL_TO_STRING[:due]]) rescue nil if fields.has_key?(SYMBOL_TO_STRING[:due])
|
499
|
-
attributes[:due] = fields[:due] if fields.has_key?(:due)
|
500
|
-
attributes[:due_complete] = fields[SYMBOL_TO_STRING[:due_complete]] if fields.has_key?(SYMBOL_TO_STRING[:due_complete])
|
501
|
-
attributes[:due_complete] ||= false
|
502
|
-
attributes[:closed] = fields[SYMBOL_TO_STRING[:closed]] if fields.has_key?(SYMBOL_TO_STRING[:closed])
|
503
|
-
attributes[:url] = fields[SYMBOL_TO_STRING[:url]] || attributes[:url]
|
504
|
-
attributes[:short_url] = fields[SYMBOL_TO_STRING[:short_url]] || attributes[:short_url]
|
505
|
-
attributes[:board_id] = fields[SYMBOL_TO_STRING[:board_id]] || attributes[:board_id]
|
506
|
-
attributes[:member_ids] = fields[SYMBOL_TO_STRING[:member_ids]] || fields[:member_ids] || attributes[:member_ids]
|
507
|
-
attributes[:list_id] = fields[SYMBOL_TO_STRING[:list_id]] || fields[:list_id] || attributes[:list_id]
|
508
|
-
attributes[:pos] = fields[SYMBOL_TO_STRING[:pos]] || fields[:pos] || attributes[:pos]
|
509
|
-
attributes[:labels] = (fields[SYMBOL_TO_STRING[:labels]] || []).map { |lbl| Trello::Label.new(lbl) }.presence || attributes[:labels].presence || []
|
510
|
-
attributes[:card_labels] = fields[SYMBOL_TO_STRING[:card_labels]] || fields[:card_labels] || attributes[:card_labels]
|
511
|
-
attributes[:last_activity_date] = Time.iso8601(fields[SYMBOL_TO_STRING[:last_activity_date]]) rescue nil if fields.has_key?(SYMBOL_TO_STRING[:last_activity_date])
|
512
|
-
attributes[:cover_image_id] = fields[SYMBOL_TO_STRING[:cover_image_id]] || attributes[:cover_image_id]
|
513
|
-
attributes[:badges] = fields[SYMBOL_TO_STRING[:badges]] || attributes[:badges]
|
514
|
-
attributes[:card_members] = fields[SYMBOL_TO_STRING[:card_members]] || attributes[:card_members]
|
515
|
-
attributes[:source_card_id] = fields[SYMBOL_TO_STRING[:source_card_id]] || fields[:source_card_id] || attributes[:source_card_id]
|
516
|
-
attributes[:source_card_properties] = fields[SYMBOL_TO_STRING[:source_card_properties]] || fields[:source_card_properties] || attributes[:source_card_properties]
|
517
|
-
self
|
518
|
-
end
|
519
|
-
|
520
319
|
end
|
521
320
|
end
|
data/lib/trello/checklist.rb
CHANGED
@@ -5,78 +5,35 @@ module Trello
|
|
5
5
|
# @return [String]
|
6
6
|
# @!attribute [rw] name
|
7
7
|
# @return [String]
|
8
|
-
# @!attribute [r] description
|
9
|
-
# @return [String]
|
10
|
-
# @!attribute [r] closed
|
11
|
-
# @return [Boolean]
|
12
8
|
# @!attribute [rw] position
|
13
9
|
# @return [Object]
|
14
|
-
# @!attribute [r] url
|
15
|
-
# @return [String]
|
16
10
|
# @!attribute [r] check_items
|
17
11
|
# @return [Object]
|
18
12
|
# @!attribute [r] board_id
|
19
13
|
# @return [String] A 24-character hex string
|
20
|
-
# @!attribute [
|
21
|
-
# @return [String]
|
22
|
-
# @!attribute [
|
23
|
-
# @return [
|
14
|
+
# @!attribute [rw] card_id
|
15
|
+
# @return [String]
|
16
|
+
# @!attribute [w] source_checklist_id
|
17
|
+
# @return [String]
|
24
18
|
class Checklist < BasicData
|
25
|
-
|
26
|
-
|
27
|
-
validates_presence_of :id, :board_id, :list_id
|
28
|
-
validates_length_of :name, in: 1..16384
|
29
|
-
|
30
|
-
class << self
|
31
|
-
# Locate a specific checklist by its id.
|
32
|
-
def find(id, params = {})
|
33
|
-
client.find(:checklist, id, params)
|
34
|
-
end
|
35
|
-
|
36
|
-
def create(options)
|
37
|
-
client.create(:checklist,
|
38
|
-
'name' => options[:name],
|
39
|
-
'idCard' => options[:card_id])
|
40
|
-
end
|
41
|
-
end
|
19
|
+
schema do
|
20
|
+
attribute :id, readonly: true, primary_key: true
|
42
21
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
# a checklist.
|
47
|
-
def update_fields(fields)
|
48
|
-
attributes[:id] = fields['id'] || attributes[:id]
|
49
|
-
attributes[:name] = fields['name'] || fields[:name] || attributes[:name]
|
50
|
-
attributes[:description] = fields['desc'] || attributes[:description]
|
51
|
-
attributes[:closed] = fields['closed'] if fields.has_key?('closed')
|
52
|
-
attributes[:url] = fields['url'] || attributes[:url]
|
53
|
-
attributes[:check_items] = fields['checkItems'] if fields.has_key?('checkItems')
|
54
|
-
attributes[:position] = fields['pos'] || attributes[:position]
|
55
|
-
attributes[:board_id] = fields['idBoard'] || attributes[:board_id]
|
56
|
-
attributes[:card_id] = fields['idCard'] || fields[:card_id] || attributes[:card_id]
|
57
|
-
attributes[:list_id] = fields['idList'] || attributes[:list_id]
|
58
|
-
attributes[:member_ids] = fields['idMembers'] || attributes[:member_ids]
|
59
|
-
self
|
60
|
-
end
|
22
|
+
# Readonly
|
23
|
+
attribute :check_items, readonly: true, remote_key: 'checkItems'
|
24
|
+
attribute :board_id, readonly: true, remote_key: 'idBoard'
|
61
25
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
end
|
26
|
+
# Writable
|
27
|
+
attribute :name
|
28
|
+
attribute :position, remote_key: 'pos'
|
66
29
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
from_response(client.post("/checklists", {
|
72
|
-
name: name,
|
73
|
-
idCard: card_id
|
74
|
-
}))
|
30
|
+
# Writable but for update only
|
31
|
+
attribute :card_id, create_only: true, remote_key: 'idCard'
|
32
|
+
attribute :source_checklist_id, create_only: true, remote_key: 'idChecklistSource'
|
75
33
|
end
|
76
34
|
|
77
|
-
|
78
|
-
|
79
|
-
end
|
35
|
+
validates_presence_of :id
|
36
|
+
validates_length_of :name, in: 1..16384
|
80
37
|
|
81
38
|
# Return a list of items on the checklist.
|
82
39
|
def items
|
@@ -91,17 +48,6 @@ module Trello
|
|
91
48
|
# Return a reference to the card the checklist is on.
|
92
49
|
one :card, path: :checklists, using: :card_id
|
93
50
|
|
94
|
-
# Return a reference to the list the checklist is on.
|
95
|
-
one :list, path: :lists, using: :list_id
|
96
|
-
|
97
|
-
# Return a list of members active in this checklist.
|
98
|
-
def members
|
99
|
-
members = member_ids.map do |member_id|
|
100
|
-
Member.find(member_id)
|
101
|
-
end
|
102
|
-
MultiAssociation.new(self, members).proxy
|
103
|
-
end
|
104
|
-
|
105
51
|
# Add an item to the checklist
|
106
52
|
def add_item(name, checked = false, position = 'bottom')
|
107
53
|
client.post("/checklists/#{id}/checkItems", {name: name, checked: checked, pos: position})
|
data/lib/trello/comment.rb
CHANGED
@@ -1,39 +1,50 @@
|
|
1
1
|
module Trello
|
2
2
|
# A Comment is a string with a creation date; it resides inside a Card and belongs to a User.
|
3
3
|
#
|
4
|
-
# @!attribute [r]
|
4
|
+
# @!attribute [r] id
|
5
5
|
# @return [String]
|
6
|
-
# @!attribute [
|
6
|
+
# @!attribute [w] text
|
7
7
|
# @return [String]
|
8
8
|
# @!attribute [r] date
|
9
9
|
# @return [Datetime]
|
10
|
-
# @!attribute [r]
|
10
|
+
# @!attribute [r] creator_id
|
11
11
|
# @return [String]
|
12
|
+
# @!attribute [r] data
|
13
|
+
# @return [Hash]
|
14
|
+
# @!attribute [r] type
|
15
|
+
# @return [String]
|
16
|
+
# @!attribute [r] limits
|
17
|
+
# @return [Hash]
|
18
|
+
# @!attribute [r] app_creator
|
19
|
+
# @return [String]
|
20
|
+
# @!attribute [r] display
|
21
|
+
# @return [Hash]
|
12
22
|
class Comment < BasicData
|
13
|
-
|
14
|
-
|
15
|
-
|
23
|
+
|
24
|
+
schema do
|
25
|
+
# Readonly
|
26
|
+
attribute :id, readonly: true, primary_key: true
|
27
|
+
attribute :creator_id, readonly: true, remote_key: 'idMemberCreator'
|
28
|
+
attribute :data, readonly: true
|
29
|
+
attribute :type, readonly: true
|
30
|
+
attribute :date, readonly: true, serializer: 'Time'
|
31
|
+
attribute :limits, readonly: true
|
32
|
+
attribute :app_creator, readonly: true, remote_key: 'appCreator'
|
33
|
+
attribute :display, readonly: true
|
34
|
+
|
35
|
+
# Writable
|
36
|
+
attribute :text, update_only: true
|
37
|
+
end
|
38
|
+
|
39
|
+
validates_presence_of :action_id, :text, :date, :creator_id
|
16
40
|
validates_length_of :text, in: 1..16384
|
17
41
|
|
18
42
|
class << self
|
19
|
-
# Locate a specific action and return a new Comment object.
|
20
43
|
def find(action_id)
|
21
|
-
client.find(:action, action_id
|
44
|
+
client.find(:action, action_id)
|
22
45
|
end
|
23
46
|
end
|
24
47
|
|
25
|
-
# Update the attributes of a Comment
|
26
|
-
#
|
27
|
-
# Supply a hash of string keyed data retrieved from the Trello API representing
|
28
|
-
# a Comment.
|
29
|
-
def update_fields(fields)
|
30
|
-
attributes[:action_id] = fields['id'] || attributes[:action_id]
|
31
|
-
attributes[:text] = fields['data']['text'] || attributes[:text]
|
32
|
-
attributes[:date] = Time.iso8601(fields['date']) if fields.has_key?('date')
|
33
|
-
attributes[:member_creator_id] = fields['idMemberCreator'] || attributes[:member_creator_id]
|
34
|
-
self
|
35
|
-
end
|
36
|
-
|
37
48
|
# Returns the board this comment is located
|
38
49
|
def board
|
39
50
|
Board.from_response client.get("/actions/#{action_id}/board")
|
@@ -55,8 +66,7 @@ module Trello
|
|
55
66
|
client.delete(ruta)
|
56
67
|
end
|
57
68
|
|
58
|
-
|
59
69
|
# Returns the member who created the comment.
|
60
|
-
one :member_creator, via: Member, path: :members, using: :
|
70
|
+
one :member_creator, via: Member, path: :members, using: :creator_id
|
61
71
|
end
|
62
72
|
end
|