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.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/.rubocop.yml +2 -0
- data/Guardfile +3 -1
- data/Rakefile +7 -0
- data/bin/troo +3 -8
- data/config/.gitkeep +0 -0
- data/config/cucumber.yml +8 -0
- data/features/add/board.feature +26 -0
- data/features/add/card.feature +34 -0
- data/features/add/comment.feature +21 -0
- data/features/add/list.feature +24 -0
- data/features/cleanup.feature +13 -0
- data/features/default/board.feature +21 -0
- data/features/default/card.feature +21 -0
- data/features/default/list.feature +21 -0
- data/features/refresh/all.feature +7 -0
- data/features/refresh/board.feature +26 -0
- data/features/refresh/card.feature +27 -0
- data/features/refresh/list.feature +27 -0
- data/features/show/board.feature +32 -0
- data/features/show/card.feature +62 -0
- data/features/show/comment.feature +39 -0
- data/features/show/list.feature +37 -0
- data/features/status.feature +46 -1
- data/features/step_definitions/fabrication_steps.rb +34 -0
- data/features/step_definitions/troo_steps.rb +16 -0
- data/features/support/env.rb +22 -24
- data/features/troo.feature +31 -1
- data/lib/troo/actions/create_board.rb +10 -7
- data/lib/troo/actions/create_card.rb +5 -4
- data/lib/troo/actions/create_comment.rb +15 -13
- data/lib/troo/actions/create_list.rb +5 -4
- data/lib/troo/actions/move_card.rb +4 -3
- data/lib/troo/{external/board_adaptor.rb → adaptors/board.rb} +3 -14
- data/lib/troo/{external/card_adaptor.rb → adaptors/card.rb} +4 -15
- data/lib/troo/{external/comment_adaptor.rb → adaptors/comment.rb} +6 -17
- data/lib/troo/{external/list_adaptor.rb → adaptors/list.rb} +3 -14
- data/lib/troo/{external/member_adaptor.rb → adaptors/member.rb} +3 -14
- data/lib/troo/adaptors/resource.rb +17 -0
- data/lib/troo/cli/add.rb +53 -0
- data/lib/troo/cli/default.rb +25 -0
- data/lib/troo/cli/main.rb +46 -0
- data/lib/troo/cli/refresh.rb +31 -0
- data/lib/troo/cli/show.rb +41 -0
- data/lib/troo/cli/thor_fixes.rb +13 -0
- data/lib/troo/commands/add/board.rb +26 -0
- data/lib/troo/commands/add/card.rb +33 -0
- data/lib/troo/commands/add/comment.rb +33 -0
- data/lib/troo/commands/add/list.rb +33 -0
- data/lib/troo/commands/add/resource.rb +21 -0
- data/lib/troo/commands/commands.rb +28 -0
- data/lib/troo/commands/default/board.rb +25 -0
- data/lib/troo/commands/default/card.rb +25 -0
- data/lib/troo/commands/default/list.rb +25 -0
- data/lib/troo/commands/default/resource.rb +26 -0
- data/lib/troo/commands/refresh/all.rb +41 -0
- data/lib/troo/commands/refresh/board.rb +28 -0
- data/lib/troo/commands/refresh/card.rb +29 -0
- data/lib/troo/commands/refresh/list.rb +29 -0
- data/lib/troo/commands/refresh/resource.rb +42 -0
- data/lib/troo/commands/show/board.rb +13 -0
- data/lib/troo/commands/show/boards.rb +35 -0
- data/lib/troo/commands/show/card.rb +13 -0
- data/lib/troo/commands/show/comments.rb +21 -0
- data/lib/troo/commands/show/list.rb +13 -0
- data/lib/troo/commands/show/resource.rb +41 -0
- data/lib/troo/commands/status/board.rb +30 -0
- data/lib/troo/commands/status/card.rb +30 -0
- data/lib/troo/commands/status/list.rb +30 -0
- data/lib/troo/commands/status/resource.rb +34 -0
- data/lib/troo/decorators/board.rb +66 -0
- data/lib/troo/decorators/card.rb +105 -0
- data/lib/troo/decorators/comment.rb +36 -0
- data/lib/troo/decorators/list.rb +60 -0
- data/lib/troo/decorators/member.rb +28 -0
- data/lib/troo/external/board.rb +14 -26
- data/lib/troo/external/card.rb +2 -19
- data/lib/troo/external/comment.rb +5 -23
- data/lib/troo/external/list.rb +2 -20
- data/lib/troo/external/member.rb +2 -20
- data/lib/troo/external/resource.rb +21 -6
- data/lib/troo/helpers/command_helpers.rb +37 -0
- data/lib/troo/{display → helpers}/decorator_helpers.rb +23 -17
- data/lib/troo/{models → helpers}/model_helpers.rb +1 -1
- data/lib/troo/models/behaviours/set_default.rb +49 -0
- data/lib/troo/models/board.rb +10 -7
- data/lib/troo/models/card.rb +33 -15
- data/lib/troo/models/comment.rb +8 -5
- data/lib/troo/models/list.rb +10 -6
- data/lib/troo/models/member.rb +7 -4
- data/lib/troo/models/persistence/board.rb +19 -0
- data/lib/troo/models/persistence/card.rb +19 -0
- data/lib/troo/models/persistence/comment.rb +19 -0
- data/lib/troo/models/persistence/list.rb +19 -0
- data/lib/troo/models/persistence/member.rb +19 -0
- data/lib/troo/models/persistence/resource.rb +50 -0
- data/lib/troo/models/refresh.rb +1 -1
- data/lib/troo/models/remote/comment.rb +21 -0
- data/lib/troo/models/remote/resource.rb +25 -0
- data/lib/troo/models/retrieval/board.rb +29 -0
- data/lib/troo/models/retrieval/card.rb +33 -0
- data/lib/troo/models/retrieval/comment.rb +25 -0
- data/lib/troo/models/retrieval/list.rb +29 -0
- data/lib/troo/models/retrieval/member.rb +25 -0
- data/lib/troo/models/retrieval/resource.rb +36 -0
- data/lib/troo/presentation/sentence.rb +57 -0
- data/lib/troo/presentation/template.rb +4 -3
- data/lib/troo/presenters/board.rb +81 -0
- data/lib/troo/presenters/card.rb +30 -0
- data/lib/troo/presenters/comment.rb +38 -0
- data/lib/troo/presenters/list.rb +44 -0
- data/lib/troo/presenters/member.rb +32 -0
- data/lib/troo/troo.rb +79 -65
- data/lib/troo/version.rb +1 -2
- data/lib/troo.rb +36 -8
- data/test/lib/troo/actions/create_board_test.rb +34 -15
- data/test/lib/troo/actions/create_card_test.rb +35 -18
- data/test/lib/troo/actions/create_comment_test.rb +38 -16
- data/test/lib/troo/actions/create_list_test.rb +31 -15
- data/test/lib/troo/actions/move_card_test.rb +23 -15
- data/test/lib/troo/adaptors/board_test.rb +38 -0
- data/test/lib/troo/adaptors/card_test.rb +49 -0
- data/test/lib/troo/adaptors/comment_test.rb +41 -0
- data/test/lib/troo/adaptors/list_test.rb +38 -0
- data/test/lib/troo/adaptors/member_test.rb +44 -0
- data/test/lib/troo/commands/add/board_test.rb +43 -0
- data/test/lib/troo/commands/add/card_test.rb +44 -0
- data/test/lib/troo/commands/add/comment_test.rb +44 -0
- data/test/lib/troo/commands/add/list_test.rb +44 -0
- data/test/lib/troo/commands/add/resource_test.rb +25 -0
- data/test/lib/troo/commands/default/board_test.rb +37 -0
- data/test/lib/troo/commands/default/card_test.rb +37 -0
- data/test/lib/troo/commands/default/list_test.rb +37 -0
- data/test/lib/troo/commands/default/resource_test.rb +20 -0
- data/test/lib/troo/commands/refresh/all_test.rb +39 -0
- data/test/lib/troo/commands/refresh/board_test.rb +62 -0
- data/test/lib/troo/commands/refresh/card_test.rb +62 -0
- data/test/lib/troo/commands/refresh/list_test.rb +62 -0
- data/test/lib/troo/commands/refresh/resource_test.rb +20 -0
- data/test/lib/troo/commands/show/board_test.rb +65 -0
- data/test/lib/troo/commands/show/boards_test.rb +36 -0
- data/test/lib/troo/commands/show/card_test.rb +64 -0
- data/test/lib/troo/commands/show/comments_test.rb +64 -0
- data/test/lib/troo/commands/show/list_test.rb +64 -0
- data/test/lib/troo/commands/show/resource_test.rb +25 -0
- data/test/lib/troo/commands/status/board_test.rb +43 -0
- data/test/lib/troo/commands/status/card_test.rb +43 -0
- data/test/lib/troo/commands/status/list_test.rb +43 -0
- data/test/lib/troo/commands/status/resource_test.rb +19 -0
- data/test/lib/troo/decorators/board_test.rb +129 -0
- data/test/lib/troo/decorators/card_test.rb +237 -0
- data/test/lib/troo/decorators/comment_test.rb +74 -0
- data/test/lib/troo/decorators/list_test.rb +102 -0
- data/test/lib/troo/decorators/member_test.rb +50 -0
- data/test/lib/troo/external/board_test.rb +74 -41
- data/test/lib/troo/external/card_test.rb +49 -37
- data/test/lib/troo/external/comment_test.rb +43 -33
- data/test/lib/troo/external/list_test.rb +37 -30
- data/test/lib/troo/external/member_test.rb +37 -30
- data/test/lib/troo/external/resource_test.rb +18 -1
- data/test/lib/troo/helpers/command_helpers_test.rb +82 -0
- data/test/lib/troo/{display → helpers}/decorator_helpers_test.rb +6 -6
- data/test/lib/troo/helpers/model_helpers_test.rb +103 -0
- data/test/lib/troo/models/behaviours/set_default_test.rb +54 -0
- data/test/lib/troo/models/board_test.rb +13 -14
- data/test/lib/troo/models/card_test.rb +64 -33
- data/test/lib/troo/models/comment_test.rb +18 -19
- data/test/lib/troo/models/list_test.rb +15 -15
- data/test/lib/troo/models/member_test.rb +18 -18
- data/test/lib/troo/models/persistence/board_test.rb +62 -0
- data/test/lib/troo/models/persistence/card_test.rb +61 -0
- data/test/lib/troo/models/persistence/comment_test.rb +69 -0
- data/test/lib/troo/models/persistence/list_test.rb +60 -0
- data/test/lib/troo/models/persistence/member_test.rb +60 -0
- data/test/lib/troo/models/refresh_test.rb +12 -11
- data/test/lib/troo/models/remote/comment_test.rb +56 -0
- data/test/lib/troo/models/remote/resource_test.rb +26 -0
- data/test/lib/troo/models/retrieval/board_test.rb +93 -0
- data/test/lib/troo/models/retrieval/card_test.rb +101 -0
- data/test/lib/troo/models/retrieval/comment_test.rb +46 -0
- data/test/lib/troo/models/retrieval/list_test.rb +93 -0
- data/test/lib/troo/models/retrieval/member_test.rb +58 -0
- data/test/lib/troo/presentation/sentence_test.rb +57 -0
- data/test/lib/troo/presentation/template_test.rb +17 -16
- data/test/lib/troo/presenters/board_test.rb +79 -0
- data/test/lib/troo/presenters/card_test.rb +41 -0
- data/test/lib/troo/presenters/comment_test.rb +49 -0
- data/test/lib/troo/presenters/list_test.rb +50 -0
- data/test/lib/troo/presenters/member_test.rb +40 -0
- data/test/support/fabrication.rb +31 -32
- data/test/support/vcr_setup.rb +7 -9
- data/test/system_test.sh +55 -0
- data/test/test_helper.rb +10 -10
- data/troo.gemspec +1 -0
- metadata +232 -134
- data/features/add_board.feature +0 -1
- data/features/add_card.feature +0 -1
- data/features/add_comment.feature +0 -1
- data/features/add_list.feature +0 -1
- data/features/move_card_to_list.feature +0 -1
- data/features/refresh.feature +0 -1
- data/features/set_default.feature +0 -7
- data/features/show_board.feature +0 -1
- data/features/show_boards.feature +0 -1
- data/features/show_card.feature +0 -1
- data/features/show_comments.feature +0 -1
- data/features/show_list.feature +0 -1
- data/features/version.feature +0 -8
- data/lib/troo/actions/refresh_all.rb +0 -79
- data/lib/troo/actions/set_default.rb +0 -46
- data/lib/troo/cli/add_cli.rb +0 -83
- data/lib/troo/cli/cli_helpers.rb +0 -34
- data/lib/troo/cli/default_cli.rb +0 -32
- data/lib/troo/cli/main_cli.rb +0 -132
- data/lib/troo/cli/show_cli.rb +0 -64
- data/lib/troo/display/board_decorator.rb +0 -62
- data/lib/troo/display/board_presenter.rb +0 -71
- data/lib/troo/display/card_decorator.rb +0 -100
- data/lib/troo/display/card_presenter.rb +0 -27
- data/lib/troo/display/comment_decorator.rb +0 -33
- data/lib/troo/display/comment_presenter.rb +0 -31
- data/lib/troo/display/list_decorator.rb +0 -57
- data/lib/troo/display/list_presenter.rb +0 -41
- data/lib/troo/display/member_decorator.rb +0 -25
- data/lib/troo/display/member_presenter.rb +0 -59
- data/lib/troo/models/board_persistence.rb +0 -25
- data/lib/troo/models/board_retrieval.rb +0 -45
- data/lib/troo/models/card_persistence.rb +0 -25
- data/lib/troo/models/card_retrieval.rb +0 -49
- data/lib/troo/models/comment_persistence.rb +0 -25
- data/lib/troo/models/comment_retrieval.rb +0 -32
- data/lib/troo/models/list_persistence.rb +0 -25
- data/lib/troo/models/list_retrieval.rb +0 -45
- data/lib/troo/models/member_persistence.rb +0 -25
- data/lib/troo/models/member_retrieval.rb +0 -36
- data/lib/troo/models/persistence.rb +0 -39
- data/test/lib/troo/actions/refresh_all_test.rb +0 -68
- data/test/lib/troo/actions/set_default_test.rb +0 -44
- data/test/lib/troo/cli/add_cli_test.rb +0 -216
- data/test/lib/troo/cli/cli_helpers_test.rb +0 -24
- data/test/lib/troo/cli/default_cli_test.rb +0 -85
- data/test/lib/troo/cli/main_cli_test.rb +0 -234
- data/test/lib/troo/cli/show_cli_test.rb +0 -251
- data/test/lib/troo/display/board_decorator_test.rb +0 -126
- data/test/lib/troo/display/board_presenter_test.rb +0 -77
- data/test/lib/troo/display/card_decorator_test.rb +0 -213
- data/test/lib/troo/display/card_presenter_test.rb +0 -38
- data/test/lib/troo/display/comment_decorator_test.rb +0 -70
- data/test/lib/troo/display/comment_presenter_test.rb +0 -47
- data/test/lib/troo/display/list_decorator_test.rb +0 -98
- data/test/lib/troo/display/list_presenter_test.rb +0 -48
- data/test/lib/troo/display/member_decorator_test.rb +0 -47
- data/test/lib/troo/display/member_presenter_test.rb +0 -70
- data/test/lib/troo/external/board_adaptor_test.rb +0 -36
- data/test/lib/troo/external/card_adaptor_test.rb +0 -50
- data/test/lib/troo/external/comment_adaptor_test.rb +0 -41
- data/test/lib/troo/external/list_adaptor_test.rb +0 -38
- data/test/lib/troo/external/member_adaptor_test.rb +0 -44
- data/test/lib/troo/models/board_persistence_test.rb +0 -61
- data/test/lib/troo/models/board_retrieval_test.rb +0 -93
- data/test/lib/troo/models/card_persistence_test.rb +0 -60
- data/test/lib/troo/models/card_retrieval_test.rb +0 -101
- data/test/lib/troo/models/comment_persistence_test.rb +0 -65
- data/test/lib/troo/models/comment_retrieval_test.rb +0 -46
- data/test/lib/troo/models/list_persistence_test.rb +0 -60
- data/test/lib/troo/models/list_retrieval_test.rb +0 -93
- data/test/lib/troo/models/member_persistence_test.rb +0 -59
- data/test/lib/troo/models/member_retrieval_test.rb +0 -58
- data/test/lib/troo/models/model_helpers_test.rb +0 -103
- data/test/lib/troo/models/persistence_test.rb +0 -6
@@ -0,0 +1,34 @@
|
|
1
|
+
module Troo
|
2
|
+
module Commands
|
3
|
+
module Status
|
4
|
+
class Resource
|
5
|
+
include CommandHelpers
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def dispatch
|
9
|
+
new.report_status
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def report_status
|
14
|
+
return success if resource
|
15
|
+
error
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def resource_title
|
21
|
+
resource.decorator.title
|
22
|
+
end
|
23
|
+
|
24
|
+
def plural(singular)
|
25
|
+
if count == 1
|
26
|
+
"#{count} #{singular}"
|
27
|
+
else
|
28
|
+
"#{count} #{singular}s"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
module Troo
|
2
|
+
module Decorators
|
3
|
+
class Board
|
4
|
+
include DecoratorHelpers
|
5
|
+
|
6
|
+
def initialize(board, options = {})
|
7
|
+
@board = board
|
8
|
+
@options = options
|
9
|
+
end
|
10
|
+
|
11
|
+
def short
|
12
|
+
[default_str, id_str, name_str].join + "\n"
|
13
|
+
end
|
14
|
+
|
15
|
+
def name_str
|
16
|
+
highlight(name, options)
|
17
|
+
end
|
18
|
+
|
19
|
+
def default_str
|
20
|
+
default.center(3)
|
21
|
+
end
|
22
|
+
|
23
|
+
def id_str
|
24
|
+
highlight(brackets(id) + ' ', options).rjust(6)
|
25
|
+
end
|
26
|
+
|
27
|
+
def description
|
28
|
+
return 'N/A' if board.description.nil? ||
|
29
|
+
board.description.empty?
|
30
|
+
word_wrap(board.description)
|
31
|
+
end
|
32
|
+
|
33
|
+
def name
|
34
|
+
(board.name && board.name.chomp) || 'N/A'
|
35
|
+
end
|
36
|
+
|
37
|
+
def default
|
38
|
+
board.default? ? '*' : ''
|
39
|
+
end
|
40
|
+
|
41
|
+
def id
|
42
|
+
board.id.to_s
|
43
|
+
end
|
44
|
+
|
45
|
+
def lists(alt_options = {})
|
46
|
+
board.lists.map { |list| list.decorator(alt_options) }
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
attr_reader :board
|
52
|
+
|
53
|
+
def options
|
54
|
+
defaults.merge!(@options)
|
55
|
+
end
|
56
|
+
|
57
|
+
def defaults
|
58
|
+
{
|
59
|
+
ansicolor: true,
|
60
|
+
colour: Esc.blue,
|
61
|
+
underline: Esc.underline
|
62
|
+
}
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
module Troo
|
2
|
+
module Decorators
|
3
|
+
class Card
|
4
|
+
include DecoratorHelpers
|
5
|
+
|
6
|
+
def initialize(card, options = {})
|
7
|
+
@card = card
|
8
|
+
@options = options
|
9
|
+
end
|
10
|
+
|
11
|
+
def short
|
12
|
+
[default_str, id_str, name_str].join + "\n"
|
13
|
+
end
|
14
|
+
|
15
|
+
def name_str
|
16
|
+
highlight(name, options)
|
17
|
+
end
|
18
|
+
|
19
|
+
def default_str
|
20
|
+
default.center(3)
|
21
|
+
end
|
22
|
+
|
23
|
+
def id_str
|
24
|
+
highlight(brackets(id) + ' ', options).rjust(6)
|
25
|
+
end
|
26
|
+
|
27
|
+
def name
|
28
|
+
(card.name && card.name.chomp) || 'N/A'
|
29
|
+
end
|
30
|
+
|
31
|
+
def default
|
32
|
+
card.default? ? '*' : ''
|
33
|
+
end
|
34
|
+
|
35
|
+
def id
|
36
|
+
card.short_id
|
37
|
+
end
|
38
|
+
|
39
|
+
def description
|
40
|
+
if card.desc.nil? || card.desc.empty?
|
41
|
+
'There are no further details at this time.'
|
42
|
+
else
|
43
|
+
word_wrap(card.desc)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def comments
|
48
|
+
if card.comments.any? && card.comments.size > 3
|
49
|
+
message = "(There are more comments, use: " \
|
50
|
+
"'troo show comments #{card.short_id}' to view " \
|
51
|
+
" all comments.)"
|
52
|
+
[decorated_recent_comments, message].join("\n")
|
53
|
+
elsif card.comments.any?
|
54
|
+
decorated_all_comments
|
55
|
+
else
|
56
|
+
'No comments have been left.'
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def members
|
61
|
+
Presenters::Member.show(card)
|
62
|
+
end
|
63
|
+
|
64
|
+
def last_activity_date
|
65
|
+
return 'N/A' unless card.last_activity_date
|
66
|
+
Time.parse(card.last_activity_date)
|
67
|
+
.strftime('%a, %b %d at %H:%M')
|
68
|
+
end
|
69
|
+
|
70
|
+
def board
|
71
|
+
card.board.decorator(options).short
|
72
|
+
end
|
73
|
+
|
74
|
+
def list
|
75
|
+
card.list.decorator(options).short
|
76
|
+
end
|
77
|
+
|
78
|
+
private
|
79
|
+
|
80
|
+
attr_reader :card
|
81
|
+
|
82
|
+
def options
|
83
|
+
defaults.merge!(@options)
|
84
|
+
end
|
85
|
+
|
86
|
+
def defaults
|
87
|
+
{
|
88
|
+
ansicolor: true,
|
89
|
+
colour: Esc.magenta,
|
90
|
+
underline: Esc.underline
|
91
|
+
}
|
92
|
+
end
|
93
|
+
|
94
|
+
def decorated_recent_comments
|
95
|
+
card.recent_comments.map do |comment|
|
96
|
+
comment.decorator.as_view
|
97
|
+
end.join
|
98
|
+
end
|
99
|
+
|
100
|
+
def decorated_all_comments
|
101
|
+
card.comments.map { |comment| comment.decorator.as_view }.join
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Troo
|
2
|
+
module Decorators
|
3
|
+
class Comment
|
4
|
+
include DecoratorHelpers
|
5
|
+
|
6
|
+
def initialize(comment, options = {})
|
7
|
+
@comment = comment
|
8
|
+
@options = options
|
9
|
+
end
|
10
|
+
|
11
|
+
def as_view
|
12
|
+
Template.parse(self, '/../views/comment.erb')
|
13
|
+
end
|
14
|
+
|
15
|
+
def member_username
|
16
|
+
[comment.member.username, ':'].join
|
17
|
+
end
|
18
|
+
|
19
|
+
def text
|
20
|
+
word_wrap(comment.text)
|
21
|
+
end
|
22
|
+
|
23
|
+
def date
|
24
|
+
Time.parse(comment.date).strftime('%a, %b %d at %H:%M')
|
25
|
+
end
|
26
|
+
|
27
|
+
def id
|
28
|
+
brackets(comment.id)
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
attr_reader :comment
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Troo
|
2
|
+
module Decorators
|
3
|
+
class List
|
4
|
+
include DecoratorHelpers
|
5
|
+
|
6
|
+
def initialize(list, options = {})
|
7
|
+
@list = list
|
8
|
+
@options = options
|
9
|
+
end
|
10
|
+
|
11
|
+
def short
|
12
|
+
[default_str, id_str, name_str].join + "\n"
|
13
|
+
end
|
14
|
+
|
15
|
+
def name_str
|
16
|
+
highlight(name, options)
|
17
|
+
end
|
18
|
+
|
19
|
+
def default_str
|
20
|
+
default.center(3)
|
21
|
+
end
|
22
|
+
|
23
|
+
def id_str
|
24
|
+
highlight(brackets(id) + ' ', options).rjust(6)
|
25
|
+
end
|
26
|
+
|
27
|
+
def name
|
28
|
+
(list.name && list.name.chomp) || 'N/A'
|
29
|
+
end
|
30
|
+
|
31
|
+
def default
|
32
|
+
list.default? ? '*' : ''
|
33
|
+
end
|
34
|
+
|
35
|
+
def id
|
36
|
+
list.id.to_s
|
37
|
+
end
|
38
|
+
|
39
|
+
def cards(alt_options = {})
|
40
|
+
list.cards.map { |card| card.decorator(alt_options) }
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
attr_reader :list
|
46
|
+
|
47
|
+
def options
|
48
|
+
defaults.merge!(@options)
|
49
|
+
end
|
50
|
+
|
51
|
+
def defaults
|
52
|
+
{
|
53
|
+
ansicolor: true,
|
54
|
+
colour: Esc.green,
|
55
|
+
underline: Esc.underline
|
56
|
+
}
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Troo
|
2
|
+
module Decorators
|
3
|
+
class Member
|
4
|
+
include DecoratorHelpers
|
5
|
+
|
6
|
+
def initialize(member, options = {})
|
7
|
+
@member = member
|
8
|
+
@options = options
|
9
|
+
end
|
10
|
+
|
11
|
+
def username
|
12
|
+
['@', member.username].join
|
13
|
+
end
|
14
|
+
|
15
|
+
def name
|
16
|
+
member.full_name
|
17
|
+
end
|
18
|
+
|
19
|
+
def initials
|
20
|
+
member.initials
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
attr_reader :member
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/troo/external/board.rb
CHANGED
@@ -1,43 +1,31 @@
|
|
1
1
|
module Troo
|
2
2
|
module External
|
3
3
|
class Board < Resource
|
4
|
-
|
5
|
-
|
6
|
-
new(external_id, options).fetch_by_external_id.map do |resource|
|
7
|
-
BoardPersistence.for(resource) unless closed?(resource)
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
def fetch_all
|
12
|
-
new.fetch_all.map do |resource|
|
13
|
-
BoardPersistence.for(resource) unless closed?(resource)
|
14
|
-
end
|
15
|
-
end
|
4
|
+
def persist
|
5
|
+
Persistence::Board.with_collection(fetch)
|
16
6
|
end
|
17
7
|
|
18
|
-
|
19
|
-
|
20
|
-
|
8
|
+
private
|
9
|
+
|
10
|
+
def all_boards
|
11
|
+
Trello::Board.all
|
21
12
|
end
|
22
13
|
|
23
|
-
def
|
14
|
+
def by_board_id
|
24
15
|
[Trello::Board.find(external_id)]
|
25
|
-
|
26
|
-
|
27
|
-
|
16
|
+
end
|
17
|
+
|
18
|
+
def by_list_id
|
28
19
|
[]
|
29
20
|
end
|
30
21
|
|
31
|
-
def
|
32
|
-
Trello::Board.all
|
33
|
-
rescue Trello::InvalidAccessToken
|
34
|
-
raise Troo::InvalidAccessToken
|
35
|
-
rescue Trello::Error
|
22
|
+
def by_card_id
|
36
23
|
[]
|
37
24
|
end
|
38
25
|
|
39
|
-
|
40
|
-
|
26
|
+
def by_member_id
|
27
|
+
[]
|
28
|
+
end
|
41
29
|
end
|
42
30
|
end
|
43
31
|
end
|
data/lib/troo/external/card.rb
CHANGED
@@ -1,28 +1,11 @@
|
|
1
1
|
module Troo
|
2
2
|
module External
|
3
3
|
class Card < Resource
|
4
|
-
|
5
|
-
|
6
|
-
new(external_id, options).fetch_by_external_id.map do |resource|
|
7
|
-
unless closed?(resource)
|
8
|
-
Troo::External::Comment.fetch(resource.id, { mode: :card }) if options.fetch(:comments, true)
|
9
|
-
CardPersistence.for(resource)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
def initialize(external_id, options = {})
|
16
|
-
@external_id = external_id
|
17
|
-
@options = options
|
4
|
+
def persist
|
5
|
+
Persistence::Card.with_collection(fetch)
|
18
6
|
end
|
19
7
|
|
20
8
|
private
|
21
|
-
attr_reader :external_id
|
22
|
-
|
23
|
-
def options
|
24
|
-
defaults.merge!(@options)
|
25
|
-
end
|
26
9
|
|
27
10
|
def defaults
|
28
11
|
{ comments: true, mode: :board }
|
@@ -1,40 +1,22 @@
|
|
1
1
|
module Troo
|
2
2
|
module External
|
3
3
|
class Comment < Resource
|
4
|
-
|
5
|
-
|
6
|
-
new(external_id, options).fetch_by_external_id.map do |resource|
|
7
|
-
CommentPersistence.for(resource)
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
def initialize(external_id, options = {})
|
13
|
-
@external_id = external_id
|
14
|
-
@options = options
|
4
|
+
def persist
|
5
|
+
Persistence::Comment.with_collection(fetch)
|
15
6
|
end
|
16
7
|
|
17
8
|
private
|
18
|
-
attr_reader :external_id
|
19
|
-
|
20
|
-
def options
|
21
|
-
defaults.merge!(@options)
|
22
|
-
end
|
23
|
-
|
24
|
-
def defaults
|
25
|
-
{ mode: :board }
|
26
|
-
end
|
27
9
|
|
28
10
|
def by_board_id
|
29
|
-
Trello::Board.find(external_id).actions(
|
11
|
+
Trello::Board.find(external_id).actions(filter: 'commentCard')
|
30
12
|
end
|
31
13
|
|
32
14
|
def by_list_id
|
33
|
-
Trello::List.find(external_id).actions(
|
15
|
+
Trello::List.find(external_id).actions(filter: 'commentCard')
|
34
16
|
end
|
35
17
|
|
36
18
|
def by_card_id
|
37
|
-
Trello::Card.find(external_id).actions(
|
19
|
+
Trello::Card.find(external_id).actions(filter: 'commentCard')
|
38
20
|
end
|
39
21
|
|
40
22
|
def by_member_id
|
data/lib/troo/external/list.rb
CHANGED
@@ -1,29 +1,11 @@
|
|
1
1
|
module Troo
|
2
2
|
module External
|
3
3
|
class List < Resource
|
4
|
-
|
5
|
-
|
6
|
-
new(external_id, options).fetch_by_external_id.map do |resource|
|
7
|
-
ListPersistence.for(resource) unless closed?(resource)
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
def initialize(external_id, options = {})
|
13
|
-
@external_id = external_id
|
14
|
-
@options = options
|
4
|
+
def persist
|
5
|
+
Persistence::List.with_collection(fetch)
|
15
6
|
end
|
16
7
|
|
17
8
|
private
|
18
|
-
attr_reader :external_id
|
19
|
-
|
20
|
-
def options
|
21
|
-
defaults.merge!(@options)
|
22
|
-
end
|
23
|
-
|
24
|
-
def defaults
|
25
|
-
{ mode: :board }
|
26
|
-
end
|
27
9
|
|
28
10
|
def by_board_id
|
29
11
|
Trello::Board.find(external_id).lists
|
data/lib/troo/external/member.rb
CHANGED
@@ -1,29 +1,11 @@
|
|
1
1
|
module Troo
|
2
2
|
module External
|
3
3
|
class Member < Resource
|
4
|
-
|
5
|
-
|
6
|
-
new(external_id, options).fetch_by_external_id.map do |resource|
|
7
|
-
MemberPersistence.for(resource)
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
def initialize(external_id, options = {})
|
13
|
-
@external_id = external_id
|
14
|
-
@options = options
|
4
|
+
def persist
|
5
|
+
Persistence::Member.with_collection(fetch)
|
15
6
|
end
|
16
7
|
|
17
8
|
private
|
18
|
-
attr_reader :external_id
|
19
|
-
|
20
|
-
def options
|
21
|
-
defaults.merge!(@options)
|
22
|
-
end
|
23
|
-
|
24
|
-
def defaults
|
25
|
-
{ mode: :board }
|
26
|
-
end
|
27
9
|
|
28
10
|
def by_board_id
|
29
11
|
Trello::Board.find(external_id).members
|
@@ -1,16 +1,22 @@
|
|
1
1
|
module Troo
|
2
2
|
module External
|
3
3
|
class Resource
|
4
|
-
|
5
|
-
private
|
4
|
+
attr_reader :external_id
|
6
5
|
|
7
|
-
|
8
|
-
|
6
|
+
class << self
|
7
|
+
def fetch(external_id, options = {})
|
8
|
+
new(external_id, options).persist
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
|
-
def
|
12
|
+
def initialize(external_id, options = {})
|
13
|
+
@external_id = external_id
|
14
|
+
@options = options
|
15
|
+
end
|
16
|
+
|
17
|
+
def fetch
|
13
18
|
case options.fetch(:mode)
|
19
|
+
when :all then all_boards
|
14
20
|
when :board then by_board_id
|
15
21
|
when :list then by_list_id
|
16
22
|
when :card then by_card_id
|
@@ -21,7 +27,16 @@ module Troo
|
|
21
27
|
rescue Trello::Error
|
22
28
|
[]
|
23
29
|
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def options
|
34
|
+
defaults.merge!(@options)
|
35
|
+
end
|
36
|
+
|
37
|
+
def defaults
|
38
|
+
{ mode: :board }
|
39
|
+
end
|
24
40
|
end
|
25
41
|
end
|
26
42
|
end
|
27
|
-
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Troo
|
2
|
+
module CommandHelpers
|
3
|
+
module ClassMethods
|
4
|
+
end
|
5
|
+
|
6
|
+
def self.included(base)
|
7
|
+
base.extend(ClassMethods)
|
8
|
+
end
|
9
|
+
|
10
|
+
def error_no_default
|
11
|
+
@type = :card if type == :comments
|
12
|
+
"Specify an <id> or use 'troo default #{type_str} <id>' " \
|
13
|
+
"to set a default #{type_str} first."
|
14
|
+
end
|
15
|
+
|
16
|
+
def error_not_found
|
17
|
+
@type = :card if type == :comments
|
18
|
+
"#{type_capitalize} cannot be found. " + error_no_default
|
19
|
+
end
|
20
|
+
|
21
|
+
def type_str
|
22
|
+
type.to_s
|
23
|
+
end
|
24
|
+
|
25
|
+
def type_capitalize
|
26
|
+
type_str.capitalize
|
27
|
+
end
|
28
|
+
|
29
|
+
def type_pluralize
|
30
|
+
type_str + 's'
|
31
|
+
end
|
32
|
+
|
33
|
+
def no_default?
|
34
|
+
id.nil?
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -8,7 +8,7 @@ module Troo
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def title
|
11
|
-
highlight([default, brackets(id), name].join(
|
11
|
+
highlight([default, brackets(id), name].join(' '), options)
|
12
12
|
end
|
13
13
|
|
14
14
|
private
|
@@ -19,15 +19,17 @@ module Troo
|
|
19
19
|
|
20
20
|
def word_wrap(text, line_width = 70)
|
21
21
|
return text if line_width <= 0
|
22
|
-
text.gsub(/\n/, ' ')
|
22
|
+
text.gsub(/\n/, ' ')
|
23
|
+
.gsub(/(.{1,#{line_width}})(\s+|$)/, "\\1\n")
|
24
|
+
.strip
|
23
25
|
end
|
24
26
|
|
25
27
|
def highlight(value, options = {})
|
26
28
|
if options.fetch(:ansicolor, true)
|
27
|
-
[
|
28
|
-
|
29
|
-
|
30
|
-
|
29
|
+
[options.fetch(:colour, nil),
|
30
|
+
options.fetch(:underline, nil),
|
31
|
+
value,
|
32
|
+
Esc.reset].join
|
31
33
|
else
|
32
34
|
value
|
33
35
|
end
|
@@ -38,22 +40,22 @@ module Troo
|
|
38
40
|
end
|
39
41
|
|
40
42
|
def label(string)
|
41
|
-
highlight(string,
|
42
|
-
|
43
|
-
|
43
|
+
highlight(string, ansicolor: true,
|
44
|
+
colour: Esc.yellow,
|
45
|
+
underline: Esc.underline)
|
44
46
|
end
|
45
47
|
|
46
48
|
def member(string)
|
47
|
-
highlight(string,
|
48
|
-
|
49
|
-
|
49
|
+
highlight(string, ansicolor: true,
|
50
|
+
colour: Esc.magenta,
|
51
|
+
underline: Esc.underline)
|
50
52
|
end
|
51
53
|
|
52
54
|
def metadata(label, string)
|
53
|
-
[
|
54
|
-
|
55
|
-
|
56
|
-
|
55
|
+
[highlight(label.rjust(9), ansicolor: true,
|
56
|
+
colour: Esc.cyan,
|
57
|
+
underline: nil),
|
58
|
+
string].join(' ')
|
57
59
|
end
|
58
60
|
|
59
61
|
def spacing(options = {}, &block)
|
@@ -77,8 +79,12 @@ module Troo
|
|
77
79
|
|
78
80
|
def print_error(message)
|
79
81
|
indent do
|
80
|
-
print [(
|
82
|
+
print [(' ' * 2), error(message)].join(' ') + "\n"
|
81
83
|
end
|
82
84
|
end
|
85
|
+
|
86
|
+
def error(message)
|
87
|
+
[Esc.red, message, Esc.reset].join
|
88
|
+
end
|
83
89
|
end
|
84
90
|
end
|