troo 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (271) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.rubocop.yml +2 -0
  4. data/Guardfile +3 -1
  5. data/Rakefile +7 -0
  6. data/bin/troo +3 -8
  7. data/config/.gitkeep +0 -0
  8. data/config/cucumber.yml +8 -0
  9. data/features/add/board.feature +26 -0
  10. data/features/add/card.feature +34 -0
  11. data/features/add/comment.feature +21 -0
  12. data/features/add/list.feature +24 -0
  13. data/features/cleanup.feature +13 -0
  14. data/features/default/board.feature +21 -0
  15. data/features/default/card.feature +21 -0
  16. data/features/default/list.feature +21 -0
  17. data/features/refresh/all.feature +7 -0
  18. data/features/refresh/board.feature +26 -0
  19. data/features/refresh/card.feature +27 -0
  20. data/features/refresh/list.feature +27 -0
  21. data/features/show/board.feature +32 -0
  22. data/features/show/card.feature +62 -0
  23. data/features/show/comment.feature +39 -0
  24. data/features/show/list.feature +37 -0
  25. data/features/status.feature +46 -1
  26. data/features/step_definitions/fabrication_steps.rb +34 -0
  27. data/features/step_definitions/troo_steps.rb +16 -0
  28. data/features/support/env.rb +22 -24
  29. data/features/troo.feature +31 -1
  30. data/lib/troo/actions/create_board.rb +10 -7
  31. data/lib/troo/actions/create_card.rb +5 -4
  32. data/lib/troo/actions/create_comment.rb +15 -13
  33. data/lib/troo/actions/create_list.rb +5 -4
  34. data/lib/troo/actions/move_card.rb +4 -3
  35. data/lib/troo/{external/board_adaptor.rb → adaptors/board.rb} +3 -14
  36. data/lib/troo/{external/card_adaptor.rb → adaptors/card.rb} +4 -15
  37. data/lib/troo/{external/comment_adaptor.rb → adaptors/comment.rb} +6 -17
  38. data/lib/troo/{external/list_adaptor.rb → adaptors/list.rb} +3 -14
  39. data/lib/troo/{external/member_adaptor.rb → adaptors/member.rb} +3 -14
  40. data/lib/troo/adaptors/resource.rb +17 -0
  41. data/lib/troo/cli/add.rb +53 -0
  42. data/lib/troo/cli/default.rb +25 -0
  43. data/lib/troo/cli/main.rb +46 -0
  44. data/lib/troo/cli/refresh.rb +31 -0
  45. data/lib/troo/cli/show.rb +41 -0
  46. data/lib/troo/cli/thor_fixes.rb +13 -0
  47. data/lib/troo/commands/add/board.rb +26 -0
  48. data/lib/troo/commands/add/card.rb +33 -0
  49. data/lib/troo/commands/add/comment.rb +33 -0
  50. data/lib/troo/commands/add/list.rb +33 -0
  51. data/lib/troo/commands/add/resource.rb +21 -0
  52. data/lib/troo/commands/commands.rb +28 -0
  53. data/lib/troo/commands/default/board.rb +25 -0
  54. data/lib/troo/commands/default/card.rb +25 -0
  55. data/lib/troo/commands/default/list.rb +25 -0
  56. data/lib/troo/commands/default/resource.rb +26 -0
  57. data/lib/troo/commands/refresh/all.rb +41 -0
  58. data/lib/troo/commands/refresh/board.rb +28 -0
  59. data/lib/troo/commands/refresh/card.rb +29 -0
  60. data/lib/troo/commands/refresh/list.rb +29 -0
  61. data/lib/troo/commands/refresh/resource.rb +42 -0
  62. data/lib/troo/commands/show/board.rb +13 -0
  63. data/lib/troo/commands/show/boards.rb +35 -0
  64. data/lib/troo/commands/show/card.rb +13 -0
  65. data/lib/troo/commands/show/comments.rb +21 -0
  66. data/lib/troo/commands/show/list.rb +13 -0
  67. data/lib/troo/commands/show/resource.rb +41 -0
  68. data/lib/troo/commands/status/board.rb +30 -0
  69. data/lib/troo/commands/status/card.rb +30 -0
  70. data/lib/troo/commands/status/list.rb +30 -0
  71. data/lib/troo/commands/status/resource.rb +34 -0
  72. data/lib/troo/decorators/board.rb +66 -0
  73. data/lib/troo/decorators/card.rb +105 -0
  74. data/lib/troo/decorators/comment.rb +36 -0
  75. data/lib/troo/decorators/list.rb +60 -0
  76. data/lib/troo/decorators/member.rb +28 -0
  77. data/lib/troo/external/board.rb +14 -26
  78. data/lib/troo/external/card.rb +2 -19
  79. data/lib/troo/external/comment.rb +5 -23
  80. data/lib/troo/external/list.rb +2 -20
  81. data/lib/troo/external/member.rb +2 -20
  82. data/lib/troo/external/resource.rb +21 -6
  83. data/lib/troo/helpers/command_helpers.rb +37 -0
  84. data/lib/troo/{display → helpers}/decorator_helpers.rb +23 -17
  85. data/lib/troo/{models → helpers}/model_helpers.rb +1 -1
  86. data/lib/troo/models/behaviours/set_default.rb +49 -0
  87. data/lib/troo/models/board.rb +10 -7
  88. data/lib/troo/models/card.rb +33 -15
  89. data/lib/troo/models/comment.rb +8 -5
  90. data/lib/troo/models/list.rb +10 -6
  91. data/lib/troo/models/member.rb +7 -4
  92. data/lib/troo/models/persistence/board.rb +19 -0
  93. data/lib/troo/models/persistence/card.rb +19 -0
  94. data/lib/troo/models/persistence/comment.rb +19 -0
  95. data/lib/troo/models/persistence/list.rb +19 -0
  96. data/lib/troo/models/persistence/member.rb +19 -0
  97. data/lib/troo/models/persistence/resource.rb +50 -0
  98. data/lib/troo/models/refresh.rb +1 -1
  99. data/lib/troo/models/remote/comment.rb +21 -0
  100. data/lib/troo/models/remote/resource.rb +25 -0
  101. data/lib/troo/models/retrieval/board.rb +29 -0
  102. data/lib/troo/models/retrieval/card.rb +33 -0
  103. data/lib/troo/models/retrieval/comment.rb +25 -0
  104. data/lib/troo/models/retrieval/list.rb +29 -0
  105. data/lib/troo/models/retrieval/member.rb +25 -0
  106. data/lib/troo/models/retrieval/resource.rb +36 -0
  107. data/lib/troo/presentation/sentence.rb +57 -0
  108. data/lib/troo/presentation/template.rb +4 -3
  109. data/lib/troo/presenters/board.rb +81 -0
  110. data/lib/troo/presenters/card.rb +30 -0
  111. data/lib/troo/presenters/comment.rb +38 -0
  112. data/lib/troo/presenters/list.rb +44 -0
  113. data/lib/troo/presenters/member.rb +32 -0
  114. data/lib/troo/troo.rb +79 -65
  115. data/lib/troo/version.rb +1 -2
  116. data/lib/troo.rb +36 -8
  117. data/test/lib/troo/actions/create_board_test.rb +34 -15
  118. data/test/lib/troo/actions/create_card_test.rb +35 -18
  119. data/test/lib/troo/actions/create_comment_test.rb +38 -16
  120. data/test/lib/troo/actions/create_list_test.rb +31 -15
  121. data/test/lib/troo/actions/move_card_test.rb +23 -15
  122. data/test/lib/troo/adaptors/board_test.rb +38 -0
  123. data/test/lib/troo/adaptors/card_test.rb +49 -0
  124. data/test/lib/troo/adaptors/comment_test.rb +41 -0
  125. data/test/lib/troo/adaptors/list_test.rb +38 -0
  126. data/test/lib/troo/adaptors/member_test.rb +44 -0
  127. data/test/lib/troo/commands/add/board_test.rb +43 -0
  128. data/test/lib/troo/commands/add/card_test.rb +44 -0
  129. data/test/lib/troo/commands/add/comment_test.rb +44 -0
  130. data/test/lib/troo/commands/add/list_test.rb +44 -0
  131. data/test/lib/troo/commands/add/resource_test.rb +25 -0
  132. data/test/lib/troo/commands/default/board_test.rb +37 -0
  133. data/test/lib/troo/commands/default/card_test.rb +37 -0
  134. data/test/lib/troo/commands/default/list_test.rb +37 -0
  135. data/test/lib/troo/commands/default/resource_test.rb +20 -0
  136. data/test/lib/troo/commands/refresh/all_test.rb +39 -0
  137. data/test/lib/troo/commands/refresh/board_test.rb +62 -0
  138. data/test/lib/troo/commands/refresh/card_test.rb +62 -0
  139. data/test/lib/troo/commands/refresh/list_test.rb +62 -0
  140. data/test/lib/troo/commands/refresh/resource_test.rb +20 -0
  141. data/test/lib/troo/commands/show/board_test.rb +65 -0
  142. data/test/lib/troo/commands/show/boards_test.rb +36 -0
  143. data/test/lib/troo/commands/show/card_test.rb +64 -0
  144. data/test/lib/troo/commands/show/comments_test.rb +64 -0
  145. data/test/lib/troo/commands/show/list_test.rb +64 -0
  146. data/test/lib/troo/commands/show/resource_test.rb +25 -0
  147. data/test/lib/troo/commands/status/board_test.rb +43 -0
  148. data/test/lib/troo/commands/status/card_test.rb +43 -0
  149. data/test/lib/troo/commands/status/list_test.rb +43 -0
  150. data/test/lib/troo/commands/status/resource_test.rb +19 -0
  151. data/test/lib/troo/decorators/board_test.rb +129 -0
  152. data/test/lib/troo/decorators/card_test.rb +237 -0
  153. data/test/lib/troo/decorators/comment_test.rb +74 -0
  154. data/test/lib/troo/decorators/list_test.rb +102 -0
  155. data/test/lib/troo/decorators/member_test.rb +50 -0
  156. data/test/lib/troo/external/board_test.rb +74 -41
  157. data/test/lib/troo/external/card_test.rb +49 -37
  158. data/test/lib/troo/external/comment_test.rb +43 -33
  159. data/test/lib/troo/external/list_test.rb +37 -30
  160. data/test/lib/troo/external/member_test.rb +37 -30
  161. data/test/lib/troo/external/resource_test.rb +18 -1
  162. data/test/lib/troo/helpers/command_helpers_test.rb +82 -0
  163. data/test/lib/troo/{display → helpers}/decorator_helpers_test.rb +6 -6
  164. data/test/lib/troo/helpers/model_helpers_test.rb +103 -0
  165. data/test/lib/troo/models/behaviours/set_default_test.rb +54 -0
  166. data/test/lib/troo/models/board_test.rb +13 -14
  167. data/test/lib/troo/models/card_test.rb +64 -33
  168. data/test/lib/troo/models/comment_test.rb +18 -19
  169. data/test/lib/troo/models/list_test.rb +15 -15
  170. data/test/lib/troo/models/member_test.rb +18 -18
  171. data/test/lib/troo/models/persistence/board_test.rb +62 -0
  172. data/test/lib/troo/models/persistence/card_test.rb +61 -0
  173. data/test/lib/troo/models/persistence/comment_test.rb +69 -0
  174. data/test/lib/troo/models/persistence/list_test.rb +60 -0
  175. data/test/lib/troo/models/persistence/member_test.rb +60 -0
  176. data/test/lib/troo/models/refresh_test.rb +12 -11
  177. data/test/lib/troo/models/remote/comment_test.rb +56 -0
  178. data/test/lib/troo/models/remote/resource_test.rb +26 -0
  179. data/test/lib/troo/models/retrieval/board_test.rb +93 -0
  180. data/test/lib/troo/models/retrieval/card_test.rb +101 -0
  181. data/test/lib/troo/models/retrieval/comment_test.rb +46 -0
  182. data/test/lib/troo/models/retrieval/list_test.rb +93 -0
  183. data/test/lib/troo/models/retrieval/member_test.rb +58 -0
  184. data/test/lib/troo/presentation/sentence_test.rb +57 -0
  185. data/test/lib/troo/presentation/template_test.rb +17 -16
  186. data/test/lib/troo/presenters/board_test.rb +79 -0
  187. data/test/lib/troo/presenters/card_test.rb +41 -0
  188. data/test/lib/troo/presenters/comment_test.rb +49 -0
  189. data/test/lib/troo/presenters/list_test.rb +50 -0
  190. data/test/lib/troo/presenters/member_test.rb +40 -0
  191. data/test/support/fabrication.rb +31 -32
  192. data/test/support/vcr_setup.rb +7 -9
  193. data/test/system_test.sh +55 -0
  194. data/test/test_helper.rb +10 -10
  195. data/troo.gemspec +1 -0
  196. metadata +232 -134
  197. data/features/add_board.feature +0 -1
  198. data/features/add_card.feature +0 -1
  199. data/features/add_comment.feature +0 -1
  200. data/features/add_list.feature +0 -1
  201. data/features/move_card_to_list.feature +0 -1
  202. data/features/refresh.feature +0 -1
  203. data/features/set_default.feature +0 -7
  204. data/features/show_board.feature +0 -1
  205. data/features/show_boards.feature +0 -1
  206. data/features/show_card.feature +0 -1
  207. data/features/show_comments.feature +0 -1
  208. data/features/show_list.feature +0 -1
  209. data/features/version.feature +0 -8
  210. data/lib/troo/actions/refresh_all.rb +0 -79
  211. data/lib/troo/actions/set_default.rb +0 -46
  212. data/lib/troo/cli/add_cli.rb +0 -83
  213. data/lib/troo/cli/cli_helpers.rb +0 -34
  214. data/lib/troo/cli/default_cli.rb +0 -32
  215. data/lib/troo/cli/main_cli.rb +0 -132
  216. data/lib/troo/cli/show_cli.rb +0 -64
  217. data/lib/troo/display/board_decorator.rb +0 -62
  218. data/lib/troo/display/board_presenter.rb +0 -71
  219. data/lib/troo/display/card_decorator.rb +0 -100
  220. data/lib/troo/display/card_presenter.rb +0 -27
  221. data/lib/troo/display/comment_decorator.rb +0 -33
  222. data/lib/troo/display/comment_presenter.rb +0 -31
  223. data/lib/troo/display/list_decorator.rb +0 -57
  224. data/lib/troo/display/list_presenter.rb +0 -41
  225. data/lib/troo/display/member_decorator.rb +0 -25
  226. data/lib/troo/display/member_presenter.rb +0 -59
  227. data/lib/troo/models/board_persistence.rb +0 -25
  228. data/lib/troo/models/board_retrieval.rb +0 -45
  229. data/lib/troo/models/card_persistence.rb +0 -25
  230. data/lib/troo/models/card_retrieval.rb +0 -49
  231. data/lib/troo/models/comment_persistence.rb +0 -25
  232. data/lib/troo/models/comment_retrieval.rb +0 -32
  233. data/lib/troo/models/list_persistence.rb +0 -25
  234. data/lib/troo/models/list_retrieval.rb +0 -45
  235. data/lib/troo/models/member_persistence.rb +0 -25
  236. data/lib/troo/models/member_retrieval.rb +0 -36
  237. data/lib/troo/models/persistence.rb +0 -39
  238. data/test/lib/troo/actions/refresh_all_test.rb +0 -68
  239. data/test/lib/troo/actions/set_default_test.rb +0 -44
  240. data/test/lib/troo/cli/add_cli_test.rb +0 -216
  241. data/test/lib/troo/cli/cli_helpers_test.rb +0 -24
  242. data/test/lib/troo/cli/default_cli_test.rb +0 -85
  243. data/test/lib/troo/cli/main_cli_test.rb +0 -234
  244. data/test/lib/troo/cli/show_cli_test.rb +0 -251
  245. data/test/lib/troo/display/board_decorator_test.rb +0 -126
  246. data/test/lib/troo/display/board_presenter_test.rb +0 -77
  247. data/test/lib/troo/display/card_decorator_test.rb +0 -213
  248. data/test/lib/troo/display/card_presenter_test.rb +0 -38
  249. data/test/lib/troo/display/comment_decorator_test.rb +0 -70
  250. data/test/lib/troo/display/comment_presenter_test.rb +0 -47
  251. data/test/lib/troo/display/list_decorator_test.rb +0 -98
  252. data/test/lib/troo/display/list_presenter_test.rb +0 -48
  253. data/test/lib/troo/display/member_decorator_test.rb +0 -47
  254. data/test/lib/troo/display/member_presenter_test.rb +0 -70
  255. data/test/lib/troo/external/board_adaptor_test.rb +0 -36
  256. data/test/lib/troo/external/card_adaptor_test.rb +0 -50
  257. data/test/lib/troo/external/comment_adaptor_test.rb +0 -41
  258. data/test/lib/troo/external/list_adaptor_test.rb +0 -38
  259. data/test/lib/troo/external/member_adaptor_test.rb +0 -44
  260. data/test/lib/troo/models/board_persistence_test.rb +0 -61
  261. data/test/lib/troo/models/board_retrieval_test.rb +0 -93
  262. data/test/lib/troo/models/card_persistence_test.rb +0 -60
  263. data/test/lib/troo/models/card_retrieval_test.rb +0 -101
  264. data/test/lib/troo/models/comment_persistence_test.rb +0 -65
  265. data/test/lib/troo/models/comment_retrieval_test.rb +0 -46
  266. data/test/lib/troo/models/list_persistence_test.rb +0 -60
  267. data/test/lib/troo/models/list_retrieval_test.rb +0 -93
  268. data/test/lib/troo/models/member_persistence_test.rb +0 -59
  269. data/test/lib/troo/models/member_retrieval_test.rb +0 -58
  270. data/test/lib/troo/models/model_helpers_test.rb +0 -103
  271. data/test/lib/troo/models/persistence_test.rb +0 -6
@@ -1,31 +1,29 @@
1
- # require "minitest/spec"
2
- # World(MiniTest::Assertions)
3
- # MiniTest::Spec.new(nil)
1
+ require 'simplecov'
2
+ require 'aruba'
3
+ require 'aruba/cucumber'
4
+ require 'aruba/in_process'
5
+ require 'ohm'
6
+ require 'vcr'
7
+ require 'webmock/cucumber'
4
8
 
5
- # require 'minitest'
6
- # module MiniTestAssertions
7
- # def self.extended(base)
8
- # base.extend(MiniTest::Assertions)
9
- # base.assertions = 0
10
- # end
11
-
12
- # attr_accessor :assertions
13
- # end
14
- # World(MiniTestAssertions)
9
+ SimpleCov.start do
10
+ add_filter '/test/'
11
+ end
15
12
 
13
+ require_relative '../../lib/troo.rb'
16
14
 
17
- require "aruba/cucumber"
15
+ class CucumberError < StandardError; end
18
16
 
19
- ENV['PATH'] = "#{File.expand_path(File.dirname(__FILE__) + "/../../bin")}#{File::PATH_SEPARATOR}#{ENV['PATH']}"
20
- LIB_DIR = File.join(File.expand_path(File.dirname(__FILE__)), "..", "..", "lib")
17
+ Aruba::InProcess.main_class = Troo::Launcher
18
+ Aruba.process = Aruba::InProcess
21
19
 
22
- Before do
23
- # Using "announce" causes massive warnings on 1.9.2
24
- @puts = true
25
- @original_rubylib = ENV['RUBYLIB']
26
- ENV['RUBYLIB'] = LIB_DIR + File::PATH_SEPARATOR + ENV['RUBYLIB'].to_s
27
- end
20
+ WebMock.disable_net_connect!
28
21
 
29
- After do
30
- ENV['RUBYLIB'] = @original_rubylib
22
+ VCR.configure do |c|
23
+ c.cassette_library_dir = 'features/support/fixtures/cassettes'
24
+ c.hook_into :webmock
25
+ # c.debug_logger = File.open("logs/vcr.log", 'w')
26
+ c.filter_sensitive_data('<OAuth Credentials>') do |interaction|
27
+ interaction.request.headers['Authorization'].first
28
+ end
31
29
  end
@@ -1 +1,31 @@
1
- Feature: Running the `troo` command
1
+ Feature: Troo Basics
2
+
3
+ @basics
4
+ Scenario: Getting the current version
5
+ When I run `troo version`
6
+ Then the output should be the version number of troo
7
+
8
+ @basics
9
+ Scenario: Running the command with no arguments
10
+ When I run `troo`
11
+ Then the output should contain "Commands:"
12
+
13
+ @basics
14
+ Scenario: Running an unknown command
15
+ When I run `troo unknown`
16
+ Then the output should contain:
17
+ """
18
+ Could not find command "unknown".
19
+ """
20
+
21
+ @pending @authentication
22
+ Scenario: Not authenticated with Trello
23
+ Given the Trello API is stubbed with "unauthenticated"
24
+
25
+ @pending @connectivity
26
+ Scenario: Trello not responding
27
+ Given the Trello API is stubbed with "trello_failure"
28
+
29
+ @pending @connectivity
30
+ Scenario: No network connection
31
+
@@ -6,26 +6,29 @@ module Troo
6
6
  end
7
7
  end
8
8
 
9
- attr_reader :name
10
-
11
9
  def initialize(name, description = nil)
12
10
  @name = name
13
11
  @description = description
14
12
  end
15
13
 
16
14
  def perform
17
- update_boards
15
+ create_local
18
16
  end
19
17
 
20
18
  private
19
+
21
20
  attr_reader :name, :description
22
21
 
23
- def update_boards
24
- return BoardPersistence.for(create_board) if create_board
25
- false
22
+ def create_local
23
+ if create_remote
24
+ Persistence::Board.for(create_remote)
25
+ # refresh for lists
26
+ else
27
+ false
28
+ end
26
29
  end
27
30
 
28
- def create_board
31
+ def create_remote
29
32
  @board ||= Trello::Board.create(attributes)
30
33
  rescue Trello::InvalidAccessToken
31
34
  raise Troo::InvalidAccessToken
@@ -13,18 +13,19 @@ module Troo
13
13
  end
14
14
 
15
15
  def perform
16
- update_cards
16
+ create_local
17
17
  end
18
18
 
19
19
  private
20
+
20
21
  attr_reader :list, :name, :description
21
22
 
22
- def update_cards
23
- return CardPersistence.for(create_card) if create_card
23
+ def create_local
24
+ return Persistence::Card.for(create_remote) if create_remote
24
25
  false
25
26
  end
26
27
 
27
- def create_card
28
+ def create_remote
28
29
  @card ||= Trello::Card.create(attributes)
29
30
  rescue Trello::InvalidAccessToken
30
31
  raise Troo::InvalidAccessToken
@@ -12,28 +12,30 @@ module Troo
12
12
  end
13
13
 
14
14
  def perform
15
- update_comments
15
+ create_local
16
16
  end
17
17
 
18
18
  private
19
- attr_reader :card, :comment
20
19
 
21
- def update_comments
22
- return CommentPersistence.for(parsed_json_response) if parsed_json_response
20
+ attr_reader :card, :comment
21
+ attr_accessor :comment_resource
22
+
23
+ def create_local
24
+ return Persistence::Comment.for(resource) if create_remote
23
25
  false
24
26
  end
25
27
 
26
- def parsed_json_response
27
- return false unless create_comment
28
- resource = OpenStruct.new(JSON.parse(create_comment))
29
- resource.member_creator_id = resource.memberCreator.fetch("id", "")
30
- resource
28
+ def resource
29
+ Remote::Comment.create(comment_resource)
31
30
  end
32
31
 
33
- def create_comment
34
- @comment_resource ||= Trello::Card.new.
35
- update_fields(attributes).add_comment(comment)
36
- rescue
32
+ def create_remote
33
+ @comment_resource ||= Trello::Card.new
34
+ .update_fields(attributes)
35
+ .add_comment(comment)
36
+ rescue Trello::InvalidAccessToken
37
+ raise Troo::InvalidAccessToken
38
+ rescue Trello::Error
37
39
  false
38
40
  end
39
41
 
@@ -12,18 +12,19 @@ module Troo
12
12
  end
13
13
 
14
14
  def perform
15
- update_lists
15
+ create_local
16
16
  end
17
17
 
18
18
  private
19
+
19
20
  attr_reader :board, :name
20
21
 
21
- def update_lists
22
- return ListPersistence.for(create_list) if create_list
22
+ def create_local
23
+ return Persistence::List.for(create_remote) if create_remote
23
24
  false
24
25
  end
25
26
 
26
- def create_list
27
+ def create_remote
27
28
  @list ||= Trello::List.create(attributes)
28
29
  rescue Trello::InvalidAccessToken
29
30
  raise Troo::InvalidAccessToken
@@ -17,6 +17,7 @@ module Troo
17
17
  end
18
18
 
19
19
  private
20
+
20
21
  attr_reader :card, :list
21
22
 
22
23
  def update_cards
@@ -24,9 +25,9 @@ module Troo
24
25
  end
25
26
 
26
27
  def move_card
27
- Trello::Card.new.
28
- update_fields({ 'id' => card.external_card_id }).
29
- move_to_list(list.external_list_id)
28
+ Trello::Card.new
29
+ .update_fields('id' => card.external_card_id)
30
+ .move_to_list(list.external_list_id)
30
31
  rescue Trello::InvalidAccessToken
31
32
  raise Troo::InvalidAccessToken
32
33
  rescue Trello::Error
@@ -1,27 +1,16 @@
1
1
  module Troo
2
- module External
3
- class BoardAdaptor
4
- class << self
5
- def adapt(resource)
6
- new(resource).adapted
7
- end
8
- end
9
-
10
- def initialize(resource)
11
- @resource = resource
12
- end
13
-
2
+ module Adaptors
3
+ class Board < Resource
14
4
  def adapted
15
5
  {
16
6
  external_board_id: external_board_id,
17
7
  name: name,
18
8
  description: description,
19
- closed: closed,
9
+ closed: closed
20
10
  }
21
11
  end
22
12
 
23
13
  private
24
- attr_reader :resource
25
14
 
26
15
  def external_board_id
27
16
  resource.id
@@ -1,16 +1,6 @@
1
1
  module Troo
2
- module External
3
- class CardAdaptor
4
- class << self
5
- def adapt(resource)
6
- new(resource).adapted
7
- end
8
- end
9
-
10
- def initialize(resource)
11
- @resource = resource
12
- end
13
-
2
+ module Adaptors
3
+ class Card < Resource
14
4
  def adapted
15
5
  {
16
6
  external_board_id: external_board_id,
@@ -23,12 +13,11 @@ module Troo
23
13
  url: url,
24
14
  position: position,
25
15
  last_activity_date: last_activity_date,
26
- closed: closed,
16
+ closed: closed
27
17
  }
28
18
  end
29
19
 
30
20
  private
31
- attr_reader :resource
32
21
 
33
22
  def external_board_id
34
23
  resource.board_id
@@ -43,7 +32,7 @@ module Troo
43
32
  end
44
33
 
45
34
  def external_member_ids
46
- resource.member_ids.to_s.gsub(" ", "")
35
+ resource.member_ids.to_s.gsub(' ', '')
47
36
  end
48
37
 
49
38
  def short_id
@@ -1,16 +1,6 @@
1
1
  module Troo
2
- module External
3
- class CommentAdaptor
4
- class << self
5
- def adapt(resource)
6
- new(resource).adapted
7
- end
8
- end
9
-
10
- def initialize(resource)
11
- @resource = resource
12
- end
13
-
2
+ module Adaptors
3
+ class Comment < Resource
14
4
  def adapted
15
5
  {
16
6
  external_comment_id: external_comment_id,
@@ -18,23 +8,22 @@ module Troo
18
8
  external_card_id: external_card_id,
19
9
  external_member_id: external_member_id,
20
10
  date: date,
21
- text: text,
11
+ text: text
22
12
  }
23
13
  end
24
14
 
25
15
  private
26
- attr_reader :resource
27
16
 
28
17
  def external_comment_id
29
18
  resource.id
30
19
  end
31
20
 
32
21
  def external_board_id
33
- resource.data.fetch("board", {}).fetch("id", "")
22
+ resource.data.fetch('board', {}).fetch('id', '')
34
23
  end
35
24
 
36
25
  def external_card_id
37
- resource.data.fetch("card", {}).fetch("id", "")
26
+ resource.data.fetch('card', {}).fetch('id', '')
38
27
  end
39
28
 
40
29
  def external_member_id
@@ -46,7 +35,7 @@ module Troo
46
35
  end
47
36
 
48
37
  def text
49
- resource.data.fetch("text", "")
38
+ resource.data.fetch('text', '')
50
39
  end
51
40
  end
52
41
  end
@@ -1,28 +1,17 @@
1
1
  module Troo
2
- module External
3
- class ListAdaptor
4
- class << self
5
- def adapt(resource)
6
- new(resource).adapted
7
- end
8
- end
9
-
10
- def initialize(resource)
11
- @resource = resource
12
- end
13
-
2
+ module Adaptors
3
+ class List < Resource
14
4
  def adapted
15
5
  {
16
6
  external_board_id: external_board_id,
17
7
  external_list_id: external_list_id,
18
8
  name: name,
19
9
  position: position,
20
- closed: closed,
10
+ closed: closed
21
11
  }
22
12
  end
23
13
 
24
14
  private
25
- attr_reader :resource
26
15
 
27
16
  def external_board_id
28
17
  resource.board_id
@@ -1,16 +1,6 @@
1
1
  module Troo
2
- module External
3
- class MemberAdaptor
4
- class << self
5
- def adapt(resource)
6
- new(resource).adapted
7
- end
8
- end
9
-
10
- def initialize(resource)
11
- @resource = resource
12
- end
13
-
2
+ module Adaptors
3
+ class Member < Resource
14
4
  def adapted
15
5
  {
16
6
  external_member_id: external_member_id,
@@ -20,12 +10,11 @@ module Troo
20
10
  initials: initials,
21
11
  avatar_id: avatar_id,
22
12
  bio: bio,
23
- url: url,
13
+ url: url
24
14
  }
25
15
  end
26
16
 
27
17
  private
28
- attr_reader :resource
29
18
 
30
19
  def external_member_id
31
20
  resource.id
@@ -0,0 +1,17 @@
1
+ module Troo
2
+ module Adaptors
3
+ class Resource
4
+ attr_reader :resource
5
+
6
+ class << self
7
+ def adapt(resource)
8
+ new(resource).adapted
9
+ end
10
+ end
11
+
12
+ def initialize(resource)
13
+ @resource = resource
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,53 @@
1
+ module Troo
2
+ module CLI
3
+ class Add < ThorFixes
4
+ package_name 'add'
5
+
6
+ desc 'board (<name>)',
7
+ 'Add a new board with <name>; prompts if <name> not ' \
8
+ 'provided.'
9
+ def board(name = nil)
10
+ board_name = name.nil? ? prompt_for_name : name
11
+
12
+ say Commands::Add::Board.dispatch(board_name)
13
+ end
14
+
15
+ desc 'card <list_id> (<name>)',
16
+ 'Add a new card to the list with <list_id> with <name>; ' \
17
+ 'prompts if <name> not provided.'
18
+ def card(id, name = nil)
19
+ card_name = name.nil? ? prompt_for_name : name
20
+
21
+ say Commands::Add::Card.dispatch(card_name, id)
22
+ end
23
+
24
+ desc 'comment <card_id> (<comment>)',
25
+ 'Add a new comment to the card with <card_id> with ' \
26
+ '<comment>; prompts if <comment> not provided.'
27
+ def comment(id, comment = nil)
28
+ comment_text = comment.nil? ? prompt_for_comment : comment
29
+
30
+ say Commands::Add::Comment.dispatch(comment_text, id)
31
+ end
32
+
33
+ desc 'list <board_id> (<name>)',
34
+ 'Add a new list to the board with <board_id> with ' \
35
+ '<name>; prompts if <name> not provided.'
36
+ def list(id, name = nil)
37
+ list_name = name.nil? ? prompt_for_name : name
38
+
39
+ say Commands::Add::List.dispatch(list_name, id)
40
+ end
41
+
42
+ private
43
+
44
+ def prompt_for_name
45
+ @answer = ask('Please enter a name:')
46
+ end
47
+
48
+ def prompt_for_comment
49
+ @answer = ask('Please enter a comment:')
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,25 @@
1
+ module Troo
2
+ module CLI
3
+ class Default < ThorFixes
4
+ package_name 'default'
5
+
6
+ desc 'board <id>',
7
+ 'Set the board <id> to default.'
8
+ def board(id)
9
+ say Commands::Default::Board.dispatch(id)
10
+ end
11
+
12
+ desc 'card <id>',
13
+ 'Set the card <id> to default.'
14
+ def card(id)
15
+ say Commands::Default::Card.dispatch(id)
16
+ end
17
+
18
+ desc 'list <id>',
19
+ 'Set the list <id> to default.'
20
+ def list(id)
21
+ say Commands::Default::List.dispatch(id)
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,46 @@
1
+ module Troo
2
+ module CLI
3
+ class Main < ThorFixes
4
+ desc 'status',
5
+ 'Get troo status.'
6
+ def status
7
+ say 'Status:'
8
+ say Commands::Status::Board.dispatch
9
+ say Commands::Status::List.dispatch
10
+ say Commands::Status::Card.dispatch
11
+ end
12
+
13
+ desc 'cleanup',
14
+ 'Removes all local data.'
15
+ def cleanup
16
+ if yes?('This will remove all local data, are you sure?')
17
+ Ohm.redis.flushdb
18
+ say 'All local data has been removed.'
19
+ end
20
+ end
21
+
22
+ desc 'version',
23
+ 'Print the version.'
24
+ def version
25
+ say "troo #{Troo::VERSION}"
26
+ end
27
+
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>.'
31
+ subcommand :show, CLI::Show
32
+
33
+ desc 'add [board|list|card|comment] <id>',
34
+ 'Add board, list, card or comment.'
35
+ subcommand :add, CLI::Add
36
+
37
+ desc 'default [board|list|card] <id>',
38
+ 'Set board, list or card to be default.'
39
+ subcommand :default, CLI::Default
40
+
41
+ desc 'refresh [board|list|card] <id>',
42
+ 'Refresh board, list or card with <id>.'
43
+ subcommand :refresh, CLI::Refresh
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,31 @@
1
+ module Troo
2
+ module CLI
3
+ class Refresh < ThorFixes
4
+ package_name 'refresh'
5
+
6
+ desc 'all',
7
+ 'Refresh all the local data.'
8
+ def all
9
+ say Commands::Refresh::All.dispatch
10
+ end
11
+
12
+ desc 'board (<id>)',
13
+ 'Refresh the default board or board with <id>.'
14
+ def board(id = nil)
15
+ say Commands::Refresh::Board.dispatch(id)
16
+ end
17
+
18
+ desc 'card (<id>)',
19
+ 'Refresh the default card or card with <id>.'
20
+ def card(id = nil)
21
+ say Commands::Refresh::Card.dispatch(id)
22
+ end
23
+
24
+ desc 'list (<id>)',
25
+ 'Refresh the default list or list with <id>.'
26
+ def list(id = nil)
27
+ say Commands::Refresh::List.dispatch(id)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,41 @@
1
+ module Troo
2
+ module CLI
3
+ class Show < ThorFixes
4
+ package_name 'show'
5
+
6
+ desc 'boards',
7
+ 'Show all the boards with lists.'
8
+ def boards
9
+ say Troo::Commands::Show::Boards.dispatch
10
+ end
11
+
12
+ desc 'board (<id>)',
13
+ 'Show lists and cards for board <id>' \
14
+ ' (uses default card if <id> not provided).'
15
+ def board(id = nil)
16
+ say Troo::Commands::Show::Board.dispatch(:board, id)
17
+ end
18
+
19
+ desc 'list (<id>)',
20
+ 'Show all cards for list <id>' \
21
+ ' (uses default card if <id> not provided).'
22
+ def list(id = nil)
23
+ say Troo::Commands::Show::List.dispatch(:list, id)
24
+ end
25
+
26
+ desc 'card (<id>)',
27
+ 'Show a card <id> including last 3 comments' \
28
+ ' (uses default card if <id> not provided).'
29
+ def card(id = nil)
30
+ say Troo::Commands::Show::Card.dispatch(:card, id)
31
+ end
32
+
33
+ desc 'comments (<id>)',
34
+ 'Show all comments for card <id>' \
35
+ ' (uses default card if <id> not provided).'
36
+ def comments(id = nil)
37
+ say Troo::Commands::Show::Comments.dispatch(:comments, id)
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,13 @@
1
+ module Troo
2
+ module CLI
3
+ class ThorFixes < Thor
4
+ # def self.exit_on_failure?
5
+ # true # exit code is non-zero on error
6
+ # end
7
+
8
+ def self.banner(command, namespace = nil, subcommand = false)
9
+ "#{basename} #{@package_name} #{command.usage}"
10
+ end
11
+ end
12
+ end
13
+ end