troo 0.0.7 → 0.0.8

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 (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