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,44 @@
1
+ module Troo
2
+ module Commands
3
+ class Default
4
+ class << self
5
+ def dispatch(klass, id)
6
+ new(klass, id).set_default
7
+ end
8
+ end
9
+
10
+ def initialize(klass, id)
11
+ @klass, @id = klass, id
12
+ end
13
+
14
+ def set_default
15
+ return success if resource && resource.set_default!
16
+ error
17
+ end
18
+
19
+ private
20
+
21
+ attr_reader :id, :klass
22
+
23
+ def success
24
+ "'#{name}' set as default."
25
+ end
26
+
27
+ def error
28
+ "#{type} cannot be found."
29
+ end
30
+
31
+ def type
32
+ klass.type.to_s.capitalize
33
+ end
34
+
35
+ def name
36
+ resource.decorator.name
37
+ end
38
+
39
+ def resource
40
+ @resource ||= klass.retrieve(id)
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,95 @@
1
+ module Troo
2
+ module Commands
3
+ module Move
4
+ class Card
5
+ class << self
6
+ def dispatch(card_id, list_id, board_id = nil)
7
+ new(card_id, list_id, board_id).move
8
+ end
9
+ end
10
+
11
+ def initialize(card_id, list_id, board_id = nil)
12
+ @card_id, @list_id, @board_id = card_id, list_id, board_id
13
+ end
14
+
15
+ def move
16
+ return 'Card cannot be found.' if card_not_found?
17
+ return 'List cannot be found.' if list_not_found?
18
+ return 'Board cannot be found.' if board_not_found?
19
+ return success if moved
20
+ error
21
+ end
22
+
23
+ private
24
+
25
+ attr_reader :card_id, :list_id, :board_id
26
+
27
+ def moved
28
+ if board_specified?
29
+ @moved ||= Remote::Persistence::MoveCard
30
+ .with(card.external_id,
31
+ list.external_id,
32
+ board.external_id)
33
+ else
34
+ @moved ||= Remote::Persistence::MoveCard
35
+ .with(card.external_id,
36
+ list.external_id)
37
+ end
38
+ end
39
+
40
+ def success
41
+ if board_specified?
42
+ "Card '#{card_name}' moved to '#{list_name}' " \
43
+ "on '#{board_name}'."
44
+ else
45
+ "Card '#{card_name}' moved to '#{list_name}'."
46
+ end
47
+ end
48
+
49
+ def error
50
+ 'Card could not be moved.'
51
+ end
52
+
53
+ def card_name
54
+ card.decorator.name
55
+ end
56
+
57
+ def card
58
+ @card ||= Troo::Card.retrieve(card_id)
59
+ end
60
+
61
+ def card_not_found?
62
+ card.nil?
63
+ end
64
+
65
+ def list_name
66
+ list.decorator.name
67
+ end
68
+
69
+ def list
70
+ @list ||= Troo::List.retrieve(list_id)
71
+ end
72
+
73
+ def list_not_found?
74
+ list.nil?
75
+ end
76
+
77
+ def board_name
78
+ board.decorator.name
79
+ end
80
+
81
+ def board
82
+ @board ||= Troo::Board.retrieve(board_id)
83
+ end
84
+
85
+ def board_not_found?
86
+ board_specified? && board.nil?
87
+ end
88
+
89
+ def board_specified?
90
+ !board_id.nil?
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,80 @@
1
+ module Troo
2
+ module Commands
3
+ class Refresh
4
+ attr_reader :id
5
+
6
+ class << self
7
+ def dispatch(klass, id = nil)
8
+ new(klass, id).refresh
9
+ end
10
+ end
11
+
12
+ def initialize(klass, id = nil)
13
+ @klass, @id = klass, id
14
+ end
15
+
16
+ def refresh
17
+ return not_found if not_found?
18
+ return many_success if multiple_refreshed?
19
+ success
20
+ end
21
+
22
+ private
23
+
24
+ attr_reader :klass
25
+
26
+ def many_success
27
+ "Multiple #{type}s refreshed."
28
+ end
29
+
30
+ def multiple_refreshed?
31
+ resource.count > 1
32
+ end
33
+
34
+ def success
35
+ "'#{resource_name}' refreshed."
36
+ end
37
+
38
+ def not_found
39
+ return [error, no_default].join(' ') unless id
40
+ error
41
+ end
42
+
43
+ def not_found?
44
+ resource.nil? || resource.none?
45
+ end
46
+
47
+ def error
48
+ "#{type.capitalize} cannot be found."
49
+ end
50
+
51
+ def no_default
52
+ "Specify an <id> or use 'troo default #{type} <id>' " \
53
+ "to set a default #{type} first."
54
+ end
55
+
56
+ def type
57
+ klass.type.to_s
58
+ end
59
+
60
+ def resource_name
61
+ resource.first.decorator.name
62
+ end
63
+
64
+ def resource
65
+ return [] unless local
66
+ remote
67
+ end
68
+
69
+ def remote
70
+ @remote ||= Retrieval::Remote
71
+ .fetch(klass.remote, local.external_id)
72
+ end
73
+
74
+ def local
75
+ @local ||= Retrieval::Local
76
+ .retrieve(klass, id, allow_remote: false)
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,52 @@
1
+ module Troo
2
+ module Commands
3
+ class RefreshAll
4
+ def self.dispatch
5
+ new.refresh_all
6
+ end
7
+
8
+ def refresh_all
9
+ return success if refreshed?
10
+ failure
11
+ end
12
+
13
+ private
14
+
15
+ def success
16
+ 'All local data refreshed.'
17
+ end
18
+
19
+ def failure
20
+ 'Cannot refresh all local data.'
21
+ end
22
+
23
+ def refreshed?
24
+ return false if resources.none?
25
+ Troo::Refresh.completed!
26
+ true
27
+ end
28
+
29
+ def resources
30
+ @resources ||= external_ids.map do |id|
31
+ Retrieval::Remote.fetch(Remote::Board, id, mode: :board)
32
+ end
33
+ end
34
+
35
+ def external_ids
36
+ all_boards.map(&:id)
37
+ end
38
+
39
+ def all_boards
40
+ @boards ||= Retrieval::Remote
41
+ .fetch(Remote::Board, nil, options)
42
+ end
43
+
44
+ def options
45
+ {
46
+ mode: :all,
47
+ persist: false
48
+ }
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,56 @@
1
+ module Troo
2
+ module Commands
3
+ class Show
4
+ attr_reader :id, :type
5
+
6
+ class << self
7
+ def dispatch(klass, id = nil)
8
+ new(klass, id).render
9
+ end
10
+ end
11
+
12
+ def initialize(klass, id = nil)
13
+ @klass, @id = klass, id
14
+ end
15
+
16
+ def render
17
+ if resource
18
+ presenter
19
+ elsif no_default?
20
+ [error, no_default].join(' ')
21
+ else
22
+ error
23
+ end
24
+ end
25
+
26
+ private
27
+
28
+ attr_reader :klass
29
+
30
+ def presenter
31
+ resource.presenter.show
32
+ end
33
+
34
+ def error
35
+ "#{type.capitalize} cannot be found."
36
+ end
37
+
38
+ def no_default?
39
+ id.nil? && resource.nil?
40
+ end
41
+
42
+ def no_default
43
+ "Specify an <id> or use 'troo default #{type} <id>' " \
44
+ "to set a default #{type} first."
45
+ end
46
+
47
+ def type
48
+ klass.type.to_s
49
+ end
50
+
51
+ def resource
52
+ @resource ||= klass.retrieve(id)
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,36 @@
1
+ module Troo
2
+ module Commands
3
+ class ShowBoards
4
+ class << self
5
+ def dispatch
6
+ new.render
7
+ end
8
+ end
9
+
10
+ def initialize; end
11
+
12
+ def render
13
+ return presenter if resources.any?
14
+ error
15
+ end
16
+
17
+ private
18
+
19
+ def error
20
+ "#{type.capitalize} cannot be found."
21
+ end
22
+
23
+ def type
24
+ 'boards'
25
+ end
26
+
27
+ def presenter
28
+ Presenters::Board.all(resources)
29
+ end
30
+
31
+ def resources
32
+ @resources ||= Troo::Retrieval::Local.all(Troo::Board)
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,54 @@
1
+ module Troo
2
+ module Commands
3
+ class ShowComments
4
+ attr_reader :id
5
+
6
+ class << self
7
+ def dispatch(id = nil)
8
+ new(id).render
9
+ end
10
+ end
11
+
12
+ def initialize(id = nil)
13
+ @id = id
14
+ end
15
+
16
+ def render
17
+ if resource
18
+ presenter
19
+ elsif no_default?
20
+ [error, no_default].join(' ')
21
+ else
22
+ error
23
+ end
24
+ end
25
+
26
+ private
27
+
28
+ def presenter
29
+ resource.comment_presenter.show
30
+ end
31
+
32
+ def error
33
+ "#{type.capitalize} cannot be found."
34
+ end
35
+
36
+ def no_default?
37
+ id.nil? && resource.nil?
38
+ end
39
+
40
+ def no_default
41
+ "Specify an <id> or use 'troo default #{type} <id>' " \
42
+ "to set a default #{type} first."
43
+ end
44
+
45
+ def type
46
+ 'card'
47
+ end
48
+
49
+ def resource
50
+ @resource ||= Troo::Card.retrieve(id)
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,68 @@
1
+ module Troo
2
+ module Commands
3
+ class Status
4
+ class << self
5
+ def dispatch(klass)
6
+ new(klass).report_status
7
+ end
8
+ end
9
+
10
+ def initialize(klass)
11
+ @klass = klass
12
+ end
13
+
14
+ def report_status
15
+ return success if resource
16
+ error
17
+ end
18
+
19
+ private
20
+
21
+ attr_reader :klass
22
+
23
+ def success
24
+ label + plural + " found.\n" + resource_title
25
+ end
26
+
27
+ def error
28
+ if count > 0
29
+ label + no_default_error + " (#{count})"
30
+ else
31
+ label + "No #{type}s found.\n"
32
+ end
33
+ end
34
+
35
+ def label
36
+ " #{type.capitalize}s:".ljust(10)
37
+ end
38
+
39
+ def resource_title
40
+ ''.rjust(10) + resource.decorator.title
41
+ end
42
+
43
+ def no_default_error
44
+ Esc.red + "No default #{type} set." + Esc.reset
45
+ end
46
+
47
+ def plural
48
+ if count == 1
49
+ "#{count} #{type}"
50
+ else
51
+ "#{count} #{type}s"
52
+ end
53
+ end
54
+
55
+ def type
56
+ klass.type.to_s
57
+ end
58
+
59
+ def resource
60
+ @resource ||= klass.default
61
+ end
62
+
63
+ def count
64
+ @count ||= klass.count
65
+ end
66
+ end
67
+ end
68
+ end