shelltoad 0.3.1 → 0.4.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/Changelog.textile +9 -0
- data/Readme.textile +5 -2
- data/VERSION +1 -1
- data/lib/shelltoad/command.rb +79 -33
- data/lib/shelltoad/configuration.rb +8 -0
- data/lib/shelltoad/error.rb +30 -11
- data/shelltoad.gemspec +2 -2
- data/spec/shelltoad_spec.rb +18 -1
- metadata +4 -4
data/Changelog.textile
CHANGED
data/Readme.textile
CHANGED
@@ -8,8 +8,9 @@ Create <pre><code>.shelltoadrc</code></pre> file in your project directory
|
|
8
8
|
with the application name and access key:
|
9
9
|
<pre><code>account: myapp
|
10
10
|
key: c285743ecbc285743ecbc285743ecbc285743ecb
|
11
|
-
secure true # https usage. Default: false
|
12
|
-
project_id: 123456 # see errors only under specified proejct. Default: all projects
|
11
|
+
secure: true # https usage. Default: false.
|
12
|
+
project_id: 123456 # see errors only under specified proejct. Default: all projects.
|
13
|
+
browser: firefox # specify browsers for open errors. Default: sensible-browser or firefox or _etc_ or explorer.</code></pre>
|
13
14
|
|
14
15
|
h3. Commands
|
15
16
|
|
@@ -17,9 +18,11 @@ h3. Commands
|
|
17
18
|
* error, er [number] - display information about given error. Shortcut: shelltoad [number]
|
18
19
|
* resolve, rv [number] - mark error as resolved in Hoptoad
|
19
20
|
* commit, ci [number] - do commit to vcs with the information on the specified error and mark error resolved in Hoptoad
|
21
|
+
* open, op [number] - open error page in browser
|
20
22
|
|
21
23
|
Shelltoad supports 'magicfind' in all commands:
|
22
24
|
You don't need to type whole error id - just last three numbers is enough.
|
25
|
+
Also all error-related commands support interactive menu if number is not specified.
|
23
26
|
|
24
27
|
h3. Usage
|
25
28
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.1
|
data/lib/shelltoad/command.rb
CHANGED
@@ -1,42 +1,88 @@
|
|
1
|
-
|
1
|
+
require "readline"
|
2
|
+
class Shelltoad
|
3
|
+
class Command
|
2
4
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
5
|
+
class << self
|
6
|
+
|
7
|
+
#
|
8
|
+
# API
|
9
|
+
#
|
10
|
+
|
11
|
+
def run(command, *args)
|
12
|
+
case command.to_s
|
13
|
+
when "-h", "--help", "help", "h"
|
14
|
+
display_help
|
15
|
+
when "errors", "ers", nil, ""
|
16
|
+
Error.all.each do |error|
|
17
|
+
output error.to_s
|
18
|
+
end
|
19
|
+
when "error", "er"
|
20
|
+
magic_find(args.shift) do |error|
|
21
|
+
output error.view
|
22
|
+
end
|
23
|
+
when "commit", "ci"
|
24
|
+
commit(args.shift)
|
25
|
+
when "resolve", "rv"
|
26
|
+
magic_find(args.shift) do |error|
|
27
|
+
error.resolve!
|
28
|
+
output "Error #{error.id} marked as resolved"
|
29
|
+
end
|
30
|
+
when "open", "op"
|
31
|
+
magic_find(args.shift) do |error|
|
32
|
+
open error.url
|
33
|
+
end
|
34
|
+
when /^[\d]/
|
35
|
+
magic_find(command) do |error|
|
36
|
+
output error.view
|
37
|
+
end
|
38
|
+
else
|
39
|
+
raise BaseException, "Command not found"
|
40
|
+
end
|
41
|
+
return 0
|
42
|
+
rescue BaseException => e
|
43
|
+
output e.message
|
44
|
+
return 1
|
12
45
|
end
|
13
|
-
|
14
|
-
|
15
|
-
|
46
|
+
|
47
|
+
#
|
48
|
+
# Implementation
|
49
|
+
#
|
50
|
+
|
51
|
+
protected
|
52
|
+
def magic_find(*args, &block)
|
53
|
+
Error.magic_find(*args, &block)
|
16
54
|
end
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
output "Error #{error.id} marked as resolved"
|
55
|
+
|
56
|
+
def output(*args)
|
57
|
+
Shelltoad.output(*args)
|
21
58
|
end
|
22
|
-
|
23
|
-
|
24
|
-
|
59
|
+
|
60
|
+
def commit(id)
|
61
|
+
magic_find(id) do |error|
|
62
|
+
output error.commit!
|
63
|
+
end
|
64
|
+
end # commit(id, args)
|
65
|
+
|
66
|
+
def open(url)
|
67
|
+
[Configuration.browser, "firefox", "chromium-browser", "start" ].find do |browser|
|
68
|
+
system browser, url.to_s
|
69
|
+
end
|
25
70
|
end
|
26
|
-
else
|
27
|
-
raise Shelltoad::BaseException, "Command not found"
|
28
|
-
end
|
29
|
-
return 0
|
30
|
-
rescue Shelltoad::BaseException => e
|
31
|
-
output e.message
|
32
|
-
return 1
|
33
|
-
end
|
34
71
|
|
35
|
-
|
36
|
-
|
37
|
-
|
72
|
+
def display_help
|
73
|
+
output <<-EOI
|
74
|
+
Usage: shelltoad command [<args>]
|
75
|
+
|
76
|
+
Available commands:
|
38
77
|
|
39
|
-
|
40
|
-
|
78
|
+
errors list all unresolved errors, this is the default
|
79
|
+
error display information about given error. Shortcut: shelltoad <number>
|
80
|
+
resolve mark error as resolved in Hoptoad
|
81
|
+
commit do commit to vcs with the information on the specified error and mark error resolved in Hoptoad
|
82
|
+
open open error page in browser
|
83
|
+
EOI
|
84
|
+
|
85
|
+
end
|
86
|
+
end
|
41
87
|
end
|
42
88
|
end
|
@@ -24,6 +24,10 @@ class Shelltoad::Configuration
|
|
24
24
|
self.instance.account
|
25
25
|
end
|
26
26
|
|
27
|
+
def self.browser
|
28
|
+
self.instance.browser
|
29
|
+
end
|
30
|
+
|
27
31
|
def self.instance
|
28
32
|
@instance ||= self.new
|
29
33
|
end
|
@@ -56,6 +60,10 @@ class Shelltoad::Configuration
|
|
56
60
|
@config["secure"] # false by default
|
57
61
|
end
|
58
62
|
|
63
|
+
def browser
|
64
|
+
@config["browser"] || "sensible-browser"
|
65
|
+
end
|
66
|
+
|
59
67
|
end
|
60
68
|
|
61
69
|
Hoptoad.auth_token = Shelltoad::Configuration.key
|
data/lib/shelltoad/error.rb
CHANGED
@@ -7,18 +7,30 @@ class Shelltoad
|
|
7
7
|
|
8
8
|
URL = URI.parse("#{Configuration.secure? ? "https" : "http"}://#{Configuration.account}.hoptoadapp.com:80")
|
9
9
|
|
10
|
+
CACHE = {} # Runtime cache for http queries
|
11
|
+
|
10
12
|
#
|
11
13
|
# Class methods
|
12
14
|
#
|
13
15
|
|
14
16
|
def self.all(options = {})
|
15
17
|
options[:project_id] ||= Configuration.project_id if Configuration.project_id
|
16
|
-
|
17
|
-
|
18
|
-
|
18
|
+
CACHE[options] ||= (
|
19
|
+
(Hoptoad::Error.find(:all, options) || []).map! do |attributes|
|
20
|
+
self.new(attributes)
|
21
|
+
end
|
22
|
+
)
|
19
23
|
end
|
20
24
|
|
21
25
|
def self.magic_find(id)
|
26
|
+
if !id || id.to_s.empty?
|
27
|
+
Error.all.each do |error|
|
28
|
+
output error.to_s
|
29
|
+
end
|
30
|
+
output "\n"
|
31
|
+
id = Readline.readline("Input error id: ", true)
|
32
|
+
end
|
33
|
+
|
22
34
|
error = id.to_s.size > 5 ? simple_finder(id) : magic_finder(id)
|
23
35
|
if block_given?
|
24
36
|
return yield(error)
|
@@ -40,6 +52,10 @@ class Shelltoad
|
|
40
52
|
self.new(attributes, true)
|
41
53
|
end
|
42
54
|
|
55
|
+
def self.output(*args)
|
56
|
+
Shelltoad.output(*args)
|
57
|
+
end
|
58
|
+
|
43
59
|
#
|
44
60
|
# API
|
45
61
|
#
|
@@ -59,6 +75,7 @@ class Shelltoad
|
|
59
75
|
|
60
76
|
def view
|
61
77
|
<<-EOI
|
78
|
+
#{self.url.to_s}
|
62
79
|
#{self.error_message}
|
63
80
|
#{self.lines.join("\n")}
|
64
81
|
EOI
|
@@ -100,14 +117,12 @@ class Shelltoad
|
|
100
117
|
@attributes[key] || self.data[key]
|
101
118
|
end
|
102
119
|
|
103
|
-
def
|
104
|
-
|
105
|
-
attr
|
106
|
-
else
|
107
|
-
super(meth, *args, &blk)
|
108
|
-
end
|
120
|
+
def url(format = nil)
|
121
|
+
URI.parse(URL.to_s + path(format))
|
109
122
|
end
|
110
123
|
|
124
|
+
|
125
|
+
|
111
126
|
#
|
112
127
|
# Implementation
|
113
128
|
#
|
@@ -117,8 +132,12 @@ class Shelltoad
|
|
117
132
|
"/errors/#{self.id}" + (format ? ".#{format}" : "")
|
118
133
|
end
|
119
134
|
|
120
|
-
def
|
121
|
-
|
135
|
+
def method_missing(meth, *args, &blk)
|
136
|
+
if attr = @attributes[meth]
|
137
|
+
attr
|
138
|
+
else
|
139
|
+
super(meth, *args, &blk)
|
140
|
+
end
|
122
141
|
end
|
123
142
|
|
124
143
|
end
|
data/shelltoad.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{shelltoad}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.4.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Bogdan Gusiev"]
|
12
|
-
s.date = %q{2011-04-
|
12
|
+
s.date = %q{2011-04-14}
|
13
13
|
s.default_executable = %q{shelltoad}
|
14
14
|
s.description = %q{
|
15
15
|
}
|
data/spec/shelltoad_spec.rb
CHANGED
@@ -11,13 +11,30 @@ describe Shelltoad do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
describe ".run" do
|
14
|
+
subject { Shelltoad.run(*args) }
|
15
|
+
|
16
|
+
|
14
17
|
[["error", TEST_ERROR], "errors", ["commit", TEST_ERROR], ["resolve", TEST_ERROR]].each do |command|
|
15
18
|
describe "command:#{command.inspect}" do
|
16
|
-
|
19
|
+
let(:args) { Array(command) }
|
17
20
|
it { should == 0 }
|
18
21
|
end
|
19
22
|
end
|
20
23
|
|
24
|
+
|
25
|
+
describe "open command" do
|
26
|
+
let(:args) { ["open", TEST_ERROR] }
|
27
|
+
before(:each) do
|
28
|
+
Shelltoad::Configuration.stubs(:browser).returns("true")
|
29
|
+
end
|
30
|
+
it {should == 0}
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
describe "help commad" do
|
35
|
+
let(:args) { "help" }
|
36
|
+
it {should == 0}
|
37
|
+
end
|
21
38
|
end
|
22
39
|
|
23
40
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shelltoad
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 13
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 4
|
9
9
|
- 1
|
10
|
-
version: 0.
|
10
|
+
version: 0.4.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Bogdan Gusiev
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-04-
|
18
|
+
date: 2011-04-14 00:00:00 +03:00
|
19
19
|
default_executable: shelltoad
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|