ki_trello 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.
- data/bin/ki_trello +29 -7
- data/ki_trello.gemspec +2 -1
- data/lib/ki_trello/interactive.rb +50 -57
- data/lib/ki_trello/session.rb +2 -3
- data/lib/ki_trello/version.rb +1 -1
- data/spec/integration/command_spec.rb +15 -0
- data/spec/spec_helper.rb +13 -0
- metadata +37 -91
data/bin/ki_trello
CHANGED
@@ -17,12 +17,24 @@ require 'rubygems'
|
|
17
17
|
require 'gli'
|
18
18
|
require 'ki_trello'
|
19
19
|
require 'colored'
|
20
|
-
include GLI
|
20
|
+
include GLI::App
|
21
21
|
|
22
22
|
program_desc 'A Kiseru client for Trello'
|
23
23
|
|
24
24
|
version KiTrello::VERSION
|
25
25
|
|
26
|
+
def find_input(filename)
|
27
|
+
if filename.nil? || filename.empty?
|
28
|
+
if $stdin.tty?
|
29
|
+
nil
|
30
|
+
else
|
31
|
+
$stdin
|
32
|
+
end
|
33
|
+
else
|
34
|
+
File.open(filename,'r')
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
26
38
|
desc 'Initialise config files'
|
27
39
|
command :init do |c|
|
28
40
|
c.action do |global_options,options,args|
|
@@ -58,11 +70,21 @@ desc 'Create new card'
|
|
58
70
|
command :new_card do |c|
|
59
71
|
c.desc "The list ID"
|
60
72
|
c.flag [:list]
|
73
|
+
c.desc "Interactive mode"
|
74
|
+
c.switch [:i]
|
75
|
+
c.arg_name 'file'
|
61
76
|
c.action do |global_options, options, args|
|
62
|
-
|
63
|
-
unless
|
64
|
-
|
77
|
+
input = find_input(args.first)
|
78
|
+
help_now!(nil) unless input
|
79
|
+
received_json = input.read
|
80
|
+
|
81
|
+
list_id = options[:list]
|
82
|
+
if options[:i] && list_id.nil?
|
83
|
+
board_id = KiTrello::Interactive.new.select_board("Which board?")
|
84
|
+
list_id = KiTrello::Interactive.new.select_list(board_id, "Which list?")
|
65
85
|
end
|
86
|
+
|
87
|
+
list_id ||= MultiJson.load(received_json)['idList']
|
66
88
|
command = KiTrello::Command.new
|
67
89
|
command.create_card(received_json, { :list => list_id })
|
68
90
|
end
|
@@ -72,12 +94,12 @@ desc 'List lists in board'
|
|
72
94
|
command :lists do |c|
|
73
95
|
c.desc "The board ID"
|
74
96
|
c.flag [:board]
|
75
|
-
c.desc "Interactive
|
97
|
+
c.desc "Interactive mode"
|
76
98
|
c.switch [:i]
|
77
99
|
c.action do |global_options, options, args|
|
78
100
|
unless board_id = options[:board]
|
79
101
|
if options[:i]
|
80
|
-
board_id = KiTrello::Interactive.
|
102
|
+
board_id = KiTrello::Interactive.new.select_item("Which board?")
|
81
103
|
else
|
82
104
|
end
|
83
105
|
end
|
@@ -86,4 +108,4 @@ command :lists do |c|
|
|
86
108
|
end
|
87
109
|
end
|
88
110
|
|
89
|
-
exit
|
111
|
+
exit run(ARGV)
|
data/ki_trello.gemspec
CHANGED
@@ -18,9 +18,10 @@ Gem::Specification.new do |gem|
|
|
18
18
|
gem.add_dependency('colored', '~> 1.2.0')
|
19
19
|
gem.add_dependency('faraday', '~> 0.8.2')
|
20
20
|
gem.add_dependency('faraday_middleware', '~> 0.8.8')
|
21
|
-
gem.add_dependency('gli', '~>
|
21
|
+
gem.add_dependency('gli', '~> 2.2.1')
|
22
22
|
gem.add_dependency('multi_json', '~> 1.3.6')
|
23
23
|
gem.add_dependency('json_pure', '~> 1.7.4')
|
24
|
+
gem.add_dependency('map', '~> 6.2.0')
|
24
25
|
|
25
26
|
gem.add_development_dependency('debugger', '~> 1.2.0')
|
26
27
|
gem.add_development_dependency('rake', '~> 0.9.2')
|
@@ -1,18 +1,28 @@
|
|
1
|
-
|
1
|
+
require 'map'
|
2
|
+
require 'colored'
|
3
|
+
|
4
|
+
# TODO - This should move up into Kiseru gem
|
2
5
|
|
3
6
|
module KiTrello
|
4
7
|
|
5
8
|
class Interactive
|
6
|
-
|
7
|
-
def
|
9
|
+
|
10
|
+
def initialize(input=$stdin, output=$stderr)
|
11
|
+
@input = input
|
12
|
+
@output = output
|
13
|
+
end
|
14
|
+
|
15
|
+
# "Resistance is futile!", "We will get an answer!"
|
16
|
+
def repeatedly_ask(question)
|
8
17
|
response = ""
|
9
18
|
while response == ""
|
10
|
-
response = simple_query(question)
|
19
|
+
response = simple_query("\n "+question)
|
11
20
|
end
|
12
21
|
response
|
13
22
|
end
|
14
|
-
|
15
|
-
|
23
|
+
|
24
|
+
# "We have ways of making you talk!"
|
25
|
+
def repeatedly_choose_from(things, question)
|
16
26
|
index = nil
|
17
27
|
while index.nil?
|
18
28
|
index = choose_from_many(things, question)
|
@@ -20,77 +30,60 @@ module KiTrello
|
|
20
30
|
index
|
21
31
|
end
|
22
32
|
|
23
|
-
def
|
24
|
-
|
33
|
+
def choose_from_many(things, question)
|
34
|
+
@output.puts "\n "+question.to_s
|
25
35
|
|
26
|
-
things.each_with_index
|
36
|
+
things.each_with_index do |thing, index|
|
37
|
+
@output.puts " #{index+1} ".green + " #{thing}"
|
38
|
+
end
|
27
39
|
|
28
|
-
index = ( (simple_query( "
|
40
|
+
index = ( (simple_query( "(#{(1..things.size)})").to_i) - 1 )
|
29
41
|
index = ( index >= 0 && index < things.size ) ? index : nil
|
30
42
|
end
|
31
43
|
|
32
|
-
def
|
44
|
+
def simple_query(prompt)
|
33
45
|
if prompt.nil?
|
34
|
-
|
46
|
+
@output.print "\n> "
|
35
47
|
else
|
36
|
-
|
48
|
+
@output.print "\n #{prompt}: "
|
37
49
|
end
|
38
|
-
|
50
|
+
@input.gets.chomp
|
39
51
|
end
|
40
52
|
|
41
|
-
def
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
index = 0
|
47
|
-
end
|
48
|
-
$stderr.puts "\n Chosen board is #{boards[index]['name']}"
|
49
|
-
boards[index]['id']
|
53
|
+
def select_item(items, prompt=nil, input=$stdin, output=$stdout, err=$stderr)
|
54
|
+
items = mapify(items)
|
55
|
+
index = get_index(items, prompt)
|
56
|
+
return index if index.nil?
|
57
|
+
items[index]['id']
|
50
58
|
end
|
51
59
|
|
52
|
-
def
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
index = repeatedly_choose_from(stories.map { |p| p['name'] }, prompt)
|
57
|
-
else
|
58
|
-
index = 0
|
59
|
-
end
|
60
|
+
def select_list(board_id, prompt)
|
61
|
+
lists = MultiJson.load(KiTrello::Command.new.lists(board_id))
|
62
|
+
select_item(lists, prompt)
|
63
|
+
end
|
60
64
|
|
61
|
-
|
62
|
-
|
65
|
+
def select_board(prompt)
|
66
|
+
boards = MultiJson.load(KiTrello::Command.new.boards)
|
67
|
+
select_item(boards, prompt)
|
63
68
|
end
|
64
69
|
|
65
|
-
|
66
|
-
|
70
|
+
private
|
71
|
+
|
72
|
+
def mapify(items)
|
73
|
+
Array(items).map { |x| Map(x) }
|
74
|
+
end
|
67
75
|
|
68
|
-
|
69
|
-
|
76
|
+
def get_index(items, prompt)
|
77
|
+
case items.size
|
78
|
+
when 0
|
79
|
+
return nil
|
80
|
+
when 1
|
81
|
+
0
|
70
82
|
else
|
71
|
-
|
83
|
+
repeatedly_choose_from(items.map(&:name), prompt)
|
72
84
|
end
|
73
|
-
|
74
|
-
$stderr.puts "\n Chosen project is '#{projects[index]['name']}'"
|
75
|
-
projects[index]['id']
|
76
85
|
end
|
77
86
|
|
78
|
-
def self.new_story
|
79
|
-
name = repeatedly_ask("Name of story")
|
80
|
-
|
81
|
-
description = repeatedly_ask("Description of story")
|
82
|
-
|
83
|
-
types = ["bug","feature","release","chore"]
|
84
|
-
type = types[repeatedly_choose_from(types, "What type of story is this?")]
|
85
|
-
|
86
|
-
{
|
87
|
-
name: name,
|
88
|
-
description: description,
|
89
|
-
story_type: type,
|
90
|
-
requested_by: 'Kiseru',
|
91
|
-
ki_type: 'pivotal_story'
|
92
|
-
}.to_json
|
93
|
-
end
|
94
87
|
end
|
95
88
|
end
|
96
89
|
|
data/lib/ki_trello/session.rb
CHANGED
@@ -32,13 +32,12 @@ module KiTrello
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def card(card_id)
|
35
|
-
response = connection.get("/1/cards/#{card_id}", auth_params)
|
35
|
+
response = connection.get("/1/cards/#{card_id}", auth_params.merge(:checklists => 'all'))
|
36
36
|
|
37
37
|
case response.status
|
38
38
|
when 200
|
39
|
-
response.body
|
39
|
+
response.body.merge('ki_type' => 'trello_card')
|
40
40
|
else
|
41
|
-
debugger
|
42
41
|
raise SessionError, "Unhandled status code #{response.status}: #{response.body}"
|
43
42
|
end
|
44
43
|
end
|
data/lib/ki_trello/version.rb
CHANGED
@@ -49,6 +49,7 @@ describe Command do
|
|
49
49
|
|
50
50
|
card = as_data(out)
|
51
51
|
card['name'].should == "Test card 001"
|
52
|
+
card['ki_type'].should == "trello_card"
|
52
53
|
|
53
54
|
# Sorry for this test, not sure how to get the short name
|
54
55
|
out, err = with_command do |command|
|
@@ -66,6 +67,20 @@ describe Command do
|
|
66
67
|
card['name'].should == "Test card 001"
|
67
68
|
end
|
68
69
|
|
70
|
+
it "gets checklists with card", :vcr do
|
71
|
+
out, err = with_command do |command|
|
72
|
+
command.get_card("503b9388a2a5a25554bae2e7")
|
73
|
+
end
|
74
|
+
|
75
|
+
card = as_data(out)
|
76
|
+
checklists = card['checklists']
|
77
|
+
checklists.length.should == 2
|
78
|
+
checklists.first['name'].should == 'Checklist 1'
|
79
|
+
checklists.first['checkItems'].length.should == 2
|
80
|
+
checklists.last['name'].should == 'Checklist 2'
|
81
|
+
checklists.last['checkItems'].length.should == 1
|
82
|
+
end
|
83
|
+
|
69
84
|
it "creates card in board", :vcr do
|
70
85
|
json =<<-JSON
|
71
86
|
{
|
data/spec/spec_helper.rb
CHANGED
@@ -38,3 +38,16 @@ RSpec.configure do |config|
|
|
38
38
|
# --seed 1234
|
39
39
|
config.order = 'random'
|
40
40
|
end
|
41
|
+
|
42
|
+
# TODO - should move to Kiseru
|
43
|
+
module Helpers
|
44
|
+
def with_io(input_string)
|
45
|
+
input = StringIO.new(input_string.to_s)
|
46
|
+
error = StringIO.new
|
47
|
+
output = StringIO.new
|
48
|
+
yield input, output, error
|
49
|
+
output.rewind
|
50
|
+
error.rewind
|
51
|
+
[output.read, error.read]
|
52
|
+
end
|
53
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ki_trello
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-09-30 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: colored
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70093973076780 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,15 +21,10 @@ dependencies:
|
|
21
21
|
version: 1.2.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
25
|
-
none: false
|
26
|
-
requirements:
|
27
|
-
- - ~>
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: 1.2.0
|
24
|
+
version_requirements: *70093973076780
|
30
25
|
- !ruby/object:Gem::Dependency
|
31
26
|
name: faraday
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
27
|
+
requirement: &70093973076280 !ruby/object:Gem::Requirement
|
33
28
|
none: false
|
34
29
|
requirements:
|
35
30
|
- - ~>
|
@@ -37,15 +32,10 @@ dependencies:
|
|
37
32
|
version: 0.8.2
|
38
33
|
type: :runtime
|
39
34
|
prerelease: false
|
40
|
-
version_requirements:
|
41
|
-
none: false
|
42
|
-
requirements:
|
43
|
-
- - ~>
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: 0.8.2
|
35
|
+
version_requirements: *70093973076280
|
46
36
|
- !ruby/object:Gem::Dependency
|
47
37
|
name: faraday_middleware
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
38
|
+
requirement: &70093973075700 !ruby/object:Gem::Requirement
|
49
39
|
none: false
|
50
40
|
requirements:
|
51
41
|
- - ~>
|
@@ -53,31 +43,21 @@ dependencies:
|
|
53
43
|
version: 0.8.8
|
54
44
|
type: :runtime
|
55
45
|
prerelease: false
|
56
|
-
version_requirements:
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - ~>
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: 0.8.8
|
46
|
+
version_requirements: *70093973075700
|
62
47
|
- !ruby/object:Gem::Dependency
|
63
48
|
name: gli
|
64
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
+
requirement: &70093973074960 !ruby/object:Gem::Requirement
|
65
50
|
none: false
|
66
51
|
requirements:
|
67
52
|
- - ~>
|
68
53
|
- !ruby/object:Gem::Version
|
69
|
-
version:
|
54
|
+
version: 2.2.1
|
70
55
|
type: :runtime
|
71
56
|
prerelease: false
|
72
|
-
version_requirements:
|
73
|
-
none: false
|
74
|
-
requirements:
|
75
|
-
- - ~>
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: 1.6.0
|
57
|
+
version_requirements: *70093973074960
|
78
58
|
- !ruby/object:Gem::Dependency
|
79
59
|
name: multi_json
|
80
|
-
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirement: &70093973074020 !ruby/object:Gem::Requirement
|
81
61
|
none: false
|
82
62
|
requirements:
|
83
63
|
- - ~>
|
@@ -85,15 +65,10 @@ dependencies:
|
|
85
65
|
version: 1.3.6
|
86
66
|
type: :runtime
|
87
67
|
prerelease: false
|
88
|
-
version_requirements:
|
89
|
-
none: false
|
90
|
-
requirements:
|
91
|
-
- - ~>
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
version: 1.3.6
|
68
|
+
version_requirements: *70093973074020
|
94
69
|
- !ruby/object:Gem::Dependency
|
95
70
|
name: json_pure
|
96
|
-
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirement: &70093973073140 !ruby/object:Gem::Requirement
|
97
72
|
none: false
|
98
73
|
requirements:
|
99
74
|
- - ~>
|
@@ -101,15 +76,21 @@ dependencies:
|
|
101
76
|
version: 1.7.4
|
102
77
|
type: :runtime
|
103
78
|
prerelease: false
|
104
|
-
version_requirements:
|
79
|
+
version_requirements: *70093973073140
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: map
|
82
|
+
requirement: &70093973051180 !ruby/object:Gem::Requirement
|
105
83
|
none: false
|
106
84
|
requirements:
|
107
85
|
- - ~>
|
108
86
|
- !ruby/object:Gem::Version
|
109
|
-
version:
|
87
|
+
version: 6.2.0
|
88
|
+
type: :runtime
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: *70093973051180
|
110
91
|
- !ruby/object:Gem::Dependency
|
111
92
|
name: debugger
|
112
|
-
requirement: !ruby/object:Gem::Requirement
|
93
|
+
requirement: &70093973050440 !ruby/object:Gem::Requirement
|
113
94
|
none: false
|
114
95
|
requirements:
|
115
96
|
- - ~>
|
@@ -117,15 +98,10 @@ dependencies:
|
|
117
98
|
version: 1.2.0
|
118
99
|
type: :development
|
119
100
|
prerelease: false
|
120
|
-
version_requirements:
|
121
|
-
none: false
|
122
|
-
requirements:
|
123
|
-
- - ~>
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
version: 1.2.0
|
101
|
+
version_requirements: *70093973050440
|
126
102
|
- !ruby/object:Gem::Dependency
|
127
103
|
name: rake
|
128
|
-
requirement: !ruby/object:Gem::Requirement
|
104
|
+
requirement: &70093973049960 !ruby/object:Gem::Requirement
|
129
105
|
none: false
|
130
106
|
requirements:
|
131
107
|
- - ~>
|
@@ -133,15 +109,10 @@ dependencies:
|
|
133
109
|
version: 0.9.2
|
134
110
|
type: :development
|
135
111
|
prerelease: false
|
136
|
-
version_requirements:
|
137
|
-
none: false
|
138
|
-
requirements:
|
139
|
-
- - ~>
|
140
|
-
- !ruby/object:Gem::Version
|
141
|
-
version: 0.9.2
|
112
|
+
version_requirements: *70093973049960
|
142
113
|
- !ruby/object:Gem::Dependency
|
143
114
|
name: rspec
|
144
|
-
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirement: &70093973049360 !ruby/object:Gem::Requirement
|
145
116
|
none: false
|
146
117
|
requirements:
|
147
118
|
- - ~>
|
@@ -149,15 +120,10 @@ dependencies:
|
|
149
120
|
version: 2.11.0
|
150
121
|
type: :development
|
151
122
|
prerelease: false
|
152
|
-
version_requirements:
|
153
|
-
none: false
|
154
|
-
requirements:
|
155
|
-
- - ~>
|
156
|
-
- !ruby/object:Gem::Version
|
157
|
-
version: 2.11.0
|
123
|
+
version_requirements: *70093973049360
|
158
124
|
- !ruby/object:Gem::Dependency
|
159
125
|
name: simplecov
|
160
|
-
requirement: !ruby/object:Gem::Requirement
|
126
|
+
requirement: &70093973048680 !ruby/object:Gem::Requirement
|
161
127
|
none: false
|
162
128
|
requirements:
|
163
129
|
- - ~>
|
@@ -165,15 +131,10 @@ dependencies:
|
|
165
131
|
version: 0.6.4
|
166
132
|
type: :development
|
167
133
|
prerelease: false
|
168
|
-
version_requirements:
|
169
|
-
none: false
|
170
|
-
requirements:
|
171
|
-
- - ~>
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
version: 0.6.4
|
134
|
+
version_requirements: *70093973048680
|
174
135
|
- !ruby/object:Gem::Dependency
|
175
136
|
name: test-construct
|
176
|
-
requirement: !ruby/object:Gem::Requirement
|
137
|
+
requirement: &70093973047960 !ruby/object:Gem::Requirement
|
177
138
|
none: false
|
178
139
|
requirements:
|
179
140
|
- - ~>
|
@@ -181,15 +142,10 @@ dependencies:
|
|
181
142
|
version: 1.2.0
|
182
143
|
type: :development
|
183
144
|
prerelease: false
|
184
|
-
version_requirements:
|
185
|
-
none: false
|
186
|
-
requirements:
|
187
|
-
- - ~>
|
188
|
-
- !ruby/object:Gem::Version
|
189
|
-
version: 1.2.0
|
145
|
+
version_requirements: *70093973047960
|
190
146
|
- !ruby/object:Gem::Dependency
|
191
147
|
name: vcr
|
192
|
-
requirement: !ruby/object:Gem::Requirement
|
148
|
+
requirement: &70093973047340 !ruby/object:Gem::Requirement
|
193
149
|
none: false
|
194
150
|
requirements:
|
195
151
|
- - ~>
|
@@ -197,15 +153,10 @@ dependencies:
|
|
197
153
|
version: 2.2.4
|
198
154
|
type: :development
|
199
155
|
prerelease: false
|
200
|
-
version_requirements:
|
201
|
-
none: false
|
202
|
-
requirements:
|
203
|
-
- - ~>
|
204
|
-
- !ruby/object:Gem::Version
|
205
|
-
version: 2.2.4
|
156
|
+
version_requirements: *70093973047340
|
206
157
|
- !ruby/object:Gem::Dependency
|
207
158
|
name: webmock
|
208
|
-
requirement: !ruby/object:Gem::Requirement
|
159
|
+
requirement: &70093973046800 !ruby/object:Gem::Requirement
|
209
160
|
none: false
|
210
161
|
requirements:
|
211
162
|
- - ~>
|
@@ -213,12 +164,7 @@ dependencies:
|
|
213
164
|
version: 1.8.9
|
214
165
|
type: :development
|
215
166
|
prerelease: false
|
216
|
-
version_requirements:
|
217
|
-
none: false
|
218
|
-
requirements:
|
219
|
-
- - ~>
|
220
|
-
- !ruby/object:Gem::Version
|
221
|
-
version: 1.8.9
|
167
|
+
version_requirements: *70093973046800
|
222
168
|
description: A Kiseru client for Trello
|
223
169
|
email:
|
224
170
|
- ben@freeagent.com
|
@@ -263,7 +209,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
263
209
|
version: '0'
|
264
210
|
requirements: []
|
265
211
|
rubyforge_project:
|
266
|
-
rubygems_version: 1.8.
|
212
|
+
rubygems_version: 1.8.10
|
267
213
|
signing_key:
|
268
214
|
specification_version: 3
|
269
215
|
summary: A Kiseru client for Trello
|