troo 0.0.3 → 0.0.4
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/lib/troo/actions/set_default.rb +11 -0
- data/lib/troo/cli/default_cli.rb +32 -23
- data/lib/troo/external/board.rb +1 -7
- data/lib/troo/external/card.rb +7 -29
- data/lib/troo/external/comment.rb +10 -29
- data/lib/troo/external/list.rb +10 -23
- data/lib/troo/external/member.rb +10 -17
- data/lib/troo/external/resource.rb +27 -0
- data/lib/troo/models/board_persistence.rb +1 -29
- data/lib/troo/models/card_persistence.rb +1 -29
- data/lib/troo/models/comment_persistence.rb +1 -29
- data/lib/troo/models/list_persistence.rb +1 -29
- data/lib/troo/models/member_persistence.rb +1 -29
- data/lib/troo/models/persistence.rb +39 -0
- data/lib/troo/troo.rb +2 -0
- data/lib/troo/version.rb +1 -1
- data/test/lib/troo/cli/default_cli_test.rb +33 -27
- data/test/lib/troo/external/card_test.rb +11 -0
- data/test/lib/troo/external/comment_test.rb +11 -0
- data/test/lib/troo/external/list_test.rb +22 -0
- data/test/lib/troo/external/member_test.rb +22 -0
- data/test/lib/troo/external/resource_test.rb +8 -0
- data/test/lib/troo/models/persistence_test.rb +6 -0
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4196fd2c2819ea9e6444d5095a58d98de11f2b97
|
4
|
+
data.tar.gz: 27e689c2d9d704d975e22fcb8706e15301ec4788
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1b753a287582cb83a7ef43e8f2ca55adfbb69025eee8c756acb55a5c2df42b3dc1b25fe976d96faa50be0b184efdda23e5582cd7bea6fc75124e72eb33753a0a
|
7
|
+
data.tar.gz: 99a457435748022541e62d94a4cfc6c9ba1d4ccc934946313318fd646f7eb40efbe9e94131631b49ce384523aa22e82791d294a3cc6b7d9793ed8686ffcfd320
|
@@ -1,4 +1,10 @@
|
|
1
1
|
module Troo
|
2
|
+
class NullEntity
|
3
|
+
def default?
|
4
|
+
true
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
2
8
|
class SetDefault
|
3
9
|
class << self
|
4
10
|
def for(entity)
|
@@ -31,5 +37,10 @@ module Troo
|
|
31
37
|
def already_default?
|
32
38
|
entity.default?
|
33
39
|
end
|
40
|
+
|
41
|
+
def entity
|
42
|
+
return NullEntity.new if @entity.nil?
|
43
|
+
@entity
|
44
|
+
end
|
34
45
|
end
|
35
46
|
end
|
data/lib/troo/cli/default_cli.rb
CHANGED
@@ -3,35 +3,44 @@ module Troo
|
|
3
3
|
class Default < ThorFixes
|
4
4
|
package_name "default"
|
5
5
|
|
6
|
-
desc "board <
|
7
|
-
def board(
|
8
|
-
|
9
|
-
SetDefault.for(board)
|
10
|
-
say "Board '#{board.name}' set to default."
|
11
|
-
else
|
12
|
-
say "Board cannot be found."
|
13
|
-
end
|
6
|
+
desc "board <id>", "Set the board <id> to default."
|
7
|
+
def board(id)
|
8
|
+
set_default(id, :board)
|
14
9
|
end
|
15
10
|
|
16
|
-
desc "card <
|
17
|
-
def card(
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
11
|
+
desc "card <id>", "Set the card <id> to default."
|
12
|
+
def card(id)
|
13
|
+
set_default(id, :card)
|
14
|
+
end
|
15
|
+
|
16
|
+
desc "list <id>", "Set the list <id> to default."
|
17
|
+
def list(id)
|
18
|
+
set_default(id, :list)
|
24
19
|
end
|
25
20
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
21
|
+
private
|
22
|
+
|
23
|
+
def set_default(id, type)
|
24
|
+
@id, @type = id, type
|
25
|
+
return success(resource.name) if SetDefault.for(resource)
|
26
|
+
not_found
|
27
|
+
end
|
28
|
+
|
29
|
+
def resource
|
30
|
+
@resource ||= case @type
|
31
|
+
when :board then Troo::BoardRetrieval.retrieve(@id)
|
32
|
+
when :list then Troo::ListRetrieval.retrieve(@id)
|
33
|
+
when :card then Troo::CardRetrieval.retrieve(@id)
|
33
34
|
end
|
34
35
|
end
|
36
|
+
|
37
|
+
def success(resource_name = "")
|
38
|
+
say "'#{resource_name}' set as default #{@type.to_s.downcase}."
|
39
|
+
end
|
40
|
+
|
41
|
+
def not_found
|
42
|
+
say "#{@type.to_s.capitalize} cannot be found."
|
43
|
+
end
|
35
44
|
end
|
36
45
|
end
|
37
46
|
end
|
data/lib/troo/external/board.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module Troo
|
2
2
|
module External
|
3
|
-
class Board
|
3
|
+
class Board < Resource
|
4
4
|
class << self
|
5
5
|
def fetch(external_id, options = {})
|
6
6
|
new(external_id, options).fetch_by_external_id.map do |resource|
|
@@ -13,12 +13,6 @@ module Troo
|
|
13
13
|
Troo::BoardPersistence.for(resource) unless closed?(resource)
|
14
14
|
end
|
15
15
|
end
|
16
|
-
|
17
|
-
private
|
18
|
-
|
19
|
-
def closed?(resource)
|
20
|
-
resource.nil? || resource.closed?
|
21
|
-
end
|
22
16
|
end
|
23
17
|
|
24
18
|
def initialize(external_id = nil, options = {})
|
data/lib/troo/external/card.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module Troo
|
2
2
|
module External
|
3
|
-
class Card
|
3
|
+
class Card < Resource
|
4
4
|
class << self
|
5
5
|
def fetch(external_id, options = {})
|
6
6
|
new(external_id, options).fetch_by_external_id.map do |resource|
|
@@ -10,12 +10,6 @@ module Troo
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
13
|
-
|
14
|
-
private
|
15
|
-
|
16
|
-
def closed?(resource)
|
17
|
-
resource.nil? || resource.closed?
|
18
|
-
end
|
19
13
|
end
|
20
14
|
|
21
15
|
def initialize(external_id, options = {})
|
@@ -23,14 +17,6 @@ module Troo
|
|
23
17
|
@options = options
|
24
18
|
end
|
25
19
|
|
26
|
-
def fetch_by_external_id
|
27
|
-
case options.fetch(:mode)
|
28
|
-
when :board then board_mode
|
29
|
-
when :list then list_mode
|
30
|
-
when :card then card_mode
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
20
|
private
|
35
21
|
attr_reader :external_id
|
36
22
|
|
@@ -42,27 +28,19 @@ module Troo
|
|
42
28
|
{ comments: true, mode: :board }
|
43
29
|
end
|
44
30
|
|
45
|
-
def
|
31
|
+
def by_board_id
|
46
32
|
Trello::Board.find(external_id).cards
|
47
|
-
rescue Trello::InvalidAccessToken
|
48
|
-
raise Troo::InvalidAccessToken
|
49
|
-
rescue Trello::Error
|
50
|
-
[]
|
51
33
|
end
|
52
34
|
|
53
|
-
def
|
35
|
+
def by_list_id
|
54
36
|
Trello::List.find(external_id).cards
|
55
|
-
rescue Trello::InvalidAccessToken
|
56
|
-
raise Troo::InvalidAccessToken
|
57
|
-
rescue Trello::Error
|
58
|
-
[]
|
59
37
|
end
|
60
38
|
|
61
|
-
def
|
39
|
+
def by_card_id
|
62
40
|
[Trello::Card.find(external_id)]
|
63
|
-
|
64
|
-
|
65
|
-
|
41
|
+
end
|
42
|
+
|
43
|
+
def by_member_id
|
66
44
|
[]
|
67
45
|
end
|
68
46
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module Troo
|
2
2
|
module External
|
3
|
-
class Comment
|
3
|
+
class Comment < Resource
|
4
4
|
class << self
|
5
5
|
def fetch(external_id, options = {})
|
6
6
|
new(external_id, options).fetch_by_external_id.map do |resource|
|
@@ -14,14 +14,6 @@ module Troo
|
|
14
14
|
@options = options
|
15
15
|
end
|
16
16
|
|
17
|
-
def fetch_by_external_id
|
18
|
-
case options.fetch(:mode)
|
19
|
-
when :board then board_mode
|
20
|
-
when :list then list_mode
|
21
|
-
when :card then card_mode
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
17
|
private
|
26
18
|
attr_reader :external_id
|
27
19
|
|
@@ -33,30 +25,19 @@ module Troo
|
|
33
25
|
{ mode: :board }
|
34
26
|
end
|
35
27
|
|
36
|
-
def
|
37
|
-
Trello::Board.find(external_id).actions({ filter: "commentCard" })
|
38
|
-
delete_if { |a| a.nil? || a.type != "commentCard" }
|
39
|
-
rescue Trello::InvalidAccessToken
|
40
|
-
raise Troo::InvalidAccessToken
|
41
|
-
rescue Trello::Error
|
42
|
-
[]
|
28
|
+
def by_board_id
|
29
|
+
Trello::Board.find(external_id).actions({ filter: "commentCard" })
|
43
30
|
end
|
44
31
|
|
45
|
-
def
|
46
|
-
Trello::List.find(external_id).actions({ filter: "commentCard" })
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
[]
|
32
|
+
def by_list_id
|
33
|
+
Trello::List.find(external_id).actions({ filter: "commentCard" })
|
34
|
+
end
|
35
|
+
|
36
|
+
def by_card_id
|
37
|
+
Trello::Card.find(external_id).actions({ filter: "commentCard" })
|
52
38
|
end
|
53
39
|
|
54
|
-
def
|
55
|
-
Trello::Card.find(external_id).actions({ filter: "commentCard" }).
|
56
|
-
delete_if { |a| a.nil? || a.type != "commentCard" }
|
57
|
-
rescue Trello::InvalidAccessToken
|
58
|
-
raise Troo::InvalidAccessToken
|
59
|
-
rescue Trello::Error
|
40
|
+
def by_member_id
|
60
41
|
[]
|
61
42
|
end
|
62
43
|
end
|
data/lib/troo/external/list.rb
CHANGED
@@ -1,18 +1,12 @@
|
|
1
1
|
module Troo
|
2
2
|
module External
|
3
|
-
class List
|
3
|
+
class List < Resource
|
4
4
|
class << self
|
5
5
|
def fetch(external_id, options = {})
|
6
6
|
new(external_id, options).fetch_by_external_id.map do |resource|
|
7
7
|
Troo::ListPersistence.for(resource) unless closed?(resource)
|
8
8
|
end
|
9
9
|
end
|
10
|
-
|
11
|
-
private
|
12
|
-
|
13
|
-
def closed?(resource)
|
14
|
-
resource.nil? || resource.closed?
|
15
|
-
end
|
16
10
|
end
|
17
11
|
|
18
12
|
def initialize(external_id, options = {})
|
@@ -20,13 +14,6 @@ module Troo
|
|
20
14
|
@options = options
|
21
15
|
end
|
22
16
|
|
23
|
-
def fetch_by_external_id
|
24
|
-
case options.fetch(:mode)
|
25
|
-
when :board then board_mode
|
26
|
-
when :list then list_mode
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
17
|
private
|
31
18
|
attr_reader :external_id
|
32
19
|
|
@@ -38,19 +25,19 @@ module Troo
|
|
38
25
|
{ mode: :board }
|
39
26
|
end
|
40
27
|
|
41
|
-
def
|
28
|
+
def by_board_id
|
42
29
|
Trello::Board.find(external_id).lists
|
43
|
-
rescue Trello::InvalidAccessToken
|
44
|
-
raise Troo::InvalidAccessToken
|
45
|
-
rescue Trello::Error
|
46
|
-
[]
|
47
30
|
end
|
48
31
|
|
49
|
-
def
|
32
|
+
def by_list_id
|
50
33
|
[Trello::List.find(external_id)]
|
51
|
-
|
52
|
-
|
53
|
-
|
34
|
+
end
|
35
|
+
|
36
|
+
def by_card_id
|
37
|
+
[]
|
38
|
+
end
|
39
|
+
|
40
|
+
def by_member_id
|
54
41
|
[]
|
55
42
|
end
|
56
43
|
end
|
data/lib/troo/external/member.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module Troo
|
2
2
|
module External
|
3
|
-
class Member
|
3
|
+
class Member < Resource
|
4
4
|
class << self
|
5
5
|
def fetch(external_id, options = {})
|
6
6
|
new(external_id, options).fetch_by_external_id.map do |resource|
|
@@ -14,13 +14,6 @@ module Troo
|
|
14
14
|
@options = options
|
15
15
|
end
|
16
16
|
|
17
|
-
def fetch_by_external_id
|
18
|
-
case options.fetch(:mode)
|
19
|
-
when :board then board_mode
|
20
|
-
when :member then member_mode
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
17
|
private
|
25
18
|
attr_reader :external_id
|
26
19
|
|
@@ -32,21 +25,21 @@ module Troo
|
|
32
25
|
{ mode: :board }
|
33
26
|
end
|
34
27
|
|
35
|
-
def
|
28
|
+
def by_board_id
|
36
29
|
Trello::Board.find(external_id).members
|
37
|
-
|
38
|
-
|
39
|
-
|
30
|
+
end
|
31
|
+
|
32
|
+
def by_list_id
|
40
33
|
[]
|
41
34
|
end
|
42
35
|
|
43
|
-
def
|
44
|
-
[Trello::Member.find(external_id)]
|
45
|
-
rescue Trello::InvalidAccessToken
|
46
|
-
raise Troo::InvalidAccessToken
|
47
|
-
rescue Trello::Error
|
36
|
+
def by_card_id
|
48
37
|
[]
|
49
38
|
end
|
39
|
+
|
40
|
+
def by_member_id
|
41
|
+
[Trello::Member.find(external_id)]
|
42
|
+
end
|
50
43
|
end
|
51
44
|
end
|
52
45
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Troo
|
2
|
+
module External
|
3
|
+
class Resource
|
4
|
+
class << self
|
5
|
+
private
|
6
|
+
|
7
|
+
def closed?(resource)
|
8
|
+
resource.nil? || resource.closed?
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def fetch_by_external_id
|
13
|
+
case options.fetch(:mode)
|
14
|
+
when :board then by_board_id
|
15
|
+
when :list then by_list_id
|
16
|
+
when :card then by_card_id
|
17
|
+
when :member then by_member_id
|
18
|
+
end
|
19
|
+
rescue Trello::InvalidAccessToken
|
20
|
+
raise Troo::InvalidAccessToken
|
21
|
+
rescue Trello::Error
|
22
|
+
[]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
@@ -1,22 +1,12 @@
|
|
1
1
|
module Troo
|
2
2
|
class BoardPersistence
|
3
|
-
|
4
|
-
def for(resource, options = {})
|
5
|
-
new(resource, options).persist
|
6
|
-
end
|
7
|
-
end
|
3
|
+
include Persistence
|
8
4
|
|
9
5
|
def initialize(resource, options = {})
|
10
6
|
@resource = resource
|
11
7
|
@options = options
|
12
8
|
end
|
13
9
|
|
14
|
-
def persist
|
15
|
-
return local if local_identical?
|
16
|
-
return updated if local_exists?
|
17
|
-
return created
|
18
|
-
end
|
19
|
-
|
20
10
|
private
|
21
11
|
attr_reader :resource, :options
|
22
12
|
|
@@ -24,24 +14,6 @@ module Troo
|
|
24
14
|
Troo::Board.create(remote)
|
25
15
|
end
|
26
16
|
|
27
|
-
def updated
|
28
|
-
local.update(remote) && local
|
29
|
-
end
|
30
|
-
|
31
|
-
def local_identical?
|
32
|
-
return false unless local_exists?
|
33
|
-
return false if local_data != remote
|
34
|
-
true
|
35
|
-
end
|
36
|
-
|
37
|
-
def local_data
|
38
|
-
local.external_attributes
|
39
|
-
end
|
40
|
-
|
41
|
-
def local_exists?
|
42
|
-
!!local
|
43
|
-
end
|
44
|
-
|
45
17
|
def local
|
46
18
|
@local ||= Troo::Board.first(external_board_id: resource.id)
|
47
19
|
end
|
@@ -1,22 +1,12 @@
|
|
1
1
|
module Troo
|
2
2
|
class CardPersistence
|
3
|
-
|
4
|
-
def for(resource, options = {})
|
5
|
-
new(resource, options).persist
|
6
|
-
end
|
7
|
-
end
|
3
|
+
include Persistence
|
8
4
|
|
9
5
|
def initialize(resource, options = {})
|
10
6
|
@resource = resource
|
11
7
|
@options = options
|
12
8
|
end
|
13
9
|
|
14
|
-
def persist
|
15
|
-
return local if local_identical?
|
16
|
-
return updated if local_exists?
|
17
|
-
return created
|
18
|
-
end
|
19
|
-
|
20
10
|
private
|
21
11
|
attr_reader :resource, :options
|
22
12
|
|
@@ -24,24 +14,6 @@ module Troo
|
|
24
14
|
Troo::Card.create(remote)
|
25
15
|
end
|
26
16
|
|
27
|
-
def updated
|
28
|
-
local.update(remote) && local
|
29
|
-
end
|
30
|
-
|
31
|
-
def local_identical?
|
32
|
-
return false unless local_exists?
|
33
|
-
return false if local_data != remote
|
34
|
-
true
|
35
|
-
end
|
36
|
-
|
37
|
-
def local_data
|
38
|
-
local.external_attributes
|
39
|
-
end
|
40
|
-
|
41
|
-
def local_exists?
|
42
|
-
!!local
|
43
|
-
end
|
44
|
-
|
45
17
|
def local
|
46
18
|
@local ||= Troo::Card.first(external_card_id: resource.id)
|
47
19
|
end
|
@@ -1,22 +1,12 @@
|
|
1
1
|
module Troo
|
2
2
|
class CommentPersistence
|
3
|
-
|
4
|
-
def for(resource, options = {})
|
5
|
-
new(resource, options).persist
|
6
|
-
end
|
7
|
-
end
|
3
|
+
include Persistence
|
8
4
|
|
9
5
|
def initialize(resource, options = {})
|
10
6
|
@resource = resource
|
11
7
|
@options = options
|
12
8
|
end
|
13
9
|
|
14
|
-
def persist
|
15
|
-
return local if local_identical?
|
16
|
-
return updated if local_exists?
|
17
|
-
return created
|
18
|
-
end
|
19
|
-
|
20
10
|
private
|
21
11
|
attr_reader :resource, :options
|
22
12
|
|
@@ -24,24 +14,6 @@ module Troo
|
|
24
14
|
Troo::Comment.create(remote)
|
25
15
|
end
|
26
16
|
|
27
|
-
def updated
|
28
|
-
local.update(remote) && local
|
29
|
-
end
|
30
|
-
|
31
|
-
def local_identical?
|
32
|
-
return false unless local_exists?
|
33
|
-
return false if local_data != remote
|
34
|
-
true
|
35
|
-
end
|
36
|
-
|
37
|
-
def local_data
|
38
|
-
local.external_attributes
|
39
|
-
end
|
40
|
-
|
41
|
-
def local_exists?
|
42
|
-
!!local
|
43
|
-
end
|
44
|
-
|
45
17
|
def local
|
46
18
|
@local ||= Troo::Comment.first(external_comment_id: resource.id)
|
47
19
|
end
|
@@ -1,22 +1,12 @@
|
|
1
1
|
module Troo
|
2
2
|
class ListPersistence
|
3
|
-
|
4
|
-
def for(resource, options = {})
|
5
|
-
new(resource, options).persist
|
6
|
-
end
|
7
|
-
end
|
3
|
+
include Persistence
|
8
4
|
|
9
5
|
def initialize(resource, options = {})
|
10
6
|
@resource = resource
|
11
7
|
@options = options
|
12
8
|
end
|
13
9
|
|
14
|
-
def persist
|
15
|
-
return local if local_identical?
|
16
|
-
return updated if local_exists?
|
17
|
-
return created
|
18
|
-
end
|
19
|
-
|
20
10
|
private
|
21
11
|
attr_reader :resource, :options
|
22
12
|
|
@@ -24,24 +14,6 @@ module Troo
|
|
24
14
|
Troo::List.create(remote)
|
25
15
|
end
|
26
16
|
|
27
|
-
def updated
|
28
|
-
local.update(remote) && local
|
29
|
-
end
|
30
|
-
|
31
|
-
def local_identical?
|
32
|
-
return false unless local_exists?
|
33
|
-
return false if local_data != remote
|
34
|
-
true
|
35
|
-
end
|
36
|
-
|
37
|
-
def local_data
|
38
|
-
local.external_attributes
|
39
|
-
end
|
40
|
-
|
41
|
-
def local_exists?
|
42
|
-
!!local
|
43
|
-
end
|
44
|
-
|
45
17
|
def local
|
46
18
|
@local ||= Troo::List.first(external_list_id: resource.id)
|
47
19
|
end
|
@@ -1,22 +1,12 @@
|
|
1
1
|
module Troo
|
2
2
|
class MemberPersistence
|
3
|
-
|
4
|
-
def for(resource, options = {})
|
5
|
-
new(resource, options).persist
|
6
|
-
end
|
7
|
-
end
|
3
|
+
include Persistence
|
8
4
|
|
9
5
|
def initialize(resource, options = {})
|
10
6
|
@resource = resource
|
11
7
|
@options = options
|
12
8
|
end
|
13
9
|
|
14
|
-
def persist
|
15
|
-
return local if local_identical?
|
16
|
-
return updated if local_exists?
|
17
|
-
return created
|
18
|
-
end
|
19
|
-
|
20
10
|
private
|
21
11
|
attr_reader :resource, :options
|
22
12
|
|
@@ -24,24 +14,6 @@ module Troo
|
|
24
14
|
Troo::Member.create(remote)
|
25
15
|
end
|
26
16
|
|
27
|
-
def updated
|
28
|
-
local.update(remote) && local
|
29
|
-
end
|
30
|
-
|
31
|
-
def local_identical?
|
32
|
-
return false unless local_exists?
|
33
|
-
return false if local_data != remote
|
34
|
-
true
|
35
|
-
end
|
36
|
-
|
37
|
-
def local_data
|
38
|
-
local.external_attributes
|
39
|
-
end
|
40
|
-
|
41
|
-
def local_exists?
|
42
|
-
!!local
|
43
|
-
end
|
44
|
-
|
45
17
|
def local
|
46
18
|
@local ||= Troo::Member.first(external_member_id: resource.id)
|
47
19
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Troo
|
2
|
+
module Persistence
|
3
|
+
module ClassMethods
|
4
|
+
def for(resource, options = {})
|
5
|
+
new(resource, options).persist
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.included(base)
|
10
|
+
base.extend(ClassMethods)
|
11
|
+
end
|
12
|
+
|
13
|
+
def persist
|
14
|
+
return local if local_identical?
|
15
|
+
return updated if local_exists?
|
16
|
+
return created
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def updated
|
22
|
+
local.update(remote) && local
|
23
|
+
end
|
24
|
+
|
25
|
+
def local_identical?
|
26
|
+
return false unless local_exists?
|
27
|
+
return false if local_data != remote
|
28
|
+
true
|
29
|
+
end
|
30
|
+
|
31
|
+
def local_data
|
32
|
+
local.external_attributes
|
33
|
+
end
|
34
|
+
|
35
|
+
def local_exists?
|
36
|
+
!!local
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/lib/troo/troo.rb
CHANGED
@@ -19,6 +19,7 @@ require_relative "actions/move_card"
|
|
19
19
|
require_relative "actions/refresh_all"
|
20
20
|
require_relative "actions/set_default"
|
21
21
|
|
22
|
+
require_relative "external/resource"
|
22
23
|
require_relative "external/board"
|
23
24
|
require_relative "external/card"
|
24
25
|
require_relative "external/comment"
|
@@ -46,6 +47,7 @@ require_relative "display/member_presenter"
|
|
46
47
|
require_relative "presentation/template"
|
47
48
|
|
48
49
|
require_relative "models/model_helpers"
|
50
|
+
require_relative "models/persistence"
|
49
51
|
require_relative "models/board"
|
50
52
|
require_relative "models/board_retrieval"
|
51
53
|
require_relative "models/board_persistence"
|
data/lib/troo/version.rb
CHANGED
@@ -5,26 +5,13 @@ module Troo
|
|
5
5
|
module CLI
|
6
6
|
describe Default do
|
7
7
|
let(:described_class) { Default }
|
8
|
-
let(:board_id) { "526d8e130a14a9d846001d96" }
|
9
|
-
let(:card_id) { "526d8f19ddb279532e005259" }
|
10
|
-
let(:list_id) { "526d8e130a14a9d846001d97" }
|
11
|
-
|
12
|
-
before do
|
13
|
-
@board = Fabricate.build(:board)
|
14
|
-
@list = Fabricate.build(:list)
|
15
|
-
@card = Fabricate.build(:card)
|
16
|
-
|
17
|
-
Troo::BoardRetrieval.stubs(:retrieve).returns(@board)
|
18
|
-
Troo::CardRetrieval.stubs(:retrieve).returns(@card)
|
19
|
-
Troo::ListRetrieval.stubs(:retrieve).returns(@list)
|
20
|
-
end
|
21
|
-
|
22
|
-
after { database_cleanup }
|
23
8
|
|
24
9
|
describe "#board" do
|
25
|
-
|
10
|
+
let(:id) { "526d8e130a14a9d846001d96" }
|
11
|
+
|
12
|
+
subject { capture_io { described_class.new.board(id) }.join }
|
26
13
|
|
27
|
-
context "when the
|
14
|
+
context "when the id cannot be found" do
|
28
15
|
before { Troo::BoardRetrieval.stubs(:retrieve).returns(nil) }
|
29
16
|
|
30
17
|
it "returns a polite message" do
|
@@ -32,17 +19,29 @@ module Troo
|
|
32
19
|
end
|
33
20
|
end
|
34
21
|
|
35
|
-
context "when the
|
22
|
+
context "when the id was found" do
|
23
|
+
before do
|
24
|
+
@board = Fabricate.build(:board)
|
25
|
+
Troo::BoardRetrieval.stubs(:retrieve).returns(@board)
|
26
|
+
end
|
27
|
+
|
36
28
|
it "returns a polite message" do
|
37
|
-
subject.must_match /
|
29
|
+
subject.must_match /'#{@board.name}' set as default/
|
38
30
|
end
|
39
31
|
end
|
40
32
|
end
|
41
33
|
|
42
34
|
describe "#card" do
|
43
|
-
|
35
|
+
let(:id) { "526d8f19ddb279532e005259" }
|
44
36
|
|
45
|
-
|
37
|
+
before do
|
38
|
+
@card = Fabricate.build(:card)
|
39
|
+
Troo::CardRetrieval.stubs(:retrieve).returns(@card)
|
40
|
+
end
|
41
|
+
|
42
|
+
subject { capture_io { described_class.new.card(id) }.join }
|
43
|
+
|
44
|
+
context "when the id cannot be found" do
|
46
45
|
before { Troo::CardRetrieval.stubs(:retrieve).returns(nil) }
|
47
46
|
|
48
47
|
it "returns a polite message" do
|
@@ -50,17 +49,19 @@ module Troo
|
|
50
49
|
end
|
51
50
|
end
|
52
51
|
|
53
|
-
context "when the
|
52
|
+
context "when the id was found" do
|
54
53
|
it "returns a polite message" do
|
55
|
-
subject.must_match /
|
54
|
+
subject.must_match /'#{@card.name}' set as default/
|
56
55
|
end
|
57
56
|
end
|
58
57
|
end
|
59
58
|
|
60
59
|
describe "#list" do
|
61
|
-
|
60
|
+
let(:id) { "526d8e130a14a9d846001d97" }
|
61
|
+
|
62
|
+
subject { capture_io { described_class.new.list(id) }.join }
|
62
63
|
|
63
|
-
context "when the
|
64
|
+
context "when the id cannot be found" do
|
64
65
|
before { Troo::ListRetrieval.stubs(:retrieve).returns(nil) }
|
65
66
|
|
66
67
|
it "returns a polite message" do
|
@@ -68,9 +69,14 @@ module Troo
|
|
68
69
|
end
|
69
70
|
end
|
70
71
|
|
71
|
-
context "when the
|
72
|
+
context "when the id was found" do
|
73
|
+
before do
|
74
|
+
@list = Fabricate.build(:list)
|
75
|
+
Troo::ListRetrieval.stubs(:retrieve).returns(@list)
|
76
|
+
end
|
77
|
+
|
72
78
|
it "returns a polite message" do
|
73
|
-
subject.must_match /
|
79
|
+
subject.must_match /'#{@list.name}' set as default/
|
74
80
|
end
|
75
81
|
end
|
76
82
|
end
|
@@ -103,6 +103,17 @@ module Troo
|
|
103
103
|
subject.size.must_equal(1)
|
104
104
|
end
|
105
105
|
end
|
106
|
+
|
107
|
+
describe "when the mode is member" do
|
108
|
+
let(:member_id) { "5195fdb5a8c01a2318004f5d" }
|
109
|
+
let(:options) { { mode: :member, comments: false } }
|
110
|
+
|
111
|
+
subject { described_class.fetch(member_id, options) }
|
112
|
+
|
113
|
+
it "returns an empty collection" do
|
114
|
+
subject.must_equal([])
|
115
|
+
end
|
116
|
+
end
|
106
117
|
end
|
107
118
|
end
|
108
119
|
end
|
@@ -83,6 +83,17 @@ module Troo
|
|
83
83
|
end
|
84
84
|
end
|
85
85
|
end
|
86
|
+
|
87
|
+
describe "when the mode is member" do
|
88
|
+
let(:member_id) { "5195fdb5a8c01a2318004f5d" }
|
89
|
+
let(:options) { { mode: :member } }
|
90
|
+
|
91
|
+
subject { described_class.fetch(member_id, options) }
|
92
|
+
|
93
|
+
it "returns an empty collection" do
|
94
|
+
subject.must_equal([])
|
95
|
+
end
|
96
|
+
end
|
86
97
|
end
|
87
98
|
end
|
88
99
|
end
|
@@ -60,6 +60,28 @@ module Troo
|
|
60
60
|
end
|
61
61
|
end
|
62
62
|
end
|
63
|
+
|
64
|
+
describe "when the mode is card" do
|
65
|
+
let(:card_id) { "526d8f19ddb279532e005259" }
|
66
|
+
let(:options) { { mode: :card } }
|
67
|
+
|
68
|
+
subject { described_class.fetch(card_id, options) }
|
69
|
+
|
70
|
+
it "returns an empty collection" do
|
71
|
+
subject.must_equal([])
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
describe "when the mode is member" do
|
76
|
+
let(:member_id) { "5195fdb5a8c01a2318004f5d" }
|
77
|
+
let(:options) { { mode: :member } }
|
78
|
+
|
79
|
+
subject { described_class.fetch(member_id, options) }
|
80
|
+
|
81
|
+
it "returns an empty collection" do
|
82
|
+
subject.must_equal([])
|
83
|
+
end
|
84
|
+
end
|
63
85
|
end
|
64
86
|
end
|
65
87
|
end
|
@@ -39,6 +39,28 @@ module Troo
|
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
+
describe "when the mode is list" do
|
43
|
+
let(:list_id) { "526d8e130a14a9d846001d97" }
|
44
|
+
let(:options) { { mode: :list } }
|
45
|
+
|
46
|
+
subject { described_class.fetch(list_id, options) }
|
47
|
+
|
48
|
+
it "returns an empty collection" do
|
49
|
+
subject.must_equal([])
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe "when the mode is card" do
|
54
|
+
let(:card_id) { "526d8f19ddb279532e005259" }
|
55
|
+
let(:options) { { mode: :card } }
|
56
|
+
|
57
|
+
subject { described_class.fetch(card_id, options) }
|
58
|
+
|
59
|
+
it "returns an empty collection" do
|
60
|
+
subject.must_equal([])
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
42
64
|
describe "when the mode is member" do
|
43
65
|
before { VCR.insert_cassette(:member_by_member_id, decode_compressed_response: true) }
|
44
66
|
after { VCR.eject_cassette }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: troo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gavin Laking
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-01-
|
11
|
+
date: 2014-01-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aruba
|
@@ -345,6 +345,7 @@ files:
|
|
345
345
|
- lib/troo/external/list_adaptor.rb
|
346
346
|
- lib/troo/external/member.rb
|
347
347
|
- lib/troo/external/member_adaptor.rb
|
348
|
+
- lib/troo/external/resource.rb
|
348
349
|
- lib/troo/models/board.rb
|
349
350
|
- lib/troo/models/board_persistence.rb
|
350
351
|
- lib/troo/models/board_retrieval.rb
|
@@ -361,6 +362,7 @@ files:
|
|
361
362
|
- lib/troo/models/member_persistence.rb
|
362
363
|
- lib/troo/models/member_retrieval.rb
|
363
364
|
- lib/troo/models/model_helpers.rb
|
365
|
+
- lib/troo/models/persistence.rb
|
364
366
|
- lib/troo/models/refresh.rb
|
365
367
|
- lib/troo/presentation/template.rb
|
366
368
|
- lib/troo/troo.rb
|
@@ -418,6 +420,7 @@ files:
|
|
418
420
|
- test/lib/troo/external/list_test.rb
|
419
421
|
- test/lib/troo/external/member_adaptor_test.rb
|
420
422
|
- test/lib/troo/external/member_test.rb
|
423
|
+
- test/lib/troo/external/resource_test.rb
|
421
424
|
- test/lib/troo/models/board_persistence_test.rb
|
422
425
|
- test/lib/troo/models/board_retrieval_test.rb
|
423
426
|
- test/lib/troo/models/board_test.rb
|
@@ -434,6 +437,7 @@ files:
|
|
434
437
|
- test/lib/troo/models/member_retrieval_test.rb
|
435
438
|
- test/lib/troo/models/member_test.rb
|
436
439
|
- test/lib/troo/models/model_helpers_test.rb
|
440
|
+
- test/lib/troo/models/persistence_test.rb
|
437
441
|
- test/lib/troo/models/refresh_test.rb
|
438
442
|
- test/lib/troo/presentation/template_test.rb
|
439
443
|
- test/support/fabrication.rb
|
@@ -534,6 +538,7 @@ test_files:
|
|
534
538
|
- test/lib/troo/external/list_test.rb
|
535
539
|
- test/lib/troo/external/member_adaptor_test.rb
|
536
540
|
- test/lib/troo/external/member_test.rb
|
541
|
+
- test/lib/troo/external/resource_test.rb
|
537
542
|
- test/lib/troo/models/board_persistence_test.rb
|
538
543
|
- test/lib/troo/models/board_retrieval_test.rb
|
539
544
|
- test/lib/troo/models/board_test.rb
|
@@ -550,6 +555,7 @@ test_files:
|
|
550
555
|
- test/lib/troo/models/member_retrieval_test.rb
|
551
556
|
- test/lib/troo/models/member_test.rb
|
552
557
|
- test/lib/troo/models/model_helpers_test.rb
|
558
|
+
- test/lib/troo/models/persistence_test.rb
|
553
559
|
- test/lib/troo/models/refresh_test.rb
|
554
560
|
- test/lib/troo/presentation/template_test.rb
|
555
561
|
- test/support/fabrication.rb
|