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
@@ -6,19 +6,19 @@ module Troo
6
6
  desc 'board <id>',
7
7
  'Set the board <id> to default.'
8
8
  def board(id)
9
- say Commands::Default::Board.dispatch(id)
9
+ say Commands::Default.dispatch(Board, id)
10
10
  end
11
11
 
12
12
  desc 'card <id>',
13
13
  'Set the card <id> to default.'
14
14
  def card(id)
15
- say Commands::Default::Card.dispatch(id)
15
+ say Commands::Default.dispatch(Card, id)
16
16
  end
17
17
 
18
18
  desc 'list <id>',
19
19
  'Set the list <id> to default.'
20
20
  def list(id)
21
- say Commands::Default::List.dispatch(id)
21
+ say Commands::Default.dispatch(List, id)
22
22
  end
23
23
  end
24
24
  end
@@ -1,13 +1,41 @@
1
1
  module Troo
2
2
  module CLI
3
3
  class Main < ThorFixes
4
+ desc 'init',
5
+ 'Prepare to use Troo.'
6
+ def init
7
+ if File.exist?(destination)
8
+ say 'A configuration file already exists in your home ' \
9
+ 'directory.'
10
+ else
11
+ say 'A configuration file does not exist in your home ' \
12
+ 'directory, creating one...'
13
+ FileUtils.cp(source, destination)
14
+ end
15
+ end
16
+
4
17
  desc 'status',
5
18
  'Get troo status.'
6
19
  def status
7
- say 'Status:'
8
- say Commands::Status::Board.dispatch
9
- say Commands::Status::List.dispatch
10
- say Commands::Status::Card.dispatch
20
+ say heading('Status:')
21
+ say Commands::Status.dispatch(Troo::Board)
22
+ say Commands::Status.dispatch(Troo::List)
23
+ say Commands::Status.dispatch(Troo::Card)
24
+
25
+ say "\n" + heading('Last refreshed:')
26
+
27
+ if Troo::Refresh.last_performed_at?
28
+ say Troo::Refresh.last_performed_at
29
+ else
30
+ say 'Unknown. Run `troo refresh all`.'
31
+ end
32
+ end
33
+
34
+ desc 'config',
35
+ 'Show the current configuration.'
36
+ def config
37
+ say heading('Current configuration:')
38
+ say Troo.configuration.view
11
39
  end
12
40
 
13
41
  desc 'cleanup',
@@ -15,7 +43,9 @@ module Troo
15
43
  def cleanup
16
44
  if yes?('This will remove all local data, are you sure?')
17
45
  Ohm.redis.flushdb
18
- say 'All local data has been removed.'
46
+ say "\n" + 'All local data has been removed.'
47
+ else
48
+ say "\n" + 'No local data has been removed.'
19
49
  end
20
50
  end
21
51
 
@@ -25,12 +55,12 @@ module Troo
25
55
  say "troo #{Troo::VERSION}"
26
56
  end
27
57
 
28
- desc 'show [board|list|card|comments] <id>',
29
- 'Show the board, list, card with <id>. Also, show all ' \
30
- 'comments for card with <id>.'
58
+ desc 'show [boards|board|list|card|comments] <id>',
59
+ 'Show all the boards or the board, list, card with ' \
60
+ '<id>. Also, show all comments for card with <id>.'
31
61
  subcommand :show, CLI::Show
32
62
 
33
- desc 'add [board|list|card|comment] <id>',
63
+ desc 'add [board|list|card|comment] (<id>) (<value>)',
34
64
  'Add board, list, card or comment.'
35
65
  subcommand :add, CLI::Add
36
66
 
@@ -41,6 +71,27 @@ module Troo
41
71
  desc 'refresh [board|list|card] <id>',
42
72
  'Refresh board, list or card with <id>.'
43
73
  subcommand :refresh, CLI::Refresh
74
+
75
+ desc 'move <card_id> <list_id> (<board_id>)',
76
+ 'Move card with <card_id> to list with <list_id> ' \
77
+ 'optionally to another board with <board_id>.'
78
+ def move(card_id, list_id, board_id = nil)
79
+ say Commands::Move::Card.dispatch(card_id, list_id, board_id)
80
+ end
81
+
82
+ private
83
+
84
+ def source
85
+ File.dirname(__FILE__) + '/../.trooconf.example'
86
+ end
87
+
88
+ def destination
89
+ Dir.home + '/.trooconf'
90
+ end
91
+
92
+ def heading(text = '')
93
+ [Esc.yellow, Esc.underline, text, Esc.reset].join
94
+ end
44
95
  end
45
96
  end
46
97
  end
@@ -6,25 +6,25 @@ module Troo
6
6
  desc 'all',
7
7
  'Refresh all the local data.'
8
8
  def all
9
- say Commands::Refresh::All.dispatch
9
+ say Commands::RefreshAll.dispatch
10
10
  end
11
11
 
12
12
  desc 'board (<id>)',
13
13
  'Refresh the default board or board with <id>.'
14
14
  def board(id = nil)
15
- say Commands::Refresh::Board.dispatch(id)
15
+ say Commands::Refresh.dispatch(Troo::Board, id)
16
16
  end
17
17
 
18
18
  desc 'card (<id>)',
19
19
  'Refresh the default card or card with <id>.'
20
20
  def card(id = nil)
21
- say Commands::Refresh::Card.dispatch(id)
21
+ say Commands::Refresh.dispatch(Troo::Card, id)
22
22
  end
23
23
 
24
24
  desc 'list (<id>)',
25
25
  'Refresh the default list or list with <id>.'
26
26
  def list(id = nil)
27
- say Commands::Refresh::List.dispatch(id)
27
+ say Commands::Refresh.dispatch(Troo::List, id)
28
28
  end
29
29
  end
30
30
  end
@@ -6,35 +6,35 @@ module Troo
6
6
  desc 'boards',
7
7
  'Show all the boards with lists.'
8
8
  def boards
9
- say Troo::Commands::Show::Boards.dispatch
9
+ say Troo::Commands::ShowBoards.dispatch
10
10
  end
11
11
 
12
12
  desc 'board (<id>)',
13
13
  'Show lists and cards for board <id>' \
14
- ' (uses default card if <id> not provided).'
14
+ ' (uses default board if <id> not provided).'
15
15
  def board(id = nil)
16
- say Troo::Commands::Show::Board.dispatch(:board, id)
16
+ say Troo::Commands::Show.dispatch(Troo::Board, id)
17
17
  end
18
18
 
19
19
  desc 'list (<id>)',
20
20
  'Show all cards for list <id>' \
21
- ' (uses default card if <id> not provided).'
21
+ ' (uses default list if <id> not provided).'
22
22
  def list(id = nil)
23
- say Troo::Commands::Show::List.dispatch(:list, id)
23
+ say Troo::Commands::Show.dispatch(Troo::List, id)
24
24
  end
25
25
 
26
26
  desc 'card (<id>)',
27
27
  'Show a card <id> including last 3 comments' \
28
28
  ' (uses default card if <id> not provided).'
29
29
  def card(id = nil)
30
- say Troo::Commands::Show::Card.dispatch(:card, id)
30
+ say Troo::Commands::Show.dispatch(Troo::Card, id)
31
31
  end
32
32
 
33
33
  desc 'comments (<id>)',
34
34
  'Show all comments for card <id>' \
35
35
  ' (uses default card if <id> not provided).'
36
36
  def comments(id = nil)
37
- say Troo::Commands::Show::Comments.dispatch(:comments, id)
37
+ say Troo::Commands::ShowComments.dispatch(id)
38
38
  end
39
39
  end
40
40
  end
@@ -1,12 +1,8 @@
1
1
  module Troo
2
2
  module CLI
3
3
  class ThorFixes < Thor
4
- # def self.exit_on_failure?
5
- # true # exit code is non-zero on error
6
- # end
7
-
8
4
  def self.banner(command, namespace = nil, subcommand = false)
9
- "#{basename} #{@package_name} #{command.usage}"
5
+ [basename, @package_name, command.usage].compact.join(' ')
10
6
  end
11
7
  end
12
8
  end
@@ -0,0 +1,53 @@
1
+ module Troo
2
+ class Preference
3
+ include Virtus.value_object
4
+
5
+ values do
6
+ attribute :label, String
7
+ attribute :value, String
8
+ end
9
+
10
+ class << self
11
+ def view(parameters)
12
+ new(parameters).view
13
+ end
14
+ end
15
+
16
+ def view
17
+ [formatted_label, value].join(' ')
18
+ end
19
+
20
+ private
21
+
22
+ def formatted_label
23
+ (label + ':').rjust(25, ' ')
24
+ end
25
+ end
26
+
27
+ class Configuration
28
+ include Virtus.value_object
29
+
30
+ values do
31
+ attribute :api_url
32
+ attribute :api_key
33
+ attribute :api_token
34
+ attribute :api_oauth_token
35
+ attribute :api_oauth_token_secret
36
+ attribute :database
37
+ attribute :allow_remote, Boolean, default: true
38
+ attribute :logs, Boolean, default: false
39
+ end
40
+
41
+ class << self
42
+ def load(file, env)
43
+ new(YAML.load_file(file)[env.to_s])
44
+ end
45
+ end
46
+
47
+ def view
48
+ attributes.map do |label, value|
49
+ Preference.view(label: label, value: value)
50
+ end.join("\n")
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,18 @@
1
+ require 'pry'
2
+ require 'pry-nav'
3
+ require 'ruby-prof'
4
+
5
+ module Troo
6
+ def self.debug(filename = 'profile.html', &block)
7
+ RubyProf.start
8
+
9
+ yield
10
+
11
+ result = RubyProf.stop
12
+ result.eliminate_methods!([/^Array/, /^Hash/])
13
+
14
+ File.open('./tmp/' + filename, 'w') do |file|
15
+ RubyProf::CallStackPrinter.new(result).print(file)
16
+ end
17
+ end
18
+ end
@@ -1,28 +1,11 @@
1
1
  module Troo
2
2
  module Decorators
3
- class Member
3
+ class Member < Resource
4
4
  include DecoratorHelpers
5
5
 
6
- def initialize(member, options = {})
7
- @member = member
8
- @options = options
9
- end
10
-
11
6
  def username
12
- ['@', member.username].join
13
- end
14
-
15
- def name
16
- member.full_name
7
+ ['@', klass.username].join
17
8
  end
18
-
19
- def initials
20
- member.initials
21
- end
22
-
23
- private
24
-
25
- attr_reader :member
26
9
  end
27
10
  end
28
11
  end
@@ -0,0 +1,130 @@
1
+ module Troo
2
+ module Decorators
3
+ class Resource
4
+ include DecoratorHelpers
5
+
6
+ def initialize(klass, options = {})
7
+ @klass, @options = klass, options
8
+ end
9
+
10
+ def title
11
+ [
12
+ brackets(klass.id),
13
+ Troo::Formatter.highlight(name, options),
14
+ default
15
+ ].compact.join(' ') + "\n"
16
+ end
17
+
18
+ def description
19
+ return 'N/A' if klass.description.nil? ||
20
+ klass.description.empty?
21
+ Troo::Formatter.wordwrap(klass.description)
22
+ end
23
+
24
+ def default
25
+ klass.default? ? '*' : nil
26
+ end
27
+
28
+ def name
29
+ (klass.name && klass.name.chomp) || 'N/A'
30
+ end
31
+
32
+ def board
33
+ klass.board.decorator
34
+ end
35
+
36
+ def list
37
+ klass.list.decorator
38
+ end
39
+
40
+ def lists
41
+ klass.lists.map { |list| list.decorator }
42
+ end
43
+
44
+ def cards
45
+ klass.cards.map { |card| card.decorator }
46
+ end
47
+
48
+ def comments
49
+ if klass.comments.any? && klass.comments.size > 3
50
+ msg = '(There are more comments, use: ' \
51
+ "'troo show comments #{klass.short_id}' to view " \
52
+ ' all comments.)'
53
+ [decorated_recent_comments, msg].join("\n")
54
+ elsif klass.comments.any?
55
+ decorated_all_comments
56
+ else
57
+ 'No comments have been left.'
58
+ end
59
+ end
60
+
61
+ def members
62
+ Presenters::Member.new(klass).show
63
+ end
64
+
65
+ def last_activity_date
66
+ return 'N/A' unless klass.last_activity_date
67
+ Time.parse(klass.last_activity_date)
68
+ .strftime('%a, %b %d at %H:%M')
69
+ end
70
+
71
+ def as_view
72
+ Template.parse(self, '/../views/' + type + '.erb')
73
+ end
74
+
75
+ def username
76
+ ['@', klass.member.username].join
77
+ end
78
+
79
+ def text
80
+ Troo::Formatter.wordwrap(klass.text)
81
+ end
82
+
83
+ def date
84
+ Time.parse(klass.date).strftime('%a, %b %d at %H:%M')
85
+ end
86
+
87
+ private
88
+
89
+ attr_reader :klass, :options
90
+
91
+ def type
92
+ klass.type.to_s
93
+ end
94
+
95
+ def decorated_recent_comments
96
+ klass.recent_comments.map do |comment|
97
+ comment.decorator.as_view
98
+ end.join
99
+ end
100
+
101
+ def decorated_all_comments
102
+ klass.comments.map do |comment|
103
+ comment.decorator.as_view
104
+ end.join
105
+ end
106
+
107
+ def options
108
+ defaults.merge!(@options)
109
+ end
110
+
111
+ def defaults
112
+ {
113
+ ansicolor: true,
114
+ colour: colour.fetch(klass.type, nil),
115
+ underline: true
116
+ }
117
+ end
118
+
119
+ def colour
120
+ {
121
+ board: Esc.blue,
122
+ card: Esc.magenta,
123
+ list: Esc.green,
124
+ comments: Esc.cyan,
125
+ member: Esc.white
126
+ }
127
+ end
128
+ end
129
+ end
130
+ end