ruby-trello 2.2.0 → 3.1.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 (314) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +63 -10
  3. data/lib/trello/action.rb +31 -23
  4. data/lib/trello/association_builder/has_many.rb +17 -0
  5. data/lib/trello/association_builder/has_one.rb +16 -0
  6. data/lib/trello/association_fetcher/has_many/fetch.rb +47 -0
  7. data/lib/trello/association_fetcher/has_many/params.rb +56 -0
  8. data/lib/trello/association_fetcher/has_many.rb +26 -0
  9. data/lib/trello/association_fetcher/has_one/fetch.rb +49 -0
  10. data/lib/trello/association_fetcher/has_one/params.rb +36 -0
  11. data/lib/trello/association_fetcher/has_one.rb +25 -0
  12. data/lib/trello/association_infer_tool.rb +13 -0
  13. data/lib/trello/association_proxy.rb +1 -1
  14. data/lib/trello/attachment.rb +40 -27
  15. data/lib/trello/basic_data.rb +103 -49
  16. data/lib/trello/board.rb +88 -102
  17. data/lib/trello/card.rb +49 -198
  18. data/lib/trello/checklist.rb +17 -71
  19. data/lib/trello/comment.rb +39 -26
  20. data/lib/trello/cover_image.rb +20 -0
  21. data/lib/trello/custom_field.rb +31 -67
  22. data/lib/trello/custom_field_item.rb +37 -39
  23. data/lib/trello/custom_field_option.rb +40 -13
  24. data/lib/trello/item.rb +27 -16
  25. data/lib/trello/item_state.rb +7 -15
  26. data/lib/trello/json_utils.rb +1 -1
  27. data/lib/trello/label.rb +15 -85
  28. data/lib/trello/label_name.rb +22 -25
  29. data/lib/trello/list.rb +31 -44
  30. data/lib/trello/member.rb +77 -32
  31. data/lib/trello/notification.rb +27 -20
  32. data/lib/trello/organization.rb +53 -25
  33. data/lib/trello/plugin_datum.rb +11 -16
  34. data/lib/trello/schema/attribute/base.rb +79 -0
  35. data/lib/trello/schema/attribute/board_pref.rb +45 -0
  36. data/lib/trello/schema/attribute/custom_field_display.rb +45 -0
  37. data/lib/trello/schema/attribute/default.rb +45 -0
  38. data/lib/trello/schema/attribute_builder.rb +42 -0
  39. data/lib/trello/schema/attribute_registration.rb +47 -0
  40. data/lib/trello/schema/serializer/default.rb +17 -0
  41. data/lib/trello/schema/serializer/labels.rb +23 -0
  42. data/lib/trello/schema/serializer/time.rb +25 -0
  43. data/lib/trello/schema/serializer/webhooks.rb +25 -0
  44. data/lib/trello/schema.rb +31 -0
  45. data/lib/trello/token.rb +15 -12
  46. data/lib/trello/webhook.rb +18 -71
  47. data/lib/trello.rb +57 -39
  48. data/spec/action_spec.rb +2 -3
  49. data/spec/board_spec.rb +43 -103
  50. data/spec/card_spec.rb +143 -66
  51. data/spec/cassettes/action_find_with_id_and_get_all_fields.yml +104 -0
  52. data/spec/cassettes/board_find_with_id_and_get_all_fields.yml +96 -0
  53. data/spec/cassettes/board_find_with_id_and_get_specific_fields.yml +96 -0
  54. data/spec/cassettes/can_add_a_file_from_url_on_a_card.yml +189 -0
  55. data/spec/cassettes/can_add_a_file_on_a_card.yml +200 -0
  56. data/spec/cassettes/can_add_a_member_to_a_board.yml +191 -0
  57. data/spec/cassettes/can_add_a_member_to_a_card.yml +190 -0
  58. data/spec/cassettes/can_add_label_on_a_card.yml +281 -0
  59. data/spec/cassettes/can_arvhice_all_cards_of_list.yml +397 -0
  60. data/spec/cassettes/can_close_bong_a_card.yml +189 -0
  61. data/spec/cassettes/can_get_actions.yml +196 -0
  62. data/spec/cassettes/can_get_actions_of_board.yml +188 -0
  63. data/spec/cassettes/can_get_actions_of_list.yml +202 -0
  64. data/spec/cassettes/can_get_actions_of_members.yml +199 -0
  65. data/spec/cassettes/can_get_actions_of_organization.yml +201 -0
  66. data/spec/cassettes/can_get_attachments.yml +187 -0
  67. data/spec/cassettes/can_get_boards_of_custom_field.yml +198 -0
  68. data/spec/cassettes/can_get_boards_of_label.yml +197 -0
  69. data/spec/cassettes/can_get_boards_of_organization.yml +207 -0
  70. data/spec/cassettes/can_get_cards_of_board.yml +193 -0
  71. data/spec/cassettes/can_get_cards_of_list.yml +201 -0
  72. data/spec/cassettes/can_get_cards_of_member.yml +204 -0
  73. data/spec/cassettes/can_get_checklists_of_board.yml +187 -0
  74. data/spec/cassettes/can_get_comments.yml +193 -0
  75. data/spec/cassettes/can_get_comments_board.yml +109 -0
  76. data/spec/cassettes/can_get_comments_card.yml +111 -0
  77. data/spec/cassettes/can_get_comments_list.yml +109 -0
  78. data/spec/cassettes/can_get_custom_field_options_of_custom_field.yml +197 -0
  79. data/spec/cassettes/can_get_custom_fields_of_board.yml +187 -0
  80. data/spec/cassettes/can_get_label_names_of_board.yml +187 -0
  81. data/spec/cassettes/can_get_labels_of_board.yml +187 -0
  82. data/spec/cassettes/can_get_lists_of_board.yml +187 -0
  83. data/spec/cassettes/can_get_members_of_board.yml +188 -0
  84. data/spec/cassettes/can_get_members_of_organization.yml +200 -0
  85. data/spec/cassettes/can_get_notifications_of_member.yml +199 -0
  86. data/spec/cassettes/can_get_organization_of_board.yml +189 -0
  87. data/spec/cassettes/can_get_organizations_of_member.yml +203 -0
  88. data/spec/cassettes/can_get_plugin_data_of_board.yml +187 -0
  89. data/spec/cassettes/can_move_a_card_to_another_board_with_specific_list.yml +373 -0
  90. data/spec/cassettes/can_move_a_card_to_another_board_without_specific_list.yml +281 -0
  91. data/spec/cassettes/can_move_a_card_to_another_list.yml +281 -0
  92. data/spec/cassettes/can_move_all_cards_to_another_list.yml +886 -0
  93. data/spec/cassettes/can_remove_a_member_from_a_card.yml +185 -0
  94. data/spec/cassettes/can_remove_an_attachment_on_a_card.yml +277 -0
  95. data/spec/cassettes/can_remove_an_upvote_on_a_card.yml +465 -0
  96. data/spec/cassettes/can_remove_label_on_a_card.yml +279 -0
  97. data/spec/cassettes/can_success_add_comment_to_a_card.yml +196 -0
  98. data/spec/cassettes/can_success_copy_checklist_to_a_card.yml +281 -0
  99. data/spec/cassettes/can_success_copy_checklist_to_a_card_without_name_pos.yml +281 -0
  100. data/spec/cassettes/can_success_create_a_board.yml +98 -0
  101. data/spec/cassettes/can_success_create_a_board_with_full_parameters.yml +97 -0
  102. data/spec/cassettes/can_success_create_a_board_without_clone_from_other.yml +98 -0
  103. data/spec/cassettes/can_success_create_a_card.yml +99 -0
  104. data/spec/cassettes/can_success_create_a_card_when_due_is_datetime.yml +98 -0
  105. data/spec/cassettes/can_success_create_a_card_when_due_is_time.yml +98 -0
  106. data/spec/cassettes/can_success_create_a_checklist.yml +102 -0
  107. data/spec/cassettes/can_success_create_a_custom_field.yml +102 -0
  108. data/spec/cassettes/can_success_create_a_custom_field_option.yml +102 -0
  109. data/spec/cassettes/can_success_create_a_label.yml +102 -0
  110. data/spec/cassettes/can_success_create_a_list.yml +102 -0
  111. data/spec/cassettes/can_success_create_a_list_with_full_parameters.yml +102 -0
  112. data/spec/cassettes/can_success_create_a_organization.yml +104 -0
  113. data/spec/cassettes/can_success_create_a_webhook.yml +102 -0
  114. data/spec/cassettes/can_success_create_new_checklist_to_a_card.yml +189 -0
  115. data/spec/cassettes/can_success_delete_a_custom_field_option.yml +389 -0
  116. data/spec/cassettes/can_success_delete_card.yml +185 -0
  117. data/spec/cassettes/can_success_delete_checklist.yml +284 -0
  118. data/spec/cassettes/can_success_get_card_of_board_by_card_id.yml +188 -0
  119. data/spec/cassettes/can_success_remove_member_from_board.yml +186 -0
  120. data/spec/cassettes/can_success_return_all_boards_of_current_user.yml +195 -0
  121. data/spec/cassettes/can_success_upate_a_board.yml +191 -0
  122. data/spec/cassettes/can_success_upate_a_card.yml +189 -0
  123. data/spec/cassettes/can_success_upate_a_list.yml +296 -0
  124. data/spec/cassettes/can_success_update_bong_a_board.yml +283 -0
  125. data/spec/cassettes/can_success_update_bong_a_board_with_specific_fields.yml +284 -0
  126. data/spec/cassettes/can_success_update_bong_a_card.yml +191 -0
  127. data/spec/cassettes/can_success_update_bong_a_checklist_with_specific_fields.yml +296 -0
  128. data/spec/cassettes/can_success_update_bong_a_custom_field.yml +200 -0
  129. data/spec/cassettes/can_success_update_bong_a_label.yml +200 -0
  130. data/spec/cassettes/can_success_update_bong_a_list.yml +199 -0
  131. data/spec/cassettes/can_success_update_bong_a_list_with_specific_fields.yml +296 -0
  132. data/spec/cassettes/can_success_update_bong_a_organization.yml +203 -0
  133. data/spec/cassettes/can_success_update_bong_a_webhook.yml +296 -0
  134. data/spec/cassettes/can_upvote_on_a_card.yml +469 -0
  135. data/spec/cassettes/card_find_with_id_and_get_all_fields.yml +95 -0
  136. data/spec/cassettes/card_find_with_id_and_get_specific_fields.yml +96 -0
  137. data/spec/cassettes/checklist_can_add_an_item.yml +296 -0
  138. data/spec/cassettes/checklist_can_update_the_item_state.yml +296 -0
  139. data/spec/cassettes/checklist_find_with_id_and_get_all_fields.yml +100 -0
  140. data/spec/cassettes/comment_delete.yml +331 -0
  141. data/spec/cassettes/comment_find_with_id.yml +116 -0
  142. data/spec/cassettes/custom_field_find_with_id_and_get_all_fields.yml +100 -0
  143. data/spec/cassettes/custom_field_find_with_id_and_get_specific_fields.yml +100 -0
  144. data/spec/cassettes/custom_field_item_save_1.yml +97 -0
  145. data/spec/cassettes/custom_field_item_save_2.yml +281 -0
  146. data/spec/cassettes/custom_field_option_find_with_id.yml +100 -0
  147. data/spec/cassettes/get_board_of_card.yml +187 -0
  148. data/spec/cassettes/get_board_of_list.yml +197 -0
  149. data/spec/cassettes/get_boards_of_member.yml +207 -0
  150. data/spec/cassettes/get_check_item_states_of_card.yml +188 -0
  151. data/spec/cassettes/get_checklists_of_card.yml +187 -0
  152. data/spec/cassettes/get_cover_image_of_card.yml +187 -0
  153. data/spec/cassettes/get_custom_field_items_of_card.yml +187 -0
  154. data/spec/cassettes/get_list_of_card.yml +188 -0
  155. data/spec/cassettes/get_lists.yml +187 -0
  156. data/spec/cassettes/get_members_of_card.yml +189 -0
  157. data/spec/cassettes/get_plugin_data_of_card.yml +187 -0
  158. data/spec/cassettes/get_voters_of_card.yml +188 -0
  159. data/spec/cassettes/label_delete.yml +285 -0
  160. data/spec/cassettes/label_find_with_id.yml +100 -0
  161. data/spec/cassettes/list_find_with_id_and_get_all_fields.yml +100 -0
  162. data/spec/cassettes/list_find_with_id_and_get_specific_fields.yml +100 -0
  163. data/spec/cassettes/member_find_with_id_and_get_all_fields.yml +101 -0
  164. data/spec/cassettes/member_find_with_id_and_get_specific_fields.yml +100 -0
  165. data/spec/cassettes/notification_find_with_id.yml +103 -0
  166. data/spec/cassettes/organization_find_with_id_and_get_all_fields.yml +102 -0
  167. data/spec/cassettes/organization_find_with_id_and_get_specific_fields.yml +100 -0
  168. data/spec/cassettes/remove_upvote_on_a_card_when_have_not_voted.yml +366 -0
  169. data/spec/cassettes/revote_on_a_card.yml +464 -0
  170. data/spec/cassettes/token_find_with_token_string.yml +100 -0
  171. data/spec/cassettes/webhook_delete.yml +286 -0
  172. data/spec/cassettes/webhook_find_with_id.yml +100 -0
  173. data/spec/checklist_spec.rb +27 -43
  174. data/spec/custom_field_item_spec.rb +74 -0
  175. data/spec/custom_field_option_spec.rb +2 -2
  176. data/spec/custom_field_spec.rb +98 -10
  177. data/spec/integration/action/find_spec.rb +23 -0
  178. data/spec/integration/basic_data/many_spec.rb +127 -0
  179. data/spec/integration/basic_data/one_spec.rb +84 -0
  180. data/spec/integration/basic_data/schema_spec.rb +156 -0
  181. data/spec/integration/board/add_member_spec.rb +21 -0
  182. data/spec/integration/board/all_spec.rb +20 -0
  183. data/spec/integration/board/associations/actions_spec.rb +18 -0
  184. data/spec/integration/board/associations/cards_spec.rb +18 -0
  185. data/spec/integration/board/associations/checklists_spec.rb +18 -0
  186. data/spec/integration/board/associations/custom_fields_spec.rb +18 -0
  187. data/spec/integration/board/associations/label_names_spec.rb +17 -0
  188. data/spec/integration/board/associations/labels_spec.rb +18 -0
  189. data/spec/integration/board/associations/lists_spec.rb +18 -0
  190. data/spec/integration/board/associations/members_spec.rb +18 -0
  191. data/spec/integration/board/associations/organization_spec.rb +19 -0
  192. data/spec/integration/board/associations/plugin_data_spec.rb +18 -0
  193. data/spec/integration/board/create_spec.rb +95 -0
  194. data/spec/integration/board/find_card_spec.rb +18 -0
  195. data/spec/integration/board/find_spec.rb +42 -0
  196. data/spec/integration/board/remove_member_spec.rb +21 -0
  197. data/spec/integration/board/save_spec.rb +37 -0
  198. data/spec/integration/board/update!_spec.rb +62 -0
  199. data/spec/integration/board_lists_spec.rb +21 -0
  200. data/spec/integration/card/add_and_remove_attachment_spec.rb +45 -0
  201. data/spec/integration/card/add_and_remove_label_spec.rb +35 -0
  202. data/spec/integration/card/add_checklist_spec.rb +32 -0
  203. data/spec/integration/card/add_comment_spec.rb +19 -0
  204. data/spec/integration/card/add_memeber_spec.rb +19 -0
  205. data/spec/integration/card/associations/actions_spec.rb +17 -0
  206. data/spec/integration/card/associations/attachments_spec.rb +18 -0
  207. data/spec/integration/card/associations/board_spec.rb +17 -0
  208. data/spec/integration/card/associations/check_item_states_spec.rb +17 -0
  209. data/spec/integration/card/associations/checklists_spec.rb +18 -0
  210. data/spec/integration/card/associations/comments_spec.rb +19 -0
  211. data/spec/integration/card/associations/cover_image_spec.rb +18 -0
  212. data/spec/integration/card/associations/custom_field_items_spec.rb +18 -0
  213. data/spec/integration/card/associations/list_spec.rb +16 -0
  214. data/spec/integration/card/associations/members_spec.rb +18 -0
  215. data/spec/integration/card/associations/plugin_data_spec.rb +18 -0
  216. data/spec/integration/card/associations/voters_spec.rb +17 -0
  217. data/spec/integration/card/close!_spec.rb +16 -0
  218. data/spec/integration/card/create_new_check_list_spec.rb +19 -0
  219. data/spec/integration/card/create_spec.rb +84 -0
  220. data/spec/integration/card/delete_spec.rb +16 -0
  221. data/spec/integration/card/find_spec.rb +67 -0
  222. data/spec/integration/card/move_to_board_spec.rb +36 -0
  223. data/spec/integration/card/move_to_list_spec.rb +20 -0
  224. data/spec/integration/card/remove_member_spec.rb +19 -0
  225. data/spec/integration/card/save_spec.rb +61 -0
  226. data/spec/integration/card/update!_spec.rb +53 -0
  227. data/spec/integration/card/vote_spec.rb +50 -0
  228. data/spec/integration/checklist/add_item_spec.rb +20 -0
  229. data/spec/integration/checklist/create_spec.rb +23 -0
  230. data/spec/integration/checklist/delete_spec.rb +17 -0
  231. data/spec/integration/checklist/find_spec.rb +22 -0
  232. data/spec/integration/checklist/update!_spec.rb +21 -0
  233. data/spec/integration/checklist/update_item_state_spec.rb +20 -0
  234. data/spec/integration/comment/association/board_spec.rb +17 -0
  235. data/spec/integration/comment/association/card_spec.rb +17 -0
  236. data/spec/integration/comment/association/list_spec.rb +17 -0
  237. data/spec/integration/comment/delete_spec.rb +20 -0
  238. data/spec/integration/comment/find_spec.rb +17 -0
  239. data/spec/integration/custom_field/association/board_spec.rb +18 -0
  240. data/spec/integration/custom_field/association/custom_field_options_spec.rb +18 -0
  241. data/spec/integration/custom_field/create_spec.rb +29 -0
  242. data/spec/integration/custom_field/find_spec.rb +41 -0
  243. data/spec/integration/custom_field/update!_spec.rb +25 -0
  244. data/spec/integration/custom_field_item_spec.rb +47 -0
  245. data/spec/integration/custom_field_option/create_spec.rb +23 -0
  246. data/spec/integration/custom_field_option/delete_spec.rb +19 -0
  247. data/spec/integration/custom_field_option/find_spec.rb +21 -0
  248. data/spec/integration/label/association/board_spec.rb +18 -0
  249. data/spec/integration/label/create_spec.rb +23 -0
  250. data/spec/integration/label/delete_spec.rb +21 -0
  251. data/spec/integration/label/find_spec.rb +20 -0
  252. data/spec/integration/label/update!_spec.rb +25 -0
  253. data/spec/integration/list/archive_all_cards_spec.rb +20 -0
  254. data/spec/integration/list/associations/actions_spec.rb +18 -0
  255. data/spec/integration/list/associations/board_spec.rb +18 -0
  256. data/spec/integration/list/associations/cards_spec.rb +18 -0
  257. data/spec/integration/list/create_spec.rb +44 -0
  258. data/spec/integration/list/find_spec.rb +37 -0
  259. data/spec/integration/list/move_all_cards_spec.rb +31 -0
  260. data/spec/integration/list/save_spec.rb +40 -0
  261. data/spec/integration/list/update!_spec.rb +43 -0
  262. data/spec/integration/member/associations/actions_spec.rb +17 -0
  263. data/spec/integration/member/associations/boards_spec.rb +18 -0
  264. data/spec/integration/member/associations/cards_spec.rb +18 -0
  265. data/spec/integration/member/associations/notifications_spec.rb +18 -0
  266. data/spec/integration/member/associations/organizations_spec.rb +18 -0
  267. data/spec/integration/member/find_spec.rb +39 -0
  268. data/spec/integration/member/update!_spec.rb +18 -0
  269. data/spec/integration/notification/find_spec.rb +27 -0
  270. data/spec/integration/organization/associations/actions_spec.rb +18 -0
  271. data/spec/integration/organization/associations/boards_spec.rb +18 -0
  272. data/spec/integration/organization/associations/members_spec.rb +18 -0
  273. data/spec/integration/organization/create_spec.rb +23 -0
  274. data/spec/integration/organization/find_spec.rb +37 -0
  275. data/spec/integration/organization/update!_spec.rb +28 -0
  276. data/spec/integration/token/find_spec.rb +24 -0
  277. data/spec/integration/webhook/create_spec.rb +27 -0
  278. data/spec/integration/webhook/delete_spec.rb +21 -0
  279. data/spec/integration/webhook/find_spec.rb +22 -0
  280. data/spec/integration/webhook/update!_spec.rb +24 -0
  281. data/spec/item_spec.rb +2 -2
  282. data/spec/label_spec.rb +105 -28
  283. data/spec/list_spec.rb +32 -14
  284. data/spec/notification_spec.rb +3 -3
  285. data/spec/organization_spec.rb +6 -5
  286. data/spec/spec_helper.rb +70 -37
  287. data/spec/token_spec.rb +10 -11
  288. data/spec/unit/trello/association_builder/has_many_spec.rb +36 -0
  289. data/spec/unit/trello/association_builder/has_one_spec.rb +36 -0
  290. data/spec/unit/trello/association_fetcher/has_many/fetch_spec.rb +38 -0
  291. data/spec/unit/trello/association_fetcher/has_many/params_spec.rb +107 -0
  292. data/spec/unit/trello/association_fetcher/has_many_spec.rb +50 -0
  293. data/spec/unit/trello/association_fetcher/has_one/fetch_spec.rb +51 -0
  294. data/spec/unit/trello/association_fetcher/has_one/params_spec.rb +81 -0
  295. data/spec/unit/trello/association_fetcher/has_one_spec.rb +49 -0
  296. data/spec/unit/trello/association_infer_tool_spec.rb +41 -0
  297. data/spec/unit/trello/basic_data_spec.rb +113 -0
  298. data/spec/unit/trello/board/new_spec.rb +370 -0
  299. data/spec/unit/trello/board/save_spec.rb +49 -0
  300. data/spec/unit/trello/board/update_fields_spec.rb +129 -0
  301. data/spec/unit/trello/board/update_spec.rb +197 -0
  302. data/spec/unit/trello/card_spec.rb +103 -0
  303. data/spec/unit/trello/member/new_spec.rb +62 -0
  304. data/spec/unit/trello/member/update_fields_spec.rb +80 -0
  305. data/spec/unit/trello/schema/attribute/base_spec.rb +349 -0
  306. data/spec/unit/trello/schema/attribute/board_pref_spec.rb +208 -0
  307. data/spec/unit/trello/schema/attribute/default_spec.rb +236 -0
  308. data/spec/unit/trello/schema/attribute_builder_spec.rb +55 -0
  309. data/spec/unit/trello/schema/attribute_registration_spec.rb +59 -0
  310. data/spec/unit/trello/schema/serializer/default_spec.rb +19 -0
  311. data/spec/unit/trello/schema/serializer/time_spec.rb +39 -0
  312. data/spec/unit/trello/schema_spec.rb +25 -0
  313. data/spec/webhook_spec.rb +23 -7
  314. metadata +556 -33
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 05525435b0e8308a1adc45db693f314a91a17bb9f565efd8a87048b0dee6a4c6
4
- data.tar.gz: 96229c421c262dba867848a91b23149bce1f947bb4ef7b4df36d8cf5d1693f3a
3
+ metadata.gz: c36f88684585632f2f1fc785ea06cd651b6ba61105c1326e49cc9e4cbf1f5080
4
+ data.tar.gz: 1aeafd0ed644ac395d71ea296feac980ebd013f1b915c1caa99845c86c24d2b3
5
5
  SHA512:
6
- metadata.gz: fc91f9504c4666af90366c3b9cf18f49e50fd7afee11a9a1f9ff1bbbf70da7ab786ec1a56ffcaa3ff8f608012d439f7d9ee8fd5050a2f7ad609bc5a8941d8b09
7
- data.tar.gz: c9034334cc3d962272dad40e9beb781108ee729d2f86137faab7695bd9da00bd94789ecf2c41fcb33e83ddc3151a9f33d449bc52cffd215360958ed33402b511
6
+ metadata.gz: 4305a964e59f049220842e64dbd9df87dc4f94ff3a43825700178d2efeeae069dd607f718c6d1e027556921b20b6a2e187e92076d5debd85e314c916a61c5845
7
+ data.tar.gz: ba6056ba114bfb48cae07fad2acc4742641c3ef9c0adecdfbf0ee7f6aa4e6e08375ebbff6978918e4f1979c9a2b6ed33d29c1a846b6e89446b848e0cfb84576d
data/README.md CHANGED
@@ -1,8 +1,6 @@
1
1
  # Ruby Trello API
2
2
 
3
- [![Stories in Ready](http://badge.waffle.io/jeremytregunna/ruby-trello.png)](http://waffle.io/jeremytregunna/ruby-trello)
4
- [![Build Status](https://secure.travis-ci.org/jeremytregunna/ruby-trello.png)](http://travis-ci.org/jeremytregunna/ruby-trello)
5
- [![security](https://hakiri.io/github/jeremytregunna/ruby-trello/master.svg)](https://hakiri.io/github/jeremytregunna/ruby-trello/master)
3
+ [![Ruby](https://github.com/jeremytregunna/ruby-trello/actions/workflows/main.yml/badge.svg)](https://github.com/jeremytregunna/ruby-trello/actions/workflows/main.yml)
6
4
  [![Code Climate](https://codeclimate.com/github/jeremytregunna/ruby-trello/badges/gpa.svg)](https://codeclimate.com/github/jeremytregunna/ruby-trello)
7
5
 
8
6
  This library implements the [Trello](http://www.trello.com/) [API](https://developers.trello.com/).
@@ -12,20 +10,34 @@ Seriously, [check it out](http://www.trello.com/).
12
10
 
13
11
  [Full API documentation](http://www.rubydoc.info/gems/ruby-trello).
14
12
 
15
- ## Installation
13
+ Full Disclosure: This library is mostly complete, if you do find anything missing or not functioning as you expect it
14
+ to, please just [create an issue](https://github.com/jeremytregunna/ruby-trello/issues/new).
16
15
 
17
- ```
18
- # gem install ruby-trello
19
- ```
16
+ ## Requirements
20
17
 
21
- Full Disclosure: This library is mostly complete, if you do find anything missing or not functioning as you expect it
22
- to, please [let us know](https://trello.com/card/spot-a-bug-report-it/4f092b2ee23cb6fe6d1aaabd/17).
18
+ | Ruby \ ActiveModel | 4.2 | 5.2 | 6.0 | 6.1 | 7.0 |
19
+ | ---- | ---- | ---- | ---- | ---- | ---- |
20
+ | 2.5 | ✅ | ✅ | ✅ | ✅ | ❌ |
21
+ | 2.6 | ✅ | ✅ | ✅ | ✅ | ❌ |
22
+ | 2.7 | ❌ | ✅ | ✅ | ✅ | ✅ |
23
+ | 3.0 | ❌ | ❌ | ✅ | ✅ | ✅ |
24
+ | 3.1 | ❌ | ❌ | ✅ | ✅ | ✅ |
25
+ | jRuby 9.3 | ✅ | ✅ | ✅ | ✅ | ❌ |
23
26
 
24
- Supports Ruby 2.1.0 or newer.
27
+ Use the newest version for Ruby 2.5.0 or newer support.
28
+
29
+ Use version 2.2.1 or earlier for Ruby 2.1 ~ 2.4 support.
25
30
 
26
31
  Use version 1.3.0 or earlier for Ruby 1.9.3 support.
32
+
27
33
  Use version 1.4.x or earlier for Ruby 2.0.0 support.
28
34
 
35
+ ## Installation
36
+
37
+ ```
38
+ # gem install ruby-trello
39
+ ```
40
+
29
41
  ## Configuration
30
42
 
31
43
  #### Basic authorization:
@@ -181,3 +193,44 @@ Several ways you can contribute. Documentation, code, tests, feature requests, b
181
193
  If you submit a pull request that's accepted, you'll be given commit access to this repository.
182
194
 
183
195
  Please see the `CONTRIBUTING.md` file for more information.
196
+
197
+ ## Local Development
198
+
199
+ Use [matrixeval-ruby](https://github.com/MatrixEval/matrixeval-ruby) to test code againsts different ruby and active_model versions on local.
200
+
201
+ Check available commands with:
202
+
203
+ ```bash
204
+ matrixeval --help
205
+ # Or
206
+ meval --help
207
+ ```
208
+
209
+ ### Some examples:
210
+
211
+ Generate MatrixEval config file
212
+
213
+ ```bash
214
+ matrixeval init
215
+ ```
216
+
217
+ Run bundle install
218
+
219
+ ```bash
220
+ matrixeval --all bundle install
221
+ ```
222
+
223
+ Run tests
224
+
225
+ ```bash
226
+ matrixeval --all rspec
227
+ matrixeval --ruby 3.0 rspec spec/a_spec.rb
228
+ matrixeval --ruby 3.0 --active_model 7.0 rspec
229
+ ```
230
+
231
+ Bash
232
+
233
+ ```bash
234
+ matrixeval bash
235
+ matrixeval --ruby 3.0 --active_model 7.0 bash
236
+ ```
data/lib/trello/action.rb CHANGED
@@ -3,20 +3,40 @@ module Trello
3
3
  #
4
4
  # @!attribute [r] id
5
5
  # @return [String]
6
- # @!attribute [r] type
6
+ # @!attribute [r] creator_id
7
7
  # @return [String]
8
8
  # @!attribute [r] data
9
9
  # @return [Hash]
10
+ # @!attribute [r] type
11
+ # @return [String]
10
12
  # @!attribute [r] date
11
13
  # @return [Datetime]
12
- # @!attribute [r] member_creator_id
14
+ # @!attribute [r] limits
15
+ # @return [Hash]
16
+ # @!attribute [r] app_creator
17
+ # @return [String]
18
+ # @!attribute [r] display
19
+ # @return [Hash]
20
+ # @!attribute [w] text
13
21
  # @return [String]
14
- # @!attribute [r] member_participant
15
- # @return [Object]
16
22
  class Action < BasicData
17
- register_attributes :id, :type, :data, :date, :member_creator_id, :member_participant,
18
- readonly: [ :id, :type, :data, :date, :member_creator_id, :member_participant ]
19
- validates_presence_of :id, :type, :date, :member_creator_id
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 :id, :type, :date, :creator_id
20
40
 
21
41
  class << self
22
42
  # Locate a specific action and return a new Action object.
@@ -33,20 +53,6 @@ module Trello
33
53
  end
34
54
  end
35
55
 
36
- # Update the attributes of an action
37
- #
38
- # Supply a hash of string keyed data retrieved from the Trello API representing
39
- # an Action.
40
- def update_fields(fields)
41
- attributes[:id] = fields['id'] || attributes[:id]
42
- attributes[:type] = fields['type'] || attributes[:type]
43
- attributes[:data] = fields['data'] || attributes[:data]
44
- attributes[:date] = Time.iso8601(fields['date']) rescue nil if fields.has_key?('date')
45
- attributes[:member_creator_id] = fields['idMemberCreator'] || attributes[:member_creator_id]
46
- attributes[:member_participant] = fields['member'] || attributes[:member_participant]
47
- self
48
- end
49
-
50
56
  # Returns the board this action occurred on.
51
57
  def board
52
58
  Board.from_response client.get("/actions/#{id}/board")
@@ -62,7 +68,9 @@ module Trello
62
68
  List.from_response client.get("/actions/#{id}/list")
63
69
  end
64
70
 
65
- # Returns the member who created the action.
66
- one :member_creator, via: Member, path: :members, using: :member_creator_id
71
+ # Returns the list the action occurred on.
72
+ def member_creator
73
+ Member.from_response client.get("/actions/#{id}/memberCreator")
74
+ end
67
75
  end
68
76
  end
@@ -0,0 +1,17 @@
1
+ module Trello
2
+ module AssociationBuilder
3
+ class HasMany
4
+ class << self
5
+ def build(model_klass, name, options)
6
+ model_klass.class_eval do
7
+ define_method(name) do |*args|
8
+ has_many_fetcher = AssociationFetcher::HasMany.new(self, name, options)
9
+ filter_params = args[0] || {}
10
+ has_many_fetcher.fetch(filter_params)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,16 @@
1
+ module Trello
2
+ module AssociationBuilder
3
+ class HasOne
4
+ class << self
5
+ def build(model_klass, name, options)
6
+ model_klass.class_eval do
7
+ define_method(name) do |*args|
8
+ has_one_fetcher = AssociationFetcher::HasOne.new(self, name, options)
9
+ has_one_fetcher.fetch
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,47 @@
1
+ module Trello
2
+ module AssociationFetcher
3
+ class HasMany
4
+ class Fetch
5
+ class << self
6
+ def execute(params)
7
+ new(params).execute
8
+ end
9
+ end
10
+
11
+ attr_reader :params
12
+
13
+ def initialize(params)
14
+ @params = params
15
+ end
16
+
17
+ def execute
18
+ resources = client.find_many(association_class, path, filter_params)
19
+
20
+ MultiAssociation.new(association_owner, resources).proxy
21
+ end
22
+
23
+ private
24
+
25
+ def client
26
+ association_owner.client
27
+ end
28
+
29
+ def association_class
30
+ params.association_class
31
+ end
32
+
33
+ def path
34
+ params.fetch_path
35
+ end
36
+
37
+ def filter_params
38
+ params.filter_params
39
+ end
40
+
41
+ def association_owner
42
+ params.association_owner
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,56 @@
1
+ module Trello
2
+ module AssociationFetcher
3
+ class HasMany
4
+ class Params
5
+ attr_reader :association_owner
6
+
7
+ def initialize(association_owner:, association_name:, association_options:, filter:)
8
+ @association_owner = association_owner
9
+ @association_name = association_name
10
+ @association_options = association_options || {}
11
+ @filter = filter || {}
12
+ end
13
+
14
+ def association_class
15
+ association_options[:via] || infer_class_on(association_name)
16
+ end
17
+
18
+ def fetch_path
19
+ "/#{parent_restful_resource}/#{parent_restful_resource_id}/#{target_restful_resource}"
20
+ end
21
+
22
+ def filter_params
23
+ default_filter.merge(filter)
24
+ end
25
+
26
+ private
27
+
28
+ attr_reader :association_name, :association_options, :filter
29
+
30
+ def default_filter
31
+ association_options.reject { |k, _| %w[via in path].include?(k.to_s) }
32
+ end
33
+
34
+ def parent_restful_resource
35
+ association_options[:in] || infer_restful_resource_on(association_owner.class)
36
+ end
37
+
38
+ def parent_restful_resource_id
39
+ association_owner.id
40
+ end
41
+
42
+ def target_restful_resource
43
+ association_options[:path] || association_name
44
+ end
45
+
46
+ def infer_restful_resource_on(klass)
47
+ AssociationInferTool.infer_restful_resource_on_class(klass)
48
+ end
49
+
50
+ def infer_class_on(name)
51
+ AssociationInferTool.infer_class_on_name(name)
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,26 @@
1
+ module Trello
2
+ module AssociationFetcher
3
+ class HasMany
4
+ autoload :Params, 'trello/association_fetcher/has_many/params'
5
+ autoload :Fetch, 'trello/association_fetcher/has_many/fetch'
6
+
7
+ attr_reader :model, :name, :options
8
+
9
+ def initialize(model, name, options)
10
+ @model = model
11
+ @name = name
12
+ @options = options
13
+ end
14
+
15
+ def fetch(filter_params)
16
+ params = Params.new(
17
+ association_owner: model,
18
+ association_name: name,
19
+ association_options: options,
20
+ filter: filter_params
21
+ )
22
+ Fetch.execute(params)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,49 @@
1
+ module Trello
2
+ module AssociationFetcher
3
+ class HasOne
4
+ class Fetch
5
+ class << self
6
+ def execute(params)
7
+ new(params).execute
8
+ end
9
+ end
10
+
11
+ def initialize(params)
12
+ @params = params
13
+ end
14
+
15
+ def execute
16
+ if association_restful_name
17
+ client.find(association_restful_name, association_restful_id)
18
+ else
19
+ association_class.find(association_restful_id)
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ attr_reader :params
26
+
27
+ def client
28
+ association_owner.client
29
+ end
30
+
31
+ def association_owner
32
+ params.association_owner
33
+ end
34
+
35
+ def association_restful_name
36
+ params.association_restful_name
37
+ end
38
+
39
+ def association_restful_id
40
+ params.association_restful_id
41
+ end
42
+
43
+ def association_class
44
+ params.association_class
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,36 @@
1
+ module Trello
2
+ module AssociationFetcher
3
+ class HasOne
4
+ class Params
5
+ attr_reader :association_owner
6
+
7
+ def initialize(association_owner:, association_name:, association_options:)
8
+ @association_owner = association_owner
9
+ @association_name = association_name
10
+ @association_options = association_options || {}
11
+ end
12
+
13
+ def association_class
14
+ association_options[:via] || infer_class_on(association_name)
15
+ end
16
+
17
+ def association_restful_name
18
+ association_options[:path]
19
+ end
20
+
21
+ def association_restful_id
22
+ id_field = association_options[:using] || :id
23
+ association_owner.send(id_field)
24
+ end
25
+
26
+ private
27
+
28
+ attr_reader :association_name, :association_options
29
+
30
+ def infer_class_on(name)
31
+ AssociationInferTool.infer_class_on_name(name)
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,25 @@
1
+ module Trello
2
+ module AssociationFetcher
3
+ class HasOne
4
+ autoload :Params, 'trello/association_fetcher/has_one/params'
5
+ autoload :Fetch, 'trello/association_fetcher/has_one/fetch'
6
+
7
+ attr_reader :model, :name, :options
8
+
9
+ def initialize(model, name, options)
10
+ @model = model
11
+ @name = name
12
+ @options = options
13
+ end
14
+
15
+ def fetch
16
+ params = Params.new(
17
+ association_owner: model,
18
+ association_name: name,
19
+ association_options: options
20
+ )
21
+ Fetch.execute(params)
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,13 @@
1
+ module Trello
2
+ class AssociationInferTool
3
+ class << self
4
+ def infer_restful_resource_on_class(klass)
5
+ klass.to_s.split('::').last.downcase.pluralize
6
+ end
7
+
8
+ def infer_class_on_name(name)
9
+ Trello.const_get(name.to_s.singularize.camelize)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -31,7 +31,7 @@ module Trello
31
31
  end
32
32
 
33
33
  def to_ary
34
- proxy_assocation.dup
34
+ proxy_assocation.target.dup
35
35
  end
36
36
  alias_method :to_a, :to_ary
37
37
 
@@ -1,40 +1,53 @@
1
1
  module Trello
2
2
  # A file or url that is linked to a Trello card
3
3
  #
4
- # @!attribute id
4
+ # @!attribute [r] id
5
5
  # @return [String]
6
- # @!attribute name
7
- # @return [String]
8
- # @!attribute url
9
- # @return [String]
10
- # @!attribute pos
6
+ # @!attribute [r] position
11
7
  # @return [Float]
12
- # @!attribute bytes
8
+ # @!attribute [r] bytes
13
9
  # @return [Fixnum]
14
- # @!attribute date
10
+ # @!attribute [r] member_id
11
+ # @return [String]
12
+ # @!attribute [r] date
15
13
  # @return [Datetime]
16
- # @!attribute is_upload
14
+ # @!attribute [r] is_upload
17
15
  # @return [Boolean]
18
- # @!attribute mime_type
16
+ # @!attribute [r] previews
17
+ # @return [Array]
18
+ # @!attribute [r] file_name
19
+ # @return [String]
20
+ # @!attribute [r] edge_color
21
+ # @return [String]
22
+ # @!attribute [rw] name
19
23
  # @return [String]
24
+ # @!attribute [rw] url
25
+ # @return [String]
26
+ # @!attribute [rw] mime_type
27
+ # @return [String]
28
+ # @!attribute [w] file
29
+ # @return [String]
30
+ # @!attribute [w] set_as_cover
31
+ # @return [Boolean]
20
32
  class Attachment < BasicData
21
- register_attributes :name, :id, :pos, :url, :bytes, :member_id, :date, :is_upload, :mime_type, :previews
22
- # Update the fields of an attachment.
23
- #
24
- # Supply a hash of stringkeyed data retrieved from the Trello API representing
25
- # an attachment.
26
- def update_fields(fields)
27
- attributes[:name] = fields['name'] || attributes[:name]
28
- attributes[:id] = fields['id'] || attributes[:id]
29
- attributes[:pos] = fields['pos'] || attributes[:pos]
30
- attributes[:url] = fields['url'] || attributes[:url]
31
- attributes[:bytes] = fields['bytes'].to_i || attributes[:bytes]
32
- attributes[:member_id] = fields['idMember'] || attributes[:member_id]
33
- attributes[:date] = Time.parse(fields['date']).presence || attributes[:date]
34
- attributes[:is_upload] = fields['isUpload'] if fields.has_key?('isUpload')
35
- attributes[:mime_type] = fields['mimeType'] || attributes[:mime_type]
36
- attributes[:previews] = fields['previews'] if fields.has_key?('previews')
37
- self
33
+ schema do
34
+ # Readonly
35
+ attribute :id, readonly: true, primary_key: true
36
+ attribute :position, readonly: true, remote_key: 'pos'
37
+ attribute :bytes, readonly: true
38
+ attribute :member_id, remote_key: 'idMember', readonly: true
39
+ attribute :date, serializer: 'Time', readonly: true
40
+ attribute :is_upload, remote_key: 'isUpload', readonly: true
41
+ attribute :previews, readonly: true
42
+ attribute :file_name, remote_key: 'fileName', readonly: true
43
+ attribute :edge_color, remote_key: 'edgeColor', readonly: true
44
+
45
+ # Writable but create only
46
+ attribute :name, create_only: true
47
+ attribute :url, create_only: true
48
+ attribute :mime_type, remote_key: 'mimeType', create_only: true
49
+ attribute :file, create_only: true
50
+ attribute :set_as_cover, remote_key: 'setCover', create_only: true
38
51
  end
39
52
  end
40
53
  end