epitools 0.4.4 → 0.4.5
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/epitools.gemspec +2 -2
- data/lib/epitools/basetypes.rb +0 -0
- data/lib/epitools/browser/browser_cache.rb +7 -2
- data/lib/epitools/clitools.rb +78 -1
- data/lib/epitools/sys.rb +0 -0
- data/spec/basetypes_spec.rb +1 -2
- data/spec/browser_spec.rb +63 -6
- data/spec/clitools_spec.rb +10 -0
- metadata +3 -9
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.5
|
data/epitools.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{epitools}
|
8
|
-
s.version = "0.4.
|
8
|
+
s.version = "0.4.5"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["epitron"]
|
12
|
-
s.date = %q{2011-01-
|
12
|
+
s.date = %q{2011-01-20}
|
13
13
|
s.description = %q{Miscellaneous utility libraries to make my life easier.}
|
14
14
|
s.email = %q{chris@ill-logic.com}
|
15
15
|
s.extra_rdoc_files = [
|
data/lib/epitools/basetypes.rb
CHANGED
File without changes
|
@@ -35,6 +35,7 @@ class CacheDB
|
|
35
35
|
url = page.uri.to_s
|
36
36
|
|
37
37
|
p [:page_uri, url]
|
38
|
+
p [:original_url, url]
|
38
39
|
|
39
40
|
if url != original_url
|
40
41
|
# redirect original_url to url
|
@@ -48,7 +49,7 @@ class CacheDB
|
|
48
49
|
)
|
49
50
|
end
|
50
51
|
|
51
|
-
compressed_body = Zlib::Deflate.deflate(page.body)
|
52
|
+
compressed_body = page.body #Zlib::Deflate.deflate(page.body)
|
52
53
|
expire(url) if options[:overwrite]
|
53
54
|
db.execute(
|
54
55
|
"INSERT INTO cache VALUES ( ?, ?, ?, ? )",
|
@@ -71,7 +72,7 @@ class CacheDB
|
|
71
72
|
if redirect
|
72
73
|
get(redirect)
|
73
74
|
else
|
74
|
-
body = Zlib::Inflate.inflate(compressed_body)
|
75
|
+
body = compressed_body #Zlib::Inflate.inflate(compressed_body)
|
75
76
|
|
76
77
|
Mechanize::Page.new(
|
77
78
|
URI.parse(url),
|
@@ -150,6 +151,10 @@ class CacheDB
|
|
150
151
|
create_tables
|
151
152
|
end
|
152
153
|
|
154
|
+
def delete!
|
155
|
+
File.unlink @filename
|
156
|
+
end
|
157
|
+
|
153
158
|
private
|
154
159
|
|
155
160
|
def list_tables
|
data/lib/epitools/clitools.rb
CHANGED
@@ -16,7 +16,30 @@ class String
|
|
16
16
|
end
|
17
17
|
|
18
18
|
#
|
19
|
-
#
|
19
|
+
# Create scrollable output via less!
|
20
|
+
#
|
21
|
+
# This command runs `less` in a subprocess, and gives you the IO to its STDIN pipe
|
22
|
+
# so that you can communicate with it.
|
23
|
+
#
|
24
|
+
# Example:
|
25
|
+
#
|
26
|
+
# lesspipe do |less|
|
27
|
+
# 50.times { less.puts "Hi mom!" }
|
28
|
+
# end
|
29
|
+
#
|
30
|
+
# The default less parameters are:
|
31
|
+
# * Allow colour
|
32
|
+
# * Don't wrap lines longer than the screen
|
33
|
+
# * Quit immediately (without paging) if there's less than one screen of text.
|
34
|
+
#
|
35
|
+
# You can change these options by passing a hash to `lesspipe`, like so:
|
36
|
+
#
|
37
|
+
# lesspipe(:wrap=>false) { |less| less.puts essay.to_s }
|
38
|
+
#
|
39
|
+
# It accepts the following boolean options:
|
40
|
+
# :color => Allow ANSI colour codes?
|
41
|
+
# :wrap => Wrap long lines?
|
42
|
+
# :always => Always page, even if there's less than one page of text?
|
20
43
|
#
|
21
44
|
def lesspipe(*args)
|
22
45
|
if args.any? and args.last.is_a?(Hash)
|
@@ -41,3 +64,57 @@ def lesspipe(*args)
|
|
41
64
|
end
|
42
65
|
end
|
43
66
|
end
|
67
|
+
|
68
|
+
|
69
|
+
#
|
70
|
+
# Execute a `system()` command using SQL-style escaped arguments.
|
71
|
+
#
|
72
|
+
# Example:
|
73
|
+
# cmd( ["cp -arv ? ?", "/usr/src", "/home/you/A Folder/dest"] )
|
74
|
+
#
|
75
|
+
# Which is equivalent to:
|
76
|
+
# system( "cp", "-arv", "/usr/src", "/home/you/A Folder/dest" )
|
77
|
+
#
|
78
|
+
# Notice that you don't need to shell-escape anything.
|
79
|
+
# That's done automagically!
|
80
|
+
#
|
81
|
+
# If you don't pass any arrays, `cmd` works the same as `system`:
|
82
|
+
# cmd( "cp", "-arv", "etc", "etc" )
|
83
|
+
#
|
84
|
+
def cmd(*args)
|
85
|
+
|
86
|
+
cmd_args = []
|
87
|
+
|
88
|
+
for arg in args
|
89
|
+
|
90
|
+
case arg
|
91
|
+
|
92
|
+
when Array
|
93
|
+
cmd_literals = arg.shift.split(/\s+/)
|
94
|
+
|
95
|
+
for cmd_literal in cmd_literals
|
96
|
+
if cmd_literal == "?"
|
97
|
+
raise "Not enough substitution arguments" unless cmd_args.any?
|
98
|
+
cmd_args << arg.shift
|
99
|
+
else
|
100
|
+
cmd_args << cmd_literal
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
raise "More parameters than ?'s in cmd string" if arg.any?
|
105
|
+
|
106
|
+
when String
|
107
|
+
cmd_args << arg
|
108
|
+
|
109
|
+
else
|
110
|
+
cmd_args << arg.to_s
|
111
|
+
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
115
|
+
|
116
|
+
p [:cmd_args, cmd_args] if $DEBUG
|
117
|
+
|
118
|
+
system(*cmd_args)
|
119
|
+
end
|
120
|
+
|
data/lib/epitools/sys.rb
CHANGED
File without changes
|
data/spec/basetypes_spec.rb
CHANGED
data/spec/browser_spec.rb
CHANGED
@@ -1,14 +1,71 @@
|
|
1
1
|
require 'epitools/browser'
|
2
2
|
|
3
|
-
describe Browser do
|
3
|
+
#describe Browser do
|
4
|
+
#
|
5
|
+
# before :all do
|
6
|
+
# @browser = Browser.new
|
7
|
+
# end
|
8
|
+
#
|
9
|
+
# after :all do
|
10
|
+
# @browser.cache.delete!
|
11
|
+
# end
|
12
|
+
#
|
13
|
+
# it "googles" do
|
14
|
+
# page = @browser.get("http://google.com")
|
15
|
+
# page.body["Feeling Lucky"].should_not be_empty
|
16
|
+
# end
|
17
|
+
#
|
18
|
+
#end
|
19
|
+
|
20
|
+
class Mechanize::Page
|
21
|
+
def url
|
22
|
+
uri.to_s
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe CacheDB do
|
4
27
|
|
5
28
|
before :all do
|
6
|
-
@
|
29
|
+
@agent = Mechanize.new
|
30
|
+
CacheDB.new(@agent).delete!
|
31
|
+
@cache = CacheDB.new(@agent)
|
32
|
+
end
|
33
|
+
|
34
|
+
def new_page(body, url)
|
35
|
+
Mechanize::Page.new(
|
36
|
+
URI.parse(url),
|
37
|
+
{'content-type'=>'text/html'},
|
38
|
+
body,
|
39
|
+
nil,
|
40
|
+
@agent
|
41
|
+
)
|
42
|
+
end
|
43
|
+
|
44
|
+
after :all do
|
45
|
+
#@cache.delete!
|
7
46
|
end
|
8
|
-
|
9
|
-
it "
|
10
|
-
|
11
|
-
|
47
|
+
|
48
|
+
it "writes and reads" do
|
49
|
+
body = "Blah blah blah."
|
50
|
+
url = "http://example.com/url.html"
|
51
|
+
|
52
|
+
page = new_page(body, url)
|
53
|
+
|
54
|
+
page.body.should == body
|
55
|
+
page.url.should == url
|
56
|
+
|
57
|
+
@cache.put page, url
|
58
|
+
|
59
|
+
p @cache.urls
|
60
|
+
|
61
|
+
@cache.includes?(url).should == true
|
62
|
+
|
63
|
+
result = @cache.get url
|
64
|
+
|
65
|
+
body.should == page.body
|
66
|
+
body.should == result.body
|
67
|
+
url.should == page.url
|
68
|
+
url.should == result.url
|
12
69
|
end
|
13
70
|
|
14
71
|
end
|
data/spec/clitools_spec.rb
CHANGED
@@ -12,4 +12,14 @@ describe String do
|
|
12
12
|
"xxxmatchzzz".highlight(/MATCH/i, color).should == highlighted
|
13
13
|
end
|
14
14
|
|
15
|
+
it "cmds" do
|
16
|
+
cmd( ['test -f ?', __FILE__] ).should == true
|
17
|
+
cmd( ['test -d ?', __FILE__] ).should == false
|
18
|
+
cmd( "test", "-f", __FILE__ ).should == true
|
19
|
+
cmd( "test", "-d", __FILE__ ).should == false
|
20
|
+
|
21
|
+
lambda { cmd( ["test -f ? ?", __FILE__] ) }.should raise_error # too many ?'s
|
22
|
+
lambda { cmd( ["test -f", __FILE__] ) }.should raise_error # too few ?'s
|
23
|
+
end
|
24
|
+
|
15
25
|
end
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: epitools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 7
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 0
|
8
7
|
- 4
|
9
|
-
-
|
10
|
-
version: 0.4.
|
8
|
+
- 5
|
9
|
+
version: 0.4.5
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- epitron
|
@@ -15,7 +14,7 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date: 2011-01-
|
17
|
+
date: 2011-01-20 00:00:00 -05:00
|
19
18
|
default_executable:
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
@@ -26,7 +25,6 @@ dependencies:
|
|
26
25
|
requirements:
|
27
26
|
- - ~>
|
28
27
|
- !ruby/object:Gem::Version
|
29
|
-
hash: 7
|
30
28
|
segments:
|
31
29
|
- 2
|
32
30
|
- 2
|
@@ -42,7 +40,6 @@ dependencies:
|
|
42
40
|
requirements:
|
43
41
|
- - ~>
|
44
42
|
- !ruby/object:Gem::Version
|
45
|
-
hash: 23
|
46
43
|
segments:
|
47
44
|
- 1
|
48
45
|
- 0
|
@@ -58,7 +55,6 @@ dependencies:
|
|
58
55
|
requirements:
|
59
56
|
- - ">="
|
60
57
|
- !ruby/object:Gem::Version
|
61
|
-
hash: 3
|
62
58
|
segments:
|
63
59
|
- 0
|
64
60
|
version: "0"
|
@@ -129,7 +125,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
129
125
|
requirements:
|
130
126
|
- - ">="
|
131
127
|
- !ruby/object:Gem::Version
|
132
|
-
hash: 3
|
133
128
|
segments:
|
134
129
|
- 0
|
135
130
|
version: "0"
|
@@ -138,7 +133,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
138
133
|
requirements:
|
139
134
|
- - ">="
|
140
135
|
- !ruby/object:Gem::Version
|
141
|
-
hash: 3
|
142
136
|
segments:
|
143
137
|
- 0
|
144
138
|
version: "0"
|