troo 0.0.8 → 0.0.9

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 (316) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -1
  3. data/.ruby-version +1 -1
  4. data/.trooconf.example +18 -0
  5. data/Gemfile.lock +178 -0
  6. data/README.md +77 -21
  7. data/Rakefile +1 -1
  8. data/bin/completion.bash +10 -0
  9. data/bin/completion.zsh +10 -0
  10. data/bin/init.sh +15 -0
  11. data/bin/troo +12 -3
  12. data/config/cucumber.yml +3 -3
  13. data/config/en.yml +29 -0
  14. data/config/trello_api.yml +19 -0
  15. data/features/add/board.feature +3 -19
  16. data/features/add/card.feature +14 -18
  17. data/features/add/comment.feature +14 -14
  18. data/features/add/list.feature +11 -14
  19. data/features/default/board.feature +4 -4
  20. data/features/default/card.feature +4 -4
  21. data/features/default/list.feature +4 -4
  22. data/features/move/card.feature +54 -0
  23. data/features/refresh/all.feature +8 -4
  24. data/features/refresh/board.feature +9 -6
  25. data/features/refresh/card.feature +9 -6
  26. data/features/refresh/list.feature +9 -6
  27. data/features/show/board.feature +7 -7
  28. data/features/show/boards.feature +19 -0
  29. data/features/show/card.feature +86 -15
  30. data/features/show/comment.feature +14 -12
  31. data/features/show/list.feature +19 -14
  32. data/features/status.feature +27 -13
  33. data/features/step_definitions/fabrication_steps.rb +43 -8
  34. data/features/step_definitions/troo_steps.rb +3 -2
  35. data/features/support/env.rb +1 -0
  36. data/features/troo.feature +0 -12
  37. data/lib/troo.rb +32 -29
  38. data/lib/troo/api/client.rb +117 -0
  39. data/lib/troo/api/endpoints.rb +39 -0
  40. data/lib/troo/api/headers.rb +44 -0
  41. data/lib/troo/api/oauth_settings.rb +36 -0
  42. data/lib/troo/api/request.rb +37 -0
  43. data/lib/troo/api/response.rb +31 -0
  44. data/lib/troo/cli/add.rb +8 -12
  45. data/lib/troo/cli/commands/add.rb +95 -0
  46. data/lib/troo/cli/commands/default.rb +44 -0
  47. data/lib/troo/cli/commands/move/card.rb +95 -0
  48. data/lib/troo/cli/commands/refresh.rb +80 -0
  49. data/lib/troo/cli/commands/refresh/all.rb +52 -0
  50. data/lib/troo/cli/commands/show.rb +56 -0
  51. data/lib/troo/cli/commands/show/show_boards.rb +36 -0
  52. data/lib/troo/cli/commands/show/show_comments.rb +54 -0
  53. data/lib/troo/cli/commands/status.rb +68 -0
  54. data/lib/troo/cli/default.rb +3 -3
  55. data/lib/troo/cli/main.rb +60 -9
  56. data/lib/troo/cli/refresh.rb +4 -4
  57. data/lib/troo/cli/show.rb +7 -7
  58. data/lib/troo/cli/thor_fixes.rb +1 -5
  59. data/lib/troo/configuration.rb +53 -0
  60. data/lib/troo/debug.rb +18 -0
  61. data/lib/troo/decorators/member.rb +2 -19
  62. data/lib/troo/decorators/resource.rb +130 -0
  63. data/lib/troo/helpers/decorator_helpers.rb +21 -74
  64. data/lib/troo/helpers/model_helpers.rb +19 -4
  65. data/lib/troo/helpers/remote_model_helpers.rb +54 -0
  66. data/lib/troo/models/board.rb +19 -11
  67. data/lib/troo/models/card.rb +20 -17
  68. data/lib/troo/models/comment.rb +28 -8
  69. data/lib/troo/models/list.rb +22 -14
  70. data/lib/troo/models/member.rb +21 -5
  71. data/lib/troo/models/refresh.rb +3 -4
  72. data/lib/troo/persistence/local.rb +63 -0
  73. data/lib/troo/presentation/formatter.rb +132 -0
  74. data/lib/troo/presentation/template.rb +0 -4
  75. data/lib/troo/presenters/board.rb +32 -51
  76. data/lib/troo/presenters/card.rb +4 -11
  77. data/lib/troo/presenters/comment.rb +30 -16
  78. data/lib/troo/presenters/list.rb +25 -21
  79. data/lib/troo/presenters/member.rb +1 -8
  80. data/lib/troo/remote/all.rb +16 -0
  81. data/lib/troo/remote/board.rb +64 -0
  82. data/lib/troo/remote/card.rb +81 -0
  83. data/lib/troo/remote/comment.rb +70 -0
  84. data/lib/troo/remote/comment_data.rb +11 -0
  85. data/lib/troo/remote/comment_data_board.rb +13 -0
  86. data/lib/troo/remote/comment_data_card.rb +15 -0
  87. data/lib/troo/remote/list.rb +49 -0
  88. data/lib/troo/remote/member.rb +75 -0
  89. data/lib/troo/remote/persistence/board.rb +57 -0
  90. data/lib/troo/remote/persistence/card.rb +59 -0
  91. data/lib/troo/remote/persistence/comment.rb +58 -0
  92. data/lib/troo/remote/persistence/list.rb +57 -0
  93. data/lib/troo/remote/persistence/move_card.rb +85 -0
  94. data/lib/troo/retrieval/local.rb +100 -0
  95. data/lib/troo/retrieval/remote.rb +91 -0
  96. data/lib/troo/troo.rb +42 -42
  97. data/lib/troo/version.rb +1 -1
  98. data/lib/troo/views/card.erb +8 -10
  99. data/lib/troo/views/comments.erb +4 -0
  100. data/test/cassettes/board_by_id.yml +21 -30
  101. data/test/cassettes/boards_all.yml +22 -90
  102. data/test/cassettes/card_by_id.yml +49 -0
  103. data/test/cassettes/cards_by_board_id.yml +22 -90
  104. data/test/cassettes/cards_by_list_id.yml +22 -87
  105. data/test/cassettes/comments_by_board_id.yml +22 -95
  106. data/test/cassettes/comments_by_card_id.yml +22 -87
  107. data/test/cassettes/create_board.yml +20 -32
  108. data/test/cassettes/create_card.yml +21 -35
  109. data/test/cassettes/create_comment.yml +19 -37
  110. data/test/cassettes/create_list.yml +18 -32
  111. data/test/cassettes/list_by_id.yml +46 -0
  112. data/test/cassettes/lists_by_board_id.yml +19 -91
  113. data/test/cassettes/member_by_id.yml +48 -0
  114. data/test/cassettes/members_by_board_id.yml +21 -82
  115. data/test/cassettes/move_card_board.yml +49 -0
  116. data/test/cassettes/move_card_list.yml +49 -0
  117. data/test/lib/troo/api/client_test.rb +75 -0
  118. data/test/lib/troo/api/endpoints_test.rb +48 -0
  119. data/test/lib/troo/api/headers_test.rb +27 -0
  120. data/test/lib/troo/api/oauth_settings_test.rb +10 -0
  121. data/test/lib/troo/api/request_test.rb +63 -0
  122. data/test/lib/troo/api/response_test.rb +15 -0
  123. data/test/lib/troo/cli/add_test.rb +113 -0
  124. data/test/lib/troo/cli/commands/add_test.rb +66 -0
  125. data/test/lib/troo/cli/commands/default_test.rb +39 -0
  126. data/test/lib/troo/cli/commands/move/card_test.rb +86 -0
  127. data/test/lib/troo/cli/commands/refresh/all_test.rb +37 -0
  128. data/test/lib/troo/cli/commands/refresh_test.rb +59 -0
  129. data/test/lib/troo/cli/commands/show/show_boards_test.rb +35 -0
  130. data/test/lib/troo/cli/commands/show/show_comments_test.rb +63 -0
  131. data/test/lib/troo/cli/commands/show_test.rb +65 -0
  132. data/test/lib/troo/cli/commands/status_test.rb +48 -0
  133. data/test/lib/troo/cli/default_test.rb +39 -0
  134. data/test/lib/troo/cli/main_test.rb +102 -0
  135. data/test/lib/troo/cli/refresh_test.rb +43 -0
  136. data/test/lib/troo/cli/show_test.rb +49 -0
  137. data/test/lib/troo/cli/thor_fixes_test.rb +38 -0
  138. data/test/lib/troo/configuration_test.rb +43 -0
  139. data/test/lib/troo/debug_test.rb +25 -0
  140. data/test/lib/troo/decorators/card_test.rb +105 -229
  141. data/test/lib/troo/decorators/member_test.rb +20 -35
  142. data/test/lib/troo/decorators/resource_test.rb +157 -0
  143. data/test/lib/troo/helpers/decorator_helpers_test.rb +10 -19
  144. data/test/lib/troo/helpers/model_helpers_test.rb +18 -8
  145. data/test/lib/troo/helpers/remote_model_helpers_test.rb +68 -0
  146. data/test/lib/troo/models/behaviours/set_default_test.rb +0 -10
  147. data/test/lib/troo/models/board_test.rb +2 -2
  148. data/test/lib/troo/models/card_test.rb +2 -2
  149. data/test/lib/troo/models/comment_test.rb +6 -2
  150. data/test/lib/troo/models/list_test.rb +2 -2
  151. data/test/lib/troo/models/member_test.rb +6 -2
  152. data/test/lib/troo/persistence/local_test.rb +31 -0
  153. data/test/lib/troo/presentation/formatter_test.rb +31 -0
  154. data/test/lib/troo/presentation/sentence_test.rb +0 -12
  155. data/test/lib/troo/presentation/template_test.rb +1 -14
  156. data/test/lib/troo/presenters/board_test.rb +17 -36
  157. data/test/lib/troo/presenters/card_test.rb +1 -31
  158. data/test/lib/troo/presenters/comment_test.rb +19 -19
  159. data/test/lib/troo/presenters/list_test.rb +18 -18
  160. data/test/lib/troo/presenters/member_test.rb +1 -14
  161. data/test/lib/troo/remote/board_test.rb +66 -0
  162. data/test/lib/troo/remote/card_test.rb +81 -0
  163. data/test/lib/troo/remote/comment_data_board.rb +9 -0
  164. data/test/lib/troo/remote/comment_data_card_test.rb +9 -0
  165. data/test/lib/troo/remote/comment_data_test.rb +9 -0
  166. data/test/lib/troo/remote/comment_test.rb +100 -0
  167. data/test/lib/troo/remote/list_test.rb +67 -0
  168. data/test/lib/troo/remote/member_test.rb +70 -0
  169. data/test/lib/troo/remote/persistence/board_test.rb +39 -0
  170. data/test/lib/troo/remote/persistence/card_test.rb +50 -0
  171. data/test/lib/troo/remote/persistence/comment_test.rb +45 -0
  172. data/test/lib/troo/remote/persistence/list_test.rb +45 -0
  173. data/test/lib/troo/remote/persistence/move_card_test.rb +78 -0
  174. data/test/lib/troo/retrieval/local_test.rb +192 -0
  175. data/test/lib/troo/retrieval/remote_test.rb +49 -0
  176. data/test/support/fabrication.rb +17 -17
  177. data/test/support/fake_trello/fake_response.rb +38 -0
  178. data/test/support/fake_trello/server.rb +124 -0
  179. data/test/support/remotes/all_boards.json +41 -0
  180. data/test/support/remotes/board.json +140 -0
  181. data/test/support/remotes/board_by_id.json +75 -0
  182. data/test/support/remotes/card.json +40 -0
  183. data/test/support/remotes/card_by_card_id.json +302 -0
  184. data/test/support/remotes/comment.json +27 -0
  185. data/test/support/remotes/create_board.json +38 -0
  186. data/test/support/remotes/list.json +7 -0
  187. data/test/support/remotes/member.json +50 -0
  188. data/test/system_test.sh +21 -1
  189. data/test/test_helper.rb +2 -1
  190. data/troo.gemspec +28 -20
  191. metadata +376 -269
  192. data/configuration.yml.example +0 -7
  193. data/features/cleanup.feature +0 -13
  194. data/lib/troo/actions/create_board.rb +0 -46
  195. data/lib/troo/actions/create_card.rb +0 -44
  196. data/lib/troo/actions/create_comment.rb +0 -46
  197. data/lib/troo/actions/create_list.rb +0 -42
  198. data/lib/troo/actions/move_card.rb +0 -37
  199. data/lib/troo/adaptors/board.rb +0 -32
  200. data/lib/troo/adaptors/card.rb +0 -67
  201. data/lib/troo/adaptors/comment.rb +0 -42
  202. data/lib/troo/adaptors/list.rb +0 -37
  203. data/lib/troo/adaptors/member.rb +0 -52
  204. data/lib/troo/adaptors/resource.rb +0 -17
  205. data/lib/troo/commands/add/board.rb +0 -26
  206. data/lib/troo/commands/add/card.rb +0 -33
  207. data/lib/troo/commands/add/comment.rb +0 -33
  208. data/lib/troo/commands/add/list.rb +0 -33
  209. data/lib/troo/commands/add/resource.rb +0 -21
  210. data/lib/troo/commands/commands.rb +0 -28
  211. data/lib/troo/commands/default/board.rb +0 -25
  212. data/lib/troo/commands/default/card.rb +0 -25
  213. data/lib/troo/commands/default/list.rb +0 -25
  214. data/lib/troo/commands/default/resource.rb +0 -26
  215. data/lib/troo/commands/refresh/all.rb +0 -41
  216. data/lib/troo/commands/refresh/board.rb +0 -28
  217. data/lib/troo/commands/refresh/card.rb +0 -29
  218. data/lib/troo/commands/refresh/list.rb +0 -29
  219. data/lib/troo/commands/refresh/resource.rb +0 -42
  220. data/lib/troo/commands/show/board.rb +0 -13
  221. data/lib/troo/commands/show/boards.rb +0 -35
  222. data/lib/troo/commands/show/card.rb +0 -13
  223. data/lib/troo/commands/show/comments.rb +0 -21
  224. data/lib/troo/commands/show/list.rb +0 -13
  225. data/lib/troo/commands/show/resource.rb +0 -41
  226. data/lib/troo/commands/status/board.rb +0 -30
  227. data/lib/troo/commands/status/card.rb +0 -30
  228. data/lib/troo/commands/status/list.rb +0 -30
  229. data/lib/troo/commands/status/resource.rb +0 -34
  230. data/lib/troo/decorators/board.rb +0 -66
  231. data/lib/troo/decorators/card.rb +0 -105
  232. data/lib/troo/decorators/comment.rb +0 -36
  233. data/lib/troo/decorators/list.rb +0 -60
  234. data/lib/troo/external/board.rb +0 -31
  235. data/lib/troo/external/card.rb +0 -31
  236. data/lib/troo/external/comment.rb +0 -27
  237. data/lib/troo/external/list.rb +0 -27
  238. data/lib/troo/external/member.rb +0 -27
  239. data/lib/troo/external/resource.rb +0 -42
  240. data/lib/troo/helpers/command_helpers.rb +0 -37
  241. data/lib/troo/models/persistence/board.rb +0 -19
  242. data/lib/troo/models/persistence/card.rb +0 -19
  243. data/lib/troo/models/persistence/comment.rb +0 -19
  244. data/lib/troo/models/persistence/list.rb +0 -19
  245. data/lib/troo/models/persistence/member.rb +0 -19
  246. data/lib/troo/models/persistence/resource.rb +0 -50
  247. data/lib/troo/models/remote/comment.rb +0 -21
  248. data/lib/troo/models/remote/resource.rb +0 -25
  249. data/lib/troo/models/retrieval/board.rb +0 -29
  250. data/lib/troo/models/retrieval/card.rb +0 -33
  251. data/lib/troo/models/retrieval/comment.rb +0 -25
  252. data/lib/troo/models/retrieval/list.rb +0 -29
  253. data/lib/troo/models/retrieval/member.rb +0 -25
  254. data/lib/troo/models/retrieval/resource.rb +0 -36
  255. data/lib/troo/views/comment.erb +0 -3
  256. data/test/cassettes/card_by_card_id.yml +0 -58
  257. data/test/cassettes/comments_by_list_id.yml +0 -109
  258. data/test/cassettes/list_by_list_id.yml +0 -56
  259. data/test/cassettes/member_by_member_id.yml +0 -60
  260. data/test/cassettes/move_card.yml +0 -61
  261. data/test/lib/troo/actions/create_board_test.rb +0 -66
  262. data/test/lib/troo/actions/create_card_test.rb +0 -71
  263. data/test/lib/troo/actions/create_comment_test.rb +0 -71
  264. data/test/lib/troo/actions/create_list_test.rb +0 -65
  265. data/test/lib/troo/actions/move_card_test.rb +0 -54
  266. data/test/lib/troo/adaptors/board_test.rb +0 -38
  267. data/test/lib/troo/adaptors/card_test.rb +0 -49
  268. data/test/lib/troo/adaptors/comment_test.rb +0 -41
  269. data/test/lib/troo/adaptors/list_test.rb +0 -38
  270. data/test/lib/troo/adaptors/member_test.rb +0 -44
  271. data/test/lib/troo/commands/add/board_test.rb +0 -43
  272. data/test/lib/troo/commands/add/card_test.rb +0 -44
  273. data/test/lib/troo/commands/add/comment_test.rb +0 -44
  274. data/test/lib/troo/commands/add/list_test.rb +0 -44
  275. data/test/lib/troo/commands/add/resource_test.rb +0 -25
  276. data/test/lib/troo/commands/default/board_test.rb +0 -37
  277. data/test/lib/troo/commands/default/card_test.rb +0 -37
  278. data/test/lib/troo/commands/default/list_test.rb +0 -37
  279. data/test/lib/troo/commands/default/resource_test.rb +0 -20
  280. data/test/lib/troo/commands/refresh/all_test.rb +0 -39
  281. data/test/lib/troo/commands/refresh/board_test.rb +0 -62
  282. data/test/lib/troo/commands/refresh/card_test.rb +0 -62
  283. data/test/lib/troo/commands/refresh/list_test.rb +0 -62
  284. data/test/lib/troo/commands/refresh/resource_test.rb +0 -20
  285. data/test/lib/troo/commands/show/board_test.rb +0 -65
  286. data/test/lib/troo/commands/show/boards_test.rb +0 -36
  287. data/test/lib/troo/commands/show/card_test.rb +0 -64
  288. data/test/lib/troo/commands/show/comments_test.rb +0 -64
  289. data/test/lib/troo/commands/show/list_test.rb +0 -64
  290. data/test/lib/troo/commands/show/resource_test.rb +0 -25
  291. data/test/lib/troo/commands/status/board_test.rb +0 -43
  292. data/test/lib/troo/commands/status/card_test.rb +0 -43
  293. data/test/lib/troo/commands/status/list_test.rb +0 -43
  294. data/test/lib/troo/commands/status/resource_test.rb +0 -19
  295. data/test/lib/troo/decorators/board_test.rb +0 -129
  296. data/test/lib/troo/decorators/comment_test.rb +0 -74
  297. data/test/lib/troo/decorators/list_test.rb +0 -102
  298. data/test/lib/troo/external/board_test.rb +0 -102
  299. data/test/lib/troo/external/card_test.rb +0 -131
  300. data/test/lib/troo/external/comment_test.rb +0 -109
  301. data/test/lib/troo/external/list_test.rb +0 -94
  302. data/test/lib/troo/external/member_test.rb +0 -94
  303. data/test/lib/troo/external/resource_test.rb +0 -25
  304. data/test/lib/troo/helpers/command_helpers_test.rb +0 -82
  305. data/test/lib/troo/models/persistence/board_test.rb +0 -62
  306. data/test/lib/troo/models/persistence/card_test.rb +0 -61
  307. data/test/lib/troo/models/persistence/comment_test.rb +0 -69
  308. data/test/lib/troo/models/persistence/list_test.rb +0 -60
  309. data/test/lib/troo/models/persistence/member_test.rb +0 -60
  310. data/test/lib/troo/models/remote/comment_test.rb +0 -56
  311. data/test/lib/troo/models/remote/resource_test.rb +0 -26
  312. data/test/lib/troo/models/retrieval/board_test.rb +0 -93
  313. data/test/lib/troo/models/retrieval/card_test.rb +0 -101
  314. data/test/lib/troo/models/retrieval/comment_test.rb +0 -46
  315. data/test/lib/troo/models/retrieval/list_test.rb +0 -93
  316. data/test/lib/troo/models/retrieval/member_test.rb +0 -58
@@ -0,0 +1,57 @@
1
+ module Troo
2
+ module Remote
3
+ module Persistence
4
+ class Board
5
+ class << self
6
+ def with(name, description = nil)
7
+ new(name, description).perform
8
+ end
9
+ end
10
+
11
+ def initialize(name, description = nil)
12
+ @name = name
13
+ @description = description
14
+ end
15
+
16
+ def perform
17
+ create_local
18
+ end
19
+
20
+ private
21
+
22
+ attr_reader :name, :description
23
+
24
+ def create_local
25
+ return Troo::Persistence::Local
26
+ .with_collection(resource).first if any?
27
+ false
28
+ end
29
+
30
+ def any?
31
+ resource.any?
32
+ end
33
+
34
+ def resource
35
+ @resource ||= API::Client.perform(parameters)
36
+ end
37
+
38
+ def parameters
39
+ {
40
+ verb: :post,
41
+ endpoint: :create_board,
42
+ interpolation: {},
43
+ query: query,
44
+ model: Remote::Board
45
+ }
46
+ end
47
+
48
+ def query
49
+ {
50
+ name: name,
51
+ desc: description
52
+ }
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,59 @@
1
+ module Troo
2
+ module Remote
3
+ module Persistence
4
+ class Card
5
+ class << self
6
+ def with(external_list_id, name = nil, description = nil)
7
+ new(external_list_id, name, description).perform
8
+ end
9
+ end
10
+
11
+ def initialize(external_list_id, name = nil, description = nil)
12
+ @external_list_id = external_list_id
13
+ @name = name
14
+ @description = description
15
+ end
16
+
17
+ def perform
18
+ create_local
19
+ end
20
+
21
+ private
22
+
23
+ attr_reader :external_list_id, :name, :description
24
+
25
+ def create_local
26
+ return Troo::Persistence::Local
27
+ .with_collection(resource).first if any?
28
+ false
29
+ end
30
+
31
+ def any?
32
+ resource.any?
33
+ end
34
+
35
+ def resource
36
+ @resource ||= API::Client.perform(parameters)
37
+ end
38
+
39
+ def parameters
40
+ {
41
+ verb: :post,
42
+ endpoint: :create_card,
43
+ interpolation: {},
44
+ query: query,
45
+ model: Remote::Card
46
+ }
47
+ end
48
+
49
+ def query
50
+ {
51
+ name: name,
52
+ list_id: external_list_id,
53
+ desc: description
54
+ }
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,58 @@
1
+ module Troo
2
+ module Remote
3
+ module Persistence
4
+ class Comment
5
+ class << self
6
+ def with(external_card_id, comment)
7
+ new(external_card_id, comment).perform
8
+ end
9
+ end
10
+
11
+ def initialize(external_card_id, comment)
12
+ @external_card_id = external_card_id
13
+ @comment = comment
14
+ end
15
+
16
+ def perform
17
+ create_local
18
+ end
19
+
20
+ private
21
+
22
+ attr_reader :external_card_id, :comment
23
+
24
+ def create_local
25
+ return Troo::Persistence::Local
26
+ .with_collection(resource).first if any?
27
+ false
28
+ end
29
+
30
+ def any?
31
+ resource.any?
32
+ end
33
+
34
+ def resource
35
+ @resource ||= API::Client.perform(parameters)
36
+ end
37
+
38
+ def parameters
39
+ {
40
+ verb: :post,
41
+ endpoint: :create_comment,
42
+ interpolation: interpolation,
43
+ query: query,
44
+ model: Remote::Comment
45
+ }
46
+ end
47
+
48
+ def interpolation
49
+ { external_id: external_card_id }
50
+ end
51
+
52
+ def query
53
+ { text: comment }
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,57 @@
1
+ module Troo
2
+ module Remote
3
+ module Persistence
4
+ class List
5
+ class << self
6
+ def with(external_board_id, name)
7
+ new(external_board_id, name).perform
8
+ end
9
+ end
10
+
11
+ def initialize(external_board_id, name)
12
+ @external_board_id = external_board_id
13
+ @name = name
14
+ end
15
+
16
+ def perform
17
+ create_local
18
+ end
19
+
20
+ private
21
+
22
+ attr_reader :external_board_id, :name
23
+
24
+ def create_local
25
+ return Troo::Persistence::Local
26
+ .with_collection(resource).first if any?
27
+ false
28
+ end
29
+
30
+ def any?
31
+ resource.any?
32
+ end
33
+
34
+ def resource
35
+ @resource ||= API::Client.perform(parameters)
36
+ end
37
+
38
+ def parameters
39
+ {
40
+ verb: :post,
41
+ endpoint: :create_list,
42
+ interpolation: {},
43
+ query: query,
44
+ model: Remote::List
45
+ }
46
+ end
47
+
48
+ def query
49
+ {
50
+ name: name,
51
+ board_id: external_board_id
52
+ }
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,85 @@
1
+ module Troo
2
+ module Remote
3
+ module Persistence
4
+ class MoveCard
5
+ class << self
6
+ def with(external_card_id,
7
+ external_list_id,
8
+ external_board_id = nil)
9
+ new(external_card_id, external_list_id, external_board_id)
10
+ .perform
11
+ end
12
+ end
13
+
14
+ def initialize(external_card_id,
15
+ external_list_id,
16
+ external_board_id = nil)
17
+ @external_card_id = external_card_id
18
+ @external_list_id = external_list_id
19
+ @external_board_id = external_board_id
20
+ end
21
+
22
+ def perform
23
+ update_cards
24
+ end
25
+
26
+ private
27
+
28
+ attr_reader :external_card_id,
29
+ :external_list_id,
30
+ :external_board_id
31
+
32
+ def update_cards
33
+ return Troo::Persistence::Local
34
+ .with_collection(resource).first if any?
35
+ false
36
+ end
37
+
38
+ def any?
39
+ resource.any?
40
+ end
41
+
42
+ def resource
43
+ @resource ||= API::Client.perform(parameters)
44
+ end
45
+
46
+ def parameters
47
+ {
48
+ verb: :put,
49
+ endpoint: endpoint,
50
+ interpolation: interpolation,
51
+ query: query,
52
+ model: Remote::Card
53
+ }
54
+ end
55
+
56
+ def endpoint
57
+ return :move_card_board if external_board_id
58
+ :move_card_list
59
+ end
60
+
61
+ def interpolation
62
+ { external_id: external_card_id }
63
+ end
64
+
65
+ def query
66
+ return board_query if external_board_id
67
+ list_query
68
+ end
69
+
70
+ def board_query
71
+ {
72
+ value: external_board_id,
73
+ idList: external_list_id
74
+ }
75
+ end
76
+
77
+ def list_query
78
+ {
79
+ value: external_list_id
80
+ }
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,100 @@
1
+ module Troo
2
+ module Retrieval
3
+ class Local
4
+ attr_reader :id
5
+
6
+ class << self
7
+ def all(klass)
8
+ new(klass).all
9
+ end
10
+
11
+ def default(klass, options = {})
12
+ new(klass, nil, options).default
13
+ end
14
+
15
+ def retrieve(klass, id = nil, options = {})
16
+ new(klass, id, options).retrieve
17
+ end
18
+ end
19
+
20
+ def initialize(klass, id = nil, options = {})
21
+ @klass, @id, @options = klass, id, options
22
+ end
23
+
24
+ def all
25
+ klass.all
26
+ end
27
+
28
+ def default
29
+ klass.default
30
+ end
31
+
32
+ def retrieve
33
+ return default unless id
34
+ by_short_id || by_id || by_external_id || optional_remote
35
+ end
36
+
37
+ private
38
+
39
+ attr_reader :klass
40
+
41
+ def optional_remote
42
+ remote if allow_remote?
43
+ end
44
+
45
+ def allow_remote?
46
+ Troo.configuration.allow_remote &&
47
+ options.fetch(:allow_remote)
48
+ end
49
+
50
+ def options
51
+ defaults.merge!(@options)
52
+ end
53
+
54
+ def defaults
55
+ { allow_remote: true }
56
+ end
57
+
58
+ def by_id
59
+ klass[id]
60
+ end
61
+
62
+ def by_short_id
63
+ klass.first(short_id_criteria)
64
+ end
65
+
66
+ def by_external_id
67
+ klass.by_external_id(id)
68
+ end
69
+
70
+ def remote
71
+ Retrieval::Remote.fetch(klass.remote, id, options).first
72
+ end
73
+
74
+ def short_id_criteria
75
+ return special if card? && default_board_exists?
76
+ normal
77
+ end
78
+
79
+ def normal
80
+ { short_id: id }
81
+ end
82
+
83
+ def special
84
+ normal.merge!(board_criteria)
85
+ end
86
+
87
+ def board_criteria
88
+ { external_board_id: Troo::Board.default.external_id }
89
+ end
90
+
91
+ def card?
92
+ klass.type.eql?(:card)
93
+ end
94
+
95
+ def default_board_exists?
96
+ !!(Troo::Board.default)
97
+ end
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,91 @@
1
+ module Troo
2
+ module Retrieval
3
+ class Remote
4
+ attr_reader :external_id
5
+
6
+ class << self
7
+ def fetch(klass, external_id, options = {})
8
+ new(klass, external_id, options).fetch
9
+ end
10
+ end
11
+
12
+ def initialize(klass, external_id, options = {})
13
+ @klass = klass
14
+ @external_id = external_id
15
+ @options = options
16
+ end
17
+
18
+ def fetch
19
+ return [] if none?
20
+ return persist if persist?
21
+ resources
22
+ end
23
+
24
+ private
25
+
26
+ attr_reader :klass
27
+
28
+ def none?
29
+ resources.empty?
30
+ end
31
+
32
+ def persist
33
+ @persisted ||= Troo::Persistence::Local
34
+ .with_collection(resources)
35
+ end
36
+
37
+ def resources
38
+ @resources ||= API::Client.perform(parameters)
39
+ end
40
+
41
+ def parameters
42
+ {
43
+ verb: :get,
44
+ endpoint: nil,
45
+ interpolation: interpolation,
46
+ query: {},
47
+ model: klass
48
+ }.merge!(resource_parameters)
49
+ end
50
+
51
+ def resource_parameters
52
+ modes.fetch(mode)
53
+ end
54
+
55
+ def modes
56
+ {
57
+ all: klass.all,
58
+ board: klass.by_board_id,
59
+ list: klass.by_list_id,
60
+ card: klass.by_card_id,
61
+ member: klass.by_member_id,
62
+ none: {}
63
+ }
64
+ end
65
+
66
+ def mode
67
+ options.fetch(:mode, :none)
68
+ end
69
+
70
+ def persist?
71
+ options.fetch(:persist)
72
+ end
73
+
74
+ def options
75
+ remote_options.merge!(@options)
76
+ end
77
+
78
+ def remote_options
79
+ defaults.merge!(klass.remote_options)
80
+ end
81
+
82
+ def defaults
83
+ { mode: :none, persist: true }
84
+ end
85
+
86
+ def interpolation
87
+ { external_id: external_id }
88
+ end
89
+ end
90
+ end
91
+ end