shelltoad 0.3.1 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|