troo 0.0.1 → 0.0.2
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 +7 -0
- data/.ruby-version +1 -0
- data/Gemfile +0 -1
- data/Guardfile +6 -0
- data/LICENSE.txt +1 -0
- data/README.md +46 -3
- data/Rakefile +11 -0
- data/bin/troo +12 -0
- data/configuration.yml.example +7 -0
- data/features/add_board.feature +1 -0
- data/features/add_card.feature +1 -0
- data/features/add_comment.feature +1 -0
- data/features/add_list.feature +1 -0
- data/features/cleanup.feature +0 -0
- data/features/move_card_to_list.feature +1 -0
- data/features/refresh.feature +1 -0
- data/features/set_default.feature +7 -0
- data/features/show_board.feature +1 -0
- data/features/show_boards.feature +1 -0
- data/features/show_card.feature +1 -0
- data/features/show_comments.feature +1 -0
- data/features/show_list.feature +1 -0
- data/features/status.feature +1 -0
- data/features/step_definitions/troo_steps.rb +0 -0
- data/features/support/env.rb +31 -0
- data/features/troo.feature +1 -0
- data/features/version.feature +8 -0
- data/lib/troo.rb +24 -2
- data/lib/troo/actions/create_board.rb +43 -0
- data/lib/troo/actions/create_card.rb +43 -0
- data/lib/troo/actions/create_comment.rb +44 -0
- data/lib/troo/actions/create_list.rb +41 -0
- data/lib/troo/actions/move_card.rb +36 -0
- data/lib/troo/actions/refresh_all.rb +79 -0
- data/lib/troo/actions/set_default.rb +35 -0
- data/lib/troo/cli/add_cli.rb +83 -0
- data/lib/troo/cli/default_cli.rb +37 -0
- data/lib/troo/cli/main_cli.rb +130 -0
- data/lib/troo/cli/show_cli.rb +83 -0
- data/lib/troo/cli/thor_fixes.rb +9 -0
- data/lib/troo/display/board_decorator.rb +58 -0
- data/lib/troo/display/board_presenter.rb +65 -0
- data/lib/troo/display/card_decorator.rb +105 -0
- data/lib/troo/display/card_presenter.rb +27 -0
- data/lib/troo/display/comment_decorator.rb +32 -0
- data/lib/troo/display/comment_presenter.rb +35 -0
- data/lib/troo/display/decorator_helpers.rb +76 -0
- data/lib/troo/display/list_decorator.rb +53 -0
- data/lib/troo/display/list_presenter.rb +43 -0
- data/lib/troo/display/member_decorator.rb +24 -0
- data/lib/troo/display/member_presenter.rb +59 -0
- data/lib/troo/external/board.rb +49 -0
- data/lib/troo/external/board_adaptor.rb +43 -0
- data/lib/troo/external/card.rb +70 -0
- data/lib/troo/external/card_adaptor.rb +78 -0
- data/lib/troo/external/comment.rb +64 -0
- data/lib/troo/external/comment_adaptor.rb +53 -0
- data/lib/troo/external/list.rb +58 -0
- data/lib/troo/external/list_adaptor.rb +48 -0
- data/lib/troo/external/member.rb +52 -0
- data/lib/troo/external/member_adaptor.rb +63 -0
- data/lib/troo/models/board.rb +26 -0
- data/lib/troo/models/board_persistence.rb +53 -0
- data/lib/troo/models/board_retrieval.rb +45 -0
- data/lib/troo/models/card.rb +54 -0
- data/lib/troo/models/card_persistence.rb +53 -0
- data/lib/troo/models/card_retrieval.rb +49 -0
- data/lib/troo/models/comment.rb +32 -0
- data/lib/troo/models/comment_persistence.rb +53 -0
- data/lib/troo/models/comment_retrieval.rb +32 -0
- data/lib/troo/models/list.rb +27 -0
- data/lib/troo/models/list_persistence.rb +53 -0
- data/lib/troo/models/list_retrieval.rb +45 -0
- data/lib/troo/models/member.rb +18 -0
- data/lib/troo/models/member_persistence.rb +53 -0
- data/lib/troo/models/member_retrieval.rb +36 -0
- data/lib/troo/models/model_helpers.rb +32 -0
- data/lib/troo/models/refresh.rb +23 -0
- data/lib/troo/presentation/template.rb +31 -0
- data/lib/troo/troo.rb +69 -0
- data/lib/troo/version.rb +2 -1
- data/lib/troo/views/card.erb +17 -0
- data/lib/troo/views/comment.erb +3 -0
- data/logs/.gitkeep +0 -0
- data/test/cassettes/board_by_id.yml +59 -0
- data/test/cassettes/boards_all.yml +118 -0
- data/test/cassettes/card_by_card_id.yml +58 -0
- data/test/cassettes/cards_by_board_id.yml +117 -0
- data/test/cassettes/cards_by_list_id.yml +114 -0
- data/test/cassettes/comments_by_board_id.yml +122 -0
- data/test/cassettes/comments_by_card_id.yml +114 -0
- data/test/cassettes/comments_by_list_id.yml +109 -0
- data/test/cassettes/create_board.yml +62 -0
- data/test/cassettes/create_card.yml +63 -0
- data/test/cassettes/create_comment.yml +67 -0
- data/test/cassettes/create_list.yml +60 -0
- data/test/cassettes/list_by_list_id.yml +56 -0
- data/test/cassettes/lists_by_board_id.yml +118 -0
- data/test/cassettes/member_by_member_id.yml +60 -0
- data/test/cassettes/members_by_board_id.yml +109 -0
- data/test/cassettes/move_card.yml +61 -0
- data/test/lib/troo/actions/create_board_test.rb +47 -0
- data/test/lib/troo/actions/create_card_test.rb +54 -0
- data/test/lib/troo/actions/create_comment_test.rb +49 -0
- data/test/lib/troo/actions/create_list_test.rb +49 -0
- data/test/lib/troo/actions/move_card_test.rb +46 -0
- data/test/lib/troo/actions/refresh_all_test.rb +68 -0
- data/test/lib/troo/actions/set_default_test.rb +44 -0
- data/test/lib/troo/cli/add_cli_test.rb +216 -0
- data/test/lib/troo/cli/default_cli_test.rb +79 -0
- data/test/lib/troo/cli/main_cli_test.rb +232 -0
- data/test/lib/troo/cli/show_cli_test.rb +221 -0
- data/test/lib/troo/cli/thor_fixes_test.rb +21 -0
- data/test/lib/troo/display/board_decorator_test.rb +126 -0
- data/test/lib/troo/display/board_presenter_test.rb +77 -0
- data/test/lib/troo/display/card_decorator_test.rb +221 -0
- data/test/lib/troo/display/card_presenter_test.rb +38 -0
- data/test/lib/troo/display/comment_decorator_test.rb +65 -0
- data/test/lib/troo/display/comment_presenter_test.rb +47 -0
- data/test/lib/troo/display/decorator_helpers_test.rb +7 -0
- data/test/lib/troo/display/list_decorator_test.rb +98 -0
- data/test/lib/troo/display/list_presenter_test.rb +48 -0
- data/test/lib/troo/display/member_decorator_test.rb +42 -0
- data/test/lib/troo/display/member_presenter_test.rb +70 -0
- data/test/lib/troo/external/board_adaptor_test.rb +36 -0
- data/test/lib/troo/external/board_test.rb +69 -0
- data/test/lib/troo/external/card_adaptor_test.rb +50 -0
- data/test/lib/troo/external/card_test.rb +108 -0
- data/test/lib/troo/external/comment_adaptor_test.rb +41 -0
- data/test/lib/troo/external/comment_test.rb +88 -0
- data/test/lib/troo/external/list_adaptor_test.rb +38 -0
- data/test/lib/troo/external/list_test.rb +65 -0
- data/test/lib/troo/external/member_adaptor_test.rb +44 -0
- data/test/lib/troo/external/member_test.rb +65 -0
- data/test/lib/troo/models/board_persistence_test.rb +61 -0
- data/test/lib/troo/models/board_retrieval_test.rb +93 -0
- data/test/lib/troo/models/board_test.rb +50 -0
- data/test/lib/troo/models/card_persistence_test.rb +60 -0
- data/test/lib/troo/models/card_retrieval_test.rb +101 -0
- data/test/lib/troo/models/card_test.rb +102 -0
- data/test/lib/troo/models/comment_persistence_test.rb +65 -0
- data/test/lib/troo/models/comment_retrieval_test.rb +46 -0
- data/test/lib/troo/models/comment_test.rb +59 -0
- data/test/lib/troo/models/list_persistence_test.rb +60 -0
- data/test/lib/troo/models/list_retrieval_test.rb +93 -0
- data/test/lib/troo/models/list_test.rb +53 -0
- data/test/lib/troo/models/member_persistence_test.rb +59 -0
- data/test/lib/troo/models/member_retrieval_test.rb +58 -0
- data/test/lib/troo/models/member_test.rb +44 -0
- data/test/lib/troo/models/model_helpers_test.rb +103 -0
- data/test/lib/troo/models/refresh_test.rb +45 -0
- data/test/lib/troo/presentation/template_test.rb +40 -0
- data/test/support/fabrication.rb +56 -0
- data/test/support/template.erb +3 -0
- data/test/support/vcr_setup.rb +36 -0
- data/test/test_helper.rb +30 -0
- data/troo.gemspec +24 -5
- metadata +501 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4b625aae48b254cf382ba5fbd8a15632cd196d60
|
4
|
+
data.tar.gz: 0e93d32a02dd9188393fc40c0e0f7547799e0881
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 60663bb433fbdb7dba0b4e7c7328349c256921d2060390484937c6c6a842ca6ab3b69e9c044b417f740b4ffd855eddd1e046ed4e4e133fe05fc6442f78ac3918
|
7
|
+
data.tar.gz: dff68ad0407bca257694e0d4a2eb877abd7d364aa0e0c874dabd1711a8d690727a2392d31bd8ac08201be9e06a6f9a23f5ab1d64800ac3d618f6e36b7c5ac3ee
|
data/.gitignore
CHANGED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.1.0
|
data/Gemfile
CHANGED
data/Guardfile
ADDED
data/LICENSE.txt
CHANGED
@@ -20,3 +20,4 @@ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
20
20
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
21
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
22
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
23
|
+
|
data/README.md
CHANGED
@@ -1,6 +1,33 @@
|
|
1
1
|
# Troo
|
2
2
|
|
3
|
-
|
3
|
+
CLI interface for Trello. Named after Trello's mascot 'Roo'.
|
4
|
+
|
5
|
+
## Features
|
6
|
+
|
7
|
+
troo refresh
|
8
|
+
troo refresh --lists
|
9
|
+
troo refresh --cards
|
10
|
+
troo default board <board_id>
|
11
|
+
troo default card <card_id>
|
12
|
+
troo default list <list_id>
|
13
|
+
troo add board <name>
|
14
|
+
troo add card <list_id>
|
15
|
+
troo add comment <card_id>
|
16
|
+
troo add list <board_id>
|
17
|
+
troo show boards
|
18
|
+
troo show board (<board_id>)
|
19
|
+
troo show list <list_id>
|
20
|
+
troo show card <card_id>
|
21
|
+
troo show comments <card_id>
|
22
|
+
troo move <card_id> <list_id>
|
23
|
+
troo cleanup
|
24
|
+
troo version
|
25
|
+
|
26
|
+
## Requirements
|
27
|
+
|
28
|
+
- A Trello account with API key/secret.
|
29
|
+
- Ruby 2.1.0 (>= 1.9.3 should be fine.)
|
30
|
+
- Redis.
|
4
31
|
|
5
32
|
## Installation
|
6
33
|
|
@@ -18,12 +45,28 @@ Or install it yourself as:
|
|
18
45
|
|
19
46
|
## Usage
|
20
47
|
|
21
|
-
|
48
|
+
You will need user authentication tokens to access your Trello account.
|
49
|
+
|
50
|
+
1) Create your developer key at Trello:
|
51
|
+
|
52
|
+
https://trello.com/1/appKey/generate
|
53
|
+
|
54
|
+
2) Go to
|
55
|
+
|
56
|
+
https://trello.com/1/connect?key=your_key_here&name=troo&response_type=token&scope=read,write
|
57
|
+
|
58
|
+
3) Have fun, and tweet me @gavinlaking if you like it.
|
59
|
+
|
60
|
+
## Todo
|
61
|
+
|
62
|
+
- Fix multitude of sins.
|
63
|
+
- Write cucumber integration tests.
|
22
64
|
|
23
65
|
## Contributing
|
24
66
|
|
25
|
-
1. Fork it
|
67
|
+
1. Fork it
|
26
68
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
69
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
70
|
4. Push to the branch (`git push origin my-new-feature`)
|
29
71
|
5. Create new Pull Request
|
72
|
+
|
data/Rakefile
CHANGED
data/bin/troo
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Feature: Adding a new board
|
@@ -0,0 +1 @@
|
|
1
|
+
Feature: Adding a new card to a list
|
@@ -0,0 +1 @@
|
|
1
|
+
Feature: Adding a comment to a card
|
@@ -0,0 +1 @@
|
|
1
|
+
Feature: Adding a new list to a board
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
Feature: Moving a card to a list
|
@@ -0,0 +1 @@
|
|
1
|
+
Feature: Refreshing
|
@@ -0,0 +1 @@
|
|
1
|
+
Feature: Showing a board
|
@@ -0,0 +1 @@
|
|
1
|
+
Feature: Showing all boards
|
@@ -0,0 +1 @@
|
|
1
|
+
Feature: Showing a card
|
@@ -0,0 +1 @@
|
|
1
|
+
Feature: Showing all comments for a card
|
@@ -0,0 +1 @@
|
|
1
|
+
Feature: Showing a list
|
@@ -0,0 +1 @@
|
|
1
|
+
Feature: Getting the local status
|
File without changes
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# require "minitest/spec"
|
2
|
+
# World(MiniTest::Assertions)
|
3
|
+
# MiniTest::Spec.new(nil)
|
4
|
+
|
5
|
+
# require 'minitest'
|
6
|
+
# module MiniTestAssertions
|
7
|
+
# def self.extended(base)
|
8
|
+
# base.extend(MiniTest::Assertions)
|
9
|
+
# base.assertions = 0
|
10
|
+
# end
|
11
|
+
|
12
|
+
# attr_accessor :assertions
|
13
|
+
# end
|
14
|
+
# World(MiniTestAssertions)
|
15
|
+
|
16
|
+
|
17
|
+
require "aruba/cucumber"
|
18
|
+
|
19
|
+
ENV['PATH'] = "#{File.expand_path(File.dirname(__FILE__) + "/../../bin")}#{File::PATH_SEPARATOR}#{ENV['PATH']}"
|
20
|
+
LIB_DIR = File.join(File.expand_path(File.dirname(__FILE__)), "..", "..", "lib")
|
21
|
+
|
22
|
+
Before do
|
23
|
+
# Using "announce" causes massive warnings on 1.9.2
|
24
|
+
@puts = true
|
25
|
+
@original_rubylib = ENV['RUBYLIB']
|
26
|
+
ENV['RUBYLIB'] = LIB_DIR + File::PATH_SEPARATOR + ENV['RUBYLIB'].to_s
|
27
|
+
end
|
28
|
+
|
29
|
+
After do
|
30
|
+
ENV['RUBYLIB'] = @original_rubylib
|
31
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
Feature: Running the `troo` command
|
data/lib/troo.rb
CHANGED
@@ -1,5 +1,27 @@
|
|
1
|
-
|
1
|
+
require_relative "troo/troo"
|
2
|
+
require_relative "troo/version"
|
2
3
|
|
3
4
|
module Troo
|
4
|
-
|
5
|
+
class InvalidAccessToken < StandardError; end
|
6
|
+
|
7
|
+
def self.config
|
8
|
+
@config ||= OpenStruct.new(YAML.load_file(File.dirname(__FILE__) + "/../configuration.yml"))
|
9
|
+
rescue Errno::ENOENT
|
10
|
+
warn "Cannot continue, no configuration file."
|
11
|
+
exit!
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.logger
|
15
|
+
@logger ||= Logger.new("logs/troo.log")
|
16
|
+
end
|
17
|
+
|
18
|
+
# Trello.logger = Logger.new("logs/trello.log")
|
19
|
+
Trello.configure do |trello|
|
20
|
+
trello.consumer_key = config.key
|
21
|
+
trello.consumer_secret = config.secret
|
22
|
+
trello.oauth_token = config.oauth_token
|
23
|
+
trello.oauth_token_secret = config.oauth_token_secret
|
24
|
+
end
|
25
|
+
|
26
|
+
Ohm.connect(db: config.main_db)
|
5
27
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Troo
|
2
|
+
class CreateBoard
|
3
|
+
class << self
|
4
|
+
def with(name, description = nil)
|
5
|
+
new(name, description).perform
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
attr_reader :name
|
10
|
+
|
11
|
+
def initialize(name, description = nil)
|
12
|
+
@name = name
|
13
|
+
@description = description
|
14
|
+
end
|
15
|
+
|
16
|
+
def perform
|
17
|
+
update_boards
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
attr_reader :name, :description
|
22
|
+
|
23
|
+
def update_boards
|
24
|
+
return Troo::BoardPersistence.for(create_board) if create_board
|
25
|
+
false
|
26
|
+
end
|
27
|
+
|
28
|
+
def create_board
|
29
|
+
@board ||= Trello::Board.create(attributes)
|
30
|
+
rescue Trello::InvalidAccessToken
|
31
|
+
raise Troo::InvalidAccessToken
|
32
|
+
rescue Trello::Error
|
33
|
+
false
|
34
|
+
end
|
35
|
+
|
36
|
+
def attributes
|
37
|
+
{
|
38
|
+
name: name,
|
39
|
+
description: description
|
40
|
+
}
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Troo
|
2
|
+
class CreateCard
|
3
|
+
class << self
|
4
|
+
def for(list, name = nil, description = nil)
|
5
|
+
new(list, name, description).perform
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
def initialize(list, name = nil, description = nil)
|
10
|
+
@list = list
|
11
|
+
@name = name
|
12
|
+
@description = description
|
13
|
+
end
|
14
|
+
|
15
|
+
def perform
|
16
|
+
update_cards
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
attr_reader :list, :name, :description
|
21
|
+
|
22
|
+
def update_cards
|
23
|
+
return Troo::CardPersistence.for(create_card) if create_card
|
24
|
+
false
|
25
|
+
end
|
26
|
+
|
27
|
+
def create_card
|
28
|
+
@card ||= Trello::Card.create(attributes)
|
29
|
+
rescue Trello::InvalidAccessToken
|
30
|
+
raise Troo::InvalidAccessToken
|
31
|
+
rescue Trello::Error
|
32
|
+
false
|
33
|
+
end
|
34
|
+
|
35
|
+
def attributes
|
36
|
+
{
|
37
|
+
name: name,
|
38
|
+
list_id: list.external_list_id,
|
39
|
+
desc: description
|
40
|
+
}
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Troo
|
2
|
+
class CreateComment
|
3
|
+
class << self
|
4
|
+
def for(card, comment)
|
5
|
+
new(card, comment).perform
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
def initialize(card, comment)
|
10
|
+
@card = card
|
11
|
+
@comment = comment
|
12
|
+
end
|
13
|
+
|
14
|
+
def perform
|
15
|
+
update_comments
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
attr_reader :card, :comment
|
20
|
+
|
21
|
+
def update_comments
|
22
|
+
return Troo::CommentPersistence.for(parsed_json_response) if parsed_json_response
|
23
|
+
false
|
24
|
+
end
|
25
|
+
|
26
|
+
def parsed_json_response
|
27
|
+
return false unless create_comment
|
28
|
+
resource = OpenStruct.new(JSON.parse(create_comment))
|
29
|
+
resource.member_creator_id = resource.memberCreator.fetch("id", "")
|
30
|
+
resource
|
31
|
+
end
|
32
|
+
|
33
|
+
def create_comment
|
34
|
+
@comment_resource ||= Trello::Card.new.
|
35
|
+
update_fields(attributes).add_comment(comment)
|
36
|
+
rescue
|
37
|
+
false
|
38
|
+
end
|
39
|
+
|
40
|
+
def attributes
|
41
|
+
{ 'id' => card.external_card_id }
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Troo
|
2
|
+
class CreateList
|
3
|
+
class << self
|
4
|
+
def for(board, name)
|
5
|
+
new(board, name).perform
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
def initialize(board, name)
|
10
|
+
@board = board
|
11
|
+
@name = name
|
12
|
+
end
|
13
|
+
|
14
|
+
def perform
|
15
|
+
update_lists
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
attr_reader :board, :name
|
20
|
+
|
21
|
+
def update_lists
|
22
|
+
return Troo::ListPersistence.for(create_list) if create_list
|
23
|
+
false
|
24
|
+
end
|
25
|
+
|
26
|
+
def create_list
|
27
|
+
@list ||= Trello::List.create(attributes)
|
28
|
+
rescue Trello::InvalidAccessToken
|
29
|
+
raise Troo::InvalidAccessToken
|
30
|
+
rescue Trello::Error
|
31
|
+
false
|
32
|
+
end
|
33
|
+
|
34
|
+
def attributes
|
35
|
+
{
|
36
|
+
name: name,
|
37
|
+
board_id: board.external_board_id
|
38
|
+
}
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|