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.
Files changed (221) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +13 -2
  3. data/lib/trello.rb +13 -7
  4. data/lib/trello/action.rb +27 -21
  5. data/lib/trello/attachment.rb +40 -27
  6. data/lib/trello/basic_data.rb +104 -9
  7. data/lib/trello/board.rb +88 -102
  8. data/lib/trello/card.rb +34 -235
  9. data/lib/trello/checklist.rb +17 -71
  10. data/lib/trello/comment.rb +32 -22
  11. data/lib/trello/cover_image.rb +20 -0
  12. data/lib/trello/custom_field.rb +31 -84
  13. data/lib/trello/custom_field_item.rb +36 -58
  14. data/lib/trello/custom_field_option.rb +40 -13
  15. data/lib/trello/item.rb +27 -16
  16. data/lib/trello/item_state.rb +7 -15
  17. data/lib/trello/json_utils.rb +1 -1
  18. data/lib/trello/label.rb +14 -101
  19. data/lib/trello/label_name.rb +22 -25
  20. data/lib/trello/list.rb +31 -44
  21. data/lib/trello/member.rb +77 -32
  22. data/lib/trello/notification.rb +27 -20
  23. data/lib/trello/organization.rb +53 -25
  24. data/lib/trello/plugin_datum.rb +11 -16
  25. data/lib/trello/schema.rb +31 -0
  26. data/lib/trello/schema/attribute/base.rb +79 -0
  27. data/lib/trello/schema/attribute/board_pref.rb +45 -0
  28. data/lib/trello/schema/attribute/custom_field_display.rb +45 -0
  29. data/lib/trello/schema/attribute/default.rb +45 -0
  30. data/lib/trello/schema/attribute_builder.rb +42 -0
  31. data/lib/trello/schema/attribute_registration.rb +47 -0
  32. data/lib/trello/schema/serializer/default.rb +17 -0
  33. data/lib/trello/schema/serializer/labels.rb +23 -0
  34. data/lib/trello/schema/serializer/time.rb +25 -0
  35. data/lib/trello/schema/serializer/webhooks.rb +25 -0
  36. data/lib/trello/token.rb +15 -12
  37. data/lib/trello/webhook.rb +18 -71
  38. data/spec/action_spec.rb +1 -2
  39. data/spec/board_spec.rb +43 -103
  40. data/spec/card_spec.rb +51 -50
  41. data/spec/cassettes/action_find_with_id_and_get_all_fields.yml +104 -0
  42. data/spec/cassettes/board_find_with_id_and_get_all_fields.yml +96 -0
  43. data/spec/cassettes/board_find_with_id_and_get_specific_fields.yml +96 -0
  44. data/spec/cassettes/can_add_a_member_to_a_board.yml +191 -0
  45. data/spec/cassettes/can_arvhice_all_cards_of_list.yml +397 -0
  46. data/spec/cassettes/can_get_actions_of_board.yml +188 -0
  47. data/spec/cassettes/can_get_actions_of_list.yml +202 -0
  48. data/spec/cassettes/can_get_actions_of_members.yml +199 -0
  49. data/spec/cassettes/can_get_actions_of_organization.yml +201 -0
  50. data/spec/cassettes/can_get_boards_of_custom_field.yml +198 -0
  51. data/spec/cassettes/can_get_boards_of_label.yml +197 -0
  52. data/spec/cassettes/can_get_boards_of_organization.yml +207 -0
  53. data/spec/cassettes/can_get_cards_of_board.yml +193 -0
  54. data/spec/cassettes/can_get_cards_of_list.yml +201 -0
  55. data/spec/cassettes/can_get_cards_of_member.yml +204 -0
  56. data/spec/cassettes/can_get_checklists_of_board.yml +187 -0
  57. data/spec/cassettes/can_get_custom_field_options_of_custom_field.yml +197 -0
  58. data/spec/cassettes/can_get_custom_fields_of_board.yml +187 -0
  59. data/spec/cassettes/can_get_label_names_of_board.yml +187 -0
  60. data/spec/cassettes/can_get_labels_of_board.yml +187 -0
  61. data/spec/cassettes/can_get_lists_of_board.yml +187 -0
  62. data/spec/cassettes/can_get_members_of_board.yml +188 -0
  63. data/spec/cassettes/can_get_members_of_organization.yml +200 -0
  64. data/spec/cassettes/can_get_notifications_of_member.yml +199 -0
  65. data/spec/cassettes/can_get_organization_of_board.yml +189 -0
  66. data/spec/cassettes/can_get_organizations_of_member.yml +203 -0
  67. data/spec/cassettes/can_get_plugin_data_of_board.yml +187 -0
  68. data/spec/cassettes/can_move_all_cards_to_another_list.yml +886 -0
  69. data/spec/cassettes/can_success_create_a_board.yml +98 -0
  70. data/spec/cassettes/can_success_create_a_board_with_full_parameters.yml +97 -0
  71. data/spec/cassettes/can_success_create_a_board_without_clone_from_other.yml +98 -0
  72. data/spec/cassettes/can_success_create_a_card_when_due_is_datetime.yml +98 -0
  73. data/spec/cassettes/can_success_create_a_card_when_due_is_time.yml +98 -0
  74. data/spec/cassettes/can_success_create_a_checklist.yml +102 -0
  75. data/spec/cassettes/can_success_create_a_custom_field.yml +102 -0
  76. data/spec/cassettes/can_success_create_a_custom_field_option.yml +102 -0
  77. data/spec/cassettes/can_success_create_a_label.yml +102 -0
  78. data/spec/cassettes/can_success_create_a_list.yml +102 -0
  79. data/spec/cassettes/can_success_create_a_list_with_full_parameters.yml +102 -0
  80. data/spec/cassettes/can_success_create_a_organization.yml +104 -0
  81. data/spec/cassettes/can_success_create_a_webhook.yml +102 -0
  82. data/spec/cassettes/can_success_delete_a_custom_field_option.yml +389 -0
  83. data/spec/cassettes/can_success_delete_checklist.yml +284 -0
  84. data/spec/cassettes/can_success_get_card_of_board_by_card_id.yml +188 -0
  85. data/spec/cassettes/can_success_remove_member_from_board.yml +186 -0
  86. data/spec/cassettes/can_success_return_all_boards_of_current_user.yml +195 -0
  87. data/spec/cassettes/can_success_upate_a_board.yml +191 -0
  88. data/spec/cassettes/can_success_upate_a_list.yml +296 -0
  89. data/spec/cassettes/can_success_update_bong_a_board.yml +39 -39
  90. data/spec/cassettes/can_success_update_bong_a_board_with_specific_fields.yml +284 -0
  91. data/spec/cassettes/can_success_update_bong_a_checklist_with_specific_fields.yml +296 -0
  92. data/spec/cassettes/can_success_update_bong_a_custom_field.yml +200 -0
  93. data/spec/cassettes/can_success_update_bong_a_label.yml +200 -0
  94. data/spec/cassettes/can_success_update_bong_a_list.yml +199 -0
  95. data/spec/cassettes/can_success_update_bong_a_list_with_specific_fields.yml +296 -0
  96. data/spec/cassettes/can_success_update_bong_a_organization.yml +203 -0
  97. data/spec/cassettes/can_success_update_bong_a_webhook.yml +296 -0
  98. data/spec/cassettes/checklist_can_add_an_item.yml +296 -0
  99. data/spec/cassettes/checklist_can_update_the_item_state.yml +296 -0
  100. data/spec/cassettes/checklist_find_with_id_and_get_all_fields.yml +100 -0
  101. data/spec/cassettes/custom_field_find_with_id_and_get_all_fields.yml +100 -0
  102. data/spec/cassettes/custom_field_find_with_id_and_get_specific_fields.yml +100 -0
  103. data/spec/cassettes/custom_field_item_save_1.yml +1 -1
  104. data/spec/cassettes/custom_field_item_save_2.yml +1 -1
  105. data/spec/cassettes/custom_field_option_find_with_id.yml +100 -0
  106. data/spec/cassettes/get_board_of_list.yml +197 -0
  107. data/spec/cassettes/get_boards_of_member.yml +207 -0
  108. data/spec/cassettes/label_delete.yml +285 -0
  109. data/spec/cassettes/label_find_with_id.yml +100 -0
  110. data/spec/cassettes/list_find_with_id_and_get_all_fields.yml +100 -0
  111. data/spec/cassettes/list_find_with_id_and_get_specific_fields.yml +100 -0
  112. data/spec/cassettes/member_find_with_id_and_get_all_fields.yml +101 -0
  113. data/spec/cassettes/member_find_with_id_and_get_specific_fields.yml +100 -0
  114. data/spec/cassettes/notification_find_with_id.yml +103 -0
  115. data/spec/cassettes/organization_find_with_id_and_get_all_fields.yml +102 -0
  116. data/spec/cassettes/organization_find_with_id_and_get_specific_fields.yml +100 -0
  117. data/spec/cassettes/token_find_with_token_string.yml +100 -0
  118. data/spec/cassettes/webhook_delete.yml +286 -0
  119. data/spec/cassettes/webhook_find_with_id.yml +100 -0
  120. data/spec/checklist_spec.rb +27 -43
  121. data/spec/custom_field_item_spec.rb +2 -2
  122. data/spec/custom_field_option_spec.rb +2 -2
  123. data/spec/custom_field_spec.rb +25 -13
  124. data/spec/integration/action/find_spec.rb +23 -0
  125. data/spec/integration/basic_data/many_spec.rb +4 -0
  126. data/spec/integration/basic_data/schema_spec.rb +156 -0
  127. data/spec/integration/board/add_member_spec.rb +21 -0
  128. data/spec/integration/board/all_spec.rb +20 -0
  129. data/spec/integration/board/associations/actions_spec.rb +18 -0
  130. data/spec/integration/board/associations/cards_spec.rb +18 -0
  131. data/spec/integration/board/associations/checklists_spec.rb +18 -0
  132. data/spec/integration/board/associations/custom_fields_spec.rb +18 -0
  133. data/spec/integration/board/associations/label_names_spec.rb +17 -0
  134. data/spec/integration/board/associations/labels_spec.rb +18 -0
  135. data/spec/integration/board/associations/lists_spec.rb +18 -0
  136. data/spec/integration/board/associations/members_spec.rb +18 -0
  137. data/spec/integration/board/associations/organization_spec.rb +19 -0
  138. data/spec/integration/board/associations/plugin_data_spec.rb +18 -0
  139. data/spec/integration/board/create_spec.rb +95 -0
  140. data/spec/integration/board/find_card_spec.rb +18 -0
  141. data/spec/integration/board/find_spec.rb +42 -0
  142. data/spec/integration/board/remove_member_spec.rb +21 -0
  143. data/spec/integration/board/save_spec.rb +37 -0
  144. data/spec/integration/board/update!_spec.rb +33 -2
  145. data/spec/integration/card/associations/plugin_data_spec.rb +1 -1
  146. data/spec/integration/card/create_spec.rb +36 -2
  147. data/spec/integration/card/find_spec.rb +1 -1
  148. data/spec/integration/card/save_spec.rb +2 -2
  149. data/spec/integration/checklist/add_item_spec.rb +20 -0
  150. data/spec/integration/checklist/create_spec.rb +23 -0
  151. data/spec/integration/checklist/delete_spec.rb +17 -0
  152. data/spec/integration/checklist/find_spec.rb +22 -0
  153. data/spec/integration/checklist/update!_spec.rb +21 -0
  154. data/spec/integration/checklist/update_item_state_spec.rb +20 -0
  155. data/spec/integration/custom_field/association/board_spec.rb +18 -0
  156. data/spec/integration/custom_field/association/custom_field_options_spec.rb +18 -0
  157. data/spec/integration/custom_field/create_spec.rb +29 -0
  158. data/spec/integration/custom_field/find_spec.rb +41 -0
  159. data/spec/integration/custom_field/update!_spec.rb +25 -0
  160. data/spec/integration/custom_field_option/create_spec.rb +23 -0
  161. data/spec/integration/custom_field_option/delete_spec.rb +19 -0
  162. data/spec/integration/custom_field_option/find_spec.rb +21 -0
  163. data/spec/integration/label/association/board_spec.rb +18 -0
  164. data/spec/integration/label/create_spec.rb +23 -0
  165. data/spec/integration/label/delete_spec.rb +21 -0
  166. data/spec/integration/label/find_spec.rb +20 -0
  167. data/spec/integration/label/update!_spec.rb +25 -0
  168. data/spec/integration/list/archive_all_cards_spec.rb +20 -0
  169. data/spec/integration/list/associations/actions_spec.rb +18 -0
  170. data/spec/integration/list/associations/board_spec.rb +18 -0
  171. data/spec/integration/list/associations/cards_spec.rb +18 -0
  172. data/spec/integration/list/create_spec.rb +44 -0
  173. data/spec/integration/list/find_spec.rb +37 -0
  174. data/spec/integration/list/move_all_cards_spec.rb +31 -0
  175. data/spec/integration/list/save_spec.rb +40 -0
  176. data/spec/integration/list/update!_spec.rb +43 -0
  177. data/spec/integration/member/associations/actions_spec.rb +17 -0
  178. data/spec/integration/member/associations/boards_spec.rb +18 -0
  179. data/spec/integration/member/associations/cards_spec.rb +18 -0
  180. data/spec/integration/member/associations/notifications_spec.rb +18 -0
  181. data/spec/integration/member/associations/organizations_spec.rb +18 -0
  182. data/spec/integration/member/find_spec.rb +39 -0
  183. data/spec/integration/member/update!_spec.rb +18 -0
  184. data/spec/integration/notification/find_spec.rb +27 -0
  185. data/spec/integration/organization/associations/actions_spec.rb +18 -0
  186. data/spec/integration/organization/associations/boards_spec.rb +18 -0
  187. data/spec/integration/organization/associations/members_spec.rb +18 -0
  188. data/spec/integration/organization/create_spec.rb +23 -0
  189. data/spec/integration/organization/find_spec.rb +37 -0
  190. data/spec/integration/organization/update!_spec.rb +28 -0
  191. data/spec/integration/token/find_spec.rb +24 -0
  192. data/spec/integration/webhook/create_spec.rb +27 -0
  193. data/spec/integration/webhook/delete_spec.rb +21 -0
  194. data/spec/integration/webhook/find_spec.rb +22 -0
  195. data/spec/integration/webhook/update!_spec.rb +24 -0
  196. data/spec/item_spec.rb +2 -2
  197. data/spec/label_spec.rb +31 -33
  198. data/spec/list_spec.rb +32 -14
  199. data/spec/notification_spec.rb +3 -3
  200. data/spec/organization_spec.rb +6 -5
  201. data/spec/spec_helper.rb +22 -14
  202. data/spec/token_spec.rb +10 -11
  203. data/spec/unit/trello/basic_data_spec.rb +67 -8
  204. data/spec/unit/trello/board/new_spec.rb +370 -0
  205. data/spec/unit/trello/board/save_spec.rb +49 -0
  206. data/spec/unit/trello/board/update_fields_spec.rb +129 -0
  207. data/spec/unit/trello/board/update_spec.rb +197 -0
  208. data/spec/unit/trello/member/new_spec.rb +62 -0
  209. data/spec/unit/trello/member/update_fields_spec.rb +80 -0
  210. data/spec/unit/trello/schema/attribute/base_spec.rb +349 -0
  211. data/spec/unit/trello/schema/attribute/board_pref_spec.rb +208 -0
  212. data/spec/unit/trello/schema/attribute/default_spec.rb +236 -0
  213. data/spec/unit/trello/schema/attribute_builder_spec.rb +55 -0
  214. data/spec/unit/trello/schema/attribute_registration_spec.rb +59 -0
  215. data/spec/unit/trello/schema/serializer/default_spec.rb +19 -0
  216. data/spec/unit/trello/schema/serializer/time_spec.rb +39 -0
  217. data/spec/unit/trello/schema_spec.rb +25 -0
  218. data/spec/webhook_spec.rb +23 -7
  219. metadata +422 -102
  220. data/lib/trello/register_attributes.rb +0 -54
  221. data/spec/integration/basic_data/register_attributes_spec.rb +0 -75
@@ -0,0 +1,17 @@
1
+ module Trello
2
+ class Schema
3
+ module Serializer
4
+ class Default
5
+ class << self
6
+ def serialize(value)
7
+ value
8
+ end
9
+
10
+ def deserialize(value, default)
11
+ value == nil ? default : value
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -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
@@ -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
- register_attributes :id, :member_id, :created_at, :permissions, :webhooks,
15
- readonly: [ :id, :member_id, :created_at, :permissions, :webhooks ]
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
@@ -5,86 +5,33 @@ module Trello
5
5
  # @return [String]
6
6
  # @!attribute [r] description
7
7
  # @return [String]
8
- # @!attribute [r] id_model
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
- class << self
21
- # Find a specific webhook by its ID.
22
- #
23
- # @raise [Trello::Error] if a Webhook with the given ID can't be found.
24
- # @return [Trello::Webhook] the Webhook with the given ID.
25
- def find(id, params = {})
26
- client.find(:webhook, id, params)
27
- end
28
-
29
- # Create a new webhook and save it to Trello.
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
- # Save the webhook.
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
  #
@@ -131,8 +131,7 @@ module Trello
131
131
  'id' => 'id',
132
132
  'type' => 'type',
133
133
  'data' => 'data',
134
- 'idMemberCreator' => 'member_creator_id',
135
- 'member' => 'member_participant'
134
+ 'idMemberCreator' => 'creator_id'
136
135
  }
137
136
 
138
137
  action = Action.new(expected)
@@ -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(:board, 'abcdef123456789123456789', {})
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/id", type: :normal)
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/id", type: :admin)
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/id")
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
- it "is not closed" do
268
- expect(board).not_to be_closed
269
- end
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
- it "initializes all fields from options-like formatted hash" do
316
- board_details = boards_details[1]
317
- board = Board.new(board_details)
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}\/\z/)
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: expected_attributes[:name], desc: expected_attributes[:description] }
364
+ sent_attributes = { 'name' => expected_attributes[:name], 'desc' => expected_attributes[:description] }
425
365
 
426
366
  expect(client)
427
367
  .to receive(:post)