cheat 1.3.0 → 1.3.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/cheat.rb +15 -40
- data/lib/cheat/version.rb +1 -1
- data/lib/cheat/wrap.rb +4 -4
- metadata +41 -40
data/lib/cheat.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
%w( tempfile fileutils net/http yaml open-uri cheat/wrap ).each { |f| require f }
|
2
|
+
require 'pager'
|
2
3
|
RUBY_PLATFORM = PLATFORM unless defined? RUBY_PLATFORM # Ruby 1.8 compatibility
|
3
4
|
|
4
5
|
module Cheat
|
6
|
+
include Pager
|
5
7
|
extend self
|
6
8
|
|
7
9
|
HOST = ARGV.include?('debug') ? 'localhost' : 'cheat.errtheblog.com'
|
@@ -22,7 +24,7 @@ module Cheat
|
|
22
24
|
return open(uri, headers) { |body| process(body.read) }
|
23
25
|
end
|
24
26
|
|
25
|
-
return process(File.read(cache_file)) if File.exists?(cache_file) rescue clear_cache if cache_file
|
27
|
+
return process(File.read(cache_file)) if File.exists?(cache_file) rescue clear_cache if cache_file
|
26
28
|
|
27
29
|
fetch_sheet(uri + @sheet) if @sheet
|
28
30
|
end
|
@@ -31,9 +33,9 @@ module Cheat
|
|
31
33
|
open(uri, headers) do |body|
|
32
34
|
sheet = body.read
|
33
35
|
FileUtils.mkdir_p(cache_dir) unless File.exists?(cache_dir)
|
34
|
-
File.open(cache_file, 'w') { |f| f.write(sheet) } if try_to_cache && has_content(sheet) && cache_file && !@edit
|
36
|
+
File.open(cache_file, 'w') { |f| f.write(sheet) } if try_to_cache && has_content(sheet) && cache_file && !@edit
|
35
37
|
@edit ? edit(sheet) : show(sheet)
|
36
|
-
end
|
38
|
+
end
|
37
39
|
exit
|
38
40
|
rescue OpenURI::HTTPError => e
|
39
41
|
puts "Whoa, some kind of Internets error!", "=> #{e} from #{uri}"
|
@@ -48,14 +50,14 @@ module Cheat
|
|
48
50
|
end
|
49
51
|
|
50
52
|
if i = args.index('--diff')
|
51
|
-
diff_sheets(args.first, args[i+1])
|
53
|
+
diff_sheets(args.first, args[i+1])
|
52
54
|
end
|
53
55
|
|
54
56
|
show_versions(args.first) if args.delete('--versions')
|
55
57
|
|
56
58
|
add(args.shift) and return if args.delete('--add')
|
57
59
|
incoming_file = true if @edit = args.delete('--edit')
|
58
|
-
|
60
|
+
|
59
61
|
@execute = true if args.delete("--execute") || args.delete("-x")
|
60
62
|
@sheet = args.shift
|
61
63
|
|
@@ -76,7 +78,7 @@ module Cheat
|
|
76
78
|
uri = "http://#{cheat_uri}/d/#{sheet}/#{old_version}"
|
77
79
|
uri += "/#{new_version}" if new_version
|
78
80
|
|
79
|
-
fetch_sheet(uri, false)
|
81
|
+
fetch_sheet(uri, false)
|
80
82
|
end
|
81
83
|
|
82
84
|
def has_content(sheet)
|
@@ -91,9 +93,9 @@ module Cheat
|
|
91
93
|
end
|
92
94
|
|
93
95
|
def headers
|
94
|
-
{ 'User-Agent' => 'cheat!', 'Accept' => 'text/yaml' }
|
96
|
+
{ 'User-Agent' => 'cheat!', 'Accept' => 'text/yaml' }
|
95
97
|
end
|
96
|
-
|
98
|
+
|
97
99
|
def cheat_uri
|
98
100
|
"#{HOST}:#{PORT}#{SUFFIX}"
|
99
101
|
end
|
@@ -126,7 +128,7 @@ module Cheat
|
|
126
128
|
def show(sheet_yaml)
|
127
129
|
sheet = YAML.load(sheet_yaml).to_a.first
|
128
130
|
sheet[-1] = sheet.last.join("\n") if sheet[-1].is_a?(Array)
|
129
|
-
|
131
|
+
page
|
130
132
|
puts sheet.first + ':'
|
131
133
|
puts ' ' + sheet.last.gsub("\r",'').gsub("\n", "\n ").wrap
|
132
134
|
rescue Errno::EPIPE
|
@@ -172,8 +174,8 @@ module Cheat
|
|
172
174
|
def check_errors(result, title, text)
|
173
175
|
if result.body =~ /<p class="error">(.+?)<\/p>/m
|
174
176
|
puts $1.gsub(/\n/, '').gsub(/<.+?>/, '').squeeze(' ').wrap(80)
|
175
|
-
puts
|
176
|
-
puts "Here's what you wrote, so it isn't lost in the void:"
|
177
|
+
puts
|
178
|
+
puts "Here's what you wrote, so it isn't lost in the void:"
|
177
179
|
puts text
|
178
180
|
else
|
179
181
|
puts "Success! Try it!", "$ cheat #{title}"
|
@@ -181,7 +183,7 @@ module Cheat
|
|
181
183
|
end
|
182
184
|
|
183
185
|
def editor
|
184
|
-
ENV['VISUAL'] || ENV['EDITOR'] || "vim"
|
186
|
+
ENV['VISUAL'] || ENV['EDITOR'] || "vim"
|
185
187
|
end
|
186
188
|
|
187
189
|
def cache_dir
|
@@ -203,36 +205,9 @@ module Cheat
|
|
203
205
|
end
|
204
206
|
|
205
207
|
def clear_cache_file
|
206
|
-
FileUtils.rm(cache_file) if File.exists?(cache_file)
|
208
|
+
FileUtils.rm(cache_file) if File.exists?(cache_file)
|
207
209
|
end
|
208
210
|
|
209
|
-
def run_pager
|
210
|
-
return if RUBY_PLATFORM =~ /win32/
|
211
|
-
return unless STDOUT.tty?
|
212
|
-
|
213
|
-
read, write = IO.pipe
|
214
|
-
|
215
|
-
unless Kernel.fork # Child process
|
216
|
-
STDOUT.reopen(write)
|
217
|
-
STDERR.reopen(write) if STDERR.tty?
|
218
|
-
read.close
|
219
|
-
write.close
|
220
|
-
return
|
221
|
-
end
|
222
|
-
|
223
|
-
# Parent process, become pager
|
224
|
-
STDIN.reopen(read)
|
225
|
-
read.close
|
226
|
-
write.close
|
227
|
-
|
228
|
-
ENV['LESS'] = 'FSRX' # Don't page if the input is short enough
|
229
|
-
|
230
|
-
# wait until we have input before we start the pager
|
231
|
-
Kernel.select [STDIN]
|
232
|
-
pager = ENV['PAGER'] || 'less'
|
233
|
-
exec pager rescue exec "/bin/sh", "-c", pager
|
234
|
-
rescue
|
235
|
-
end
|
236
211
|
end
|
237
212
|
|
238
213
|
Cheat.sheets(ARGV) if __FILE__ == $0
|
data/lib/cheat/version.rb
CHANGED
data/lib/cheat/wrap.rb
CHANGED
@@ -6,9 +6,9 @@ class String
|
|
6
6
|
|
7
7
|
lines.collect! do |line|
|
8
8
|
|
9
|
-
if magic_lists
|
9
|
+
if magic_lists
|
10
10
|
line =~ /^([\s\-\d\.\:]*\s)/
|
11
|
-
else
|
11
|
+
else
|
12
12
|
line =~ /^([\s]*\s)/
|
13
13
|
end
|
14
14
|
|
@@ -18,12 +18,12 @@ class String
|
|
18
18
|
first = true
|
19
19
|
|
20
20
|
while line.length > 0
|
21
|
-
first ? (i, first = 0, false) : i = indent
|
21
|
+
first ? (i, first = 0, false) : i = indent
|
22
22
|
pos = width - i
|
23
23
|
|
24
24
|
if line.length > pos and line[0..pos] =~ /^(.+)\s/
|
25
25
|
subline = $1
|
26
|
-
else
|
26
|
+
else
|
27
27
|
subline = line[0..pos]
|
28
28
|
end
|
29
29
|
buffer += " " * i + subline + "\n"
|
metadata
CHANGED
@@ -1,32 +1,40 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: cheat
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
- 1
|
7
|
-
- 3
|
8
|
-
- 0
|
9
|
-
version: 1.3.0
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.3.1
|
5
|
+
prerelease:
|
10
6
|
platform: ruby
|
11
|
-
authors:
|
7
|
+
authors:
|
12
8
|
- Chris Wanstrath
|
13
9
|
autorequire:
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
12
|
+
date: 2012-12-06 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: pager
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.0'
|
30
|
+
description: ! " cheat prints cheat sheets from cheat.errtheblog.com, a wiki-like\n
|
31
|
+
\ repository of programming knowledge.\n"
|
22
32
|
email: chris@ozmm.org
|
23
|
-
executables:
|
33
|
+
executables:
|
24
34
|
- cheat
|
25
35
|
extensions: []
|
26
|
-
|
27
36
|
extra_rdoc_files: []
|
28
|
-
|
29
|
-
files:
|
37
|
+
files:
|
30
38
|
- README
|
31
39
|
- LICENSE
|
32
40
|
- lib/ambition/init.rb
|
@@ -59,35 +67,28 @@ files:
|
|
59
67
|
- lib/cheat/wrap.rb
|
60
68
|
- lib/cheat.rb
|
61
69
|
- bin/cheat
|
62
|
-
has_rdoc: true
|
63
70
|
homepage: http://cheat.errtheblog.com
|
64
71
|
licenses: []
|
65
|
-
|
66
72
|
post_install_message:
|
67
73
|
rdoc_options: []
|
68
|
-
|
69
|
-
require_paths:
|
74
|
+
require_paths:
|
70
75
|
- lib
|
71
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
requirements:
|
80
|
-
- -
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
|
83
|
-
- 0
|
84
|
-
version: "0"
|
76
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
77
|
+
none: false
|
78
|
+
requirements:
|
79
|
+
- - ! '>='
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
85
88
|
requirements: []
|
86
|
-
|
87
89
|
rubyforge_project:
|
88
|
-
rubygems_version: 1.
|
90
|
+
rubygems_version: 1.8.23
|
89
91
|
signing_key:
|
90
92
|
specification_version: 3
|
91
93
|
summary: cheat prints cheat sheets from cheat.errtheblog.com
|
92
94
|
test_files: []
|
93
|
-
|