image_scraper 0.0.2 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +2 -0
- data/Gemfile.lock +64 -0
- data/README.md +12 -6
- data/Rakefile +1 -0
- data/VERSION +1 -1
- data/image_scraper.gemspec +12 -2
- data/lib/image_scraper.rb +73 -13
- data/test/resources/stylesheet_test.html +17 -0
- data/test/test_image_scraper.rb +41 -7
- metadata +54 -14
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,22 +1,86 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
+
abstract (1.0.0)
|
5
|
+
actionmailer (3.0.7)
|
6
|
+
actionpack (= 3.0.7)
|
7
|
+
mail (~> 2.2.15)
|
8
|
+
actionpack (3.0.7)
|
9
|
+
activemodel (= 3.0.7)
|
10
|
+
activesupport (= 3.0.7)
|
11
|
+
builder (~> 2.1.2)
|
12
|
+
erubis (~> 2.6.6)
|
13
|
+
i18n (~> 0.5.0)
|
14
|
+
rack (~> 1.2.1)
|
15
|
+
rack-mount (~> 0.6.14)
|
16
|
+
rack-test (~> 0.5.7)
|
17
|
+
tzinfo (~> 0.3.23)
|
18
|
+
activemodel (3.0.7)
|
19
|
+
activesupport (= 3.0.7)
|
20
|
+
builder (~> 2.1.2)
|
21
|
+
i18n (~> 0.5.0)
|
22
|
+
activerecord (3.0.7)
|
23
|
+
activemodel (= 3.0.7)
|
24
|
+
activesupport (= 3.0.7)
|
25
|
+
arel (~> 2.0.2)
|
26
|
+
tzinfo (~> 0.3.23)
|
27
|
+
activeresource (3.0.7)
|
28
|
+
activemodel (= 3.0.7)
|
29
|
+
activesupport (= 3.0.7)
|
30
|
+
activesupport (3.0.7)
|
31
|
+
arel (2.0.10)
|
32
|
+
builder (2.1.2)
|
33
|
+
css_parser (1.1.9)
|
34
|
+
erubis (2.6.6)
|
35
|
+
abstract (>= 1.0.0)
|
4
36
|
git (1.2.5)
|
37
|
+
i18n (0.5.0)
|
5
38
|
jeweler (1.5.2)
|
6
39
|
bundler (~> 1.0.0)
|
7
40
|
git (>= 1.2.5)
|
8
41
|
rake
|
42
|
+
mail (2.2.19)
|
43
|
+
activesupport (>= 2.3.6)
|
44
|
+
i18n (>= 0.4.0)
|
45
|
+
mime-types (~> 1.16)
|
46
|
+
treetop (~> 1.4.8)
|
47
|
+
mime-types (1.16)
|
9
48
|
nokogiri (1.4.4)
|
49
|
+
polyglot (0.3.1)
|
50
|
+
rack (1.2.3)
|
51
|
+
rack-mount (0.6.14)
|
52
|
+
rack (>= 1.0.0)
|
53
|
+
rack-test (0.5.7)
|
54
|
+
rack (>= 1.0)
|
55
|
+
rails (3.0.7)
|
56
|
+
actionmailer (= 3.0.7)
|
57
|
+
actionpack (= 3.0.7)
|
58
|
+
activerecord (= 3.0.7)
|
59
|
+
activeresource (= 3.0.7)
|
60
|
+
activesupport (= 3.0.7)
|
61
|
+
bundler (~> 1.0)
|
62
|
+
railties (= 3.0.7)
|
63
|
+
railties (3.0.7)
|
64
|
+
actionpack (= 3.0.7)
|
65
|
+
activesupport (= 3.0.7)
|
66
|
+
rake (>= 0.8.7)
|
67
|
+
thor (~> 0.14.4)
|
10
68
|
rake (0.9.0)
|
11
69
|
rcov (0.9.9)
|
12
70
|
shoulda (2.11.3)
|
71
|
+
thor (0.14.6)
|
72
|
+
treetop (1.4.9)
|
73
|
+
polyglot (>= 0.3.1)
|
74
|
+
tzinfo (0.3.27)
|
13
75
|
|
14
76
|
PLATFORMS
|
15
77
|
ruby
|
16
78
|
|
17
79
|
DEPENDENCIES
|
18
80
|
bundler (~> 1.0.0)
|
81
|
+
css_parser
|
19
82
|
jeweler (~> 1.5.2)
|
20
83
|
nokogiri
|
84
|
+
rails
|
21
85
|
rcov
|
22
86
|
shoulda
|
data/README.md
CHANGED
@@ -14,17 +14,23 @@ Install w/ Bundler
|
|
14
14
|
|
15
15
|
## USAGE
|
16
16
|
|
17
|
-
|
17
|
+
Initialize the image scraper client
|
18
18
|
|
19
|
-
ImageScraper.
|
19
|
+
image_scraper = ImageScraper::Client.new("http://www.rubygems.org")
|
20
20
|
|
21
|
-
|
21
|
+
You can also pass an options hash to the client when you initialize it:
|
22
22
|
|
23
|
-
ImageScraper.
|
23
|
+
image_scraper = ImageScraper::Client.new("http://www.rubygems.org", options)
|
24
|
+
# OPTIONS - If you don't pass the option, it will default to true
|
25
|
+
# :convert_to_absolute_url - If there are relative image URLS, it will convert them to absolute URLS.
|
26
|
+
# :include_css_images - If there are stylesheets on the page, it will pull images out of the stylesheet. For example: background: url(/images/some-image.png).
|
27
|
+
# :include_css_data_images - Will include data images from CSS. For example: data:image/gif;base64,R0lGODlhEAAOALMAAOazToeH............
|
28
|
+
|
29
|
+
Get the images from the url specified when you initialized the client:
|
24
30
|
|
25
|
-
|
31
|
+
image_scraper.image_urls
|
26
32
|
|
27
|
-
|
33
|
+
This will return an array of strings.
|
28
34
|
|
29
35
|
## Contributing to image_scraper
|
30
36
|
|
data/Rakefile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0
|
1
|
+
0.1.0
|
data/image_scraper.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{image_scraper}
|
8
|
-
s.version = "0.0
|
8
|
+
s.version = "0.1.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["John McAliley"]
|
12
|
-
s.date = %q{2011-
|
12
|
+
s.date = %q{2011-06-02}
|
13
13
|
s.description = %q{Simple utility to pull image urls from web page}
|
14
14
|
s.email = %q{john.mcaliley@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -27,6 +27,7 @@ Gem::Specification.new do |s|
|
|
27
27
|
"image_scraper.gemspec",
|
28
28
|
"lib/image_scraper.rb",
|
29
29
|
"test/helper.rb",
|
30
|
+
"test/resources/stylesheet_test.html",
|
30
31
|
"test/test_image_scraper.rb"
|
31
32
|
]
|
32
33
|
s.homepage = %q{http://github.com/charlotte-ruby/image_scraper}
|
@@ -45,26 +46,35 @@ Gem::Specification.new do |s|
|
|
45
46
|
|
46
47
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
47
48
|
s.add_runtime_dependency(%q<nokogiri>, [">= 0"])
|
49
|
+
s.add_runtime_dependency(%q<css_parser>, [">= 0"])
|
50
|
+
s.add_runtime_dependency(%q<rails>, [">= 0"])
|
48
51
|
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
49
52
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
50
53
|
s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
|
51
54
|
s.add_development_dependency(%q<rcov>, [">= 0"])
|
52
55
|
s.add_runtime_dependency(%q<nokogiri>, [">= 0"])
|
56
|
+
s.add_runtime_dependency(%q<css_parser>, [">= 0"])
|
53
57
|
else
|
54
58
|
s.add_dependency(%q<nokogiri>, [">= 0"])
|
59
|
+
s.add_dependency(%q<css_parser>, [">= 0"])
|
60
|
+
s.add_dependency(%q<rails>, [">= 0"])
|
55
61
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
56
62
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
57
63
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
58
64
|
s.add_dependency(%q<rcov>, [">= 0"])
|
59
65
|
s.add_dependency(%q<nokogiri>, [">= 0"])
|
66
|
+
s.add_dependency(%q<css_parser>, [">= 0"])
|
60
67
|
end
|
61
68
|
else
|
62
69
|
s.add_dependency(%q<nokogiri>, [">= 0"])
|
70
|
+
s.add_dependency(%q<css_parser>, [">= 0"])
|
71
|
+
s.add_dependency(%q<rails>, [">= 0"])
|
63
72
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
64
73
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
65
74
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
66
75
|
s.add_dependency(%q<rcov>, [">= 0"])
|
67
76
|
s.add_dependency(%q<nokogiri>, [">= 0"])
|
77
|
+
s.add_dependency(%q<css_parser>, [">= 0"])
|
68
78
|
end
|
69
79
|
end
|
70
80
|
|
data/lib/image_scraper.rb
CHANGED
@@ -1,20 +1,80 @@
|
|
1
|
+
require 'pp'
|
2
|
+
require 'rails'
|
1
3
|
require 'open-uri'
|
2
4
|
require 'nokogiri'
|
3
5
|
|
4
6
|
module ImageScraper
|
5
|
-
class
|
7
|
+
class Client
|
8
|
+
attr_accessor :url, :convert_to_absolute_url, :include_css_images, :include_css_data_images, :doc
|
9
|
+
|
10
|
+
def initialize(url,options={})
|
11
|
+
options.reverse_merge!(:convert_to_absolute_url=>true,:include_css_images=>true, :include_css_data_images=>false)
|
12
|
+
@url = url
|
13
|
+
@convert_to_absolute_url = options[:convert_to_absolute_url]
|
14
|
+
@include_css_images = options[:include_css_images]
|
15
|
+
@include_css_data_images = options[:include_css_data_images]
|
16
|
+
@doc = Nokogiri::HTML(open url)
|
17
|
+
end
|
18
|
+
|
19
|
+
def image_urls
|
20
|
+
images = page_images
|
21
|
+
images += stylesheet_images if include_css_images
|
22
|
+
images
|
23
|
+
end
|
24
|
+
|
25
|
+
def page_images
|
26
|
+
urls = []
|
27
|
+
doc.xpath("//img").each do |img|
|
28
|
+
image = img["src"]
|
29
|
+
image = ImageScraper::Util.absolute_url(url,image) if convert_to_absolute_url
|
30
|
+
urls << image
|
31
|
+
end
|
32
|
+
urls
|
33
|
+
end
|
34
|
+
|
35
|
+
def stylesheet_images
|
36
|
+
images = []
|
37
|
+
stylesheets.each do |stylesheet|
|
38
|
+
file = open(stylesheet)
|
39
|
+
css = file.string rescue IO.read(file)
|
40
|
+
|
41
|
+
images += css.scan(/url\((.*?)\)/).collect do |image_url|
|
42
|
+
if image_url.include?("data:image") and @include_css_data_images
|
43
|
+
image_url[0]
|
44
|
+
else
|
45
|
+
@convert_to_absolute_url ? ImageScraper::Util.absolute_url(url,image_url[0]) : image_url
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
images
|
50
|
+
end
|
51
|
+
|
52
|
+
def stylesheets
|
53
|
+
doc.xpath('//link[@rel="stylesheet"]').collect do |stylesheet|
|
54
|
+
ImageScraper::Util.absolute_url(url,stylesheet['href'])
|
55
|
+
end
|
56
|
+
end
|
6
57
|
end
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
58
|
+
|
59
|
+
module Util
|
60
|
+
def self.absolute_url(url,asset=nil)
|
61
|
+
return domain(url) + path(url) if asset.nil? and asset.include("://")
|
62
|
+
return asset if asset.include?("://")
|
63
|
+
return domain(url)+asset if asset[0]=="/"
|
64
|
+
return domain(url) =~ /\/$/ ? domain(url)+asset : domain(url)+"/"+asset
|
65
|
+
end
|
66
|
+
|
67
|
+
def self.domain(url)
|
68
|
+
uri = URI.parse(url)
|
69
|
+
"#{uri.scheme}://#{uri.host}"
|
70
|
+
end
|
71
|
+
|
72
|
+
def self.path(url)
|
73
|
+
uri = URI.parse(url)
|
74
|
+
uri.path
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
class Railtie < Rails::Railtie
|
19
79
|
end
|
20
80
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
|
2
|
+
"http://www.w3.org/TR/html4/strict.dtd">
|
3
|
+
|
4
|
+
<html lang="en">
|
5
|
+
<head>
|
6
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
7
|
+
<title>stylesheet_test</title>
|
8
|
+
<meta name="generator" content="TextMate http://macromates.com/">
|
9
|
+
<meta name="author" content="John McAliley">
|
10
|
+
<link rel="stylesheet" href="/css/master.css" type="text/css" media="screen" title="no title" charset="utf-8">
|
11
|
+
<link rel="stylesheet" href="/css/master2.css" type="text/css" media="screen" title="no title" charset="utf-8">
|
12
|
+
<!-- Date: 2011-06-01 -->
|
13
|
+
</head>
|
14
|
+
<body>
|
15
|
+
|
16
|
+
</body>
|
17
|
+
</html>
|
data/test/test_image_scraper.rb
CHANGED
@@ -1,13 +1,47 @@
|
|
1
|
+
require 'pp'
|
1
2
|
require 'helper'
|
2
3
|
|
4
|
+
|
5
|
+
#TODO: these tests will not work forever. Try to test against a static web page instead of external URLs
|
3
6
|
class TestImageScraper < Test::Unit::TestCase
|
4
7
|
should "return list of all image urls on a web page with absolute paths" do
|
5
|
-
images = ["http://upload.wikimedia.org/wikipedia/en/thumb/2/24/Lenna.png/200px-Lenna.png",
|
6
|
-
|
8
|
+
images = ["http://upload.wikimedia.org/wikipedia/en/thumb/2/24/Lenna.png/200px-Lenna.png",
|
9
|
+
"http://bits.wikimedia.org/skins-1.17/common/images/magnify-clip.png",
|
10
|
+
"http://bits.wikimedia.org/skins-1.17/vector/images/search-ltr.png?301-2",
|
11
|
+
"http://en.wikipedia.org/images/wikimedia-button.png",
|
12
|
+
"http://bits.wikimedia.org/skins-1.17/common/images/poweredby_mediawiki_88x31.png"]
|
13
|
+
scraper = ImageScraper::Client.new("http://en.wikipedia.org/wiki/Standard_test_image",:include_css_images=>false)
|
14
|
+
assert_equal images, scraper.image_urls
|
7
15
|
end
|
8
|
-
|
16
|
+
|
9
17
|
should "return list of all image urls on a web page with relative paths" do
|
10
|
-
images = ["http://upload.wikimedia.org/wikipedia/en/thumb/2/24/Lenna.png/200px-Lenna.png",
|
11
|
-
|
12
|
-
|
13
|
-
|
18
|
+
images = ["http://upload.wikimedia.org/wikipedia/en/thumb/2/24/Lenna.png/200px-Lenna.png",
|
19
|
+
"http://bits.wikimedia.org/skins-1.17/common/images/magnify-clip.png",
|
20
|
+
"http://bits.wikimedia.org/skins-1.17/vector/images/search-ltr.png?301-2",
|
21
|
+
"/images/wikimedia-button.png",
|
22
|
+
"http://bits.wikimedia.org/skins-1.17/common/images/poweredby_mediawiki_88x31.png"]
|
23
|
+
scraper = ImageScraper::Client.new("http://en.wikipedia.org/wiki/Standard_test_image",:convert_to_absolute_url=>false,:include_css_images=>false)
|
24
|
+
assert_equal images, scraper.image_urls
|
25
|
+
end
|
26
|
+
|
27
|
+
should "return list of stylesheets contained in html page (relative path)" do
|
28
|
+
doc = Nokogiri::HTML(IO.read(File.dirname(__FILE__)+"/resources/stylesheet_test.html"))
|
29
|
+
domain = "http://test.com"
|
30
|
+
assert_equal ["http://test.com/phoenix/testcentral.css"], ImageScraper::Client.new("http://test.com").stylesheets
|
31
|
+
end
|
32
|
+
|
33
|
+
should "return proper absolute url for a page and asset" do
|
34
|
+
assert_equal "http://www.test.com/image.gif", ImageScraper::Util.absolute_url("http://www.test.com","image.gif")
|
35
|
+
assert_equal "http://www.test.com/images/image.gif",ImageScraper::Util.absolute_url("http://www.test.com","images/image.gif")
|
36
|
+
assert_equal "http://www.test.com/images/image.gif",ImageScraper::Util.absolute_url("http://www.test.com","/images/image.gif")
|
37
|
+
assert_equal "http://www.test.com/image.gif", ImageScraper::Util.absolute_url("http://www.test.com/","image.gif")
|
38
|
+
assert_equal "http://www.test.com/images/image.gif", ImageScraper::Util.absolute_url("http://www.test.com/","/images/image.gif")
|
39
|
+
assert_equal "http://www.test.com/images/image.gif", ImageScraper::Util.absolute_url("http://www.test.com/","images/image.gif")
|
40
|
+
assert_equal "http://www.test.com/images/image.gif", ImageScraper::Util.absolute_url("http://www.test.com/","/images/image.gif")
|
41
|
+
end
|
42
|
+
|
43
|
+
should "return images from a stylesheet" do
|
44
|
+
scraper = ImageScraper::Client.new("http://local.couponshack.com")
|
45
|
+
assert scraper.stylesheet_images.include? ("http://local.couponshack.com/images/bg.png")
|
46
|
+
end
|
47
|
+
end
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
+
- 1
|
7
8
|
- 0
|
8
|
-
|
9
|
-
version: 0.0.2
|
9
|
+
version: 0.1.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- John McAliley
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-
|
17
|
+
date: 2011-06-02 00:00:00 -04:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -31,7 +31,7 @@ dependencies:
|
|
31
31
|
prerelease: false
|
32
32
|
version_requirements: *id001
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
|
-
name:
|
34
|
+
name: css_parser
|
35
35
|
requirement: &id002 !ruby/object:Gem::Requirement
|
36
36
|
none: false
|
37
37
|
requirements:
|
@@ -40,12 +40,38 @@ dependencies:
|
|
40
40
|
segments:
|
41
41
|
- 0
|
42
42
|
version: "0"
|
43
|
-
type: :
|
43
|
+
type: :runtime
|
44
44
|
prerelease: false
|
45
45
|
version_requirements: *id002
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
|
-
name:
|
47
|
+
name: rails
|
48
48
|
requirement: &id003 !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
segments:
|
54
|
+
- 0
|
55
|
+
version: "0"
|
56
|
+
type: :runtime
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: *id003
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: shoulda
|
61
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
62
|
+
none: false
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
segments:
|
67
|
+
- 0
|
68
|
+
version: "0"
|
69
|
+
type: :development
|
70
|
+
prerelease: false
|
71
|
+
version_requirements: *id004
|
72
|
+
- !ruby/object:Gem::Dependency
|
73
|
+
name: bundler
|
74
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
49
75
|
none: false
|
50
76
|
requirements:
|
51
77
|
- - ~>
|
@@ -57,10 +83,10 @@ dependencies:
|
|
57
83
|
version: 1.0.0
|
58
84
|
type: :development
|
59
85
|
prerelease: false
|
60
|
-
version_requirements: *
|
86
|
+
version_requirements: *id005
|
61
87
|
- !ruby/object:Gem::Dependency
|
62
88
|
name: jeweler
|
63
|
-
requirement: &
|
89
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
64
90
|
none: false
|
65
91
|
requirements:
|
66
92
|
- - ~>
|
@@ -72,10 +98,10 @@ dependencies:
|
|
72
98
|
version: 1.5.2
|
73
99
|
type: :development
|
74
100
|
prerelease: false
|
75
|
-
version_requirements: *
|
101
|
+
version_requirements: *id006
|
76
102
|
- !ruby/object:Gem::Dependency
|
77
103
|
name: rcov
|
78
|
-
requirement: &
|
104
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
79
105
|
none: false
|
80
106
|
requirements:
|
81
107
|
- - ">="
|
@@ -85,10 +111,10 @@ dependencies:
|
|
85
111
|
version: "0"
|
86
112
|
type: :development
|
87
113
|
prerelease: false
|
88
|
-
version_requirements: *
|
114
|
+
version_requirements: *id007
|
89
115
|
- !ruby/object:Gem::Dependency
|
90
116
|
name: nokogiri
|
91
|
-
requirement: &
|
117
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
92
118
|
none: false
|
93
119
|
requirements:
|
94
120
|
- - ">="
|
@@ -98,7 +124,20 @@ dependencies:
|
|
98
124
|
version: "0"
|
99
125
|
type: :runtime
|
100
126
|
prerelease: false
|
101
|
-
version_requirements: *
|
127
|
+
version_requirements: *id008
|
128
|
+
- !ruby/object:Gem::Dependency
|
129
|
+
name: css_parser
|
130
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
131
|
+
none: false
|
132
|
+
requirements:
|
133
|
+
- - ">="
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
segments:
|
136
|
+
- 0
|
137
|
+
version: "0"
|
138
|
+
type: :runtime
|
139
|
+
prerelease: false
|
140
|
+
version_requirements: *id009
|
102
141
|
description: Simple utility to pull image urls from web page
|
103
142
|
email: john.mcaliley@gmail.com
|
104
143
|
executables: []
|
@@ -119,6 +158,7 @@ files:
|
|
119
158
|
- image_scraper.gemspec
|
120
159
|
- lib/image_scraper.rb
|
121
160
|
- test/helper.rb
|
161
|
+
- test/resources/stylesheet_test.html
|
122
162
|
- test/test_image_scraper.rb
|
123
163
|
has_rdoc: true
|
124
164
|
homepage: http://github.com/charlotte-ruby/image_scraper
|
@@ -134,7 +174,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
134
174
|
requirements:
|
135
175
|
- - ">="
|
136
176
|
- !ruby/object:Gem::Version
|
137
|
-
hash:
|
177
|
+
hash: 44385371017236818
|
138
178
|
segments:
|
139
179
|
- 0
|
140
180
|
version: "0"
|