troo 0.0.8 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (316) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -1
  3. data/.ruby-version +1 -1
  4. data/.trooconf.example +18 -0
  5. data/Gemfile.lock +178 -0
  6. data/README.md +77 -21
  7. data/Rakefile +1 -1
  8. data/bin/completion.bash +10 -0
  9. data/bin/completion.zsh +10 -0
  10. data/bin/init.sh +15 -0
  11. data/bin/troo +12 -3
  12. data/config/cucumber.yml +3 -3
  13. data/config/en.yml +29 -0
  14. data/config/trello_api.yml +19 -0
  15. data/features/add/board.feature +3 -19
  16. data/features/add/card.feature +14 -18
  17. data/features/add/comment.feature +14 -14
  18. data/features/add/list.feature +11 -14
  19. data/features/default/board.feature +4 -4
  20. data/features/default/card.feature +4 -4
  21. data/features/default/list.feature +4 -4
  22. data/features/move/card.feature +54 -0
  23. data/features/refresh/all.feature +8 -4
  24. data/features/refresh/board.feature +9 -6
  25. data/features/refresh/card.feature +9 -6
  26. data/features/refresh/list.feature +9 -6
  27. data/features/show/board.feature +7 -7
  28. data/features/show/boards.feature +19 -0
  29. data/features/show/card.feature +86 -15
  30. data/features/show/comment.feature +14 -12
  31. data/features/show/list.feature +19 -14
  32. data/features/status.feature +27 -13
  33. data/features/step_definitions/fabrication_steps.rb +43 -8
  34. data/features/step_definitions/troo_steps.rb +3 -2
  35. data/features/support/env.rb +1 -0
  36. data/features/troo.feature +0 -12
  37. data/lib/troo.rb +32 -29
  38. data/lib/troo/api/client.rb +117 -0
  39. data/lib/troo/api/endpoints.rb +39 -0
  40. data/lib/troo/api/headers.rb +44 -0
  41. data/lib/troo/api/oauth_settings.rb +36 -0
  42. data/lib/troo/api/request.rb +37 -0
  43. data/lib/troo/api/response.rb +31 -0
  44. data/lib/troo/cli/add.rb +8 -12
  45. data/lib/troo/cli/commands/add.rb +95 -0
  46. data/lib/troo/cli/commands/default.rb +44 -0
  47. data/lib/troo/cli/commands/move/card.rb +95 -0
  48. data/lib/troo/cli/commands/refresh.rb +80 -0
  49. data/lib/troo/cli/commands/refresh/all.rb +52 -0
  50. data/lib/troo/cli/commands/show.rb +56 -0
  51. data/lib/troo/cli/commands/show/show_boards.rb +36 -0
  52. data/lib/troo/cli/commands/show/show_comments.rb +54 -0
  53. data/lib/troo/cli/commands/status.rb +68 -0
  54. data/lib/troo/cli/default.rb +3 -3
  55. data/lib/troo/cli/main.rb +60 -9
  56. data/lib/troo/cli/refresh.rb +4 -4
  57. data/lib/troo/cli/show.rb +7 -7
  58. data/lib/troo/cli/thor_fixes.rb +1 -5
  59. data/lib/troo/configuration.rb +53 -0
  60. data/lib/troo/debug.rb +18 -0
  61. data/lib/troo/decorators/member.rb +2 -19
  62. data/lib/troo/decorators/resource.rb +130 -0
  63. data/lib/troo/helpers/decorator_helpers.rb +21 -74
  64. data/lib/troo/helpers/model_helpers.rb +19 -4
  65. data/lib/troo/helpers/remote_model_helpers.rb +54 -0
  66. data/lib/troo/models/board.rb +19 -11
  67. data/lib/troo/models/card.rb +20 -17
  68. data/lib/troo/models/comment.rb +28 -8
  69. data/lib/troo/models/list.rb +22 -14
  70. data/lib/troo/models/member.rb +21 -5
  71. data/lib/troo/models/refresh.rb +3 -4
  72. data/lib/troo/persistence/local.rb +63 -0
  73. data/lib/troo/presentation/formatter.rb +132 -0
  74. data/lib/troo/presentation/template.rb +0 -4
  75. data/lib/troo/presenters/board.rb +32 -51
  76. data/lib/troo/presenters/card.rb +4 -11
  77. data/lib/troo/presenters/comment.rb +30 -16
  78. data/lib/troo/presenters/list.rb +25 -21
  79. data/lib/troo/presenters/member.rb +1 -8
  80. data/lib/troo/remote/all.rb +16 -0
  81. data/lib/troo/remote/board.rb +64 -0
  82. data/lib/troo/remote/card.rb +81 -0
  83. data/lib/troo/remote/comment.rb +70 -0
  84. data/lib/troo/remote/comment_data.rb +11 -0
  85. data/lib/troo/remote/comment_data_board.rb +13 -0
  86. data/lib/troo/remote/comment_data_card.rb +15 -0
  87. data/lib/troo/remote/list.rb +49 -0
  88. data/lib/troo/remote/member.rb +75 -0
  89. data/lib/troo/remote/persistence/board.rb +57 -0
  90. data/lib/troo/remote/persistence/card.rb +59 -0
  91. data/lib/troo/remote/persistence/comment.rb +58 -0
  92. data/lib/troo/remote/persistence/list.rb +57 -0
  93. data/lib/troo/remote/persistence/move_card.rb +85 -0
  94. data/lib/troo/retrieval/local.rb +100 -0
  95. data/lib/troo/retrieval/remote.rb +91 -0
  96. data/lib/troo/troo.rb +42 -42
  97. data/lib/troo/version.rb +1 -1
  98. data/lib/troo/views/card.erb +8 -10
  99. data/lib/troo/views/comments.erb +4 -0
  100. data/test/cassettes/board_by_id.yml +21 -30
  101. data/test/cassettes/boards_all.yml +22 -90
  102. data/test/cassettes/card_by_id.yml +49 -0
  103. data/test/cassettes/cards_by_board_id.yml +22 -90
  104. data/test/cassettes/cards_by_list_id.yml +22 -87
  105. data/test/cassettes/comments_by_board_id.yml +22 -95
  106. data/test/cassettes/comments_by_card_id.yml +22 -87
  107. data/test/cassettes/create_board.yml +20 -32
  108. data/test/cassettes/create_card.yml +21 -35
  109. data/test/cassettes/create_comment.yml +19 -37
  110. data/test/cassettes/create_list.yml +18 -32
  111. data/test/cassettes/list_by_id.yml +46 -0
  112. data/test/cassettes/lists_by_board_id.yml +19 -91
  113. data/test/cassettes/member_by_id.yml +48 -0
  114. data/test/cassettes/members_by_board_id.yml +21 -82
  115. data/test/cassettes/move_card_board.yml +49 -0
  116. data/test/cassettes/move_card_list.yml +49 -0
  117. data/test/lib/troo/api/client_test.rb +75 -0
  118. data/test/lib/troo/api/endpoints_test.rb +48 -0
  119. data/test/lib/troo/api/headers_test.rb +27 -0
  120. data/test/lib/troo/api/oauth_settings_test.rb +10 -0
  121. data/test/lib/troo/api/request_test.rb +63 -0
  122. data/test/lib/troo/api/response_test.rb +15 -0
  123. data/test/lib/troo/cli/add_test.rb +113 -0
  124. data/test/lib/troo/cli/commands/add_test.rb +66 -0
  125. data/test/lib/troo/cli/commands/default_test.rb +39 -0
  126. data/test/lib/troo/cli/commands/move/card_test.rb +86 -0
  127. data/test/lib/troo/cli/commands/refresh/all_test.rb +37 -0
  128. data/test/lib/troo/cli/commands/refresh_test.rb +59 -0
  129. data/test/lib/troo/cli/commands/show/show_boards_test.rb +35 -0
  130. data/test/lib/troo/cli/commands/show/show_comments_test.rb +63 -0
  131. data/test/lib/troo/cli/commands/show_test.rb +65 -0
  132. data/test/lib/troo/cli/commands/status_test.rb +48 -0
  133. data/test/lib/troo/cli/default_test.rb +39 -0
  134. data/test/lib/troo/cli/main_test.rb +102 -0
  135. data/test/lib/troo/cli/refresh_test.rb +43 -0
  136. data/test/lib/troo/cli/show_test.rb +49 -0
  137. data/test/lib/troo/cli/thor_fixes_test.rb +38 -0
  138. data/test/lib/troo/configuration_test.rb +43 -0
  139. data/test/lib/troo/debug_test.rb +25 -0
  140. data/test/lib/troo/decorators/card_test.rb +105 -229
  141. data/test/lib/troo/decorators/member_test.rb +20 -35
  142. data/test/lib/troo/decorators/resource_test.rb +157 -0
  143. data/test/lib/troo/helpers/decorator_helpers_test.rb +10 -19
  144. data/test/lib/troo/helpers/model_helpers_test.rb +18 -8
  145. data/test/lib/troo/helpers/remote_model_helpers_test.rb +68 -0
  146. data/test/lib/troo/models/behaviours/set_default_test.rb +0 -10
  147. data/test/lib/troo/models/board_test.rb +2 -2
  148. data/test/lib/troo/models/card_test.rb +2 -2
  149. data/test/lib/troo/models/comment_test.rb +6 -2
  150. data/test/lib/troo/models/list_test.rb +2 -2
  151. data/test/lib/troo/models/member_test.rb +6 -2
  152. data/test/lib/troo/persistence/local_test.rb +31 -0
  153. data/test/lib/troo/presentation/formatter_test.rb +31 -0
  154. data/test/lib/troo/presentation/sentence_test.rb +0 -12
  155. data/test/lib/troo/presentation/template_test.rb +1 -14
  156. data/test/lib/troo/presenters/board_test.rb +17 -36
  157. data/test/lib/troo/presenters/card_test.rb +1 -31
  158. data/test/lib/troo/presenters/comment_test.rb +19 -19
  159. data/test/lib/troo/presenters/list_test.rb +18 -18
  160. data/test/lib/troo/presenters/member_test.rb +1 -14
  161. data/test/lib/troo/remote/board_test.rb +66 -0
  162. data/test/lib/troo/remote/card_test.rb +81 -0
  163. data/test/lib/troo/remote/comment_data_board.rb +9 -0
  164. data/test/lib/troo/remote/comment_data_card_test.rb +9 -0
  165. data/test/lib/troo/remote/comment_data_test.rb +9 -0
  166. data/test/lib/troo/remote/comment_test.rb +100 -0
  167. data/test/lib/troo/remote/list_test.rb +67 -0
  168. data/test/lib/troo/remote/member_test.rb +70 -0
  169. data/test/lib/troo/remote/persistence/board_test.rb +39 -0
  170. data/test/lib/troo/remote/persistence/card_test.rb +50 -0
  171. data/test/lib/troo/remote/persistence/comment_test.rb +45 -0
  172. data/test/lib/troo/remote/persistence/list_test.rb +45 -0
  173. data/test/lib/troo/remote/persistence/move_card_test.rb +78 -0
  174. data/test/lib/troo/retrieval/local_test.rb +192 -0
  175. data/test/lib/troo/retrieval/remote_test.rb +49 -0
  176. data/test/support/fabrication.rb +17 -17
  177. data/test/support/fake_trello/fake_response.rb +38 -0
  178. data/test/support/fake_trello/server.rb +124 -0
  179. data/test/support/remotes/all_boards.json +41 -0
  180. data/test/support/remotes/board.json +140 -0
  181. data/test/support/remotes/board_by_id.json +75 -0
  182. data/test/support/remotes/card.json +40 -0
  183. data/test/support/remotes/card_by_card_id.json +302 -0
  184. data/test/support/remotes/comment.json +27 -0
  185. data/test/support/remotes/create_board.json +38 -0
  186. data/test/support/remotes/list.json +7 -0
  187. data/test/support/remotes/member.json +50 -0
  188. data/test/system_test.sh +21 -1
  189. data/test/test_helper.rb +2 -1
  190. data/troo.gemspec +28 -20
  191. metadata +376 -269
  192. data/configuration.yml.example +0 -7
  193. data/features/cleanup.feature +0 -13
  194. data/lib/troo/actions/create_board.rb +0 -46
  195. data/lib/troo/actions/create_card.rb +0 -44
  196. data/lib/troo/actions/create_comment.rb +0 -46
  197. data/lib/troo/actions/create_list.rb +0 -42
  198. data/lib/troo/actions/move_card.rb +0 -37
  199. data/lib/troo/adaptors/board.rb +0 -32
  200. data/lib/troo/adaptors/card.rb +0 -67
  201. data/lib/troo/adaptors/comment.rb +0 -42
  202. data/lib/troo/adaptors/list.rb +0 -37
  203. data/lib/troo/adaptors/member.rb +0 -52
  204. data/lib/troo/adaptors/resource.rb +0 -17
  205. data/lib/troo/commands/add/board.rb +0 -26
  206. data/lib/troo/commands/add/card.rb +0 -33
  207. data/lib/troo/commands/add/comment.rb +0 -33
  208. data/lib/troo/commands/add/list.rb +0 -33
  209. data/lib/troo/commands/add/resource.rb +0 -21
  210. data/lib/troo/commands/commands.rb +0 -28
  211. data/lib/troo/commands/default/board.rb +0 -25
  212. data/lib/troo/commands/default/card.rb +0 -25
  213. data/lib/troo/commands/default/list.rb +0 -25
  214. data/lib/troo/commands/default/resource.rb +0 -26
  215. data/lib/troo/commands/refresh/all.rb +0 -41
  216. data/lib/troo/commands/refresh/board.rb +0 -28
  217. data/lib/troo/commands/refresh/card.rb +0 -29
  218. data/lib/troo/commands/refresh/list.rb +0 -29
  219. data/lib/troo/commands/refresh/resource.rb +0 -42
  220. data/lib/troo/commands/show/board.rb +0 -13
  221. data/lib/troo/commands/show/boards.rb +0 -35
  222. data/lib/troo/commands/show/card.rb +0 -13
  223. data/lib/troo/commands/show/comments.rb +0 -21
  224. data/lib/troo/commands/show/list.rb +0 -13
  225. data/lib/troo/commands/show/resource.rb +0 -41
  226. data/lib/troo/commands/status/board.rb +0 -30
  227. data/lib/troo/commands/status/card.rb +0 -30
  228. data/lib/troo/commands/status/list.rb +0 -30
  229. data/lib/troo/commands/status/resource.rb +0 -34
  230. data/lib/troo/decorators/board.rb +0 -66
  231. data/lib/troo/decorators/card.rb +0 -105
  232. data/lib/troo/decorators/comment.rb +0 -36
  233. data/lib/troo/decorators/list.rb +0 -60
  234. data/lib/troo/external/board.rb +0 -31
  235. data/lib/troo/external/card.rb +0 -31
  236. data/lib/troo/external/comment.rb +0 -27
  237. data/lib/troo/external/list.rb +0 -27
  238. data/lib/troo/external/member.rb +0 -27
  239. data/lib/troo/external/resource.rb +0 -42
  240. data/lib/troo/helpers/command_helpers.rb +0 -37
  241. data/lib/troo/models/persistence/board.rb +0 -19
  242. data/lib/troo/models/persistence/card.rb +0 -19
  243. data/lib/troo/models/persistence/comment.rb +0 -19
  244. data/lib/troo/models/persistence/list.rb +0 -19
  245. data/lib/troo/models/persistence/member.rb +0 -19
  246. data/lib/troo/models/persistence/resource.rb +0 -50
  247. data/lib/troo/models/remote/comment.rb +0 -21
  248. data/lib/troo/models/remote/resource.rb +0 -25
  249. data/lib/troo/models/retrieval/board.rb +0 -29
  250. data/lib/troo/models/retrieval/card.rb +0 -33
  251. data/lib/troo/models/retrieval/comment.rb +0 -25
  252. data/lib/troo/models/retrieval/list.rb +0 -29
  253. data/lib/troo/models/retrieval/member.rb +0 -25
  254. data/lib/troo/models/retrieval/resource.rb +0 -36
  255. data/lib/troo/views/comment.erb +0 -3
  256. data/test/cassettes/card_by_card_id.yml +0 -58
  257. data/test/cassettes/comments_by_list_id.yml +0 -109
  258. data/test/cassettes/list_by_list_id.yml +0 -56
  259. data/test/cassettes/member_by_member_id.yml +0 -60
  260. data/test/cassettes/move_card.yml +0 -61
  261. data/test/lib/troo/actions/create_board_test.rb +0 -66
  262. data/test/lib/troo/actions/create_card_test.rb +0 -71
  263. data/test/lib/troo/actions/create_comment_test.rb +0 -71
  264. data/test/lib/troo/actions/create_list_test.rb +0 -65
  265. data/test/lib/troo/actions/move_card_test.rb +0 -54
  266. data/test/lib/troo/adaptors/board_test.rb +0 -38
  267. data/test/lib/troo/adaptors/card_test.rb +0 -49
  268. data/test/lib/troo/adaptors/comment_test.rb +0 -41
  269. data/test/lib/troo/adaptors/list_test.rb +0 -38
  270. data/test/lib/troo/adaptors/member_test.rb +0 -44
  271. data/test/lib/troo/commands/add/board_test.rb +0 -43
  272. data/test/lib/troo/commands/add/card_test.rb +0 -44
  273. data/test/lib/troo/commands/add/comment_test.rb +0 -44
  274. data/test/lib/troo/commands/add/list_test.rb +0 -44
  275. data/test/lib/troo/commands/add/resource_test.rb +0 -25
  276. data/test/lib/troo/commands/default/board_test.rb +0 -37
  277. data/test/lib/troo/commands/default/card_test.rb +0 -37
  278. data/test/lib/troo/commands/default/list_test.rb +0 -37
  279. data/test/lib/troo/commands/default/resource_test.rb +0 -20
  280. data/test/lib/troo/commands/refresh/all_test.rb +0 -39
  281. data/test/lib/troo/commands/refresh/board_test.rb +0 -62
  282. data/test/lib/troo/commands/refresh/card_test.rb +0 -62
  283. data/test/lib/troo/commands/refresh/list_test.rb +0 -62
  284. data/test/lib/troo/commands/refresh/resource_test.rb +0 -20
  285. data/test/lib/troo/commands/show/board_test.rb +0 -65
  286. data/test/lib/troo/commands/show/boards_test.rb +0 -36
  287. data/test/lib/troo/commands/show/card_test.rb +0 -64
  288. data/test/lib/troo/commands/show/comments_test.rb +0 -64
  289. data/test/lib/troo/commands/show/list_test.rb +0 -64
  290. data/test/lib/troo/commands/show/resource_test.rb +0 -25
  291. data/test/lib/troo/commands/status/board_test.rb +0 -43
  292. data/test/lib/troo/commands/status/card_test.rb +0 -43
  293. data/test/lib/troo/commands/status/list_test.rb +0 -43
  294. data/test/lib/troo/commands/status/resource_test.rb +0 -19
  295. data/test/lib/troo/decorators/board_test.rb +0 -129
  296. data/test/lib/troo/decorators/comment_test.rb +0 -74
  297. data/test/lib/troo/decorators/list_test.rb +0 -102
  298. data/test/lib/troo/external/board_test.rb +0 -102
  299. data/test/lib/troo/external/card_test.rb +0 -131
  300. data/test/lib/troo/external/comment_test.rb +0 -109
  301. data/test/lib/troo/external/list_test.rb +0 -94
  302. data/test/lib/troo/external/member_test.rb +0 -94
  303. data/test/lib/troo/external/resource_test.rb +0 -25
  304. data/test/lib/troo/helpers/command_helpers_test.rb +0 -82
  305. data/test/lib/troo/models/persistence/board_test.rb +0 -62
  306. data/test/lib/troo/models/persistence/card_test.rb +0 -61
  307. data/test/lib/troo/models/persistence/comment_test.rb +0 -69
  308. data/test/lib/troo/models/persistence/list_test.rb +0 -60
  309. data/test/lib/troo/models/persistence/member_test.rb +0 -60
  310. data/test/lib/troo/models/remote/comment_test.rb +0 -56
  311. data/test/lib/troo/models/remote/resource_test.rb +0 -26
  312. data/test/lib/troo/models/retrieval/board_test.rb +0 -93
  313. data/test/lib/troo/models/retrieval/card_test.rb +0 -101
  314. data/test/lib/troo/models/retrieval/comment_test.rb +0 -46
  315. data/test/lib/troo/models/retrieval/list_test.rb +0 -93
  316. data/test/lib/troo/models/retrieval/member_test.rb +0 -58
@@ -3,88 +3,35 @@ module Troo
3
3
  module ClassMethods
4
4
  end
5
5
 
6
- def self.included(base)
7
- base.extend(ClassMethods)
8
- end
9
-
10
- def title
11
- highlight([default, brackets(id), name].join(' '), options)
12
- end
13
-
14
- private
15
-
16
- def title_for(resource)
17
- indent { print resource.title + "\n" }
18
- end
6
+ module InstanceMethods
7
+ private
19
8
 
20
- def word_wrap(text, line_width = 70)
21
- return text if line_width <= 0
22
- text.gsub(/\n/, ' ')
23
- .gsub(/(.{1,#{line_width}})(\s+|$)/, "\\1\n")
24
- .strip
25
- end
26
-
27
- def highlight(value, options = {})
28
- if options.fetch(:ansicolor, true)
29
- [options.fetch(:colour, nil),
30
- options.fetch(:underline, nil),
31
- value,
32
- Esc.reset].join
33
- else
34
- value
9
+ def brackets(value)
10
+ [
11
+ '(', value, ')'
12
+ ].join
35
13
  end
36
- end
37
14
 
38
- def brackets(value)
39
- "(#{value})"
40
- end
41
-
42
- def label(string)
43
- highlight(string, ansicolor: true,
44
- colour: Esc.yellow,
45
- underline: Esc.underline)
46
- end
47
-
48
- def member(string)
49
- highlight(string, ansicolor: true,
50
- colour: Esc.magenta,
51
- underline: Esc.underline)
52
- end
53
-
54
- def metadata(label, string)
55
- [highlight(label.rjust(9), ansicolor: true,
56
- colour: Esc.cyan,
57
- underline: nil),
58
- string].join(' ')
59
- end
60
-
61
- def spacing(options = {}, &block)
62
- puts if options.fetch(:head, true)
63
- yield
64
- puts if options.fetch(:foot, true)
65
- end
66
-
67
- def indent(&block)
68
- @indent ||= 0
69
- @indent += 4
70
- print indentation
71
- yield
72
- ensure
73
- @indent -= 4
74
- end
15
+ def label(value, options = {})
16
+ Troo::Formatter
17
+ .highlight(value, label_defaults.merge!(options))
18
+ end
75
19
 
76
- def indentation
77
- ' ' * @indent
78
- end
20
+ def error(message)
21
+ Troo::Formatter.error(message) + "\n"
22
+ end
79
23
 
80
- def print_error(message)
81
- indent do
82
- print [(' ' * 2), error(message)].join(' ') + "\n"
24
+ def label_defaults
25
+ {
26
+ colour: Esc.yellow,
27
+ underline: true
28
+ }
83
29
  end
84
30
  end
85
31
 
86
- def error(message)
87
- [Esc.red, message, Esc.reset].join
32
+ def self.included(receiver)
33
+ receiver.extend(ClassMethods)
34
+ receiver.send(:include, InstanceMethods)
88
35
  end
89
36
  end
90
37
  end
@@ -16,17 +16,32 @@ module Troo
16
16
  first(default: true)
17
17
  end
18
18
 
19
+ def default?
20
+ !!(default)
21
+ end
22
+
19
23
  def count
20
24
  all.count
21
25
  end
26
+
27
+ def by_external_id(id)
28
+ first(external_id: id)
29
+ end
30
+
31
+ def retrieve(id = nil, options = {})
32
+ Troo::Retrieval::Local.retrieve(self, id, options)
33
+ end
22
34
  end
23
35
 
24
- def self.included(base)
25
- base.extend(ClassMethods)
36
+ module InstanceMethods
37
+ def set_default!
38
+ Behaviours::SetDefault.for(self)
39
+ end
26
40
  end
27
41
 
28
- def external_attributes
29
- attributes.delete_if { |k, _| k == :id || k == :default }
42
+ def self.included(receiver)
43
+ receiver.extend(ClassMethods)
44
+ receiver.send(:include, InstanceMethods)
30
45
  end
31
46
  end
32
47
  end
@@ -0,0 +1,54 @@
1
+ module Troo
2
+ module RemoteModelHelpers
3
+ module ClassMethods
4
+ def with_collection(resources = [])
5
+ resources.map { |resource| new(resource) }
6
+ end
7
+
8
+ def all
9
+ {}
10
+ end
11
+
12
+ def by_board_id
13
+ {}
14
+ end
15
+
16
+ def by_list_id
17
+ {}
18
+ end
19
+
20
+ def by_card_id
21
+ {}
22
+ end
23
+
24
+ def by_member_id
25
+ {}
26
+ end
27
+ end
28
+
29
+ module InstanceMethods
30
+ def preprocess
31
+ associations.map do |association|
32
+ associated(association).map { |record| record.preprocess }
33
+ end
34
+
35
+ Persistence::Local.persist(self)
36
+ end
37
+
38
+ def local
39
+ @local ||= local_model.by_external_id(id)
40
+ end
41
+
42
+ private
43
+
44
+ def associated(association)
45
+ Array(send(association))
46
+ end
47
+ end
48
+
49
+ def self.included(receiver)
50
+ receiver.extend(ClassMethods)
51
+ receiver.send(:include, InstanceMethods)
52
+ end
53
+ end
54
+ end
@@ -7,35 +7,43 @@ module Troo
7
7
  attribute :description
8
8
  attribute :default, Type::Boolean
9
9
  attribute :closed, Type::Boolean
10
- attribute :external_board_id
10
+ attribute :external_id
11
+ attribute :short_id
11
12
 
12
13
  index :default
13
- index :external_board_id
14
+ index :external_id
15
+ index :short_id
14
16
 
15
- alias_method :default?, :default
17
+ alias_method :default?, :default
16
18
 
17
- def self.remote(id, options = {})
18
- External::Board.fetch(id, options).first
19
+ class << self
20
+ def remote
21
+ Remote::Board
22
+ end
23
+
24
+ def type
25
+ :board
26
+ end
19
27
  end
20
28
 
21
29
  def lists
22
- Troo::List.find(external_board_id: external_board_id)
30
+ Troo::List.find(external_board_id: external_id)
23
31
  end
24
32
 
25
33
  def cards
26
- Troo::Card.find(external_board_id: external_board_id)
34
+ Troo::Card.find(external_board_id: external_id)
27
35
  end
28
36
 
29
37
  def decorator(options = {})
30
- Decorators::Board.new(self, options)
38
+ Decorators::Resource.new(self, options)
31
39
  end
32
40
 
33
41
  def presenter(options = {})
34
- Presenters::Board.new(self, options)
42
+ Presenters::Board.new(decorator, options)
35
43
  end
36
44
 
37
- def set_default!
38
- Behaviours::SetDefault.for(self)
45
+ def type
46
+ self.class.type
39
47
  end
40
48
  end
41
49
  end
@@ -14,18 +14,25 @@ module Troo
14
14
  attribute :closed, Type::Boolean
15
15
  attribute :external_board_id
16
16
  attribute :external_list_id
17
- attribute :external_card_id
17
+ attribute :external_id
18
18
 
19
19
  index :short_id
20
20
  index :default
21
21
  index :external_board_id
22
22
  index :external_list_id
23
- index :external_card_id
23
+ index :external_id
24
24
 
25
- alias_method :default?, :default
25
+ alias_method :default?, :default
26
+ alias_method :description, :desc
26
27
 
27
- def self.remote(id, options = { mode: :card })
28
- External::Card.fetch(id, options).first
28
+ class << self
29
+ def remote
30
+ Remote::Card
31
+ end
32
+
33
+ def type
34
+ :card
35
+ end
29
36
  end
30
37
 
31
38
  def external_member_ids
@@ -39,15 +46,15 @@ module Troo
39
46
  end
40
47
 
41
48
  def board
42
- @board ||= Retrieval::Board.retrieve(external_board_id)
49
+ @board ||= Troo::Board.retrieve(external_board_id)
43
50
  end
44
51
 
45
52
  def list
46
- @list ||= Retrieval::List.retrieve(external_list_id)
53
+ @list ||= Troo::List.retrieve(external_list_id)
47
54
  end
48
55
 
49
56
  def comments
50
- Troo::Comment.find(external_card_id: external_card_id)
57
+ Troo::Comment.find(external_card_id: external_id)
51
58
  end
52
59
 
53
60
  def recent_comments
@@ -57,28 +64,24 @@ module Troo
57
64
  def members
58
65
  return [] if external_member_ids.empty?
59
66
  @members ||= external_member_ids.map do |member_id|
60
- Retrieval::Member.retrieve(member_id)
67
+ Troo::Member.retrieve(member_id)
61
68
  end.compact
62
69
  end
63
70
 
64
71
  def decorator(options = {})
65
- Decorators::Card.new(self, options)
72
+ Decorators::Resource.new(self, options)
66
73
  end
67
74
 
68
75
  def presenter(options = {})
69
- Presenters::Card.new(self, options)
76
+ Presenters::Card.new(decorator, options)
70
77
  end
71
78
 
72
79
  def comment_presenter(options = {})
73
80
  Presenters::Comment.new(self, options)
74
81
  end
75
82
 
76
- def member_presenter(options = {})
77
- Presenters::Member.new(self, options)
78
- end
79
-
80
- def set_default!
81
- Behaviours::SetDefault.for(self)
83
+ def type
84
+ self.class.type
82
85
  end
83
86
  end
84
87
  end
@@ -7,33 +7,53 @@ module Troo
7
7
  attribute :date
8
8
  attribute :external_board_id
9
9
  attribute :external_card_id
10
- attribute :external_comment_id
10
+ attribute :external_id
11
11
  attribute :external_member_id
12
+ attribute :short_id
12
13
 
13
14
  index :date
14
15
  index :external_board_id
15
16
  index :external_card_id
16
- index :external_comment_id
17
+ index :external_id
17
18
  index :external_member_id
19
+ index :short_id
18
20
 
19
- def self.remote
20
- nil
21
+ class << self
22
+ def remote
23
+ Remote::Comment
24
+ end
25
+
26
+ def type
27
+ :comments
28
+ end
21
29
  end
22
30
 
23
31
  def board
24
- Retrieval::Board.retrieve(external_board_id)
32
+ Troo::Board.retrieve(external_board_id)
25
33
  end
26
34
 
27
35
  def card
28
- Retrieval::Card.retrieve(external_card_id)
36
+ Troo::Card.retrieve(external_card_id)
29
37
  end
30
38
 
31
39
  def member
32
- Retrieval::Member.retrieve(external_member_id)
40
+ Troo::Member.retrieve(external_member_id)
33
41
  end
34
42
 
35
43
  def decorator(options = {})
36
- Decorators::Comment.new(self, options)
44
+ Decorators::Resource.new(self, options)
45
+ end
46
+
47
+ # def presenter(options = {})
48
+ # Presenters::Comment.new(decorator, options)
49
+ # end
50
+
51
+ def default?
52
+ false
53
+ end
54
+
55
+ def type
56
+ self.class.type
37
57
  end
38
58
  end
39
59
  end
@@ -4,40 +4,48 @@ module Troo
4
4
  include ModelHelpers
5
5
 
6
6
  attribute :name
7
- attribute :position, Type::Integer
8
- attribute :default, Type::Boolean
9
- attribute :closed, Type::Boolean
7
+ attribute :position, Type::Integer
8
+ attribute :default, Type::Boolean
9
+ attribute :closed, Type::Boolean
10
10
  attribute :external_board_id
11
- attribute :external_list_id
11
+ attribute :external_id
12
+ attribute :short_id
12
13
 
13
14
  index :default
14
15
  index :external_board_id
15
- index :external_list_id
16
+ index :external_id
17
+ index :short_id
16
18
 
17
- alias_method :default?, :default
19
+ alias_method :default?, :default
18
20
 
19
- def self.remote(id, options = { mode: :list })
20
- External::List.fetch(id, options).first
21
+ class << self
22
+ def remote
23
+ Remote::List
24
+ end
25
+
26
+ def type
27
+ :list
28
+ end
21
29
  end
22
30
 
23
31
  def board
24
- Retrieval::Board.retrieve(external_board_id)
32
+ Troo::Board.retrieve(external_board_id)
25
33
  end
26
34
 
27
35
  def cards
28
- Troo::Card.find(external_list_id: external_list_id)
36
+ Troo::Card.find(external_list_id: external_id)
29
37
  end
30
38
 
31
39
  def decorator(options = {})
32
- Decorators::List.new(self, options)
40
+ Decorators::Resource.new(self, options)
33
41
  end
34
42
 
35
43
  def presenter(options = {})
36
- Presenters::List.new(self, options)
44
+ Presenters::List.new(decorator, options)
37
45
  end
38
46
 
39
- def set_default!
40
- Behaviours::SetDefault.for(self)
47
+ def type
48
+ self.class.type
41
49
  end
42
50
  end
43
51
  end