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
@@ -26,7 +26,7 @@ module Troo
26
26
  end
27
27
 
28
28
  def external_attributes
29
- self.attributes.delete_if { |k, _| k == :id || k == :default }
29
+ attributes.delete_if { |k, _| k == :id || k == :default }
30
30
  end
31
31
  end
32
32
  end
@@ -0,0 +1,49 @@
1
+ module Troo
2
+ module Behaviours
3
+ class NullEntity
4
+ def default?
5
+ false
6
+ end
7
+ end
8
+
9
+ class SetDefault
10
+ class << self
11
+ def for(entity)
12
+ new(entity).set_default!
13
+ end
14
+ end
15
+
16
+ def initialize(entity)
17
+ @entity = entity
18
+ end
19
+
20
+ def set_default!
21
+ return true if already_default?
22
+ unset_default
23
+ set_new_default
24
+ entity
25
+ end
26
+
27
+ private
28
+
29
+ attr_reader :entity
30
+
31
+ def set_new_default
32
+ entity.update(default: true)
33
+ end
34
+
35
+ def unset_default
36
+ entity.class.update(default: false)
37
+ end
38
+
39
+ def already_default?
40
+ entity.default?
41
+ end
42
+
43
+ def entity
44
+ return NullEntity.new if @entity.nil?
45
+ @entity
46
+ end
47
+ end
48
+ end
49
+ end
@@ -14,25 +14,28 @@ module Troo
14
14
 
15
15
  alias_method :default?, :default
16
16
 
17
+ def self.remote(id, options = {})
18
+ External::Board.fetch(id, options).first
19
+ end
20
+
17
21
  def lists
18
- Troo::List.find(external_board_id: self.external_board_id)
22
+ Troo::List.find(external_board_id: external_board_id)
19
23
  end
20
24
 
21
25
  def cards
22
- Troo::Card.find(external_board_id: self.external_board_id)
26
+ Troo::Card.find(external_board_id: external_board_id)
23
27
  end
24
28
 
25
29
  def decorator(options = {})
26
- BoardDecorator.new(self, options)
30
+ Decorators::Board.new(self, options)
27
31
  end
28
32
 
29
- def presenter
30
- BoardPresenter.new(self)
33
+ def presenter(options = {})
34
+ Presenters::Board.new(self, options)
31
35
  end
32
36
 
33
37
  def set_default!
34
- SetDefault.for(self)
38
+ Behaviours::SetDefault.for(self)
35
39
  end
36
40
  end
37
41
  end
38
-
@@ -24,16 +24,30 @@ module Troo
24
24
 
25
25
  alias_method :default?, :default
26
26
 
27
+ def self.remote(id, options = { mode: :card })
28
+ External::Card.fetch(id, options).first
29
+ end
30
+
31
+ def external_member_ids
32
+ if @attributes[:external_member_ids].nil?
33
+ []
34
+ elsif @attributes[:external_member_ids].is_a?(Array)
35
+ @attributes[:external_member_ids]
36
+ else
37
+ JSON(@attributes[:external_member_ids])
38
+ end
39
+ end
40
+
27
41
  def board
28
- BoardRetrieval.retrieve(self.external_board_id)
42
+ @board ||= Retrieval::Board.retrieve(external_board_id)
29
43
  end
30
44
 
31
45
  def list
32
- ListRetrieval.retrieve(self.external_list_id)
46
+ @list ||= Retrieval::List.retrieve(external_list_id)
33
47
  end
34
48
 
35
49
  def comments
36
- Troo::Comment.find(external_card_id: self.external_card_id)
50
+ Troo::Comment.find(external_card_id: external_card_id)
37
51
  end
38
52
 
39
53
  def recent_comments
@@ -41,26 +55,30 @@ module Troo
41
55
  end
42
56
 
43
57
  def members
44
- if external_member_ids.any?
45
- m = external_member_ids.map do |external_member_id|
46
- Troo::Member.first(external_member_id: external_member_id)
47
- end.compact
48
- else
49
- []
50
- end
58
+ return [] if external_member_ids.empty?
59
+ @members ||= external_member_ids.map do |member_id|
60
+ Retrieval::Member.retrieve(member_id)
61
+ end.compact
51
62
  end
52
63
 
53
64
  def decorator(options = {})
54
- CardDecorator.new(self, options)
65
+ Decorators::Card.new(self, options)
66
+ end
67
+
68
+ def presenter(options = {})
69
+ Presenters::Card.new(self, options)
55
70
  end
56
71
 
57
- def presenter
58
- CardPresenter.new(self)
72
+ def comment_presenter(options = {})
73
+ Presenters::Comment.new(self, options)
74
+ end
75
+
76
+ def member_presenter(options = {})
77
+ Presenters::Member.new(self, options)
59
78
  end
60
79
 
61
80
  def set_default!
62
- SetDefault.for(self)
81
+ Behaviours::SetDefault.for(self)
63
82
  end
64
83
  end
65
84
  end
66
-
@@ -16,21 +16,24 @@ module Troo
16
16
  index :external_comment_id
17
17
  index :external_member_id
18
18
 
19
+ def self.remote
20
+ nil
21
+ end
22
+
19
23
  def board
20
- BoardRetrieval.retrieve(self.external_board_id)
24
+ Retrieval::Board.retrieve(external_board_id)
21
25
  end
22
26
 
23
27
  def card
24
- CardRetrieval.retrieve(self.external_card_id)
28
+ Retrieval::Card.retrieve(external_card_id)
25
29
  end
26
30
 
27
31
  def member
28
- MemberRetrieval.retrieve(self.external_member_id)
32
+ Retrieval::Member.retrieve(external_member_id)
29
33
  end
30
34
 
31
35
  def decorator(options = {})
32
- CommentDecorator.new(self, options)
36
+ Decorators::Comment.new(self, options)
33
37
  end
34
38
  end
35
39
  end
36
-
@@ -16,24 +16,28 @@ module Troo
16
16
 
17
17
  alias_method :default?, :default
18
18
 
19
+ def self.remote(id, options = { mode: :list })
20
+ External::List.fetch(id, options).first
21
+ end
22
+
19
23
  def board
20
- BoardRetrieval.retrieve(self.external_board_id)
24
+ Retrieval::Board.retrieve(external_board_id)
21
25
  end
22
26
 
23
27
  def cards
24
- Troo::Card.find(external_list_id: self.external_list_id)
28
+ Troo::Card.find(external_list_id: external_list_id)
25
29
  end
26
30
 
27
31
  def decorator(options = {})
28
- ListDecorator.new(self, options)
32
+ Decorators::List.new(self, options)
29
33
  end
30
34
 
31
- def presenter
32
- ListPresenter.new(self)
35
+ def presenter(options = {})
36
+ Presenters::List.new(self, options)
33
37
  end
34
38
 
35
39
  def set_default!
36
- SetDefault.for(self)
40
+ Behaviours::SetDefault.for(self)
37
41
  end
38
42
  end
39
43
  end
@@ -14,13 +14,16 @@ module Troo
14
14
 
15
15
  index :external_member_id
16
16
 
17
+ def self.remote(id, options = { mode: :member })
18
+ External::Member.fetch(id, options).first
19
+ end
20
+
17
21
  def decorator(options = {})
18
- MemberDecorator.new(self, options)
22
+ Decorators::Member.new(self, options)
19
23
  end
20
24
 
21
- def presenter
22
- MemberPresenter.new(self)
25
+ def presenter(options = {})
26
+ Presenters::Member.new(self, options)
23
27
  end
24
28
  end
25
29
  end
26
-
@@ -0,0 +1,19 @@
1
+ module Troo
2
+ module Persistence
3
+ class Board < Resource
4
+ private
5
+
6
+ def created
7
+ Troo::Board.create(remote_data)
8
+ end
9
+
10
+ def local
11
+ @local ||= Troo::Board.first(external_board_id: resource.id)
12
+ end
13
+
14
+ def remote_data
15
+ @remote ||= Adaptors::Board.adapt(resource)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ module Troo
2
+ module Persistence
3
+ class Card < Resource
4
+ private
5
+
6
+ def created
7
+ Troo::Card.create(remote_data)
8
+ end
9
+
10
+ def local
11
+ @local ||= Troo::Card.first(external_card_id: resource.id)
12
+ end
13
+
14
+ def remote_data
15
+ @remote ||= Adaptors::Card.adapt(resource)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ module Troo
2
+ module Persistence
3
+ class Comment < Resource
4
+ private
5
+
6
+ def created
7
+ Troo::Comment.create(remote_data)
8
+ end
9
+
10
+ def local
11
+ @local ||= Troo::Comment.first(external_comment_id: resource.id)
12
+ end
13
+
14
+ def remote_data
15
+ @remote ||= Adaptors::Comment.adapt(resource)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ module Troo
2
+ module Persistence
3
+ class List < Resource
4
+ private
5
+
6
+ def created
7
+ Troo::List.create(remote_data)
8
+ end
9
+
10
+ def local
11
+ @local ||= Troo::List.first(external_list_id: resource.id)
12
+ end
13
+
14
+ def remote_data
15
+ @remote ||= Adaptors::List.adapt(resource)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ module Troo
2
+ module Persistence
3
+ class Member < Resource
4
+ private
5
+
6
+ def created
7
+ Troo::Member.create(remote_data)
8
+ end
9
+
10
+ def local
11
+ @local ||= Troo::Member.first(external_member_id: resource.id)
12
+ end
13
+
14
+ def remote_data
15
+ @remote ||= Adaptors::Member.adapt(resource)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,50 @@
1
+ module Troo
2
+ module Persistence
3
+ class Resource
4
+ attr_reader :resource, :options
5
+
6
+ class << self
7
+ def for(resource, options = {})
8
+ new(resource, options).persist
9
+ end
10
+
11
+ def with_collection(resources, options = {})
12
+ resources.map do |resource|
13
+ new(resource, options).persist
14
+ end
15
+ end
16
+ end
17
+
18
+ def initialize(resource, options = {})
19
+ @resource = resource
20
+ @options = options
21
+ end
22
+
23
+ def persist
24
+ return local if local_identical?
25
+ return updated if local_exists?
26
+ created
27
+ end
28
+
29
+ private
30
+
31
+ def updated
32
+ local.update(remote_data) && local
33
+ end
34
+
35
+ def local_identical?
36
+ return false unless local_exists?
37
+ return false if local_data != remote_data
38
+ true
39
+ end
40
+
41
+ def local_data
42
+ local.external_attributes
43
+ end
44
+
45
+ def local_exists?
46
+ !!local
47
+ end
48
+ end
49
+ end
50
+ end
@@ -12,7 +12,7 @@ module Troo
12
12
  class << self
13
13
  def completed!
14
14
  all.map { |record| record.delete }
15
- create({ last_performed_at: Time.now.to_s })
15
+ create(last_performed_at: Time.now.to_s)
16
16
  end
17
17
 
18
18
  def last_performed_at?
@@ -0,0 +1,21 @@
1
+ module Troo
2
+ module Remote
3
+ class Comment < Resource
4
+ def id
5
+ params.fetch('id')
6
+ end
7
+
8
+ def member_creator_id
9
+ params.fetch('idMemberCreator')
10
+ end
11
+
12
+ def data
13
+ params.fetch('data')
14
+ end
15
+
16
+ def date
17
+ params.fetch('date')
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,25 @@
1
+ module Troo
2
+ module Remote
3
+ class Resource
4
+ def self.create(json)
5
+ new(json).create
6
+ end
7
+
8
+ def initialize(json)
9
+ @json = json
10
+ end
11
+
12
+ def create
13
+ self
14
+ end
15
+
16
+ private
17
+
18
+ attr_reader :json
19
+
20
+ def params
21
+ @params ||= JSON.parse(json)
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,29 @@
1
+ module Troo
2
+ module Retrieval
3
+ class Board < Resource
4
+ class << self
5
+ def all
6
+ Troo::Board.all
7
+ end
8
+ end
9
+
10
+ private
11
+
12
+ def default
13
+ Troo::Board.default
14
+ end
15
+
16
+ def by_id
17
+ Troo::Board[id]
18
+ end
19
+
20
+ def by_external_id
21
+ Troo::Board.first(external_board_id: id)
22
+ end
23
+
24
+ def remote
25
+ Troo::Board.remote(id)
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,33 @@
1
+ module Troo
2
+ module Retrieval
3
+ class Card < Resource
4
+ class << self
5
+ def all
6
+ Troo::Card.all
7
+ end
8
+ end
9
+
10
+ private
11
+
12
+ def default
13
+ Troo::Card.default
14
+ end
15
+
16
+ def by_id
17
+ Troo::Card[id]
18
+ end
19
+
20
+ def by_short_id
21
+ Troo::Card.first(short_id: id)
22
+ end
23
+
24
+ def by_external_id
25
+ Troo::Card.first(external_card_id: id)
26
+ end
27
+
28
+ def remote
29
+ Troo::Card.remote(id)
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,25 @@
1
+ module Troo
2
+ module Retrieval
3
+ class Comment < Resource
4
+ class << self
5
+ def all
6
+ Troo::Comment.all
7
+ end
8
+ end
9
+
10
+ private
11
+
12
+ def by_id
13
+ Troo::Comment[id]
14
+ end
15
+
16
+ def by_external_id
17
+ Troo::Comment.first(external_comment_id: id)
18
+ end
19
+
20
+ def remote
21
+ nil
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,29 @@
1
+ module Troo
2
+ module Retrieval
3
+ class List < Resource
4
+ class << self
5
+ def all
6
+ Troo::List.all
7
+ end
8
+ end
9
+
10
+ private
11
+
12
+ def default
13
+ Troo::List.default
14
+ end
15
+
16
+ def by_id
17
+ Troo::List[id]
18
+ end
19
+
20
+ def by_external_id
21
+ Troo::List.first(external_list_id: id)
22
+ end
23
+
24
+ def remote
25
+ Troo::List.remote(id)
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,25 @@
1
+ module Troo
2
+ module Retrieval
3
+ class Member < Resource
4
+ class << self
5
+ def all
6
+ Troo::Member.all
7
+ end
8
+ end
9
+
10
+ private
11
+
12
+ def by_id
13
+ Troo::Member[id]
14
+ end
15
+
16
+ def by_external_id
17
+ Troo::Member.first(external_member_id: id)
18
+ end
19
+
20
+ def remote
21
+ Troo::Member.remote(id)
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,36 @@
1
+ module Troo
2
+ module Retrieval
3
+ class Resource
4
+ attr_reader :id
5
+
6
+ class << self
7
+ def default
8
+ new.retrieve
9
+ end
10
+
11
+ def retrieve(id = nil)
12
+ new(id).retrieve
13
+ end
14
+ end
15
+
16
+ def initialize(id = nil)
17
+ @id = id
18
+ end
19
+
20
+ def retrieve
21
+ return default unless id
22
+ by_short_id || by_id || by_external_id || remote
23
+ end
24
+
25
+ private
26
+
27
+ def default
28
+ nil
29
+ end
30
+
31
+ def by_short_id
32
+ nil
33
+ end
34
+ end
35
+ end
36
+ end