trello_cli 0.3.0 → 0.4.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 67d3269ab8c44f68e1ecdadb52a096162df122d3
4
- data.tar.gz: 0995679927099f04e253b604d145f8d414665c18
3
+ metadata.gz: 40df02ef5553721b45c97fbcab9439acd9877248
4
+ data.tar.gz: 7400fe025f43fce5f77b373abb012eda3d39a0f2
5
5
  SHA512:
6
- metadata.gz: a52aaeac10cf59ac1fdf54e614c83bcd3cbf0703ce545e3b699cdbc146ac74705847dd9b4701e1ab5d771c0789f31dac790d23349de5de56b6f8fe9c716dd21c
7
- data.tar.gz: 01a9dcce612760fd26d7e3c3b83efff6cb683df5d9d394d73c81dd9430aab96a374d01303d3a7610064353b9bdbbdad13ffbd1e152e46a7adba33b1f60ae689b
6
+ metadata.gz: 57ef11ccd5519f117c77d8dbd1e949005a7582d07b0afabd50aae9e4d6df448e288ede1386cb6a1e1bdaaf1c22d9b78f10461a31a6be49b5bfcc068f7b56a964
7
+ data.tar.gz: 4a479da7c1e9559ab8d7532cb3220b818a42a9d477998664d3f6b983a61578248da24c8025da37f6dbe13f1f1cae001cc783833c07b0e70dc2355badb57204fd
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 0.4.0:
2
+
3
+ * Adding JSON and TSV output formatters
4
+
1
5
  ## 0.3.0:
2
6
 
3
7
  * Add ability to assign member to card on creation
data/README.md CHANGED
@@ -62,19 +62,39 @@ To see help for a specific command:
62
62
  -l, --list [LIST] List Of Card
63
63
  -n, --name [NAME] Name Of Card
64
64
 
65
+ ### Output Formatters
66
+
67
+ To allow for easy integration, the output of any command can format as either TSV (Tab
68
+ Seperated Values) or JSON.
69
+
70
+ **JSON Output**
71
+
72
+ ```json
73
+ # trello card list -o json
74
+ [{"name":"board1","id":"1234"},{"name":"board2","id":"4567"}]
75
+ ```
76
+
77
+ **TSV Output**
78
+
79
+ ```
80
+ # trello card list -o tsv
81
+ 1234 board1
82
+ 4567 board2
83
+ ```
84
+
65
85
  ## Examples
66
86
 
67
87
  List the boards available to the given credentials:
68
88
 
69
89
  trello board list
70
90
 
71
- List the lists for a given board id:
91
+ List the lists for a given board id and output as a TSV list:
72
92
 
73
- trello list list -b 123
93
+ trello list list -b 123 -o tsv
74
94
 
75
- Create a card:
95
+ Create a card and output as JSON:
76
96
 
77
- trello card create -b 123 -l 321 -n 'card name' -d 'card description'
97
+ trello card create -b 123 -l 321 -n 'card name' -d 'card description' -o json
78
98
 
79
99
  ## Contributing
80
100
 
@@ -10,12 +10,12 @@ module TrelloCli
10
10
  def run
11
11
  option_parser.parse!
12
12
 
13
- list_boards(@options[:closed]).each do |board|
14
- name = board.attributes[:name]
15
- id = board.attributes[:id]
16
- closed = board.attributes[:closed]
17
- puts "#{name} ( #{id} )"
13
+ data = list_boards(@options[:closed]).map do |b|
14
+ { name: b.attributes[:name],
15
+ id: b.attributes[:id] }
18
16
  end
17
+
18
+ puts TrelloCli::Formatters::BoardList.new(data).output @options[:output]
19
19
  end
20
20
 
21
21
  private
@@ -36,6 +36,10 @@ module TrelloCli
36
36
  opts.on("-c", "--closed", "Include closed board." ) do |o|
37
37
  @options[:closed] = o
38
38
  end
39
+
40
+ opts.on("-o", "--output [OUTPUT]", "Output format [json|tsv|legacy]." ) do |o|
41
+ @options[:output] = o
42
+ end
39
43
  end
40
44
  end
41
45
 
@@ -10,13 +10,12 @@ module TrelloCli
10
10
  def run
11
11
  option_parser.parse!
12
12
 
13
- card = create_card
14
- name = card.attributes[:name]
15
- description = card.attributes[:description]
13
+ card = create_card
14
+ data = { id: card.attributes[:id],
15
+ name: card.attributes[:name],
16
+ desc: card.attributes[:desc] }
16
17
 
17
- puts "Card Created."
18
- puts "Name : #{name}"
19
- puts "Description : #{description}"
18
+ puts TrelloCli::Formatters::CardCreate.new(data).output @options[:output]
20
19
  end
21
20
 
22
21
  private
@@ -35,7 +34,7 @@ module TrelloCli
35
34
  end
36
35
 
37
36
  opts.on("-d", "--description [DESCRIPTION]", "Description Of Card") do |d|
38
- @options[:description] = d
37
+ @options[:desc] = d
39
38
  end
40
39
 
41
40
  opts.on("-l", "--list [LIST]", "List Of Card") do |l|
@@ -49,6 +48,10 @@ module TrelloCli
49
48
  opts.on("-n", "--name [NAME]", "Name Of Card") do |n|
50
49
  @options[:name] = n
51
50
  end
51
+
52
+ opts.on("-o", "--output [OUTPUT]", "Output format [json|tsv|legacy]." ) do |o|
53
+ @options[:output] = o
54
+ end
52
55
  end
53
56
  end
54
57
 
@@ -10,11 +10,11 @@ module TrelloCli
10
10
  def run
11
11
  option_parser.parse!
12
12
 
13
- list_cards.each do |card|
14
- puts "| Name: #{card.name} ( #{card.id} )"
15
- puts "| Description: #{card.description}" if @options[:description]
16
- puts "|------------------------"
13
+ data = list_cards.map do |c|
14
+ { name: c.name, id: c.id, desc: c.desc }
17
15
  end
16
+
17
+ puts TrelloCli::Formatters::CardList.new(data).output(@options[:output])
18
18
  end
19
19
 
20
20
  private
@@ -35,8 +35,8 @@ module TrelloCli
35
35
  @options[:list_id] = l
36
36
  end
37
37
 
38
- opts.on("-d", "--description", "Include description." ) do |o|
39
- @options[:description] = o
38
+ opts.on("-o", "--output [OUTPUT]", "Output format [json|tsv|legacy]." ) do |o|
39
+ @options[:output] = o
40
40
  end
41
41
  end
42
42
  end
@@ -10,9 +10,12 @@ module TrelloCli
10
10
  def run
11
11
  option_parser.parse!
12
12
 
13
- move_card
13
+ result = move_card
14
+ data = { card_id: result["id"],
15
+ list_id: result["idList"],
16
+ success: (result["idList"] == @options[:list_id]) }
14
17
 
15
- puts "Card '#{@options[:card_id]}' moved to list '#{@options[:list_id]}'."
18
+ puts TrelloCli::Formatters::CardMove.new(data).output @options[:output]
16
19
  end
17
20
 
18
21
  private
@@ -33,6 +36,10 @@ module TrelloCli
33
36
  opts.on("-l", "--list_id [LIST_ID]", "New List ID") do |l|
34
37
  @options[:list_id] = l
35
38
  end
39
+
40
+ opts.on("-o", "--output [OUTPUT]", "Output format [json|tsv|legacy]." ) do |o|
41
+ @options[:output] = o
42
+ end
36
43
  end
37
44
  end
38
45
 
@@ -8,9 +8,6 @@ module TrelloCli
8
8
  def create
9
9
  ensure_credential_envs_set
10
10
  TrelloCli::CLI::Card::Create.new.run
11
- rescue TrelloCli::Errors => e
12
- puts "error: #{e}"
13
- exit 1
14
11
  end
15
12
 
16
13
  def list
@@ -10,12 +10,14 @@ module TrelloCli
10
10
  def run
11
11
  option_parser.parse!
12
12
 
13
- list_lists.each do |list|
14
- name = list.attributes[:name]
15
- id = list.attributes[:id]
16
-
17
- puts "#{name} ( #{id} )"
13
+ data = list_lists.map do |l|
14
+ {
15
+ id: l.attributes[:id],
16
+ name: l.attributes[:name]
17
+ }
18
18
  end
19
+
20
+ puts TrelloCli::Formatters::ListList.new(data).output @options[:output]
19
21
  end
20
22
 
21
23
  private
@@ -34,6 +36,9 @@ module TrelloCli
34
36
  @options[:board_id] = b
35
37
  end
36
38
 
39
+ opts.on("-o", "--output [OUTPUT]", "Output format [json|tsv|legacy]." ) do |o|
40
+ @options[:output] = o
41
+ end
37
42
  end
38
43
  end
39
44
 
@@ -16,6 +16,9 @@ module TrelloCli
16
16
  rescue OptionParser::InvalidOption, Trello::Error => e
17
17
  puts e.message
18
18
  exit 1
19
+ rescue TrelloCli::Errors => e
20
+ puts "error: #{e}"
21
+ exit 1
19
22
  rescue NoMethodError => e
20
23
  if e.message.match /SocketError/
21
24
  puts 'Please connect to the internet to access Trello'
@@ -0,0 +1,30 @@
1
+ require 'json'
2
+
3
+ module TrelloCli
4
+ module Formatters
5
+ class Base
6
+ def initialize(data)
7
+ @data = data
8
+ end
9
+
10
+ def output(format)
11
+ case format
12
+ when "json"
13
+ self.to_json
14
+ when "tsv"
15
+ self.to_tsv
16
+ else
17
+ self.to_legacy
18
+ end
19
+ end
20
+
21
+ def to_json
22
+ data.to_json
23
+ end
24
+
25
+ private
26
+
27
+ attr_reader :data
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,13 @@
1
+ module TrelloCli
2
+ module Formatters
3
+ class BoardList < Base
4
+ def to_legacy
5
+ data.map {|d| "#{d[:name]} ( #{d[:id]} )"}.join("\n")
6
+ end
7
+
8
+ def to_tsv
9
+ data.map {|d| "#{d[:id]}\t#{d[:name]}\n"}
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,15 @@
1
+ module TrelloCli
2
+ module Formatters
3
+ class CardCreate < Base
4
+ def to_legacy
5
+ msg = "Card Created.\n"
6
+ msg << "Name : #{data[:name]}\n"
7
+ msg << "Description : #{data[:desc]}\n"
8
+ end
9
+
10
+ def to_tsv
11
+ [data[:id], data[:name], data[:desc]].join("\t") + "\n"
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,19 @@
1
+ module TrelloCli
2
+ module Formatters
3
+ class CardList < Base
4
+ def to_legacy
5
+ data.map do |d|
6
+ msg = "| Name: #{d[:name]} ( #{d[:id]} )\n"
7
+ msg << "| Description: #{d[:desc]}\n" if d[:desc]
8
+ msg << "|------------------------\n"
9
+ end
10
+ end
11
+
12
+ def to_tsv
13
+ data.map do |d|
14
+ [d[:id], d[:name], d[:desc]].join("\t") + "\n"
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,17 @@
1
+ module TrelloCli
2
+ module Formatters
3
+ class CardMove < Base
4
+ def to_legacy
5
+ if data[:success]
6
+ "Card #{data[:card_id]} was succesfully moved to #{data[:list_id]}.\n"
7
+ else
8
+ "Error moving card."
9
+ end
10
+ end
11
+
12
+ def to_tsv
13
+ [data[:success], data[:card_id], data[:list_id]].join("\t") + "\n"
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,13 @@
1
+ module TrelloCli
2
+ module Formatters
3
+ class ListList < Base
4
+ def to_legacy
5
+ data.map {|d| "#{d[:name]} ( #{d[:id]} )"}.join("\n")
6
+ end
7
+
8
+ def to_tsv
9
+ data.map {|d| "#{d[:id]}\t#{d[:name]}\n"}
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,7 @@
1
+ require 'trello_cli/formatters/base'
2
+
3
+ require 'trello_cli/formatters/board_list'
4
+ require 'trello_cli/formatters/card_create'
5
+ require 'trello_cli/formatters/card_list'
6
+ require 'trello_cli/formatters/card_move'
7
+ require 'trello_cli/formatters/list_list'
@@ -24,11 +24,13 @@ module TrelloCli
24
24
  end
25
25
 
26
26
  card = Trello::Card.new 'name' => args[:name],
27
- 'desc' => args[:description],
27
+ 'desc' => args[:desc],
28
28
  'idBoard' => @board_id,
29
29
  'idList' => args[:list_id],
30
30
  'idMembers' => member_ids.join(",")
31
31
  card.save
32
+
33
+ card
32
34
  end
33
35
 
34
36
  private
@@ -11,7 +11,7 @@ module TrelloCli
11
11
  def move(args)
12
12
  card = Trello::Card.new 'id' => args[:card_id]
13
13
  list = Trello::List.find args[:list_id]
14
- card.move_to_list list
14
+ JSON.parse(card.move_to_list list)
15
15
  end
16
16
 
17
17
  end
@@ -1,3 +1,3 @@
1
1
  module TrelloCli
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
data/lib/trello_cli.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require "trello_cli/cli"
2
2
  require "trello_cli/errors"
3
+ require "trello_cli/formatters"
3
4
  require "trello_cli/requests"
4
5
  require "trello_cli/version"
5
6
 
@@ -22,8 +22,7 @@ describe TrelloCli::CLI::Board::List do
22
22
 
23
23
  it "should puts all boards" do
24
24
  subject.instance_variable_set(:@options, { closed: true })
25
- expect(subject).to receive(:puts).with("board1 ( 1 )")
26
- expect(subject).to receive(:puts).with("board2 ( 2 )")
25
+ expect(subject).to receive(:puts).with("board1 ( 1 )\nboard2 ( 2 )")
27
26
  subject.run
28
27
  end
29
28
 
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+
3
+ describe TrelloCli::Formatters::Base do
4
+ let(:data) { ( { data: "test1234" } ) }
5
+ let(:subject) { TrelloCli::Formatters::Base.new data }
6
+ it "should create a formater and output the data as JSON" do
7
+ subject.output("json").should == data.to_json
8
+ end
9
+ end
10
+
@@ -10,13 +10,13 @@ describe TrelloCli::Requests::CreateCard do
10
10
  let(:member_struct) { Struct.new(:attributes) }
11
11
 
12
12
  before do
13
- @args = { :name => 'name',
14
- :description => 'desc',
15
- :board_id => '123',
16
- :list_id => '321',
17
- :members => ["user1", "user2"] }
13
+ @args = { :name => 'name',
14
+ :desc => 'desc',
15
+ :board_id => '123',
16
+ :list_id => '321',
17
+ :members => ["user1", "user2"] }
18
18
  @options = { 'name' => @args[:name],
19
- 'desc' => @args[:description],
19
+ 'desc' => @args[:desc],
20
20
  'idBoard' => @args[:board_id],
21
21
  'idList' => @args[:list_id],
22
22
  'idMembers' => "id1,id2" }
@@ -15,7 +15,8 @@ describe TrelloCli::Requests::MoveCard do
15
15
  Trello::List.should_receive(:find).
16
16
  with(args[:list_id]).
17
17
  and_return trello_list_mock
18
- trello_card_mock.should_receive(:move_to_list).with(trello_list_mock)
19
- subject.move args
18
+ trello_card_mock.should_receive(:move_to_list).with(trello_list_mock).
19
+ and_return({}.to_json)
20
+ subject.move(args).should == {} # JSON.parses results
20
21
  end
21
22
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trello_cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brett Weaver
@@ -97,6 +97,13 @@ files:
97
97
  - lib/trello_cli/cli/list/list.rb
98
98
  - lib/trello_cli/cli/run.rb
99
99
  - lib/trello_cli/errors.rb
100
+ - lib/trello_cli/formatters.rb
101
+ - lib/trello_cli/formatters/base.rb
102
+ - lib/trello_cli/formatters/board_list.rb
103
+ - lib/trello_cli/formatters/card_create.rb
104
+ - lib/trello_cli/formatters/card_list.rb
105
+ - lib/trello_cli/formatters/card_move.rb
106
+ - lib/trello_cli/formatters/list_list.rb
100
107
  - lib/trello_cli/requests.rb
101
108
  - lib/trello_cli/requests/create_card.rb
102
109
  - lib/trello_cli/requests/list_boards.rb
@@ -109,6 +116,7 @@ files:
109
116
  - spec/cli/board/list_spec.rb
110
117
  - spec/cli/commands/shared_spec.rb
111
118
  - spec/cli/run_spec.rb
119
+ - spec/formatters/base_spec.rb
112
120
  - spec/requests/create_card_spec.rb
113
121
  - spec/requests/list_boards_spec.rb
114
122
  - spec/requests/list_card_spec.rb
@@ -145,6 +153,7 @@ test_files:
145
153
  - spec/cli/board/list_spec.rb
146
154
  - spec/cli/commands/shared_spec.rb
147
155
  - spec/cli/run_spec.rb
156
+ - spec/formatters/base_spec.rb
148
157
  - spec/requests/create_card_spec.rb
149
158
  - spec/requests/list_boards_spec.rb
150
159
  - spec/requests/list_card_spec.rb