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
@@ -2,15 +2,22 @@ module Troo
2
2
  module Commands
3
3
  class Default
4
4
  class << self
5
+ # @param []
6
+ # @param []
7
+ # @return []
5
8
  def dispatch(klass, id)
6
9
  new(klass, id).set_default
7
10
  end
8
11
  end
9
12
 
13
+ # @param []
14
+ # @param []
15
+ # @return []
10
16
  def initialize(klass, id)
11
17
  @klass, @id = klass, id
12
18
  end
13
19
 
20
+ # @return []
14
21
  def set_default
15
22
  return success if resource && resource.set_default!
16
23
  error
@@ -3,15 +3,24 @@ module Troo
3
3
  module Move
4
4
  class Card
5
5
  class << self
6
+ # @param []
7
+ # @param []
8
+ # @param []
9
+ # @return []
6
10
  def dispatch(card_id, list_id, board_id = nil)
7
11
  new(card_id, list_id, board_id).move
8
12
  end
9
13
  end
10
14
 
15
+ # @param []
16
+ # @param []
17
+ # @param []
18
+ # @return []
11
19
  def initialize(card_id, list_id, board_id = nil)
12
20
  @card_id, @list_id, @board_id = card_id, list_id, board_id
13
21
  end
14
22
 
23
+ # @return []
15
24
  def move
16
25
  return 'Card cannot be found.' if card_not_found?
17
26
  return 'List cannot be found.' if list_not_found?
@@ -4,15 +4,22 @@ module Troo
4
4
  attr_reader :id
5
5
 
6
6
  class << self
7
+ # @param []
8
+ # @param []
9
+ # @return []
7
10
  def dispatch(klass, id = nil)
8
11
  new(klass, id).refresh
9
12
  end
10
13
  end
11
14
 
15
+ # @param []
16
+ # @param []
17
+ # @return []
12
18
  def initialize(klass, id = nil)
13
19
  @klass, @id = klass, id
14
20
  end
15
21
 
22
+ # @return []
16
23
  def refresh
17
24
  return not_found if not_found?
18
25
  return many_success if multiple_refreshed?
@@ -1,10 +1,12 @@
1
1
  module Troo
2
2
  module Commands
3
3
  class RefreshAll
4
+ # @return [String]
4
5
  def self.dispatch
5
6
  new.refresh_all
6
7
  end
7
8
 
9
+ # @return [String]
8
10
  def refresh_all
9
11
  return success if refreshed?
10
12
  failure
@@ -4,15 +4,22 @@ module Troo
4
4
  attr_reader :id, :type
5
5
 
6
6
  class << self
7
+ # @param []
8
+ # @param []
9
+ # @return [String]
7
10
  def dispatch(klass, id = nil)
8
11
  new(klass, id).render
9
12
  end
10
13
  end
11
14
 
15
+ # @param []
16
+ # @param []
17
+ # @return [Troo::Commands::Show]
12
18
  def initialize(klass, id = nil)
13
19
  @klass, @id = klass, id
14
20
  end
15
21
 
22
+ # @return [String]
16
23
  def render
17
24
  if resource
18
25
  presenter
@@ -2,6 +2,7 @@ module Troo
2
2
  module Commands
3
3
  class ShowBoards
4
4
  class << self
5
+ # @return []
5
6
  def dispatch
6
7
  new.render
7
8
  end
@@ -9,6 +10,7 @@ module Troo
9
10
 
10
11
  def initialize; end
11
12
 
13
+ # @return []
12
14
  def render
13
15
  return presenter if resources.any?
14
16
  error
@@ -4,15 +4,20 @@ module Troo
4
4
  attr_reader :id
5
5
 
6
6
  class << self
7
+ # @param []
8
+ # @return []
7
9
  def dispatch(id = nil)
8
10
  new(id).render
9
11
  end
10
12
  end
11
13
 
14
+ # @param []
15
+ # @return []
12
16
  def initialize(id = nil)
13
17
  @id = id
14
18
  end
15
19
 
20
+ # @return []
16
21
  def render
17
22
  if resource
18
23
  presenter
@@ -2,15 +2,20 @@ module Troo
2
2
  module Commands
3
3
  class Status
4
4
  class << self
5
+ # @param []
6
+ # @return []
5
7
  def dispatch(klass)
6
8
  new(klass).report_status
7
9
  end
8
10
  end
9
11
 
12
+ # @param []
13
+ # @return []
10
14
  def initialize(klass)
11
15
  @klass = klass
12
16
  end
13
17
 
18
+ # @return []
14
19
  def report_status
15
20
  return success if resource
16
21
  error
@@ -3,18 +3,24 @@ module Troo
3
3
  class Default < ThorFixes
4
4
  package_name 'default'
5
5
 
6
+ # @param [String]
7
+ # @return [String]
6
8
  desc 'board <id>',
7
9
  'Set the board <id> to default.'
8
10
  def board(id)
9
11
  say Commands::Default.dispatch(Board, id)
10
12
  end
11
13
 
14
+ # @param [String]
15
+ # @return [String]
12
16
  desc 'card <id>',
13
17
  'Set the card <id> to default.'
14
18
  def card(id)
15
19
  say Commands::Default.dispatch(Card, id)
16
20
  end
17
21
 
22
+ # @param [String]
23
+ # @return [String]
18
24
  desc 'list <id>',
19
25
  'Set the list <id> to default.'
20
26
  def list(id)
@@ -1,6 +1,7 @@
1
1
  module Troo
2
2
  module CLI
3
3
  class Main < ThorFixes
4
+ # @return [String]
4
5
  desc 'status',
5
6
  'Get troo status.'
6
7
  def status
@@ -18,6 +19,7 @@ module Troo
18
19
  end
19
20
  end
20
21
 
22
+ # @return [String]
21
23
  desc 'config',
22
24
  'Show the current configuration.'
23
25
  def config
@@ -25,6 +27,7 @@ module Troo
25
27
  say Troo.configuration.view
26
28
  end
27
29
 
30
+ # @return [String]
28
31
  desc 'cleanup',
29
32
  'Removes all local data.'
30
33
  def cleanup
@@ -36,6 +39,7 @@ module Troo
36
39
  end
37
40
  end
38
41
 
42
+ # @return [String]
39
43
  desc 'version',
40
44
  'Print the version.'
41
45
  def version
@@ -59,6 +63,10 @@ module Troo
59
63
  'Refresh all local data or board, list or card with <id>.'
60
64
  subcommand :refresh, CLI::Refresh
61
65
 
66
+ # @param [String]
67
+ # @param [String]
68
+ # @param [String]
69
+ # @return [String]
62
70
  desc 'move <card_id> <list_id> (<board_id>)',
63
71
  'Move card with <card_id> to list with <list_id> ' \
64
72
  'optionally to another board with <board_id>.'
@@ -3,24 +3,31 @@ module Troo
3
3
  class Refresh < ThorFixes
4
4
  package_name 'refresh'
5
5
 
6
+ # @return [String]
6
7
  desc 'all',
7
8
  'Refresh all the local data.'
8
9
  def all
9
10
  say Commands::RefreshAll.dispatch
10
11
  end
11
12
 
13
+ # @param [String]
14
+ # @return [String]
12
15
  desc 'board (<id>)',
13
16
  'Refresh the default board or board with <id>.'
14
17
  def board(id = nil)
15
18
  say Commands::Refresh.dispatch(Troo::Board, id)
16
19
  end
17
20
 
21
+ # @param [String]
22
+ # @return [String]
18
23
  desc 'card (<id>)',
19
24
  'Refresh the default card or card with <id>.'
20
25
  def card(id = nil)
21
26
  say Commands::Refresh.dispatch(Troo::Card, id)
22
27
  end
23
28
 
29
+ # @param [String]
30
+ # @return [String]
24
31
  desc 'list (<id>)',
25
32
  'Refresh the default list or list with <id>.'
26
33
  def list(id = nil)
@@ -3,12 +3,15 @@ module Troo
3
3
  class Show < ThorFixes
4
4
  package_name 'show'
5
5
 
6
+ # @return [String]
6
7
  desc 'boards',
7
8
  'Show all the boards with lists.'
8
9
  def boards
9
10
  say Troo::Commands::ShowBoards.dispatch
10
11
  end
11
12
 
13
+ # @param [String]
14
+ # @return [String]
12
15
  desc 'board (<id>)',
13
16
  'Show lists and cards for board <id>' \
14
17
  ' (uses default board if <id> not provided).'
@@ -16,6 +19,8 @@ module Troo
16
19
  say Troo::Commands::Show.dispatch(Troo::Board, id)
17
20
  end
18
21
 
22
+ # @param [String]
23
+ # @return [String]
19
24
  desc 'list (<id>)',
20
25
  'Show all cards for list <id>' \
21
26
  ' (uses default list if <id> not provided).'
@@ -23,6 +28,8 @@ module Troo
23
28
  say Troo::Commands::Show.dispatch(Troo::List, id)
24
29
  end
25
30
 
31
+ # @param [String]
32
+ # @return [String]
26
33
  desc 'card (<id>)',
27
34
  'Show a card <id> including last 3 comments' \
28
35
  ' (uses default card if <id> not provided).'
@@ -30,6 +37,8 @@ module Troo
30
37
  say Troo::Commands::Show.dispatch(Troo::Card, id)
31
38
  end
32
39
 
40
+ # @param [String]
41
+ # @return [String]
33
42
  desc 'comments (<id>)',
34
43
  'Show all comments for card <id>' \
35
44
  ' (uses default card if <id> not provided).'
@@ -1,6 +1,10 @@
1
1
  module Troo
2
2
  module CLI
3
3
  class ThorFixes < Thor
4
+ # @param []
5
+ # @param []
6
+ # @param []
7
+ # @return []
4
8
  def self.banner(command, namespace = nil, subcommand = false)
5
9
  [basename, @package_name, command.usage].compact.join(' ')
6
10
  end
@@ -1,29 +1,4 @@
1
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
- def view(parameters)
12
- new(parameters).view
13
- end
14
- end
15
-
16
- def view
17
- [formatted_label, value].join(' ')
18
- end
19
-
20
- private
21
-
22
- def formatted_label
23
- (label + ':').rjust(25, ' ')
24
- end
25
- end
26
-
27
2
  class Configuration
28
3
  include Virtus.value_object
29
4
 
@@ -40,15 +15,15 @@ module Troo
40
15
  end
41
16
 
42
17
  class << self
18
+ # @param []
19
+ # @param [String]
20
+ # @return []
43
21
  def load(file, env)
44
- new(YAML.load_file(file)[env.to_s])
45
- rescue Errno::ENOENT
46
- puts "\nConfiguration cannot be found, please run 'troo init'" \
47
- " first.\n\n"
48
- exit(1)
22
+ new(YAML.load_file(file)[env])
49
23
  end
50
24
  end
51
25
 
26
+ # @return []
52
27
  def view
53
28
  attributes.map do |label, value|
54
29
  Preference.view(label: label, value: value)
@@ -1,15 +1,22 @@
1
1
  module Troo
2
2
  class Database
3
3
  class << self
4
+ # @param []
5
+ # @param [Hash]
6
+ # @return []
4
7
  def connect(configuration, options = {})
5
8
  new(configuration, options).connect
6
9
  end
7
10
  end
8
11
 
12
+ # @param []
13
+ # @param [Hash]
14
+ # @return []
9
15
  def initialize(configuration, options = {})
10
16
  @configuration, @options = configuration, options
11
17
  end
12
18
 
19
+ # @return []
13
20
  def connect
14
21
  Ohm.connect(db: configuration.database)
15
22
  end
@@ -3,6 +3,9 @@ require 'pry-nav'
3
3
  require 'ruby-prof'
4
4
 
5
5
  module Troo
6
+ # @param [String]
7
+ # @param []
8
+ # @return []
6
9
  def self.debug(filename = 'profile.html', &block)
7
10
  RubyProf.start
8
11
 
@@ -3,6 +3,7 @@ module Troo
3
3
  class Member < Resource
4
4
  include DecoratorHelpers
5
5
 
6
+ # @return [String]
6
7
  def username
7
8
  ['@', klass.username].join
8
9
  end
@@ -3,10 +3,14 @@ module Troo
3
3
  class Resource
4
4
  include DecoratorHelpers
5
5
 
6
+ # @param []
7
+ # @param [Hash]
8
+ # @return [Troo::Decorators::Resource]
6
9
  def initialize(klass, options = {})
7
10
  @klass, @options = klass, options
8
11
  end
9
12
 
13
+ # @return [String]
10
14
  def title
11
15
  [
12
16
  resource_id,
@@ -15,6 +19,7 @@ module Troo
15
19
  ].compact.join(' ') + "\n"
16
20
  end
17
21
 
22
+ # @return [String]
18
23
  def resource_title
19
24
  if klass.type == :card
20
25
  Troo::Wordwrap.this(name, prune: true)
@@ -24,6 +29,7 @@ module Troo
24
29
  end
25
30
  end
26
31
 
32
+ # @return [String]
27
33
  def resource_id
28
34
  if klass.type == :card
29
35
  brackets(Troo::Formatter.highlight(
@@ -33,32 +39,39 @@ module Troo
33
39
  end
34
40
  end
35
41
 
42
+ # @return []
36
43
  def id
37
44
  (klass.type == :card) ? klass.short_id : klass.id
38
45
  end
39
46
 
47
+ # @return [String]
40
48
  def description
41
49
  return 'N/A' if klass.description.nil? ||
42
50
  klass.description.empty?
43
51
  Troo::Formatter.wordwrap(klass.description)
44
52
  end
45
53
 
54
+ # @return [String, NilClass]
46
55
  def default
47
56
  klass.default? ? '*' : nil
48
57
  end
49
58
 
59
+ # @return [String]
50
60
  def name
51
61
  (klass.name && klass.name.chomp) || 'N/A'
52
62
  end
53
63
 
64
+ # @return []
54
65
  def board
55
66
  klass.board.decorator
56
67
  end
57
68
 
69
+ # @return []
58
70
  def list
59
71
  klass.list.decorator
60
72
  end
61
73
 
74
+ # @return [String]
62
75
  def comments
63
76
  if klass.comments.any? && klass.comments.size > 3
64
77
  msg = '(There are more comments, use: ' \
@@ -72,28 +85,34 @@ module Troo
72
85
  end
73
86
  end
74
87
 
88
+ # @return [String]
75
89
  def members
76
90
  Presenters::Member.new(klass).show
77
91
  end
78
92
 
93
+ # @return [String]
79
94
  def last_activity_date
80
95
  return 'N/A' unless klass.last_activity_date
81
96
  Time.parse(klass.last_activity_date)
82
97
  .strftime('%a, %b %d at %H:%M')
83
98
  end
84
99
 
100
+ # @return [String]
85
101
  def as_view
86
102
  Template.parse(self, '/../views/' + type + '.erb')
87
103
  end
88
104
 
105
+ # @return [String]
89
106
  def username
90
107
  ['@', klass.member.username].join
91
108
  end
92
109
 
110
+ # @return [String]
93
111
  def text
94
112
  Troo::Formatter.wordwrap(klass.text)
95
113
  end
96
114
 
115
+ # @return [String]
97
116
  def date
98
117
  Time.parse(klass.date).strftime('%a, %b %d at %H:%M')
99
118
  end