troo 0.0.10 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
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