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
@@ -7,7 +7,7 @@ module Trello
7
7
 
8
8
  module InstanceMethods
9
9
  def from_response(*args)
10
- update_fields parse_json(*args)
10
+ initialize_fields parse_json(*args)
11
11
  end
12
12
 
13
13
  def parse_json(*args)
@@ -6,121 +6,34 @@ module Trello
6
6
  # @return [String]
7
7
  # @!attribute [rw] color
8
8
  # @return [String]
9
+ # @!attribute [rw] name
10
+ # @return [String]
11
+ # @!attribute [rw] board_id
12
+ # @return [String]
9
13
  class Label < BasicData
10
- register_attributes :id, :name, :board_id, :uses,
11
- readonly: [ :id, :uses, :board_id ]
12
- validates_presence_of :id, :board_id, :name
13
- validates_length_of :name, in: 1..16384
14
-
15
- SYMBOL_TO_STRING = {
16
- id: 'id',
17
- name: 'name',
18
- board_id: 'idBoard',
19
- color: 'color',
20
- uses: 'uses'
21
- }
22
-
23
- class << self
24
- VALID_LABEL_COLOURS = %w{green yellow orange red purple blue sky lime pink black} << ''
25
-
26
- # Find a specific label by its id.
27
- def find(id, params = {})
28
- client.find(:label, id, params)
29
- end
30
-
31
- # Create a new label and save it on Trello.
32
- def create(options)
33
- client.create(:label,
34
- 'name' => options[:name],
35
- 'idBoard' => options[:board_id],
36
- 'color' => options[:color],
37
- )
38
- end
39
-
40
- # Label colours
41
- def label_colours
42
- VALID_LABEL_COLOURS
43
- end
44
- end
45
-
46
- define_attribute_methods [:color]
47
-
48
- def color
49
- @__attributes[:color]
50
- end
51
-
52
- def color= colour
53
- unless Label.label_colours.include? colour
54
- errors.add(:label, "color '#{colour}' does not exist")
55
- return Trello.logger.warn "The label colour '#{colour}' does not exist."
56
- end
57
14
 
58
- self.send(:"color_will_change!") unless colour == @__attributes[:color]
59
- @__attributes[:color] = colour
60
- end
15
+ schema do
16
+ # Readonly
17
+ attribute :id, readonly: true, primary_key: true
61
18
 
62
- # Update the fields of a label.
63
- #
64
- # Supply a hash of stringkeyed data retrieved from the Trello API representing
65
- # a label.
66
- def update_fields(fields)
67
- send('name_will_change!') if fields_has_key?(fields, :name)
68
- send('color_will_change!') if fields_has_key?(fields, :color)
19
+ # Writable
20
+ attribute :name
21
+ attribute :color
69
22
 
70
- initialize_fields(fields)
23
+ # Writable but for create only
24
+ attribute :board_id, create_only: true, remote_key: 'idBoard'
71
25
  end
72
26
 
73
- def initialize(fields = {})
74
- initialize_fields(fields)
75
- end
27
+ validates_presence_of :id, :board_id, :name
28
+ validates_length_of :name, in: 1..16384
76
29
 
77
30
  # Returns a reference to the board this label is currently connected.
78
31
  one :board, path: :boards, using: :board_id
79
32
 
80
- # Saves a record.
81
- def save
82
- # If we have an id, just update our fields.
83
- return update! if id
84
-
85
- from_response client.post("/labels", {
86
- name: name,
87
- color: color,
88
- idBoard: board_id,
89
- })
90
- end
91
-
92
- # Update an existing record.
93
- # Warning, this updates all fields using values already in memory. If
94
- # an external resource has updated these fields, you should refresh!
95
- # this object before making your changes, and before updating the record.
96
- def update!
97
- @previously_changed = changes
98
- # extract only new values to build payload
99
- payload = Hash[changes.map { |key, values| [SYMBOL_TO_STRING[key.to_sym].to_sym, values[1]] }]
100
- @changed_attributes.clear if @changed_attributes.respond_to?(:clear)
101
- changes_applied if respond_to?(:changes_applied)
102
-
103
- client.put("/labels/#{id}", payload)
104
- end
105
-
106
33
  # Delete this label
107
34
  def delete
108
35
  client.delete("/labels/#{id}")
109
36
  end
110
37
 
111
- private
112
-
113
- def fields_has_key?(fields, key)
114
- fields.key?(SYMBOL_TO_STRING[key]) || fields.key?(key)
115
- end
116
-
117
- def initialize_fields(fields)
118
- attributes[:id] = fields['id'] || attributes[:id]
119
- attributes[:name] = fields['name'] || fields[:name] || attributes[:name]
120
- attributes[:color] = fields['color'] || fields[:color] || attributes[:color]
121
- attributes[:board_id] = fields['idBoard'] || fields[:board_id] || attributes[:board_id]
122
- attributes[:uses] = fields['uses'] if fields.has_key?('uses')
123
- self
124
- end
125
38
  end
126
39
  end
@@ -1,31 +1,28 @@
1
1
  module Trello
2
-
3
2
  # A colored Label attached to a card
3
+ #
4
+ # @!attribute [r] yellow
5
+ # @!attribute [r] red
6
+ # @!attribute [r] orange
7
+ # @!attribute [r] green
8
+ # @!attribute [r] purple
9
+ # @!attribute [r] blue
10
+ # @!attribute [r] sky
11
+ # @!attribute [r] pink
12
+ # @!attribute [r] lime
13
+ # @!attribute [r] black
4
14
  class LabelName < BasicData
5
- register_attributes :yellow, :red, :orange, :green, :purple, :blue, :sky, :pink, :lime, :black
6
-
7
- # Update the fields of a label.
8
- #
9
- # Supply a hash of stringkeyed data retrieved from the Trello API representing
10
- # a label.
11
- def update_fields(fields)
12
- attributes[:yellow] = fields['yellow'] || attributes[:yellow]
13
- attributes[:red] = fields['red'] || attributes[:red]
14
- attributes[:orange] = fields['orange'] || attributes[:orange]
15
- attributes[:green] = fields['green'] || attributes[:green]
16
- attributes[:purple] = fields['purple'] || attributes[:purple]
17
- attributes[:blue] = fields['blue'] || attributes[:blue]
18
- attributes[:sky] = fields['sky'] || attributes[:sky]
19
- attributes[:pink] = fields['pink'] || attributes[:pink]
20
- attributes[:lime] = fields['lime'] || attributes[:lime]
21
- attributes[:black] = fields['black'] || attributes[:black]
22
-
23
- self
15
+ schema do
16
+ attribute :yellow, readonly: true
17
+ attribute :red, readonly: true
18
+ attribute :orange, readonly: true
19
+ attribute :green, readonly: true
20
+ attribute :purple, readonly: true
21
+ attribute :blue, readonly: true
22
+ attribute :sky, readonly: true
23
+ attribute :pink, readonly: true
24
+ attribute :lime, readonly: true
25
+ attribute :black, readonly: true
24
26
  end
25
-
26
- one :board, path: :boards, using: :board_id
27
-
28
- many :cards, filter: :all
29
-
30
27
  end
31
28
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Trello
2
4
  # A List is a container which holds cards. Lists are items on a board.
3
5
  #
@@ -11,10 +13,30 @@ module Trello
11
13
  # @return [String] A 24-character hex string
12
14
  # @!attribute [rw] pos
13
15
  # @return [Object]
16
+ # @!attribute [w] source_list_id
17
+ # @return [String]
18
+ # @!attribute [w] subscribed
19
+ # @return [Boolean]
14
20
  class List < BasicData
15
- register_attributes :id, :name, :closed, :board_id, :pos, :source_list_id, readonly: [ :id, :board_id ]
21
+ schema do
22
+ # Readonly
23
+ attribute :id, readonly: true, primary_key: true
24
+
25
+ # Writable
26
+ attribute :name
27
+ attribute :pos
28
+ attribute :board_id, remote_key: 'idBoard'
29
+
30
+ # Writable but for create only
31
+ attribute :source_list_id, create_only: true, remote_key: 'idListSource'
32
+
33
+ # Writable but for update only
34
+ attribute :closed, update_only: true
35
+ attribute :subscribed, update_only: true
36
+ end
37
+
16
38
  validates_presence_of :id, :name, :board_id
17
- validates_length_of :name, in: 1..16384
39
+ validates_length_of :name, in: 1..16_384
18
40
 
19
41
  include HasActions
20
42
 
@@ -26,48 +48,6 @@ module Trello
26
48
  def find(id, params = {})
27
49
  client.find(:list, id, params)
28
50
  end
29
-
30
- def create(options)
31
- client.create(:list,
32
- 'name' => options[:name],
33
- 'idBoard' => options[:board_id],
34
- 'pos' => options[:pos],
35
- 'idListSource' => options[:source_list_id])
36
- end
37
- end
38
-
39
- # Updates the fields of a list.
40
- #
41
- # Supply a hash of string keyed data retrieved from the Trello API representing
42
- # a List.
43
- def update_fields(fields)
44
- attributes[:id] = fields['id'] || attributes[:id]
45
- attributes[:name] = fields['name'] || fields[:name] || attributes[:name]
46
- attributes[:closed] = fields['closed'] if fields.has_key?('closed')
47
- attributes[:board_id] = fields['idBoard'] || fields[:board_id] || attributes[:board_id]
48
- attributes[:pos] = fields['pos'] || fields[:pos] || attributes[:pos]
49
- attributes[:source_list_id] = fields['idListSource'] || fields[:source_list_id] || attributes[:source_list_id]
50
- self
51
- end
52
-
53
- def save
54
- return update! if id
55
-
56
- from_response client.post("/lists", {
57
- name: name,
58
- closed: closed || false,
59
- idBoard: board_id,
60
- pos: pos,
61
- idListSource: source_list_id
62
- })
63
- end
64
-
65
- def update!
66
- client.put("/lists/#{id}", {
67
- name: name,
68
- closed: closed,
69
- pos: pos
70
- })
71
51
  end
72
52
 
73
53
  # Check if the list is not active anymore.
@@ -101,6 +81,13 @@ module Trello
101
81
  })
102
82
  end
103
83
 
84
+ # Move list to another board. Accepts a `Trello::Board` or an id string.
85
+ def move_to_board(board)
86
+ board = board.id unless board.is_a?(String)
87
+
88
+ client.put("/lists/#{id}/idBoard", value: board)
89
+ end
90
+
104
91
  # Archives all the cards of the list
105
92
  def archive_all_cards
106
93
  client.post("/lists/#{id}/archiveAllCards")
@@ -17,8 +17,84 @@ module Trello
17
17
  # @return [String]
18
18
  # @!attribute [r] url
19
19
  # @return [String]
20
+ # @!attribute [r] prefs
21
+ # @return [Hash]
22
+ # @!attribute [r] activity_blocked
23
+ # @return [Boolean]
24
+ # @!attribute [r] bio_data
25
+ # @return [Hash]
26
+ # @!attribute [r] confirmed
27
+ # @return [Boolean]
28
+ # @!attribute [r] enterprise_id
29
+ # @return [String]
30
+ # @!attribute [r] deactivated_enterprise_ids
31
+ # @return [String]
32
+ # @!attribute [r] referrer_member_id
33
+ # @return [String]
34
+ # @!attribute [r] admin_orgs_perm_id
35
+ # @return [String]
36
+ # @!attribute [r] member_type
37
+ # @return [String]
38
+ # @!attribute [r] non_public
39
+ # @return [Hash]
40
+ # @!attribute [r] non_public_available
41
+ # @return [Hash]
42
+ # @!attribute [r] products
43
+ # @return [Array]
44
+ # @!attribute [r] status
45
+ # @return [String]
46
+ # @!attribute [r] board_ids
47
+ # @return [Array<String>]
48
+ # @!attribute [r] organization_ids
49
+ # @return [Array<String>]
50
+ # @!attribute [r] admin_enterprise_ids
51
+ # @return [Array<String>]
52
+ # @!attribute [r] limits
53
+ # @return [Hash]
54
+ # @!attribute [r] login_types
55
+ # @return [Array<String>]
56
+ # @!attribute [r] marketing_opt_in
57
+ # @return [Hash]
58
+ # @!attribute [r] pinned_board_ids
59
+ # @return [String]
60
+ # @!attribute [w] avatar_source
61
+ # @return [String]
20
62
  class Member < BasicData
21
- register_attributes :id, :username, :email, :full_name, :initials, :avatar_id, :bio, :url, readonly: [ :id, :username, :avatar_id, :url ]
63
+ schema do
64
+ # readonly
65
+ attribute :id, readonly: true, primary_key: true
66
+ attribute :email, readonly: true
67
+ attribute :avatar_id, readonly: true, remote_key: 'avatarHash'
68
+ attribute :url, readonly: true
69
+ attribute :prefs, readonly: true
70
+ attribute :activity_blocked, readonly: true, remote_key: 'activityBlocked'
71
+ attribute :bio_data, readonly: true, remote_key: 'bioData'
72
+ attribute :confirmed, readonly: true
73
+ attribute :enterprise_id, readonly: true, remote_key: 'idEnterprise'
74
+ attribute :deactivated_enterprise_ids, readonly: true, remote_key: 'idEnterprisesDeactivated'
75
+ attribute :referrer_member_id, readonly: true, remote_key: 'idMemberReferrer'
76
+ attribute :admin_orgs_perm_id, readonly: true, remote_key: 'idPremOrgsAdmin'
77
+ attribute :member_type, readonly: true, remote_key: 'memberType'
78
+ attribute :non_public, readonly: true, remote_key: 'nonPublic'
79
+ attribute :non_public_available, readonly: true, remote_key: 'nonPublicAvailable'
80
+ attribute :products, readonly: true
81
+ attribute :status, readonly: true
82
+ attribute :board_ids, readonly: true, remote_key: 'idBoards'
83
+ attribute :organization_ids, readonly: true, remote_key: 'idOrganizations'
84
+ attribute :admin_enterprise_ids, readonly: true, remote_key: 'idEnterprisesAdmin'
85
+ attribute :limits, readonly: true
86
+ attribute :login_types, readonly: true, remote_key: 'loginTypes'
87
+ attribute :marketing_opt_in, readonly: true, remote_key: 'marketingOptIn'
88
+ attribute :pinned_board_ids, readonly: true, remote_key: 'idBoardsPinned'
89
+
90
+ # writable
91
+ attribute :username
92
+ attribute :full_name, remote_key: 'fullName'
93
+ attribute :initials
94
+ attribute :bio
95
+ attribute :avatar_source, remote_key: 'avatarSource'
96
+ end
97
+
22
98
  validates_presence_of :id, :username
23
99
  validates_length_of :full_name, minimum: 4
24
100
  validates_length_of :bio, maximum: 16384
@@ -34,22 +110,6 @@ module Trello
34
110
  end
35
111
  end
36
112
 
37
- # Update the fields of a member.
38
- #
39
- # Supply a hash of string keyed data retrieved from the Trello API representing
40
- # an Member.
41
- def update_fields(fields)
42
- attributes[:id] = fields['id'] || attributes[:id]
43
- attributes[:full_name] = fields['fullName'] || attributes[:full_name]
44
- attributes[:email] = fields['email'] || attributes[:email]
45
- attributes[:username] = fields['username'] || attributes[:username]
46
- attributes[:initials] = fields['initials'] || attributes[:initials]
47
- attributes[:avatar_id] = fields['avatarHash'] || attributes[:avatar_id]
48
- attributes[:bio] = fields['bio'] || attributes[:bio]
49
- attributes[:url] = fields['url'] || attributes[:url]
50
- self
51
- end
52
-
53
113
  # Retrieve a URL to the avatar.
54
114
  #
55
115
  # Valid values for options are:
@@ -90,21 +150,6 @@ module Trello
90
150
  # Returns a list of notifications for the user
91
151
  many :notifications
92
152
 
93
- def save
94
- @previously_changed = changes
95
- @changed_attributes.clear if @changed_attributes.respond_to?(:clear)
96
- changes_applied if respond_to?(:changes_applied)
97
-
98
- return update! if id
99
- end
100
-
101
- def update!
102
- from_response client.put(request_prefix, {
103
- fullName: full_name,
104
- bio: bio
105
- })
106
- end
107
-
108
153
  # :nodoc:
109
154
  def request_prefix
110
155
  "/members/#{id}"
@@ -10,33 +10,40 @@ module Trello
10
10
  # @return [Datetime]
11
11
  # @!attribute [rw] data
12
12
  # @return [Object]
13
- # @!attribute [r] member_creator_id,
13
+ # @!attribute [r] creator_id
14
14
  # @return [String]
15
+ # @!attribute [r] creator_app
16
+ # @return [String]
17
+ # @!attribute [r] action_id
18
+ # @return [String]
19
+ # @!attribute [r] is_reactable
20
+ # @return [Boolean]
21
+ # @!attribute [r] read_at
22
+ # @return [Datetime]
23
+ # @!attribute [r] reactions
24
+ # @return [Array]
15
25
  class Notification < BasicData
16
- register_attributes :id, :unread, :type, :date, :data, :member_creator_id,
17
- read_only: [ :id, :unread, :type, :date, :member_creator_id ]
18
- validates_presence_of :id, :type, :date, :member_creator_id
19
-
20
- class << self
21
- # Locate a notification by its id
22
- def find(id, params = {})
23
- client.find(:notification, id, params)
24
- end
25
- end
26
26
 
27
- def update_fields(fields)
28
- attributes[:id] = fields['id'] || attributes[:id]
29
- attributes[:unread] = fields['unread'] if fields.has_key?('unread')
30
- attributes[:type] = fields['type'] || attributes[:type]
31
- attributes[:date] = fields['date'] || attributes[:date]
32
- attributes[:data] = fields['data'] || attributes[:data]
33
- attributes[:member_creator_id] = fields['idMemberCreator'] || attributes[:member_creator_id]
34
- self
27
+ schema do
28
+ # Readonly
29
+ attribute :id, read_only: true
30
+ attribute :type, read_only: true
31
+ attribute :date, read_only: true
32
+ attribute :data, read_only: true
33
+ attribute :creator_app, read_only: true, remote_key: 'appCreator'
34
+ attribute :creator_id, read_only: true, remote_key: 'idMemberCreator'
35
+ attribute :action_id, read_only: true, remote_key: 'idAction'
36
+ attribute :is_reactable, read_only: true, remote_key: 'isReactable'
37
+ attribute :unread, read_only: true
38
+ attribute :read_at, read_only: true, remote_key: 'dateRead'
39
+ attribute :reactions, read_only: true
35
40
  end
36
41
 
42
+ validates_presence_of :id, :type, :date, :creator_id
43
+
37
44
  alias :unread? :unread
38
45
 
39
- one :member_creator, path: :members, via: Member, using: :member_creator_id
46
+ one :creator, path: :members, via: Member, using: :creator_id
40
47
 
41
48
  def board
42
49
  Board.from_response client.get("/notifications/#{id}/board")