troo 0.0.10 → 0.0.11

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 (95) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/Gemfile.lock +7 -7
  4. data/README.md +39 -40
  5. data/Rakefile +17 -11
  6. data/features/step_definitions/troo_steps.rb +1 -1
  7. data/lib/troo.rb +24 -35
  8. data/lib/troo/api/client.rb +3 -0
  9. data/lib/troo/api/endpoints.rb +7 -1
  10. data/lib/troo/api/headers.rb +7 -0
  11. data/lib/troo/api/request.rb +9 -0
  12. data/lib/troo/api/response.rb +3 -0
  13. data/lib/troo/cli/add.rb +11 -0
  14. data/lib/troo/cli/commands/add.rb +9 -0
  15. data/lib/troo/cli/commands/default.rb +7 -0
  16. data/lib/troo/cli/commands/move/card.rb +9 -0
  17. data/lib/troo/cli/commands/refresh.rb +7 -0
  18. data/lib/troo/cli/commands/refresh/all.rb +2 -0
  19. data/lib/troo/cli/commands/show.rb +7 -0
  20. data/lib/troo/cli/commands/show/show_boards.rb +2 -0
  21. data/lib/troo/cli/commands/show/show_comments.rb +5 -0
  22. data/lib/troo/cli/commands/status.rb +5 -0
  23. data/lib/troo/cli/default.rb +6 -0
  24. data/lib/troo/cli/main.rb +8 -0
  25. data/lib/troo/cli/refresh.rb +7 -0
  26. data/lib/troo/cli/show.rb +9 -0
  27. data/lib/troo/cli/thor_fixes.rb +4 -0
  28. data/lib/troo/configuration.rb +5 -30
  29. data/lib/troo/database.rb +7 -0
  30. data/lib/troo/debug.rb +3 -0
  31. data/lib/troo/decorators/member.rb +1 -0
  32. data/lib/troo/decorators/resource.rb +19 -0
  33. data/lib/troo/helpers/model_helpers.rb +13 -0
  34. data/lib/troo/helpers/remote_model_helpers.rb +9 -0
  35. data/lib/troo/launcher.rb +44 -0
  36. data/lib/troo/models/behaviours/set_default.rb +6 -0
  37. data/lib/troo/models/board.rb +9 -0
  38. data/lib/troo/models/card.rb +15 -0
  39. data/lib/troo/models/comment.rb +9 -0
  40. data/lib/troo/models/list.rb +9 -0
  41. data/lib/troo/models/member.rb +8 -0
  42. data/lib/troo/models/refresh.rb +2 -0
  43. data/lib/troo/options.rb +9 -0
  44. data/lib/troo/persistence/local.rb +8 -0
  45. data/lib/troo/preference.rb +29 -0
  46. data/lib/troo/presentation/formatter.rb +12 -0
  47. data/lib/troo/presentation/sentence.rb +7 -0
  48. data/lib/troo/presentation/template.rb +7 -0
  49. data/lib/troo/presenters/board.rb +8 -0
  50. data/lib/troo/presenters/card.rb +4 -0
  51. data/lib/troo/presenters/comment.rb +4 -0
  52. data/lib/troo/presenters/list.rb +5 -0
  53. data/lib/troo/presenters/member.rb +4 -0
  54. data/lib/troo/presenters/resource.rb +7 -0
  55. data/lib/troo/remote/board.rb +6 -0
  56. data/lib/troo/remote/card.rb +7 -0
  57. data/lib/troo/remote/comment.rb +10 -0
  58. data/lib/troo/remote/list.rb +6 -0
  59. data/lib/troo/remote/member.rb +6 -0
  60. data/lib/troo/remote/persistence/board.rb +7 -0
  61. data/lib/troo/remote/persistence/card.rb +9 -0
  62. data/lib/troo/remote/persistence/comment.rb +7 -0
  63. data/lib/troo/remote/persistence/list.rb +7 -0
  64. data/lib/troo/remote/persistence/move_card.rb +9 -0
  65. data/lib/troo/retrieval/local.rb +16 -0
  66. data/lib/troo/retrieval/remote.rb +9 -0
  67. data/lib/troo/troo.rb +4 -0
  68. data/lib/troo/version.rb +1 -1
  69. data/test/lib/troo/api/client_test.rb +4 -4
  70. data/test/lib/troo/api/response_test.rb +27 -0
  71. data/test/lib/troo/cli/commands/refresh/all_test.rb +2 -2
  72. data/test/lib/troo/cli/commands/refresh_test.rb +2 -2
  73. data/test/lib/troo/configuration_test.rb +1 -1
  74. data/test/lib/troo/database_test.rb +7 -0
  75. data/test/lib/troo/decorators/resource_test.rb +5 -3
  76. data/test/lib/troo/launcher_test.rb +7 -0
  77. data/test/lib/troo/models/card_test.rb +5 -5
  78. data/test/lib/troo/options_test.rb +7 -0
  79. data/test/lib/troo/preference_test.rb +21 -0
  80. data/test/lib/troo/presentation/formatter_test.rb +8 -8
  81. data/test/lib/troo/presenters/member_test.rb +33 -3
  82. data/test/lib/troo/presenters/resource_test.rb +2 -2
  83. data/test/lib/troo/remote/board_test.rb +2 -2
  84. data/test/lib/troo/remote/card_test.rb +2 -2
  85. data/test/lib/troo/remote/comment_test.rb +2 -2
  86. data/test/lib/troo/remote/list_test.rb +2 -2
  87. data/test/lib/troo/remote/member_test.rb +2 -2
  88. data/test/lib/troo/remote/persistence/card_test.rb +2 -2
  89. data/test/lib/troo/remote/persistence/comment_test.rb +2 -2
  90. data/test/lib/troo/remote/persistence/list_test.rb +2 -2
  91. data/test/lib/troo_test.rb +5 -0
  92. data/test/support/remotes/board.json +140 -0
  93. data/test/test_helper.rb +1 -1
  94. data/troo.gemspec +2 -1
  95. metadata +34 -4
@@ -0,0 +1,29 @@
1
+ module Troo
2
+ class Preference
3
+ include Virtus.value_object
4
+
5
+ values do
6
+ attribute :label, String
7
+ attribute :value, String
8
+ end
9
+
10
+ class << self
11
+ # @param [Hash]
12
+ # @return []
13
+ def view(parameters)
14
+ new(parameters).view
15
+ end
16
+ end
17
+
18
+ # @return [String]
19
+ def view
20
+ [formatted_label, value].join(' ')
21
+ end
22
+
23
+ private
24
+
25
+ def formatted_label
26
+ (label + ':').rjust(25, ' ')
27
+ end
28
+ end
29
+ end
@@ -26,6 +26,7 @@ module Troo
26
26
  attribute :align, Troo::Align, default: Troo::Align.new
27
27
  end
28
28
 
29
+ # @return [String]
29
30
  def underline
30
31
  @underline ? Esc.underline : nil
31
32
  end
@@ -38,21 +39,30 @@ module Troo
38
39
  attribute :options, Troo::Format
39
40
 
40
41
  class << self
42
+ # @param []
43
+ # @param [Hash]
44
+ # @return []
41
45
  def highlight(value, options = {})
42
46
  new(value: value, options: options).highlight
43
47
  end
44
48
 
49
+ # @param []
50
+ # @return []
45
51
  def error(value)
46
52
  new(value: value,
47
53
  options: { colour: Esc.red }).error
48
54
  end
49
55
 
56
+ # @param []
57
+ # @param [Integer]
58
+ # @return []
50
59
  def wordwrap(value, width = 70)
51
60
  new(value: value,
52
61
  options: { align: { width: width } }).wordwrap
53
62
  end
54
63
  end
55
64
 
65
+ # @return [String]
56
66
  def highlight
57
67
  [
58
68
  options.colour,
@@ -62,6 +72,7 @@ module Troo
62
72
  ].join
63
73
  end
64
74
 
75
+ # @return [String]
65
76
  def error
66
77
  [
67
78
  options.colour,
@@ -70,6 +81,7 @@ module Troo
70
81
  ].join
71
82
  end
72
83
 
84
+ # @return []
73
85
  def wordwrap
74
86
  Wordwrap.this(formatted_value, width: width)
75
87
  end
@@ -1,15 +1,22 @@
1
1
  module Troo
2
2
  class Sentence
3
3
  class << self
4
+ # @param [Array]
5
+ # @param [String]
6
+ # @return [String]
4
7
  def construct(elements, label = 'elements')
5
8
  new(elements, label).construct
6
9
  end
7
10
  end
8
11
 
12
+ # @param [Array]
13
+ # @param [String]
14
+ # @return [Troo::Sentence]
9
15
  def initialize(elements, label)
10
16
  @elements, @label = elements, label
11
17
  end
12
18
 
19
+ # @return [String]
13
20
  def construct
14
21
  if one?
15
22
  first
@@ -3,15 +3,22 @@ module Troo
3
3
  include DecoratorHelpers
4
4
 
5
5
  class << self
6
+ # @param []
7
+ # @param []
8
+ # @return []
6
9
  def parse(object, path)
7
10
  new(object, path).parse
8
11
  end
9
12
  end
10
13
 
14
+ # @param []
15
+ # @param []
16
+ # @return []
11
17
  def initialize(object, path)
12
18
  @object, @path = object, path
13
19
  end
14
20
 
21
+ # @return []
15
22
  def parse
16
23
  ERB.new(load, nil, '-').result(binding)
17
24
  end
@@ -4,16 +4,23 @@ module Troo
4
4
  include DecoratorHelpers
5
5
 
6
6
  class << self
7
+ # @param [Array]
8
+ # @param [Hash]
9
+ # @return [NilClass]
7
10
  def all(boards, options = {})
8
11
  boards.map { |board| new(board, options).show }
9
12
  nil
10
13
  end
11
14
  end
12
15
 
16
+ # @param [Troo::Board]
17
+ # @param [Hash]
18
+ # @return [Troo::Presenters::Board]
13
19
  def initialize(board, options = {})
14
20
  @board, @options = board, options
15
21
  end
16
22
 
23
+ # @return []
17
24
  def show
18
25
  output.render Presenters::Resource.list_view(board)
19
26
 
@@ -28,6 +35,7 @@ module Troo
28
35
  end
29
36
  end
30
37
 
38
+ # @return []
31
39
  def render_lists
32
40
  output.spacer
33
41
 
@@ -3,10 +3,14 @@ module Troo
3
3
  class Card
4
4
  include DecoratorHelpers
5
5
 
6
+ # @param [Troo::Card]
7
+ # @param [Hash]
8
+ # @return [Troo::Presenter::Card]
6
9
  def initialize(card, options = {})
7
10
  @card, @options = card, options
8
11
  end
9
12
 
13
+ # @return []
10
14
  def show
11
15
  output.render Template.parse(card, '/../views/card.erb')
12
16
  end
@@ -3,10 +3,14 @@ module Troo
3
3
  class Comment
4
4
  include DecoratorHelpers
5
5
 
6
+ # @param [Troo::Card]
7
+ # @param [Hash]
8
+ # @return [Troo::Presenters::Comment]
6
9
  def initialize(card, options = {})
7
10
  @card, @options = card, options
8
11
  end
9
12
 
13
+ # @return []
10
14
  def show
11
15
  title
12
16
 
@@ -3,10 +3,13 @@ module Troo
3
3
  class List
4
4
  include DecoratorHelpers
5
5
 
6
+ # @param [Troo::List]
7
+ # @return [Troo::Presenters::List]
6
8
  def initialize(list, options = {})
7
9
  @list, @options = list, options
8
10
  end
9
11
 
12
+ # @return [String]
10
13
  def show
11
14
  output.render Presenters::Resource.list_view(list.board)
12
15
 
@@ -17,6 +20,7 @@ module Troo
17
20
  end
18
21
  end
19
22
 
23
+ # @return [String]
20
24
  def render_list
21
25
  output.render Presenters::Resource.list_view(list)
22
26
 
@@ -31,6 +35,7 @@ module Troo
31
35
  end
32
36
  end
33
37
 
38
+ # @return [String]
34
39
  def render_cards
35
40
  output.spacer do
36
41
  list.cards.map do |card|
@@ -3,10 +3,14 @@ module Troo
3
3
  class Member
4
4
  include DecoratorHelpers
5
5
 
6
+ # @param [Troo::Card]
7
+ # @param [Hash]
8
+ # @return [Troo::Presenters::Member]
6
9
  def initialize(card, options = {})
7
10
  @card, @options = card, options
8
11
  end
9
12
 
13
+ # @return [String]
10
14
  def show
11
15
  Sentence.construct(members, 'members')
12
16
  end
@@ -4,15 +4,22 @@ module Troo
4
4
  include DecoratorHelpers
5
5
 
6
6
  class << self
7
+ # @param []
8
+ # @param [Hash]
9
+ # @return []
7
10
  def list_view(klass, options = {})
8
11
  new(klass, options).list_view
9
12
  end
10
13
  end
11
14
 
15
+ # @param []
16
+ # @param [Hash]
17
+ # @return []
12
18
  def initialize(klass, options = {})
13
19
  @klass, @options = klass, options
14
20
  end
15
21
 
22
+ # @return []
16
23
  def list_view
17
24
  [id, name, default].compact.join(' ') + "\n"
18
25
  end
@@ -20,10 +20,12 @@ module Troo
20
20
  attribute :members, Array[Troo::Remote::Member]
21
21
 
22
22
  class << self
23
+ # @return [Hash]
23
24
  def remote_options
24
25
  { mode: :board }
25
26
  end
26
27
 
28
+ # @return [Hash]
27
29
  def all
28
30
  {
29
31
  endpoint: :boards_all,
@@ -31,6 +33,7 @@ module Troo
31
33
  }
32
34
  end
33
35
 
36
+ # @return [Hash]
34
37
  def by_board_id
35
38
  {
36
39
  endpoint: :board_by_id,
@@ -43,14 +46,17 @@ module Troo
43
46
  end
44
47
  end
45
48
 
49
+ # @return [Hash]
46
50
  def associations
47
51
  [:lists, :cards, :members]
48
52
  end
49
53
 
54
+ # @return []
50
55
  def local_model
51
56
  Troo::Board
52
57
  end
53
58
 
59
+ # @return [Hash]
54
60
  def adapted
55
61
  {
56
62
  external_id: id,
@@ -27,10 +27,12 @@ module Troo
27
27
  attribute :actions, Array[Troo::Remote::Comment]
28
28
 
29
29
  class << self
30
+ # @return [Hash]
30
31
  def remote_options
31
32
  { mode: :card }
32
33
  end
33
34
 
35
+ # @return [Hash]
34
36
  def by_board_id
35
37
  {
36
38
  endpoint: :cards_by_board_id,
@@ -38,6 +40,7 @@ module Troo
38
40
  }
39
41
  end
40
42
 
43
+ # @return [Hash]
41
44
  def by_list_id
42
45
  {
43
46
  endpoint: :cards_by_list_id,
@@ -45,6 +48,7 @@ module Troo
45
48
  }
46
49
  end
47
50
 
51
+ # @return [Hash]
48
52
  def by_card_id
49
53
  {
50
54
  endpoint: :card_by_id,
@@ -53,14 +57,17 @@ module Troo
53
57
  end
54
58
  end
55
59
 
60
+ # @return [Array]
56
61
  def associations
57
62
  [:actions]
58
63
  end
59
64
 
65
+ # @return []
60
66
  def local_model
61
67
  Troo::Card
62
68
  end
63
69
 
70
+ # @return [Hash]
64
71
  def adapted
65
72
  {
66
73
  short_id: idShort,
@@ -12,10 +12,12 @@ module Troo
12
12
  attribute :memberCreator, Troo::Remote::Member
13
13
 
14
14
  class << self
15
+ # @return [Hash]
15
16
  def remote_options
16
17
  { mode: :card }
17
18
  end
18
19
 
20
+ # @return [Hash]
19
21
  def by_board_id
20
22
  {
21
23
  endpoint: :comments_by_board_id,
@@ -23,6 +25,7 @@ module Troo
23
25
  }
24
26
  end
25
27
 
28
+ # @return [Hash]
26
29
  def by_card_id
27
30
  {
28
31
  endpoint: :comments_by_card_id,
@@ -31,30 +34,37 @@ module Troo
31
34
  end
32
35
  end
33
36
 
37
+ # @return []
34
38
  def external_board_id
35
39
  data.board.id
36
40
  end
37
41
 
42
+ # @return []
38
43
  def external_card_id
39
44
  data.card.id
40
45
  end
41
46
 
47
+ # @return []
42
48
  def external_comment_id
43
49
  id
44
50
  end
45
51
 
52
+ # @return []
46
53
  def text
47
54
  data.text
48
55
  end
49
56
 
57
+ # @return [Array]
50
58
  def associations
51
59
  [:memberCreator]
52
60
  end
53
61
 
62
+ # @return []
54
63
  def local_model
55
64
  Troo::Comment
56
65
  end
57
66
 
67
+ # @return [Hash]
58
68
  def adapted
59
69
  {
60
70
  external_id: id,
@@ -11,10 +11,12 @@ module Troo
11
11
  attribute :pos, Integer
12
12
 
13
13
  class << self
14
+ # @return [Hash]
14
15
  def remote_options
15
16
  { mode: :list }
16
17
  end
17
18
 
19
+ # @return [Hash]
18
20
  def by_board_id
19
21
  {
20
22
  endpoint: :lists_by_board_id,
@@ -22,19 +24,23 @@ module Troo
22
24
  }
23
25
  end
24
26
 
27
+ # @return [Hash]
25
28
  def by_list_id
26
29
  { endpoint: :list_by_id }
27
30
  end
28
31
  end
29
32
 
33
+ # @return [Array]
30
34
  def associations
31
35
  []
32
36
  end
33
37
 
38
+ # @return []
34
39
  def local_model
35
40
  Troo::List
36
41
  end
37
42
 
43
+ # @return [Hash]
38
44
  def adapted
39
45
  {
40
46
  external_board_id: idBoard,
@@ -34,10 +34,12 @@ module Troo
34
34
  attribute :premiumFeatures
35
35
 
36
36
  class << self
37
+ # @return [Hash]
37
38
  def remote_options
38
39
  { mode: :member }
39
40
  end
40
41
 
42
+ # @return [Hash]
41
43
  def by_board_id
42
44
  {
43
45
  endpoint: :members_by_board_id,
@@ -45,19 +47,23 @@ module Troo
45
47
  }
46
48
  end
47
49
 
50
+ # @return [Hash]
48
51
  def by_member_id
49
52
  { endpoint: :member_by_id }
50
53
  end
51
54
  end
52
55
 
56
+ # @return [Array]
53
57
  def associations
54
58
  []
55
59
  end
56
60
 
61
+ # @return []
57
62
  def local_model
58
63
  Troo::Member
59
64
  end
60
65
 
66
+ # @return [Hash]
61
67
  def adapted
62
68
  {
63
69
  external_id: id,