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
@@ -1,34 +1,47 @@
1
1
  module Troo
2
2
  module ModelHelpers
3
3
  module ClassMethods
4
+ # @param [Hash]
5
+ # @return [Ohm::Model]
4
6
  def first(criteria = {})
5
7
  return all.first if criteria.nil? || criteria.empty?
6
8
  find(criteria).first
7
9
  end
8
10
 
11
+ # @param [Hash]
12
+ # @return [TrueClass]
9
13
  def update(criteria = {})
10
14
  return false if criteria.nil? || criteria.empty?
11
15
  all.map { |record| record.update(criteria) }
12
16
  true
13
17
  end
14
18
 
19
+ # @return [Ohm::Model]
15
20
  def default
16
21
  first(default: true)
17
22
  end
18
23
 
24
+ # @return [TrueClass, FalseClass]
19
25
  def default?
20
26
  !!(default)
21
27
  end
22
28
 
29
+ # @param [Hash]
30
+ # @return [Integer]
23
31
  def count(criteria = {})
24
32
  return all.count if criteria.empty?
25
33
  find(criteria).size
26
34
  end
27
35
 
36
+ # @param [String]
37
+ # @return [Ohm::Model]
28
38
  def by_external_id(id)
29
39
  first(external_id: id)
30
40
  end
31
41
 
42
+ # @param [String, NilClass]
43
+ # @param [Hash]
44
+ # @return [Ohm::Model]
32
45
  def retrieve(id = nil, options = {})
33
46
  Troo::Retrieval::Local.retrieve(self, id, options)
34
47
  end
@@ -1,32 +1,40 @@
1
1
  module Troo
2
2
  module RemoteModelHelpers
3
3
  module ClassMethods
4
+ # @param [Array]
5
+ # @return [Array]
4
6
  def with_collection(resources = [])
5
7
  resources.map { |resource| new(resource) }
6
8
  end
7
9
 
10
+ # @return [Hash]
8
11
  def all
9
12
  {}
10
13
  end
11
14
 
15
+ # @return [Hash]
12
16
  def by_board_id
13
17
  {}
14
18
  end
15
19
 
20
+ # @return [Hash]
16
21
  def by_list_id
17
22
  {}
18
23
  end
19
24
 
25
+ # @return [Hash]
20
26
  def by_card_id
21
27
  {}
22
28
  end
23
29
 
30
+ # @return [Hash]
24
31
  def by_member_id
25
32
  {}
26
33
  end
27
34
  end
28
35
 
29
36
  module InstanceMethods
37
+ # @return []
30
38
  def preprocess
31
39
  associations.map do |association|
32
40
  associated(association).map { |record| record.preprocess }
@@ -35,6 +43,7 @@ module Troo
35
43
  Persistence::Local.persist(self)
36
44
  end
37
45
 
46
+ # @return [Ohm::Model]
38
47
  def local
39
48
  @local ||= local_model.by_external_id(id)
40
49
  end
@@ -0,0 +1,44 @@
1
+ module Troo
2
+ class Launcher
3
+ # @param [Array]
4
+ # @param []
5
+ # @param []
6
+ # @param []
7
+ # @param []
8
+ # @return []
9
+ def initialize(argv, stdin = STDIN,
10
+ stdout = STDOUT,
11
+ stderr = STDERR,
12
+ kernel = Kernel)
13
+ @argv = argv
14
+ @stdin = stdin
15
+ @stdout = stdout
16
+ @stderr = stderr
17
+ @kernel = kernel
18
+ end
19
+
20
+ # @return []
21
+ def execute!
22
+ $stdin, $stdout, $stderr = @stdin, @stdout, @stderr
23
+ pad { Troo::CLI::Main.start(@argv) }
24
+ @kernel.exit(0)
25
+ rescue Errno::ENOENT
26
+ pad { puts "Configuration cannot be found, please run 'troo init'" \
27
+ " first." }
28
+ @kernel.exit(1)
29
+ rescue Redis::CannotConnectError
30
+ pad { puts 'Cannot connect to Redis database.' }
31
+ @kernel.exit(1)
32
+ ensure
33
+ $stdin, $stdout, $stderr = STDIN, STDOUT, STDERR
34
+ end
35
+
36
+ private
37
+
38
+ def pad
39
+ puts
40
+ yield
41
+ puts
42
+ end
43
+ end
44
+ end
@@ -1,6 +1,7 @@
1
1
  module Troo
2
2
  module Behaviours
3
3
  class NullEntity
4
+ # @return [FalseClass]
4
5
  def default?
5
6
  false
6
7
  end
@@ -8,15 +9,20 @@ module Troo
8
9
 
9
10
  class SetDefault
10
11
  class << self
12
+ # @param []
13
+ # @return []
11
14
  def for(entity)
12
15
  new(entity).set_default!
13
16
  end
14
17
  end
15
18
 
19
+ # @param []
20
+ # @return []
16
21
  def initialize(entity)
17
22
  @entity = entity
18
23
  end
19
24
 
25
+ # @return [TrueClass, ?]
20
26
  def set_default!
21
27
  return true if already_default?
22
28
  unset_default
@@ -17,31 +17,40 @@ module Troo
17
17
  alias_method :default?, :default
18
18
 
19
19
  class << self
20
+ # @return [Remote::Board]
20
21
  def remote
21
22
  Remote::Board
22
23
  end
23
24
 
25
+ # @return [Symbol]
24
26
  def type
25
27
  :board
26
28
  end
27
29
  end
28
30
 
31
+ # @return [Ohm::Set]
29
32
  def lists
30
33
  Troo::List.find(external_board_id: external_id)
31
34
  end
32
35
 
36
+ # @return [Ohm::Set]
33
37
  def cards
34
38
  Troo::Card.find(external_board_id: external_id)
35
39
  end
36
40
 
41
+ # @param [Hash]
42
+ # @return []
37
43
  def decorator(options = {})
38
44
  Decorators::Resource.new(self, options)
39
45
  end
40
46
 
47
+ # @param [Hash]
48
+ # @return [Troo::Presenters::Board]
41
49
  def presenter(options = {})
42
50
  Presenters::Board.new(self, options)
43
51
  end
44
52
 
53
+ # @return [Symbol]
45
54
  def type
46
55
  self.class.type
47
56
  end
@@ -26,15 +26,18 @@ module Troo
26
26
  alias_method :description, :desc
27
27
 
28
28
  class << self
29
+ # @return [Remote::Card]
29
30
  def remote
30
31
  Remote::Card
31
32
  end
32
33
 
34
+ # @return [Symbol]
33
35
  def type
34
36
  :card
35
37
  end
36
38
  end
37
39
 
40
+ # @return [Array, Array, String]
38
41
  def external_member_ids
39
42
  if @attributes[:external_member_ids].nil?
40
43
  []
@@ -45,22 +48,27 @@ module Troo
45
48
  end
46
49
  end
47
50
 
51
+ # @return []
48
52
  def board
49
53
  @board ||= Troo::Board.retrieve(external_board_id)
50
54
  end
51
55
 
56
+ # @return []
52
57
  def list
53
58
  @list ||= Troo::List.retrieve(external_list_id)
54
59
  end
55
60
 
61
+ # @return [Ohm::Set]
56
62
  def comments
57
63
  Troo::Comment.find(external_card_id: external_id)
58
64
  end
59
65
 
66
+ # @return []
60
67
  def recent_comments
61
68
  comments.sort(by: :date, limit: [0, 3])
62
69
  end
63
70
 
71
+ # @return []
64
72
  def members
65
73
  return [] if external_member_ids.empty?
66
74
  @members ||= external_member_ids.map do |member_id|
@@ -68,18 +76,25 @@ module Troo
68
76
  end.compact
69
77
  end
70
78
 
79
+ # @param [Hash]
80
+ # @return []
71
81
  def decorator(options = {})
72
82
  Decorators::Resource.new(self, options)
73
83
  end
74
84
 
85
+ # @param [Hash]
86
+ # @return [Troo::Presenters::Card]
75
87
  def presenter(options = {})
76
88
  Presenters::Card.new(self, options)
77
89
  end
78
90
 
91
+ # @param [Hash]
92
+ # @return []
79
93
  def comment_presenter(options = {})
80
94
  Presenters::Comment.new(self, options)
81
95
  end
82
96
 
97
+ # @return [Symbol]
83
98
  def type
84
99
  self.class.type
85
100
  end
@@ -19,35 +19,44 @@ module Troo
19
19
  index :short_id
20
20
 
21
21
  class << self
22
+ # @return [Remote::Comment]
22
23
  def remote
23
24
  Remote::Comment
24
25
  end
25
26
 
27
+ # @return [Symbol]
26
28
  def type
27
29
  :comments
28
30
  end
29
31
  end
30
32
 
33
+ # @return []
31
34
  def board
32
35
  Troo::Board.retrieve(external_board_id)
33
36
  end
34
37
 
38
+ # @return []
35
39
  def card
36
40
  Troo::Card.retrieve(external_card_id)
37
41
  end
38
42
 
43
+ # @return []
39
44
  def member
40
45
  Troo::Member.retrieve(external_member_id)
41
46
  end
42
47
 
48
+ # @param [Hash]
49
+ # @return []
43
50
  def decorator(options = {})
44
51
  Decorators::Resource.new(self, options)
45
52
  end
46
53
 
54
+ # @return [FalseClass]
47
55
  def default?
48
56
  false
49
57
  end
50
58
 
59
+ # @return [Symbol]
51
60
  def type
52
61
  self.class.type
53
62
  end
@@ -19,31 +19,40 @@ module Troo
19
19
  alias_method :default?, :default
20
20
 
21
21
  class << self
22
+ # @return [Remote::List]
22
23
  def remote
23
24
  Remote::List
24
25
  end
25
26
 
27
+ # @return [Symbol]
26
28
  def type
27
29
  :list
28
30
  end
29
31
  end
30
32
 
33
+ # @return []
31
34
  def board
32
35
  Troo::Board.retrieve(external_board_id)
33
36
  end
34
37
 
38
+ # @return [Ohm::Set]
35
39
  def cards
36
40
  Troo::Card.find(external_list_id: external_id)
37
41
  end
38
42
 
43
+ # @param [Hash]
44
+ # @return []
39
45
  def decorator(options = {})
40
46
  Decorators::Resource.new(self, options)
41
47
  end
42
48
 
49
+ # @param [Hash]
50
+ # @return [Troo::Presenters::List]
43
51
  def presenter(options = {})
44
52
  Presenters::List.new(self, options)
45
53
  end
46
54
 
55
+ # @return [Symbol]
47
56
  def type
48
57
  self.class.type
49
58
  end
@@ -17,27 +17,35 @@ module Troo
17
17
  index :short_id
18
18
 
19
19
  class << self
20
+ # @return []
20
21
  def remote
21
22
  Remote::Member
22
23
  end
23
24
 
25
+ # @return [Symbol]
24
26
  def type
25
27
  :member
26
28
  end
27
29
  end
28
30
 
31
+ # @param [Hash]
32
+ # @return []
29
33
  def decorator(options = {})
30
34
  Decorators::Member.new(self, options)
31
35
  end
32
36
 
37
+ # @param [Hash]
38
+ # @return []
33
39
  def presenter(options = {})
34
40
  Presenters::Member.new(decorator, options)
35
41
  end
36
42
 
43
+ # @return [FalseClass]
37
44
  def default?
38
45
  false
39
46
  end
40
47
 
48
+ # @return [Symbol]
41
49
  def type
42
50
  self.class.type
43
51
  end
@@ -8,11 +8,13 @@ module Troo
8
8
  index :last_performed_at
9
9
 
10
10
  class << self
11
+ # @return []
11
12
  def completed!
12
13
  all.map { |record| record.delete }
13
14
  create(last_performed_at: Time.now.to_s)
14
15
  end
15
16
 
17
+ # @return []
16
18
  def last_performed_at
17
19
  first ? first.last_performed_at : nil
18
20
  end
@@ -0,0 +1,9 @@
1
+ module Troo
2
+ class Options
3
+ include Virtus.value_object
4
+
5
+ values do
6
+ attribute :mode
7
+ end
8
+ end
9
+ end
@@ -2,25 +2,33 @@ module Troo
2
2
  module Persistence
3
3
  class Local
4
4
  class << self
5
+ # @param [Array]
6
+ # @return [Array]
5
7
  def with_collection(resources = [])
6
8
  resources.map do |resource|
7
9
  new(resource).preprocess
8
10
  end
9
11
  end
10
12
 
13
+ # @param []
14
+ # @return []
11
15
  def persist(resource)
12
16
  new(resource).persist
13
17
  end
14
18
  end
15
19
 
20
+ # @param []
21
+ # @return [Troo::Persistence::Local]
16
22
  def initialize(resource)
17
23
  @resource = resource
18
24
  end
19
25
 
26
+ # @return []
20
27
  def preprocess
21
28
  resource.preprocess
22
29
  end
23
30
 
31
+ # @return []
24
32
  def persist
25
33
  set_default
26
34
  delete