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,57 +0,0 @@
1
- module Troo
2
- class ListDecorator
3
- include DecoratorHelpers
4
-
5
- def initialize(list, options = {})
6
- @list = list
7
- @options = options
8
- end
9
-
10
- def short
11
- [default_str, id_str, name_str].join + "\n"
12
- end
13
-
14
- def name_str
15
- highlight(name, options)
16
- end
17
-
18
- def default_str
19
- default.center(3)
20
- end
21
-
22
- def id_str
23
- highlight(brackets(id) + " ", options).rjust(6)
24
- end
25
-
26
- def name
27
- (list.name && list.name.chomp) || "N/A"
28
- end
29
-
30
- def default
31
- list.default? ? "*" : ""
32
- end
33
-
34
- def id
35
- list.id.to_s
36
- end
37
-
38
- def cards(alt_options = {})
39
- list.cards.map { |card| card.decorator(alt_options) }
40
- end
41
-
42
- private
43
- attr_reader :list
44
-
45
- def options
46
- defaults.merge!(@options)
47
- end
48
-
49
- def defaults
50
- {
51
- ansicolor: true,
52
- colour: Esc.green,
53
- underline: Esc.underline
54
- }
55
- end
56
- end
57
- end
@@ -1,41 +0,0 @@
1
- module Troo
2
- class ListPresenter
3
- class << self
4
- def show(list, options = {})
5
- new(list, options).show
6
- end
7
- end
8
-
9
- include DecoratorHelpers
10
-
11
- def initialize(list, options = {})
12
- @list = list
13
- @options = options
14
- end
15
-
16
- def show
17
- puts board.decorator.title
18
-
19
- title_for(list.decorator)
20
-
21
- print_error "No cards were found." if cards.empty?
22
-
23
- cards.each do |card|
24
- title_for(card)
25
- end
26
-
27
- puts
28
- end
29
-
30
- private
31
- attr_reader :list
32
-
33
- def board
34
- list.board
35
- end
36
-
37
- def cards
38
- list.decorator.cards
39
- end
40
- end
41
- end
@@ -1,25 +0,0 @@
1
- module Troo
2
- class MemberDecorator
3
- include DecoratorHelpers
4
-
5
- def initialize(member, options = {})
6
- @member = member
7
- @options = options
8
- end
9
-
10
- def username
11
- ["@", member.username].join
12
- end
13
-
14
- def name
15
- member.full_name
16
- end
17
-
18
- def initials
19
- member.initials
20
- end
21
-
22
- private
23
- attr_reader :member
24
- end
25
- end
@@ -1,59 +0,0 @@
1
- module Troo
2
- class MemberPresenter
3
- class << self
4
- def show(card, options = {})
5
- new(card, options).show
6
- end
7
- end
8
-
9
- include DecoratorHelpers
10
-
11
- def initialize(card, options = {})
12
- @card = card
13
- @options = options
14
- end
15
-
16
- def show
17
- decorated_members
18
- end
19
-
20
- private
21
- attr_reader :card
22
-
23
- def decorated_members
24
- if one_member?
25
- members.first
26
- elsif two_members?
27
- members.join(" and ")
28
- elsif many_members?
29
- word_wrap([all_but_last_member, last_member].join(" and "))
30
- else
31
- "No members have been assigned."
32
- end
33
- end
34
-
35
- def members
36
- @members ||= card.members.map { |member| member.decorator.username }
37
- end
38
-
39
- def one_member?
40
- members.size == 1
41
- end
42
-
43
- def two_members?
44
- members.size == 2
45
- end
46
-
47
- def many_members?
48
- members.size > 2
49
- end
50
-
51
- def all_but_last_member
52
- members[0...-1].join(", ")
53
- end
54
-
55
- def last_member
56
- members[-1]
57
- end
58
- end
59
- end
@@ -1,25 +0,0 @@
1
- module Troo
2
- class BoardPersistence
3
- include Persistence
4
-
5
- def initialize(resource, options = {})
6
- @resource = resource
7
- @options = options
8
- end
9
-
10
- private
11
- attr_reader :resource, :options
12
-
13
- def created
14
- Troo::Board.create(remote)
15
- end
16
-
17
- def local
18
- @local ||= Troo::Board.first(external_board_id: resource.id)
19
- end
20
-
21
- def remote
22
- @remote ||= Troo::External::BoardAdaptor.adapt(resource)
23
- end
24
- end
25
- end
@@ -1,45 +0,0 @@
1
- module Troo
2
- class BoardRetrieval
3
- class << self
4
- def all
5
- Troo::Board.all
6
- end
7
-
8
- def default
9
- new.retrieve
10
- end
11
-
12
- def retrieve(id = nil)
13
- new(id).retrieve
14
- end
15
- end
16
-
17
- def initialize(id = nil)
18
- @id = id
19
- end
20
-
21
- def retrieve
22
- return default unless id
23
- by_id || by_external_id || remote
24
- end
25
-
26
- private
27
- attr_reader :id
28
-
29
- def default
30
- Troo::Board.default
31
- end
32
-
33
- def by_id
34
- Troo::Board[id]
35
- end
36
-
37
- def by_external_id
38
- Troo::Board.first(external_board_id: id)
39
- end
40
-
41
- def remote
42
- External::Board.fetch(id).first
43
- end
44
- end
45
- end
@@ -1,25 +0,0 @@
1
- module Troo
2
- class CardPersistence
3
- include Persistence
4
-
5
- def initialize(resource, options = {})
6
- @resource = resource
7
- @options = options
8
- end
9
-
10
- private
11
- attr_reader :resource, :options
12
-
13
- def created
14
- Troo::Card.create(remote)
15
- end
16
-
17
- def local
18
- @local ||= Troo::Card.first(external_card_id: resource.id)
19
- end
20
-
21
- def remote
22
- @remote ||= Troo::External::CardAdaptor.adapt(resource)
23
- end
24
- end
25
- end
@@ -1,49 +0,0 @@
1
- module Troo
2
- class CardRetrieval
3
- class << self
4
- def all
5
- Troo::Card.all
6
- end
7
-
8
- def default
9
- new.retrieve
10
- end
11
-
12
- def retrieve(id = nil)
13
- new(id).retrieve
14
- end
15
- end
16
-
17
- def initialize(id = nil)
18
- @id = id
19
- end
20
-
21
- def retrieve
22
- return default unless id
23
- by_short_id || by_id || by_external_id || remote
24
- end
25
-
26
- private
27
- attr_reader :id
28
-
29
- def default
30
- Troo::Card.default
31
- end
32
-
33
- def by_id
34
- Troo::Card[id]
35
- end
36
-
37
- def by_short_id
38
- Troo::Card.first(short_id: id)
39
- end
40
-
41
- def by_external_id
42
- Troo::Card.first(external_card_id: id)
43
- end
44
-
45
- def remote
46
- External::Card.fetch(id, { mode: :card }).first
47
- end
48
- end
49
- end
@@ -1,25 +0,0 @@
1
- module Troo
2
- class CommentPersistence
3
- include Persistence
4
-
5
- def initialize(resource, options = {})
6
- @resource = resource
7
- @options = options
8
- end
9
-
10
- private
11
- attr_reader :resource, :options
12
-
13
- def created
14
- Troo::Comment.create(remote)
15
- end
16
-
17
- def local
18
- @local ||= Troo::Comment.first(external_comment_id: resource.id)
19
- end
20
-
21
- def remote
22
- @remote ||= Troo::External::CommentAdaptor.adapt(resource)
23
- end
24
- end
25
- end
@@ -1,32 +0,0 @@
1
- module Troo
2
- class CommentRetrieval
3
- class << self
4
- def all
5
- Troo::Comment.all
6
- end
7
-
8
- def retrieve(id)
9
- new(id).retrieve
10
- end
11
- end
12
-
13
- def initialize(id)
14
- @id = id
15
- end
16
-
17
- def retrieve
18
- by_id || by_external_id
19
- end
20
-
21
- private
22
- attr_reader :id
23
-
24
- def by_id
25
- Troo::Comment[id]
26
- end
27
-
28
- def by_external_id
29
- Troo::Comment.first(external_comment_id: id)
30
- end
31
- end
32
- end
@@ -1,25 +0,0 @@
1
- module Troo
2
- class ListPersistence
3
- include Persistence
4
-
5
- def initialize(resource, options = {})
6
- @resource = resource
7
- @options = options
8
- end
9
-
10
- private
11
- attr_reader :resource, :options
12
-
13
- def created
14
- Troo::List.create(remote)
15
- end
16
-
17
- def local
18
- @local ||= Troo::List.first(external_list_id: resource.id)
19
- end
20
-
21
- def remote
22
- @remote ||= Troo::External::ListAdaptor.adapt(resource)
23
- end
24
- end
25
- end
@@ -1,45 +0,0 @@
1
- module Troo
2
- class ListRetrieval
3
- class << self
4
- def all
5
- Troo::List.all
6
- end
7
-
8
- def default
9
- new.retrieve
10
- end
11
-
12
- def retrieve(id = nil)
13
- new(id).retrieve
14
- end
15
- end
16
-
17
- def initialize(id = nil)
18
- @id = id
19
- end
20
-
21
- def retrieve
22
- return default unless id
23
- by_id || by_external_id || remote
24
- end
25
-
26
- private
27
- attr_reader :id
28
-
29
- def default
30
- Troo::List.default
31
- end
32
-
33
- def by_id
34
- Troo::List[id]
35
- end
36
-
37
- def by_external_id
38
- Troo::List.first(external_list_id: id)
39
- end
40
-
41
- def remote
42
- External::List.fetch(id, { mode: :list }).first
43
- end
44
- end
45
- end
@@ -1,25 +0,0 @@
1
- module Troo
2
- class MemberPersistence
3
- include Persistence
4
-
5
- def initialize(resource, options = {})
6
- @resource = resource
7
- @options = options
8
- end
9
-
10
- private
11
- attr_reader :resource, :options
12
-
13
- def created
14
- Troo::Member.create(remote)
15
- end
16
-
17
- def local
18
- @local ||= Troo::Member.first(external_member_id: resource.id)
19
- end
20
-
21
- def remote
22
- @remote ||= Troo::External::MemberAdaptor.adapt(resource)
23
- end
24
- end
25
- end
@@ -1,36 +0,0 @@
1
- module Troo
2
- class MemberRetrieval
3
- class << self
4
- def all
5
- Troo::Member.all
6
- end
7
-
8
- def retrieve(id)
9
- new(id).retrieve
10
- end
11
- end
12
-
13
- def initialize(id)
14
- @id = id
15
- end
16
-
17
- def retrieve
18
- by_id || by_external_id || remote
19
- end
20
-
21
- private
22
- attr_reader :id
23
-
24
- def by_id
25
- Troo::Member[id]
26
- end
27
-
28
- def by_external_id
29
- Troo::Member.first(external_member_id: id)
30
- end
31
-
32
- def remote
33
- External::Member.fetch(id, { mode: :member }).first
34
- end
35
- end
36
- end
@@ -1,39 +0,0 @@
1
- module Troo
2
- module Persistence
3
- module ClassMethods
4
- def for(resource, options = {})
5
- new(resource, options).persist
6
- end
7
- end
8
-
9
- def self.included(base)
10
- base.extend(ClassMethods)
11
- end
12
-
13
- def persist
14
- return local if local_identical?
15
- return updated if local_exists?
16
- return created
17
- end
18
-
19
- private
20
-
21
- def updated
22
- local.update(remote) && local
23
- end
24
-
25
- def local_identical?
26
- return false unless local_exists?
27
- return false if local_data != remote
28
- true
29
- end
30
-
31
- def local_data
32
- local.external_attributes
33
- end
34
-
35
- def local_exists?
36
- !!local
37
- end
38
- end
39
- end
@@ -1,68 +0,0 @@
1
- require_relative "../../../test_helper"
2
-
3
- module Troo
4
- describe RefreshAll do
5
- let(:described_class) { RefreshAll }
6
- let(:options) { { } }
7
-
8
- before do
9
- @board = Fabricate(:board)
10
- @list = Fabricate(:list)
11
- @card = Fabricate(:card)
12
-
13
- External::Board.stubs(:fetch_all).returns([@board])
14
- External::List.stubs(:fetch).returns([@list])
15
- External::Card.stubs(:fetch).returns([@card])
16
- External::Comment.stubs(:fetch).returns([])
17
- External::Member.stubs(:fetch).returns([])
18
- end
19
-
20
- after { database_cleanup }
21
-
22
- describe ".initialize" do
23
- subject { described_class.new(@board, options) }
24
-
25
- it "assigns the board to an instance variable" do
26
- subject.instance_variable_get("@board").must_equal(@board)
27
- end
28
-
29
- it "assigns the options to an instance variable" do
30
- subject.instance_variable_get("@options").must_equal(options)
31
- end
32
- end
33
-
34
- describe ".all" do
35
- let(:board) { nil }
36
-
37
- subject { described_class.all(board, options) }
38
-
39
- it "returns true when successful" do
40
- subject.must_equal(true)
41
- end
42
- end
43
-
44
- describe ".default" do
45
- subject { described_class.default(@board, options) }
46
-
47
- it "returns true when successful" do
48
- subject.must_equal(true)
49
- end
50
- end
51
-
52
- describe ".lists" do
53
- subject { described_class.lists(@board, options) }
54
-
55
- it "refreshes the lists for the board specified" do
56
- subject.size.must_equal(1)
57
- end
58
- end
59
-
60
- describe ".cards" do
61
- subject { described_class.cards(@board, options) }
62
-
63
- it "refreshes the cards for the board specified" do
64
- subject.size.must_equal(1)
65
- end
66
- end
67
- end
68
- end
@@ -1,44 +0,0 @@
1
- require_relative "../../../test_helper"
2
-
3
- module Troo
4
- describe SetDefault do
5
- let(:described_class) { SetDefault }
6
-
7
- describe ".initialize" do
8
- let(:entity) { :some_model }
9
-
10
- subject { described_class.new(entity) }
11
-
12
- it "assigns the entity to an instance variable" do
13
- subject.instance_variable_get("@entity").must_equal(entity)
14
- end
15
- end
16
-
17
- describe "#set_default!" do
18
- before do
19
- @board_1 = Fabricate(:board, default: true)
20
- @board_2 = Fabricate(:board, default: false)
21
- end
22
-
23
- after { database_cleanup }
24
-
25
- subject { described_class.for(entity) }
26
-
27
- context "when the entity is already the default" do
28
- let(:entity) { @board_1 }
29
-
30
- it { subject.must_equal false }
31
- end
32
-
33
- context "when the entity is not already the default" do
34
- let(:entity) { @board_2 }
35
-
36
- it "sets the specified entity to be the default" do
37
- subject.default.must_equal(true)
38
-
39
- subject.must_equal(@board_2)
40
- end
41
- end
42
- end
43
- end
44
- end