embedify 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (6) hide show
  1. data/Gemfile +3 -1
  2. data/Gemfile.lock +4 -1
  3. data/VERSION +1 -1
  4. data/embedify.gemspec +10 -4
  5. data/lib/embedify.rb +33 -3
  6. metadata +38 -6
data/Gemfile CHANGED
@@ -8,7 +8,7 @@ source "http://rubygems.org"
8
8
  group :development do
9
9
  gem "shoulda", ">= 0"
10
10
  gem "rdoc", "~> 3.12"
11
- gem "bundler", "~> 1.0.0"
11
+ gem "bundler"
12
12
  gem "jeweler"
13
13
  gem 'rspec'
14
14
  end
@@ -18,3 +18,5 @@ gem 'hashie'
18
18
  gem 'faraday'
19
19
  gem 'faraday_middleware'
20
20
  gem 'hashie'
21
+ gem 'addressable'
22
+ gem 'fastimage'
data/Gemfile.lock CHANGED
@@ -9,6 +9,7 @@ GEM
9
9
  rack (~> 1.1)
10
10
  faraday_middleware (0.8.4)
11
11
  faraday (>= 0.7.4, < 0.9)
12
+ fastimage (1.2.13)
12
13
  git (1.2.5)
13
14
  hashie (1.2.0)
14
15
  jeweler (1.8.3)
@@ -41,9 +42,11 @@ PLATFORMS
41
42
  ruby
42
43
 
43
44
  DEPENDENCIES
44
- bundler (~> 1.0.0)
45
+ addressable
46
+ bundler
45
47
  faraday
46
48
  faraday_middleware
49
+ fastimage
47
50
  hashie
48
51
  jeweler
49
52
  nokogiri (~> 1.5.0)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.0
1
+ 0.5.0
data/embedify.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "embedify"
8
- s.version = "0.4.0"
8
+ s.version = "0.5.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Tristan Gomez"]
@@ -51,9 +51,11 @@ Gem::Specification.new do |s|
51
51
  s.add_runtime_dependency(%q<faraday>, [">= 0"])
52
52
  s.add_runtime_dependency(%q<faraday_middleware>, [">= 0"])
53
53
  s.add_runtime_dependency(%q<hashie>, [">= 0"])
54
+ s.add_runtime_dependency(%q<addressable>, [">= 0"])
55
+ s.add_runtime_dependency(%q<fastimage>, [">= 0"])
54
56
  s.add_development_dependency(%q<shoulda>, [">= 0"])
55
57
  s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
56
- s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
58
+ s.add_development_dependency(%q<bundler>, [">= 0"])
57
59
  s.add_development_dependency(%q<jeweler>, [">= 0"])
58
60
  s.add_development_dependency(%q<rspec>, [">= 0"])
59
61
  else
@@ -62,9 +64,11 @@ Gem::Specification.new do |s|
62
64
  s.add_dependency(%q<faraday>, [">= 0"])
63
65
  s.add_dependency(%q<faraday_middleware>, [">= 0"])
64
66
  s.add_dependency(%q<hashie>, [">= 0"])
67
+ s.add_dependency(%q<addressable>, [">= 0"])
68
+ s.add_dependency(%q<fastimage>, [">= 0"])
65
69
  s.add_dependency(%q<shoulda>, [">= 0"])
66
70
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
67
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
71
+ s.add_dependency(%q<bundler>, [">= 0"])
68
72
  s.add_dependency(%q<jeweler>, [">= 0"])
69
73
  s.add_dependency(%q<rspec>, [">= 0"])
70
74
  end
@@ -74,9 +78,11 @@ Gem::Specification.new do |s|
74
78
  s.add_dependency(%q<faraday>, [">= 0"])
75
79
  s.add_dependency(%q<faraday_middleware>, [">= 0"])
76
80
  s.add_dependency(%q<hashie>, [">= 0"])
81
+ s.add_dependency(%q<addressable>, [">= 0"])
82
+ s.add_dependency(%q<fastimage>, [">= 0"])
77
83
  s.add_dependency(%q<shoulda>, [">= 0"])
78
84
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
79
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
85
+ s.add_dependency(%q<bundler>, [">= 0"])
80
86
  s.add_dependency(%q<jeweler>, [">= 0"])
81
87
  s.add_dependency(%q<rspec>, [">= 0"])
82
88
  end
data/lib/embedify.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  require 'nokogiri'
2
2
  require 'faraday'
3
3
  require 'hashie'
4
+ require "addressable/uri"
5
+ require 'fastimage'
4
6
 
5
7
  module Embedify
6
8
 
@@ -81,9 +83,37 @@ module Embedify
81
83
  end
82
84
 
83
85
  def self.image(document)
84
- # TODO: loop through all images and bring back up to 30 good candidates
85
- # Good candidates: at least 50x50, max aspect ratio of 3:1, png/jpeg/gif format
86
- puts "image"
86
+ img_srcs = Set.new
87
+ document[:nokogiri_parsed_document].css('img').each do |img_tag|
88
+ img_srcs.add(make_absolute(img_tag.attribute('src'), document['url']))
89
+ end
90
+ if img_srcs.count > 0
91
+ document.image = Set.new
92
+ img_src_count = 1
93
+ img_srcs.each do |img_src|
94
+ dimensions = FastImage.size(img_src)
95
+ #puts "#{img_src} #{dimensions.to_s}"
96
+ document.image.add(url: img_src) if image_is_big_enough?(dimensions) && image_has_good_proportions?(dimensions)
97
+ img_src_count = img_src_count + 1
98
+ return if(img_src_count > 10)
99
+ end
100
+ end
101
+ end
102
+
103
+ def self.make_absolute( href, root )
104
+ URI.parse(root).merge(URI.parse(href)).to_s
105
+ end
106
+
107
+ def self.image_is_big_enough?(dimensions)
108
+ return false if dimensions.nil?
109
+ # at least 50x50
110
+ dimensions[0] >= 50 && dimensions[1] >= 50
111
+ end
112
+
113
+ def self.image_has_good_proportions?(dimensions)
114
+ return false if dimensions.nil?
115
+ # max aspect ratio of 3:1 (one dimension is not more than 3x the other - too narrow/wide in that case)
116
+ (dimensions[0] * 3 >= dimensions[1]) && (dimensions[1] * 3 >= dimensions[0])
87
117
  end
88
118
 
89
119
  def self.description(document)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embedify
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -91,6 +91,38 @@ dependencies:
91
91
  - - ! '>='
92
92
  - !ruby/object:Gem::Version
93
93
  version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: addressable
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :runtime
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: fastimage
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
94
126
  - !ruby/object:Gem::Dependency
95
127
  name: shoulda
96
128
  requirement: !ruby/object:Gem::Requirement
@@ -128,17 +160,17 @@ dependencies:
128
160
  requirement: !ruby/object:Gem::Requirement
129
161
  none: false
130
162
  requirements:
131
- - - ~>
163
+ - - ! '>='
132
164
  - !ruby/object:Gem::Version
133
- version: 1.0.0
165
+ version: '0'
134
166
  type: :development
135
167
  prerelease: false
136
168
  version_requirements: !ruby/object:Gem::Requirement
137
169
  none: false
138
170
  requirements:
139
- - - ~>
171
+ - - ! '>='
140
172
  - !ruby/object:Gem::Version
141
- version: 1.0.0
173
+ version: '0'
142
174
  - !ruby/object:Gem::Dependency
143
175
  name: jeweler
144
176
  requirement: !ruby/object:Gem::Requirement
@@ -214,7 +246,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
214
246
  version: '0'
215
247
  segments:
216
248
  - 0
217
- hash: 1796977382236343391
249
+ hash: 2781018951594904065
218
250
  required_rubygems_version: !ruby/object:Gem::Requirement
219
251
  none: false
220
252
  requirements: