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
@@ -0,0 +1,23 @@
|
|
1
|
+
module Trello
|
2
|
+
class Schema
|
3
|
+
module Serializer
|
4
|
+
class Labels
|
5
|
+
class << self
|
6
|
+
def serialize(labels)
|
7
|
+
labels.map(&:id)
|
8
|
+
end
|
9
|
+
|
10
|
+
def deserialize(labels, default)
|
11
|
+
return default unless labels
|
12
|
+
|
13
|
+
labels.map do |label|
|
14
|
+
next label if label.is_a?(Trello::Label)
|
15
|
+
|
16
|
+
Trello::Label.new(label)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Trello
|
2
|
+
class Schema
|
3
|
+
module Serializer
|
4
|
+
class Time
|
5
|
+
class << self
|
6
|
+
def serialize(time)
|
7
|
+
return nil unless time.respond_to?(:iso8601)
|
8
|
+
|
9
|
+
time.strftime('%FT%T.%LZ')
|
10
|
+
end
|
11
|
+
|
12
|
+
def deserialize(time, default)
|
13
|
+
if time.is_a?(String)
|
14
|
+
::Time.iso8601(time) rescue default
|
15
|
+
elsif time.respond_to?(:to_time)
|
16
|
+
time.to_time
|
17
|
+
else
|
18
|
+
default
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Trello
|
2
|
+
class Schema
|
3
|
+
module Serializer
|
4
|
+
class Webhooks
|
5
|
+
class << self
|
6
|
+
def serialize(webhooks)
|
7
|
+
webhooks ||= []
|
8
|
+
|
9
|
+
webhooks.map(&:id)
|
10
|
+
end
|
11
|
+
|
12
|
+
def deserialize(webhooks, default)
|
13
|
+
return default unless webhooks
|
14
|
+
|
15
|
+
webhooks.map do |webhook|
|
16
|
+
next webhook if webhook.is_a?(Trello::Webhook)
|
17
|
+
|
18
|
+
Trello::Webhook.new(webhook)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/trello/token.rb
CHANGED
@@ -2,17 +2,30 @@ module Trello
|
|
2
2
|
|
3
3
|
# @!attribute [r] id
|
4
4
|
# @return [String]
|
5
|
+
# @!attribute [r] identifier
|
6
|
+
# @return [String]
|
5
7
|
# @!attribute [r] member_id
|
6
8
|
# @return [String]
|
7
9
|
# @!attribute [r] created_at
|
8
10
|
# @return [Datetime]
|
11
|
+
# @!attribute [r] expires_at
|
12
|
+
# @return [Datetime]
|
9
13
|
# @!attribute [r] permissions
|
10
14
|
# @return [Object]
|
11
15
|
# @!attribute [r] webhooks
|
12
16
|
# @return [Object]
|
13
17
|
class Token < BasicData
|
14
|
-
|
15
|
-
|
18
|
+
|
19
|
+
schema do
|
20
|
+
# Readonly
|
21
|
+
attribute :id, readonly: true, primary_key: true
|
22
|
+
attribute :identifier, readonly: true
|
23
|
+
attribute :member_id, readonly: true, remote_key: 'idMember'
|
24
|
+
attribute :created_at, readonly: true, remote_key: 'dateCreated', serializer: 'Time'
|
25
|
+
attribute :expires_at, readonly: true, remote_key: 'dateExpires', serializer: 'Time'
|
26
|
+
attribute :permissions, readonly: true
|
27
|
+
attribute :webhooks, readonly: true, default: [], serializer: 'Webhooks'
|
28
|
+
end
|
16
29
|
|
17
30
|
class << self
|
18
31
|
# Finds a token
|
@@ -21,16 +34,6 @@ module Trello
|
|
21
34
|
end
|
22
35
|
end
|
23
36
|
|
24
|
-
# :nodoc:
|
25
|
-
def update_fields(fields)
|
26
|
-
attributes[:id] = fields['id'] || attributes[:id]
|
27
|
-
attributes[:member_id] = fields['idMember'] || attributes[:member_id]
|
28
|
-
attributes[:created_at] = Time.iso8601(fields['dateCreated']) rescue nil if fields.has_key?('dateCreated')
|
29
|
-
attributes[:permissions] = fields['permissions'] || attributes[:permissions]
|
30
|
-
attributes[:permissions] ||= {}
|
31
|
-
attributes[:webhooks] = fields['webhooks'] || attributes[:webhooks]
|
32
|
-
end
|
33
|
-
|
34
37
|
# Returns a reference to the user who authorized the token.
|
35
38
|
one :member, path: :members, using: :member_id
|
36
39
|
end
|
data/lib/trello/webhook.rb
CHANGED
@@ -5,86 +5,33 @@ module Trello
|
|
5
5
|
# @return [String]
|
6
6
|
# @!attribute [r] description
|
7
7
|
# @return [String]
|
8
|
-
# @!attribute [r]
|
8
|
+
# @!attribute [r] model_id
|
9
9
|
# @return [String] A 24-character hex string
|
10
10
|
# @!attribute [r] callback_url
|
11
11
|
# @return [String]
|
12
12
|
# @!attribute [r] active
|
13
13
|
# @return [Boolean]
|
14
|
+
# @!attribute [r] consecutive_failures
|
15
|
+
# @return [Integer]
|
16
|
+
# @!attribute [r] first_consecutive_fail_date
|
17
|
+
# @return [Datetime]
|
14
18
|
class Webhook < BasicData
|
15
|
-
register_attributes :id, :description, :id_model, :callback_url, :active,
|
16
|
-
readonly: [ :id ]
|
17
|
-
validates_presence_of :id, :id_model, :callback_url
|
18
|
-
validates_length_of :description, in: 1..16384
|
19
19
|
|
20
|
-
|
21
|
-
#
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
# @param [Hash] options
|
32
|
-
#
|
33
|
-
# @option options [String] :description (optional) A string with a length from 0 to 16384
|
34
|
-
# @option options [String] :callback_url (required) A valid URL that is
|
35
|
-
# reachable with a HEAD request
|
36
|
-
# @option options [String] :id_model (required) id of the model that should be hooked
|
37
|
-
#
|
38
|
-
# @raise [Trello::Error] if the Webhook could not be created.
|
39
|
-
#
|
40
|
-
# @return [Trello::Webhook]
|
41
|
-
def create(options)
|
42
|
-
client.create(:webhook,
|
43
|
-
'description' => options[:description],
|
44
|
-
'idModel' => options[:id_model],
|
45
|
-
'callbackURL' => options[:callback_url])
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
# @return [Trello::Webhook] self
|
50
|
-
def update_fields(fields)
|
51
|
-
attributes[:id] = fields['id'] || attributes[:id]
|
52
|
-
attributes[:description] = fields['description'] || fields[:description] || attributes[:description]
|
53
|
-
attributes[:id_model] = fields['idModel'] || fields[:id_model] || attributes[:id_model]
|
54
|
-
attributes[:callback_url] = fields['callbackURL'] || fields[:callback_url] || attributes[:callback_url]
|
55
|
-
attributes[:active] = fields['active'] if fields.has_key?('active')
|
56
|
-
self
|
20
|
+
schema do
|
21
|
+
# Readonly
|
22
|
+
attribute :id, readonly: true, primary_key: true
|
23
|
+
attribute :consecutive_failures, readonly: true, remote_key: 'consecutiveFailures'
|
24
|
+
attribute :first_consecutive_fail_date, readonly: true, remote_key: 'firstConsecutiveFailDate', serializer: 'Time'
|
25
|
+
|
26
|
+
# Writable
|
27
|
+
attribute :description
|
28
|
+
attribute :model_id, remote_key: 'idModel'
|
29
|
+
attribute :callback_url, remote_key: 'callbackURL'
|
30
|
+
attribute :active
|
57
31
|
end
|
58
32
|
|
59
|
-
|
60
|
-
|
61
|
-
# @raise [Trello::Error] if the Webhook could not be saved.
|
62
|
-
#
|
63
|
-
# @return [String] the JSON representation of the saved webhook.
|
64
|
-
def save
|
65
|
-
# If we have an id, just update our fields.
|
66
|
-
return update! if id
|
67
|
-
|
68
|
-
from_response client.post("/webhooks", {
|
69
|
-
description: description,
|
70
|
-
idModel: id_model,
|
71
|
-
callbackURL: callback_url
|
72
|
-
})
|
73
|
-
end
|
74
|
-
|
75
|
-
# Update the webhook.
|
76
|
-
#
|
77
|
-
# @raise [Trello::Error] if the Webhook could not be saved.
|
78
|
-
#
|
79
|
-
# @return [String] the JSON representation of the updated webhook.
|
80
|
-
def update!
|
81
|
-
client.put("/webhooks/#{id}", {
|
82
|
-
description: description,
|
83
|
-
idModel: id_model,
|
84
|
-
callbackURL: callback_url,
|
85
|
-
active: active
|
86
|
-
})
|
87
|
-
end
|
33
|
+
validates_presence_of :id, :model_id, :callback_url
|
34
|
+
validates_length_of :description, in: 1..16384
|
88
35
|
|
89
36
|
# Delete this webhook
|
90
37
|
#
|
data/spec/action_spec.rb
CHANGED
data/spec/board_spec.rb
CHANGED
@@ -6,7 +6,7 @@ module Trello
|
|
6
6
|
|
7
7
|
let(:board) { client.find(:board, 'abcdef123456789123456789') }
|
8
8
|
let(:client) { Client.new }
|
9
|
-
let(:member) { Member.new(user_payload) }
|
9
|
+
let(:member) { Member.new(JSON.parse(user_payload)) }
|
10
10
|
|
11
11
|
before do
|
12
12
|
allow(client)
|
@@ -21,7 +21,7 @@ module Trello
|
|
21
21
|
it "delegates to client#find" do
|
22
22
|
expect(client)
|
23
23
|
.to receive(:find)
|
24
|
-
.with(
|
24
|
+
.with('board', 'abcdef123456789123456789', {})
|
25
25
|
|
26
26
|
Board.find('abcdef123456789123456789')
|
27
27
|
end
|
@@ -31,6 +31,35 @@ module Trello
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
+
describe '.create' do
|
35
|
+
before { allow(Board).to receive(:client).and_return(client) }
|
36
|
+
|
37
|
+
it 'will call create on client with correct parameters' do
|
38
|
+
params = {
|
39
|
+
name: 'Board Name',
|
40
|
+
use_default_labels: true,
|
41
|
+
use_default_lists: true,
|
42
|
+
description: 'description...',
|
43
|
+
organization_id: 11111,
|
44
|
+
source_board_id: 22222,
|
45
|
+
keep_cards_from_source: true,
|
46
|
+
power_ups: 'all',
|
47
|
+
visibility_level: 'org',
|
48
|
+
voting_permission_level: 'org',
|
49
|
+
comment_permission_level: 'org',
|
50
|
+
invitation_permission_level: 'admins',
|
51
|
+
enable_self_join: true,
|
52
|
+
enable_card_covers: true,
|
53
|
+
background_color: 'orange',
|
54
|
+
card_aging_type: 'pirate'
|
55
|
+
}
|
56
|
+
|
57
|
+
expect(client).to receive(:create).with('board', params)
|
58
|
+
|
59
|
+
Board.create(params)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
34
63
|
context "self.all" do
|
35
64
|
let(:client) { Trello.client }
|
36
65
|
|
@@ -133,12 +162,10 @@ module Trello
|
|
133
162
|
expect(labels[2].id).to eq('cbcdef123456789123456789')
|
134
163
|
expect(labels[2].board_id).to eq('abcdef123456789123456789')
|
135
164
|
expect(labels[2].name).to eq('deploy')
|
136
|
-
expect(labels[2].uses).to eq(2)
|
137
165
|
expect(labels[3].color).to eq('blue')
|
138
166
|
expect(labels[3].id).to eq('dbcdef123456789123456789')
|
139
167
|
expect(labels[3].board_id).to eq('abcdef123456789123456789')
|
140
168
|
expect(labels[3].name).to eq('on hold')
|
141
|
-
expect(labels[3].uses).to eq(6)
|
142
169
|
end
|
143
170
|
|
144
171
|
it "passes the label limit" do
|
@@ -170,7 +197,7 @@ module Trello
|
|
170
197
|
it "adds a member to the board as a normal user (default)" do
|
171
198
|
expect(client)
|
172
199
|
.to receive(:put)
|
173
|
-
.with("/boards/abcdef123456789123456789/members
|
200
|
+
.with("/boards/abcdef123456789123456789/members/#{member.id}", type: :normal)
|
174
201
|
|
175
202
|
board.add_member(member)
|
176
203
|
end
|
@@ -178,7 +205,7 @@ module Trello
|
|
178
205
|
it "adds a member to the board as an admin" do
|
179
206
|
expect(client)
|
180
207
|
.to receive(:put)
|
181
|
-
.with("/boards/abcdef123456789123456789/members
|
208
|
+
.with("/boards/abcdef123456789123456789/members/#{member.id}", type: :admin)
|
182
209
|
|
183
210
|
board.add_member(member, :admin)
|
184
211
|
end
|
@@ -193,7 +220,7 @@ module Trello
|
|
193
220
|
it "removes a member from the board" do
|
194
221
|
expect(client)
|
195
222
|
.to receive(:delete)
|
196
|
-
.with("/boards/abcdef123456789123456789/members
|
223
|
+
.with("/boards/abcdef123456789123456789/members/#{member.id}")
|
197
224
|
|
198
225
|
board.remove_member(member)
|
199
226
|
end
|
@@ -264,62 +291,15 @@ module Trello
|
|
264
291
|
end
|
265
292
|
end
|
266
293
|
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
it "is not starred" do
|
272
|
-
expect(board).not_to be_starred
|
273
|
-
end
|
274
|
-
|
275
|
-
describe "#update_fields" do
|
276
|
-
it "does not set any fields when the fields argument is empty" do
|
277
|
-
expected = {
|
278
|
-
'id' => "id",
|
279
|
-
'name' => "name",
|
280
|
-
'desc' => "desc",
|
281
|
-
'closed' => false,
|
282
|
-
'starred' => false,
|
283
|
-
'url' => "url",
|
284
|
-
'idOrganization' => "org_id"
|
285
|
-
}
|
286
|
-
|
287
|
-
board = Board.new(expected)
|
288
|
-
board.client = client
|
289
|
-
|
290
|
-
board.update_fields({})
|
291
|
-
|
292
|
-
expected.each_pair do |key, value|
|
293
|
-
if board.respond_to?(key)
|
294
|
-
expect(board.send(key)).to eq value
|
295
|
-
end
|
296
|
-
end
|
297
|
-
|
298
|
-
expect(board.description).to eq expected['desc']
|
299
|
-
expect(board.organization_id).to eq expected['idOrganization']
|
300
|
-
end
|
301
|
-
|
302
|
-
it "initializes all fields from response-like formatted hash" do
|
303
|
-
board_details = boards_details.first
|
304
|
-
board = Board.new(board_details)
|
305
|
-
expect(board.id).to eq board_details['id']
|
306
|
-
expect(board.name).to eq board_details['name']
|
307
|
-
expect(board.description).to eq board_details['desc']
|
308
|
-
expect(board.closed).to eq board_details['closed']
|
309
|
-
expect(board.starred).to eq board_details['starred']
|
310
|
-
expect(board.organization_id).to eq board_details['idOrganization']
|
311
|
-
expect(board.url).to eq board_details['url']
|
312
|
-
expect(board.last_activity_date).to eq board_details['dateLastActivity']
|
294
|
+
describe '#closed?' do
|
295
|
+
it "returns the closed attribute" do
|
296
|
+
expect(board.closed?).to be_falsy
|
313
297
|
end
|
298
|
+
end
|
314
299
|
|
315
|
-
|
316
|
-
|
317
|
-
board
|
318
|
-
expect(board.name).to eq board_details[:name]
|
319
|
-
expect(board.description).to eq board_details[:desc]
|
320
|
-
expect(board.closed).to eq board_details[:closed]
|
321
|
-
expect(board.starred).to eq board_details[:starred]
|
322
|
-
expect(board.organization_id).to eq board_details[:organization_id]
|
300
|
+
describe '#starred?' do
|
301
|
+
it "returns the starred attribute" do
|
302
|
+
expect(board.starred?).to be_falsy
|
323
303
|
end
|
324
304
|
end
|
325
305
|
|
@@ -342,17 +322,6 @@ module Trello
|
|
342
322
|
}.to raise_error(Trello::ConfigurationError)
|
343
323
|
end
|
344
324
|
|
345
|
-
it "puts all fields except id" do
|
346
|
-
expected_fields = %w{ name desc closed starred idOrganization}.map { |s| s.to_sym }
|
347
|
-
|
348
|
-
expect(client).to receive(:put) do |anything, body|
|
349
|
-
expect(body.keys).to match expected_fields
|
350
|
-
any_board_json
|
351
|
-
end
|
352
|
-
|
353
|
-
Board.new('id' => "xxx").save
|
354
|
-
end
|
355
|
-
|
356
325
|
it "mutates the current instance" do
|
357
326
|
allow(client)
|
358
327
|
.to receive(:put)
|
@@ -366,7 +335,7 @@ module Trello
|
|
366
335
|
expected_resource_id = "xxx_board_id_xxx"
|
367
336
|
|
368
337
|
expect(client).to receive(:put) do |path, anything|
|
369
|
-
expect(path).to match(/#{expected_resource_id}
|
338
|
+
expect(path).to match(/#{expected_resource_id}\z/)
|
370
339
|
any_board_json
|
371
340
|
end
|
372
341
|
|
@@ -376,35 +345,6 @@ module Trello
|
|
376
345
|
it "saves OR updates depending on whether or not it has an id set"
|
377
346
|
end
|
378
347
|
|
379
|
-
describe '#update!' do
|
380
|
-
let(:client) { Trello.client }
|
381
|
-
|
382
|
-
let(:any_board_json) do
|
383
|
-
JSON.generate(boards_details.first)
|
384
|
-
end
|
385
|
-
|
386
|
-
it "puts basic attributes" do
|
387
|
-
board = Board.new 'id' => "board_id"
|
388
|
-
|
389
|
-
board.name = "new name"
|
390
|
-
board.description = "new description"
|
391
|
-
board.closed = true
|
392
|
-
board.starred = true
|
393
|
-
|
394
|
-
expect(client)
|
395
|
-
.to receive(:put)
|
396
|
-
.with("/boards/#{board.id}/", {
|
397
|
-
name: "new name",
|
398
|
-
desc: "new description",
|
399
|
-
closed: true,
|
400
|
-
starred: true,
|
401
|
-
idOrganization: nil })
|
402
|
-
.and_return any_board_json
|
403
|
-
|
404
|
-
board.update!
|
405
|
-
end
|
406
|
-
end
|
407
|
-
|
408
348
|
describe "Repository" do
|
409
349
|
include Helpers
|
410
350
|
|
@@ -421,7 +361,7 @@ module Trello
|
|
421
361
|
|
422
362
|
it "creates a new board with whatever attributes are supplied " do
|
423
363
|
expected_attributes = { name: "Any new board name", description: "Any new board desription" }
|
424
|
-
sent_attributes = { name
|
364
|
+
sent_attributes = { 'name' => expected_attributes[:name], 'desc' => expected_attributes[:description] }
|
425
365
|
|
426
366
|
expect(client)
|
427
367
|
.to receive(:post)
|