kood 0.0.1
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/.gitignore +47 -0
- data/.yardopts +4 -0
- data/Gemfile +2 -0
- data/LICENSE +22 -0
- data/README.md +9 -0
- data/Rakefile +40 -0
- data/bin/kood +4 -0
- data/kood.gemspec +26 -0
- data/lib/kood-plugin-example.rb +10 -0
- data/lib/kood.rb +14 -0
- data/lib/kood/adapter/git.rb +56 -0
- data/lib/kood/adapter/user_config.rb +36 -0
- data/lib/kood/board.rb +160 -0
- data/lib/kood/card.rb +128 -0
- data/lib/kood/cli.rb +121 -0
- data/lib/kood/cli/board.rb +139 -0
- data/lib/kood/cli/card.rb +188 -0
- data/lib/kood/cli/edit.rb +40 -0
- data/lib/kood/cli/helpers/shell.rb +124 -0
- data/lib/kood/cli/helpers/table.rb +195 -0
- data/lib/kood/cli/list.rb +70 -0
- data/lib/kood/cli/plugin.rb +37 -0
- data/lib/kood/cli/switch.rb +10 -0
- data/lib/kood/core.rb +95 -0
- data/lib/kood/errors.rb +8 -0
- data/lib/kood/extensions/grit.rb +65 -0
- data/lib/kood/list.rb +36 -0
- data/lib/kood/version.rb +3 -0
- data/man/kood-board.1 +74 -0
- data/man/kood-board.1.html +150 -0
- data/man/kood-board.1.ronn +65 -0
- data/man/kood-card.1 +40 -0
- data/man/kood-card.1.html +140 -0
- data/man/kood-card.1.ronn +52 -0
- data/spec/kood/cli_spec.rb +280 -0
- data/spec/spec_helper.rb +67 -0
- data/test/kood/cli_test.rb +67 -0
- metadata +198 -0
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
require 'minitest/autorun'
|
|
2
|
+
require 'kood'
|
|
3
|
+
|
|
4
|
+
module Kood
|
|
5
|
+
# Prevent memoization in order to run the command suite multiple times
|
|
6
|
+
def clear_repo
|
|
7
|
+
@repo = {}
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class Kood::Config
|
|
12
|
+
def self.clear_instance
|
|
13
|
+
@@instance = nil
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
module Adapter
|
|
18
|
+
module UserConfigFile
|
|
19
|
+
def self.clear_conf
|
|
20
|
+
config_file = Kood::KOOD_ROOT.join(Kood.config_path)
|
|
21
|
+
File.delete(config_file) if File.exist?(config_file)
|
|
22
|
+
@@conf = nil
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
module Kood
|
|
28
|
+
module Shell
|
|
29
|
+
def set_terminal_size(width = 1024, height = 768)
|
|
30
|
+
@@size = [width, height]
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def terminal_size
|
|
34
|
+
@@size || [1024, 768]
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def set_env(vars)
|
|
40
|
+
vars.each_pair do |key, value|
|
|
41
|
+
ENV[key.to_s] = value
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Shortcut to execute thor commands and capture its output
|
|
46
|
+
def kood_colored(*cmds)
|
|
47
|
+
stdout = stderr = []
|
|
48
|
+
|
|
49
|
+
# If only one command was passed, return stdout if successful or stderr otherwise
|
|
50
|
+
if cmds.size == 1
|
|
51
|
+
out, err = capture_io { Kood::CLI.start cmds.first.shellsplit }
|
|
52
|
+
return err.empty? ? out.chomp : err.chomp
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# If several commands were passed, return stdout and stderr for each one
|
|
56
|
+
cmds.each do |cmd|
|
|
57
|
+
out, err = capture_io { Kood::CLI.start cmd.shellsplit }
|
|
58
|
+
stdout << out
|
|
59
|
+
stderr << err
|
|
60
|
+
end
|
|
61
|
+
return stdout, stderr
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def kood(*cmds)
|
|
65
|
+
cmds.map! { |cmd| cmd += " --no-color" }
|
|
66
|
+
kood_colored(*cmds)
|
|
67
|
+
end
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
require 'minitest/autorun'
|
|
2
|
+
require 'kood'
|
|
3
|
+
|
|
4
|
+
class Test < MiniTest::Unit::TestCase
|
|
5
|
+
include Kood
|
|
6
|
+
|
|
7
|
+
def test_no_method_options_removes_class_options_from_options
|
|
8
|
+
kood = CLI.new
|
|
9
|
+
|
|
10
|
+
kood.options = { 'foo' => "bar" } # Pass a single method option
|
|
11
|
+
refute kood.send(:no_method_options?)
|
|
12
|
+
|
|
13
|
+
kood.options = { 'debug' => "class option" } # Pass a single class option
|
|
14
|
+
assert kood.send(:no_method_options?)
|
|
15
|
+
|
|
16
|
+
kood.options = CLI.class_options # Pass several class options
|
|
17
|
+
assert kood.send(:no_method_options?)
|
|
18
|
+
|
|
19
|
+
kood.options = { 'foo' => "bar", 'debug' => "class option" } # Method and class opts
|
|
20
|
+
refute kood.send(:no_method_options?)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def test_shell_argument_type_conversion
|
|
24
|
+
assert_equal "foo", Shell.type_cast("foo")
|
|
25
|
+
assert_equal 1, Shell.type_cast("1")
|
|
26
|
+
assert_in_delta 1.0, Shell.type_cast("1.0")
|
|
27
|
+
assert_equal 29, Shell.type_cast("+0000029")
|
|
28
|
+
assert_in_delta -523.49, Shell.type_cast("-0523.49")
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def test_card_pretty_attributes
|
|
32
|
+
card = Card.new
|
|
33
|
+
|
|
34
|
+
assert_empty card.pretty_attributes
|
|
35
|
+
assert_empty card.pretty_attributes(['invalid'])
|
|
36
|
+
assert_equal "Date: #{ card.date }", card.pretty_attributes(['date'])
|
|
37
|
+
|
|
38
|
+
card.title = "Lorem Ipsum"
|
|
39
|
+
card.more['hello_world'] = "foo"
|
|
40
|
+
|
|
41
|
+
assert_equal "Hello world: foo", card.pretty_attributes
|
|
42
|
+
output = "Title: #{' '*6} Lorem Ipsum\nHello world: foo"
|
|
43
|
+
assert_equal output, card.pretty_attributes(['title', 'more'])
|
|
44
|
+
assert_equal output, card.pretty_attributes(['title', 'more', 'invalid'])
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def test_card_find_by_partial_title
|
|
48
|
+
list = List.create(id: "list")
|
|
49
|
+
|
|
50
|
+
%w{ fo foo fooo! bar0 bar1 telescope }.each { |t| list.cards.create(title: t) }
|
|
51
|
+
list.cards.create(title: "space", id: "foo")
|
|
52
|
+
|
|
53
|
+
assert_equal 2, Card.find_all_by_partial_title("foo", list: list).length
|
|
54
|
+
assert_equal 3, Card.find_all_by_partial_title("f", list: list).length
|
|
55
|
+
assert_equal 3, Card.find_all_by_partial_title_or_id("foo", list: list).length
|
|
56
|
+
assert_equal "foo", Card.find_by_partial_title!("foo", list: list).title
|
|
57
|
+
assert_equal "foo", Card.find_by_partial_title!("foo", list: list, unique: true).title
|
|
58
|
+
assert_equal "fooo!", Card.find_by_partial_title!("fooo", list: list, unique: true).title
|
|
59
|
+
|
|
60
|
+
assert_raises MultipleDocumentsFound do
|
|
61
|
+
Card.find_by_partial_title!("bar", list: list, unique: true)
|
|
62
|
+
end
|
|
63
|
+
assert_raises MultipleDocumentsFound do
|
|
64
|
+
Card.find_by_partial_title_or_id!("foo", list: list, unique: true)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: kood
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.1
|
|
5
|
+
prerelease:
|
|
6
|
+
platform: ruby
|
|
7
|
+
authors:
|
|
8
|
+
- David Francisco
|
|
9
|
+
autorequire:
|
|
10
|
+
bindir: bin
|
|
11
|
+
cert_chain: []
|
|
12
|
+
date: 2013-01-30 00:00:00.000000000 Z
|
|
13
|
+
dependencies:
|
|
14
|
+
- !ruby/object:Gem::Dependency
|
|
15
|
+
name: ronn
|
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
|
17
|
+
none: false
|
|
18
|
+
requirements:
|
|
19
|
+
- - ~>
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
21
|
+
version: 0.7.0
|
|
22
|
+
type: :development
|
|
23
|
+
prerelease: false
|
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
+
none: false
|
|
26
|
+
requirements:
|
|
27
|
+
- - ~>
|
|
28
|
+
- !ruby/object:Gem::Version
|
|
29
|
+
version: 0.7.0
|
|
30
|
+
- !ruby/object:Gem::Dependency
|
|
31
|
+
name: rake
|
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
|
33
|
+
none: false
|
|
34
|
+
requirements:
|
|
35
|
+
- - ~>
|
|
36
|
+
- !ruby/object:Gem::Version
|
|
37
|
+
version: 0.9.2
|
|
38
|
+
type: :development
|
|
39
|
+
prerelease: false
|
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
41
|
+
none: false
|
|
42
|
+
requirements:
|
|
43
|
+
- - ~>
|
|
44
|
+
- !ruby/object:Gem::Version
|
|
45
|
+
version: 0.9.2
|
|
46
|
+
- !ruby/object:Gem::Dependency
|
|
47
|
+
name: activesupport
|
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
|
49
|
+
none: false
|
|
50
|
+
requirements:
|
|
51
|
+
- - ~>
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: 3.2.9
|
|
54
|
+
type: :runtime
|
|
55
|
+
prerelease: false
|
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
57
|
+
none: false
|
|
58
|
+
requirements:
|
|
59
|
+
- - ~>
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: 3.2.9
|
|
62
|
+
- !ruby/object:Gem::Dependency
|
|
63
|
+
name: thor
|
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
|
65
|
+
none: false
|
|
66
|
+
requirements:
|
|
67
|
+
- - ~>
|
|
68
|
+
- !ruby/object:Gem::Version
|
|
69
|
+
version: 0.16.0
|
|
70
|
+
type: :runtime
|
|
71
|
+
prerelease: false
|
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
73
|
+
none: false
|
|
74
|
+
requirements:
|
|
75
|
+
- - ~>
|
|
76
|
+
- !ruby/object:Gem::Version
|
|
77
|
+
version: 0.16.0
|
|
78
|
+
- !ruby/object:Gem::Dependency
|
|
79
|
+
name: adapter-git
|
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
|
81
|
+
none: false
|
|
82
|
+
requirements:
|
|
83
|
+
- - ~>
|
|
84
|
+
- !ruby/object:Gem::Version
|
|
85
|
+
version: 0.5.0
|
|
86
|
+
type: :runtime
|
|
87
|
+
prerelease: false
|
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
89
|
+
none: false
|
|
90
|
+
requirements:
|
|
91
|
+
- - ~>
|
|
92
|
+
- !ruby/object:Gem::Version
|
|
93
|
+
version: 0.5.0
|
|
94
|
+
- !ruby/object:Gem::Dependency
|
|
95
|
+
name: toystore
|
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
|
97
|
+
none: false
|
|
98
|
+
requirements:
|
|
99
|
+
- - ~>
|
|
100
|
+
- !ruby/object:Gem::Version
|
|
101
|
+
version: 0.10.4
|
|
102
|
+
type: :runtime
|
|
103
|
+
prerelease: false
|
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
105
|
+
none: false
|
|
106
|
+
requirements:
|
|
107
|
+
- - ~>
|
|
108
|
+
- !ruby/object:Gem::Version
|
|
109
|
+
version: 0.10.4
|
|
110
|
+
- !ruby/object:Gem::Dependency
|
|
111
|
+
name: user_config
|
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
|
113
|
+
none: false
|
|
114
|
+
requirements:
|
|
115
|
+
- - ! '>='
|
|
116
|
+
- !ruby/object:Gem::Version
|
|
117
|
+
version: '0'
|
|
118
|
+
type: :runtime
|
|
119
|
+
prerelease: false
|
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
+
none: false
|
|
122
|
+
requirements:
|
|
123
|
+
- - ! '>='
|
|
124
|
+
- !ruby/object:Gem::Version
|
|
125
|
+
version: '0'
|
|
126
|
+
description:
|
|
127
|
+
email: kood@dmfranc.com
|
|
128
|
+
executables:
|
|
129
|
+
- kood
|
|
130
|
+
extensions: []
|
|
131
|
+
extra_rdoc_files: []
|
|
132
|
+
files:
|
|
133
|
+
- .gitignore
|
|
134
|
+
- .yardopts
|
|
135
|
+
- Gemfile
|
|
136
|
+
- LICENSE
|
|
137
|
+
- README.md
|
|
138
|
+
- Rakefile
|
|
139
|
+
- bin/kood
|
|
140
|
+
- kood.gemspec
|
|
141
|
+
- lib/kood-plugin-example.rb
|
|
142
|
+
- lib/kood.rb
|
|
143
|
+
- lib/kood/adapter/git.rb
|
|
144
|
+
- lib/kood/adapter/user_config.rb
|
|
145
|
+
- lib/kood/board.rb
|
|
146
|
+
- lib/kood/card.rb
|
|
147
|
+
- lib/kood/cli.rb
|
|
148
|
+
- lib/kood/cli/board.rb
|
|
149
|
+
- lib/kood/cli/card.rb
|
|
150
|
+
- lib/kood/cli/edit.rb
|
|
151
|
+
- lib/kood/cli/helpers/shell.rb
|
|
152
|
+
- lib/kood/cli/helpers/table.rb
|
|
153
|
+
- lib/kood/cli/list.rb
|
|
154
|
+
- lib/kood/cli/plugin.rb
|
|
155
|
+
- lib/kood/cli/switch.rb
|
|
156
|
+
- lib/kood/core.rb
|
|
157
|
+
- lib/kood/errors.rb
|
|
158
|
+
- lib/kood/extensions/grit.rb
|
|
159
|
+
- lib/kood/list.rb
|
|
160
|
+
- lib/kood/version.rb
|
|
161
|
+
- man/kood-board.1
|
|
162
|
+
- man/kood-board.1.html
|
|
163
|
+
- man/kood-board.1.ronn
|
|
164
|
+
- man/kood-card.1
|
|
165
|
+
- man/kood-card.1.html
|
|
166
|
+
- man/kood-card.1.ronn
|
|
167
|
+
- spec/kood/cli_spec.rb
|
|
168
|
+
- spec/spec_helper.rb
|
|
169
|
+
- test/kood/cli_test.rb
|
|
170
|
+
homepage: http://kood.dmfranc.com
|
|
171
|
+
licenses: []
|
|
172
|
+
post_install_message:
|
|
173
|
+
rdoc_options: []
|
|
174
|
+
require_paths:
|
|
175
|
+
- lib
|
|
176
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
177
|
+
none: false
|
|
178
|
+
requirements:
|
|
179
|
+
- - ! '>='
|
|
180
|
+
- !ruby/object:Gem::Version
|
|
181
|
+
version: 1.9.0
|
|
182
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
183
|
+
none: false
|
|
184
|
+
requirements:
|
|
185
|
+
- - ! '>='
|
|
186
|
+
- !ruby/object:Gem::Version
|
|
187
|
+
version: '0'
|
|
188
|
+
requirements: []
|
|
189
|
+
rubyforge_project:
|
|
190
|
+
rubygems_version: 1.8.24
|
|
191
|
+
signing_key:
|
|
192
|
+
specification_version: 3
|
|
193
|
+
summary: Work smarter -- An extensible CLI for git-backed taskboards.
|
|
194
|
+
test_files:
|
|
195
|
+
- spec/kood/cli_spec.rb
|
|
196
|
+
- spec/spec_helper.rb
|
|
197
|
+
- test/kood/cli_test.rb
|
|
198
|
+
has_rdoc:
|