link_thumbnailer 2.0.4 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- OTU2ZTQyNTc5NzAwYjFmMTcyN2NmNGMwZmM4ZTYzNmNiNDJiN2ZiZg==
4
+ ZmRlNGRiODRmOGM2ZGZmNmVjYzE4M2MwM2NlY2VhMzdmYTdiYzdjNA==
5
5
  data.tar.gz: !binary |-
6
- OWVmMWFiOGMwMDA5YTkwMjVjOGQ1YTE4ZTVlMGMyODUxN2FlMTE4NA==
6
+ OGMyMTFjZTg4Y2M1ODQxMmU3ZWU5NjcwMmEzYTU2MzM2MDkyZjllYg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZWQzOGNhODhkNzhmMTUwMWIwODNkNGUzZWJhYTliNTI1YTQ4OWQ5YzJmZWJh
10
- NzgyNzM3MTE1ZWU2YjZhYzZhNWRkMDJkYmE0NzQ0NTU3NDNhOWE1NDlkNDg4
11
- ZjlmM2RjMzA1NzI0MWE1YTM4MWQ0YTkwZWRkZGRhZDk4ZmE5NmY=
9
+ YmM4YzhlMzcxZWYzZTU5OGE3ZjU2NDRlYmY3MzQwMDUxZDlhNWRlMTdjODYx
10
+ NzRjYTk1ZTQzMjJlZGUzYzY5YmM2NzlmMDdjMmViM2M3NGU4MTg3ZGJkMWUx
11
+ MDJkNmVlNWFmZGU0ZTYyMjQ4ZjVkZTYzYzFkNjhjOTc1ZTlhOGE=
12
12
  data.tar.gz: !binary |-
13
- OGRmNzkyNGJkNWE5N2IxODYwNTAyMzkwNGIxMmNmMTBmN2YxY2M2MmUyNGUy
14
- MjIzN2FmZmI1MzhhZGEyMTlkZjVkYmNmZGZmNDRiMDUzODk4OGQ3NzE0MGM2
15
- MjY2YTcxMDA1NDcwNmNiOTUxNTU3ODJiOTU2OTNmZWQ5MjNjMDA=
13
+ MmUwMTY3NmNjNjU3OTJlOTQyOTQ1YWViZTZlNWNkNDNhYWEyNzg5ZWE5MWE4
14
+ NDNmZDdlZjUyOWUwZTgyZjIxMGQxZGRiMTJjMzNjOGI1MTMwNjJiM2E4NmU1
15
+ NmY5NWNjNDU4MjgwYzVlMTdkYmVhOWZiMjk5NTg0NTQ3MjJiOTg=
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ # 2.1.0
2
+
3
+ - Increased `og:image` scraping performance by parsing `og:image:width` and `og:image:height` attribute if specified
4
+ - Introduced `image_stats` option to allow disabling image size and type parsing causing performance issues.
5
+
6
+ When disabled, size will be `[0, 0]` and type will be `nil`
7
+
1
8
  # 2.0.4
2
9
 
3
10
  - Fixes [#39](https://github.com/gottfrois/link_thumbnailer/issues/39)
data/README.md CHANGED
@@ -10,6 +10,8 @@ Ruby gem generating image thumbnails from a given URL. Rank them and give you ba
10
10
 
11
11
  Demo Application is [here](http://link-thumbnailer-demo.herokuapp.com/) !
12
12
 
13
+ **OpenSource** and **Free** API available [here](https://github.com/gottfrois/link_thumbnailer_api) !
14
+
13
15
  ## Features
14
16
 
15
17
  - Dead simple.
@@ -135,6 +137,12 @@ In `config/initializers/link_thumbnailer.rb`
135
137
  # Numbers of images to fetch. Fetching too many images will be slow.
136
138
  #
137
139
  # config.image_limit = 5
140
+
141
+ # Whether you want LinkThumbnailer to return image size and type or not.
142
+ # Setting this value to false will increase performance since for each images, LinkThumbnailer
143
+ # does not have to fetch its size and type.
144
+ #
145
+ # config.image_stats = true
138
146
  end
139
147
 
140
148
  Or at runtime:
@@ -60,4 +60,10 @@ LinkThumbnailer.configure do |config|
60
60
  # Numbers of images to fetch. Fetching too many images will be slow.
61
61
  #
62
62
  # config.image_limit = 5
63
+
64
+ # Whether you want LinkThumbnailer to return image size and type or not.
65
+ # Setting this value to false will increase performance since for each images, LinkThumbnailer
66
+ # does not have to fetch its size and type.
67
+ #
68
+ # config.image_stats = true
63
69
  end
@@ -25,7 +25,7 @@ module LinkThumbnailer
25
25
  attr_accessor :redirect_limit, :blacklist_urls, :user_agent,
26
26
  :verify_ssl, :http_timeout, :attributes, :graders,
27
27
  :description_min_length, :positive_regex, :negative_regex,
28
- :image_limit
28
+ :image_limit, :image_stats
29
29
 
30
30
  # Create a new instance.
31
31
  #
@@ -53,6 +53,7 @@ module LinkThumbnailer
53
53
  @positive_regex = /article|body|content|entry|hentry|main|page|pagination|post|text|blog|story/i
54
54
  @negative_regex = /combx|comment|com-|contact|foot|footer|footnote|masthead|media|meta|outbrain|promo|related|scroll|shoutbox|sidebar|sponsor|shopping|tags|tool|widget|modal/i
55
55
  @image_limit = 5
56
+ @image_stats = true
56
57
  end
57
58
 
58
59
  end
@@ -5,11 +5,18 @@ module LinkThumbnailer
5
5
  class Size
6
6
 
7
7
  def self.perform(image)
8
+ return [0, 0] unless perform?
8
9
  ::FastImage.size(image.src.to_s, raise_on_failure: true)
9
10
  rescue ::FastImage::FastImageException, ::Errno::ENAMETOOLONG
10
11
  [0, 0]
11
12
  end
12
13
 
14
+ private
15
+
16
+ def self.perform?
17
+ ::LinkThumbnailer.page.config.image_stats
18
+ end
19
+
13
20
  end
14
21
  end
15
22
  end
@@ -5,9 +5,16 @@ module LinkThumbnailer
5
5
  class Type
6
6
 
7
7
  def self.perform(image)
8
+ return unless perform?
8
9
  ::FastImage.type(image.src.to_s, raise_on_failure: true)
9
10
  rescue ::FastImage::FastImageException, ::Errno::ENAMETOOLONG
10
- :jpg
11
+ nil
12
+ end
13
+
14
+ private
15
+
16
+ def self.perform?
17
+ ::LinkThumbnailer.page.config.image_stats
11
18
  end
12
19
 
13
20
  end
@@ -9,10 +9,10 @@ module LinkThumbnailer
9
9
 
10
10
  attr_reader :src, :type, :size
11
11
 
12
- def initialize(src)
12
+ def initialize(src, size = nil, type = nil)
13
13
  @src = src
14
- @size = parser.size(self)
15
- @type = parser.type(self)
14
+ @size = size || parser.size(self)
15
+ @type = type || parser.type(self)
16
16
  end
17
17
 
18
18
  def to_s
@@ -28,12 +28,12 @@ module LinkThumbnailer
28
28
  true
29
29
  end
30
30
 
31
- private
32
-
33
31
  def value
34
32
  raise 'must implement'
35
33
  end
36
34
 
35
+ private
36
+
37
37
  def meta_xpath(options = {})
38
38
  meta_xpaths(options).first
39
39
  end
@@ -5,14 +5,14 @@ module LinkThumbnailer
5
5
  module Default
6
6
  class Description < ::LinkThumbnailer::Scrapers::Default::Base
7
7
 
8
- private
9
-
10
8
  def value
11
9
  return model_from_meta.to_s if model_from_meta
12
10
  return model_from_body.to_s if model_from_body
13
11
  nil
14
12
  end
15
13
 
14
+ private
15
+
16
16
  def model_from_meta
17
17
  modelize(node_from_meta, node_from_meta.attributes['content'].value) if node_from_meta
18
18
  end
@@ -6,12 +6,12 @@ module LinkThumbnailer
6
6
  module Default
7
7
  class Images < ::LinkThumbnailer::Scrapers::Default::Base
8
8
 
9
- private
10
-
11
9
  def value
12
10
  abs_urls.each_with_index.take_while { |_, i| i < config.image_limit }.map { |e| modelize(e.first) }
13
11
  end
14
12
 
13
+ private
14
+
15
15
  def urls
16
16
  document.search('//img').map { |i| i['src'] }.compact
17
17
  end
@@ -5,12 +5,12 @@ module LinkThumbnailer
5
5
  module Default
6
6
  class Title < ::LinkThumbnailer::Scrapers::Default::Base
7
7
 
8
- private
9
-
10
8
  def value
11
9
  model.to_s
12
10
  end
13
11
 
12
+ private
13
+
14
14
  def model
15
15
  modelize(node)
16
16
  end
@@ -9,12 +9,12 @@ module LinkThumbnailer
9
9
  meta.any? { |node| opengraph_node?(node) }
10
10
  end
11
11
 
12
- private
13
-
14
12
  def value
15
13
  model.to_s
16
14
  end
17
15
 
16
+ private
17
+
18
18
  def model
19
19
  modelize(node, node.attributes['content'].to_s) if node
20
20
  end
@@ -16,7 +16,7 @@ module LinkThumbnailer
16
16
  end
17
17
 
18
18
  def modelize(node, text = nil)
19
- model_class.new(text)
19
+ model_class.new(text, size)
20
20
  end
21
21
 
22
22
  def nodes
@@ -24,6 +24,46 @@ module LinkThumbnailer
24
24
  nodes.empty? ? meta_xpaths(attribute: attribute, key: :name) : nodes
25
25
  end
26
26
 
27
+ def size
28
+ [width.to_i, height.to_i] if width && height
29
+ end
30
+
31
+ def width
32
+ Width.new(document).value
33
+ end
34
+
35
+ def height
36
+ Height.new(document).value
37
+ end
38
+
39
+ class Width < ::LinkThumbnailer::Scrapers::Opengraph::Base
40
+
41
+ def value
42
+ node.attributes['content'].to_s if node
43
+ end
44
+
45
+ private
46
+
47
+ def attribute
48
+ "og:image:width"
49
+ end
50
+
51
+ end
52
+
53
+ class Height < ::LinkThumbnailer::Scrapers::Opengraph::Base
54
+
55
+ def value
56
+ node.attributes['content'].to_s if node
57
+ end
58
+
59
+ private
60
+
61
+ def attribute
62
+ "og:image:height"
63
+ end
64
+
65
+ end
66
+
27
67
  end
28
68
  end
29
69
  end
@@ -1,3 +1,3 @@
1
1
  module LinkThumbnailer
2
- VERSION = '2.0.4'
2
+ VERSION = '2.1.0'
3
3
  end
@@ -15,6 +15,7 @@ describe LinkThumbnailer::Configuration do
15
15
  it { expect(instance.positive_regex).to_not be_nil }
16
16
  it { expect(instance.negative_regex).to_not be_nil }
17
17
  it { expect(instance.image_limit).to eq(5) }
18
+ it { expect(instance.image_stats).to eq(true) }
18
19
 
19
20
  describe '.config' do
20
21
 
data/spec/fixture_spec.rb CHANGED
@@ -25,6 +25,7 @@ describe 'Fixture' do
25
25
  it { expect(action.description).to eq(description) }
26
26
  it { expect(action.images.count).to eq(1) }
27
27
  it { expect(action.images.first.src.to_s).to eq(png_url) }
28
+ it { expect(action.images.first.size).to eq([100, 100]) }
28
29
 
29
30
  end
30
31
 
@@ -6,6 +6,8 @@
6
6
  <meta property="og:title" content="Title from og">
7
7
  <meta property="og:description" content="Description from og">
8
8
  <meta property="og:image" content="http://foo.com/foo.png">
9
+ <meta property="og:image:width" content="100">
10
+ <meta property="og:image:height" content="100">
9
11
  <title>Title</title>
10
12
  </head>
11
13
 
@@ -25,7 +25,7 @@ describe LinkThumbnailer::ImageParsers::Type do
25
25
  expect(FastImage).to receive(:type).with(src, raise_on_failure: true).and_raise(FastImage::FastImageException)
26
26
  end
27
27
 
28
- it { expect(action).to eq(:jpg) }
28
+ it { expect(action).to be_nil }
29
29
 
30
30
  end
31
31
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: link_thumbnailer
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.4
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pierre-Louis Gottfrois
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-09 00:00:00.000000000 Z
11
+ date: 2014-06-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport