eat 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 +4 -0
- data/Gemfile +4 -0
- data/README.rdoc +21 -0
- data/Rakefile +10 -0
- data/eat.gemspec +22 -0
- data/lib/eat.rb +29 -0
- data/lib/eat/version.rb +3 -0
- data/test/helper.rb +9 -0
- data/test/test_eat.rb +48 -0
- metadata +90 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.rdoc
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
=eat
|
2
|
+
|
3
|
+
Instead of
|
4
|
+
|
5
|
+
require 'open-uri'
|
6
|
+
open('http://169.254.169.254/latest/meta-data/security-groups').gets
|
7
|
+
open('/home/seamus/foo.txt').gets
|
8
|
+
|
9
|
+
Try
|
10
|
+
|
11
|
+
require 'eat'
|
12
|
+
eat('http://169.254.169.254/latest/meta-data/security-groups')
|
13
|
+
eat('/home/seamus/foo.txt')
|
14
|
+
|
15
|
+
==Supported schemas
|
16
|
+
|
17
|
+
* local filesystem (it will try to use <tt>sudo</tt> if it can't read the file)
|
18
|
+
* http (the default timeout is 5 seconds)
|
19
|
+
* https (it won't check the SSL certificate... if you want security, don't use this!)
|
20
|
+
|
21
|
+
Copyright 2011 Seamus Abshere
|
data/Rakefile
ADDED
data/eat.gemspec
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "eat/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "eat"
|
7
|
+
s.version = Eat::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Seamus Abshere"]
|
10
|
+
s.email = ["seamus@abshere.net"]
|
11
|
+
s.homepage = "https://github.com/seamusabshere/eat"
|
12
|
+
s.summary = %q{A more trustworthy open-uri for use with RSS feeds, config scripts, etc.}
|
13
|
+
s.description = %q{Lets you open local and remote files by immediately returning their contents as a string.}
|
14
|
+
|
15
|
+
s.rubyforge_project = "eat"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
s.add_development_dependency 'test-unit'
|
22
|
+
end
|
data/lib/eat.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'uri'
|
2
|
+
|
3
|
+
module Eat
|
4
|
+
def eat(filesystem_path_or_uri, remote_timeout = 5)
|
5
|
+
uri = ::URI.parse filesystem_path_or_uri
|
6
|
+
case uri.scheme
|
7
|
+
when nil
|
8
|
+
if ::File.readable? uri.path
|
9
|
+
::IO.read uri.path
|
10
|
+
else
|
11
|
+
`sudo cat #{uri.path}`
|
12
|
+
end
|
13
|
+
when 'http', 'https'
|
14
|
+
require 'net/http'
|
15
|
+
require 'net/https' if uri.scheme == 'https'
|
16
|
+
(defined?(::SystemTimer) ? ::SystemTimer : ::Timeout).timeout(remote_timeout) do
|
17
|
+
http = ::Net::HTTP.new uri.host, uri.port
|
18
|
+
if uri.scheme == 'https'
|
19
|
+
http.use_ssl = true
|
20
|
+
# if you were trying to be real safe, you wouldn't use this library
|
21
|
+
http.verify_mode = ::OpenSSL::SSL::VERIFY_NONE
|
22
|
+
end
|
23
|
+
http.request ::Net::HTTP::Get.new(uri.request_uri)
|
24
|
+
end.body
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
::Object.send :include, ::Eat
|
data/lib/eat/version.rb
ADDED
data/test/helper.rb
ADDED
data/test/test_eat.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
require 'tempfile'
|
4
|
+
class Tempfile
|
5
|
+
class TriedToUseMe < RuntimeError; end
|
6
|
+
def initialize(*args)
|
7
|
+
raise TriedToUseMe
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class TestEat < Test::Unit::TestCase
|
12
|
+
def test_filesystem
|
13
|
+
assert eat(__FILE__).include?('class TestEat < Test::Unit::TestCase')
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_http
|
17
|
+
assert eat('http://brighterplanet.com/robots.txt').include?('User-agent')
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_https
|
21
|
+
assert eat('https://brighterplanet.com/robots.txt').include?('User-agent')
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_sudo_filesystem
|
25
|
+
f = File.open('test_sudo_filesystem.txt', 'w')
|
26
|
+
f.write "hello world"
|
27
|
+
f.close
|
28
|
+
`sudo chown root #{f.path}`
|
29
|
+
`sudo chmod go-rwx #{f.path}`
|
30
|
+
assert !File.readable?(f.path)
|
31
|
+
assert eat(f.path).include?('hello world')
|
32
|
+
ensure
|
33
|
+
`sudo rm -f #{f.path}`
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_openuri_uses_tempfile
|
37
|
+
assert_raises(Tempfile::TriedToUseMe) do
|
38
|
+
require 'open-uri'
|
39
|
+
open 'http://do1ircpq72156.cloudfront.net/0.2.47/javascripts/prototype.rails-3.0.3.js'
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_eat_doesnt_use_tempfile
|
44
|
+
assert_nothing_raised do
|
45
|
+
eat 'http://do1ircpq72156.cloudfront.net/0.2.47/javascripts/prototype.rails-3.0.3.js'
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
metadata
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: eat
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Seamus Abshere
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-01-11 00:00:00 -06:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: test-unit
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
version: "0"
|
33
|
+
type: :development
|
34
|
+
version_requirements: *id001
|
35
|
+
description: Lets you open local and remote files by immediately returning their contents as a string.
|
36
|
+
email:
|
37
|
+
- seamus@abshere.net
|
38
|
+
executables: []
|
39
|
+
|
40
|
+
extensions: []
|
41
|
+
|
42
|
+
extra_rdoc_files: []
|
43
|
+
|
44
|
+
files:
|
45
|
+
- .gitignore
|
46
|
+
- Gemfile
|
47
|
+
- README.rdoc
|
48
|
+
- Rakefile
|
49
|
+
- eat.gemspec
|
50
|
+
- lib/eat.rb
|
51
|
+
- lib/eat/version.rb
|
52
|
+
- test/helper.rb
|
53
|
+
- test/test_eat.rb
|
54
|
+
has_rdoc: true
|
55
|
+
homepage: https://github.com/seamusabshere/eat
|
56
|
+
licenses: []
|
57
|
+
|
58
|
+
post_install_message:
|
59
|
+
rdoc_options: []
|
60
|
+
|
61
|
+
require_paths:
|
62
|
+
- lib
|
63
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
hash: 3
|
69
|
+
segments:
|
70
|
+
- 0
|
71
|
+
version: "0"
|
72
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
hash: 3
|
78
|
+
segments:
|
79
|
+
- 0
|
80
|
+
version: "0"
|
81
|
+
requirements: []
|
82
|
+
|
83
|
+
rubyforge_project: eat
|
84
|
+
rubygems_version: 1.3.7
|
85
|
+
signing_key:
|
86
|
+
specification_version: 3
|
87
|
+
summary: A more trustworthy open-uri for use with RSS feeds, config scripts, etc.
|
88
|
+
test_files:
|
89
|
+
- test/helper.rb
|
90
|
+
- test/test_eat.rb
|