link_thumbnailer 1.1.2 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (104) hide show
  1. checksums.yaml +5 -13
  2. data/.travis.yml +1 -1
  3. data/CHANGELOG.md +117 -104
  4. data/Gemfile +1 -1
  5. data/{LICENSE → LICENSE.txt} +21 -21
  6. data/README.md +153 -184
  7. data/lib/generators/link_thumbnailer/install_generator.rb +0 -4
  8. data/lib/generators/templates/initializer.rb +63 -41
  9. data/lib/link_thumbnailer/configuration.rb +52 -10
  10. data/lib/link_thumbnailer/exceptions.rb +6 -0
  11. data/lib/link_thumbnailer/grader.rb +37 -0
  12. data/lib/link_thumbnailer/graders/base.rb +32 -0
  13. data/lib/link_thumbnailer/graders/html_attribute.rb +49 -0
  14. data/lib/link_thumbnailer/graders/length.rb +19 -0
  15. data/lib/link_thumbnailer/graders/link_density.rb +21 -0
  16. data/lib/link_thumbnailer/graders/position.rb +11 -0
  17. data/lib/link_thumbnailer/image_comparator.rb +24 -0
  18. data/lib/link_thumbnailer/image_comparators/base.rb +17 -0
  19. data/lib/link_thumbnailer/image_comparators/size.rb +11 -0
  20. data/lib/link_thumbnailer/image_parser.rb +18 -0
  21. data/lib/link_thumbnailer/image_parsers/size.rb +15 -0
  22. data/lib/link_thumbnailer/image_parsers/type.rb +15 -0
  23. data/lib/link_thumbnailer/image_validator.rb +30 -0
  24. data/lib/link_thumbnailer/model.rb +16 -0
  25. data/lib/link_thumbnailer/models/description.rb +34 -0
  26. data/lib/link_thumbnailer/models/image.rb +54 -0
  27. data/lib/link_thumbnailer/models/title.rb +20 -0
  28. data/lib/link_thumbnailer/models/website.rb +39 -0
  29. data/lib/link_thumbnailer/page.rb +40 -0
  30. data/lib/link_thumbnailer/parser.rb +13 -0
  31. data/lib/link_thumbnailer/processor.rb +94 -0
  32. data/lib/link_thumbnailer/railtie.rb +9 -9
  33. data/lib/link_thumbnailer/scraper.rb +64 -0
  34. data/lib/link_thumbnailer/scrapers/base.rb +63 -0
  35. data/lib/link_thumbnailer/scrapers/default/base.rb +10 -0
  36. data/lib/link_thumbnailer/scrapers/default/description.rb +47 -0
  37. data/lib/link_thumbnailer/scrapers/default/images.rb +64 -0
  38. data/lib/link_thumbnailer/scrapers/default/title.rb +25 -0
  39. data/lib/link_thumbnailer/scrapers/opengraph/base.rb +43 -0
  40. data/lib/link_thumbnailer/scrapers/opengraph/description.rb +10 -0
  41. data/lib/link_thumbnailer/scrapers/opengraph/image.rb +30 -0
  42. data/lib/link_thumbnailer/scrapers/opengraph/images.rb +16 -0
  43. data/lib/link_thumbnailer/scrapers/opengraph/title.rb +10 -0
  44. data/lib/link_thumbnailer/version.rb +3 -3
  45. data/lib/link_thumbnailer.rb +36 -119
  46. data/link_thumbnailer.gemspec +26 -28
  47. data/spec/configuration_spec.rb +51 -0
  48. data/spec/examples/empty_og_image_example.html +9 -0
  49. data/spec/fixture_spec.rb +88 -0
  50. data/spec/fixtures/bar.png +2907 -0
  51. data/spec/fixtures/default_from_body.html +12 -0
  52. data/spec/fixtures/default_from_meta.html +11 -0
  53. data/spec/{examples → fixtures}/example.html +53 -53
  54. data/spec/fixtures/foo.png +0 -0
  55. data/spec/fixtures/og_not_valid_example.html +12 -0
  56. data/spec/fixtures/og_valid_example.html +12 -0
  57. data/spec/fixtures/og_valid_multi_image_example.html +13 -0
  58. data/spec/grader_spec.rb +24 -0
  59. data/spec/graders/base_spec.rb +12 -0
  60. data/spec/graders/html_attribute_spec.rb +48 -0
  61. data/spec/graders/length_spec.rb +81 -0
  62. data/spec/graders/link_density_spec.rb +22 -0
  63. data/spec/image_comparators/size_spec.rb +39 -0
  64. data/spec/image_parsers/size_spec.rb +34 -0
  65. data/spec/image_parsers/type_spec.rb +34 -0
  66. data/spec/image_validator_spec.rb +35 -0
  67. data/spec/model_spec.rb +17 -0
  68. data/spec/models/description_spec.rb +64 -0
  69. data/spec/models/image_spec.rb +71 -0
  70. data/spec/models/title_spec.rb +24 -0
  71. data/spec/models/website_spec.rb +49 -0
  72. data/spec/page_spec.rb +26 -0
  73. data/spec/processor_spec.rb +349 -0
  74. data/spec/scraper_spec.rb +95 -0
  75. data/spec/scrapers/base_spec.rb +67 -0
  76. data/spec/scrapers/opengraph/base_spec.rb +94 -0
  77. data/spec/spec_helper.rb +15 -13
  78. metadata +126 -120
  79. data/app/controllers/link_thumbnailer/application_controller.rb +0 -4
  80. data/app/controllers/link_thumbnailer/previews_controller.rb +0 -11
  81. data/lib/link_thumbnailer/doc.rb +0 -65
  82. data/lib/link_thumbnailer/doc_parser.rb +0 -15
  83. data/lib/link_thumbnailer/engine.rb +0 -4
  84. data/lib/link_thumbnailer/fetcher.rb +0 -34
  85. data/lib/link_thumbnailer/img_comparator.rb +0 -17
  86. data/lib/link_thumbnailer/img_parser.rb +0 -41
  87. data/lib/link_thumbnailer/img_url_filter.rb +0 -13
  88. data/lib/link_thumbnailer/object.rb +0 -41
  89. data/lib/link_thumbnailer/opengraph.rb +0 -20
  90. data/lib/link_thumbnailer/rails/routes/mapper.rb +0 -30
  91. data/lib/link_thumbnailer/rails/routes/mapping.rb +0 -33
  92. data/lib/link_thumbnailer/rails/routes.rb +0 -47
  93. data/lib/link_thumbnailer/web_image.rb +0 -19
  94. data/spec/doc_parser_spec.rb +0 -25
  95. data/spec/doc_spec.rb +0 -23
  96. data/spec/examples/empty_example.html +0 -11
  97. data/spec/examples/og_example.html +0 -12
  98. data/spec/fetcher_spec.rb +0 -97
  99. data/spec/img_comparator_spec.rb +0 -16
  100. data/spec/img_url_filter_spec.rb +0 -31
  101. data/spec/link_thumbnailer_spec.rb +0 -205
  102. data/spec/object_spec.rb +0 -130
  103. data/spec/opengraph_spec.rb +0 -7
  104. data/spec/web_image_spec.rb +0 -57
@@ -0,0 +1,67 @@
1
+ require 'spec_helper'
2
+
3
+ describe LinkThumbnailer::Scrapers::Base do
4
+
5
+ let(:document) { double('document') }
6
+ let(:instance) { described_class.new(document) }
7
+
8
+ describe '#call' do
9
+
10
+ let(:website) { LinkThumbnailer::Models::Website.new }
11
+ let(:attr) { :title }
12
+ let(:value) { 'foo' }
13
+ let(:action) { instance.call(website, attr) }
14
+
15
+ before do
16
+ instance.stub(:value).and_return(value)
17
+ end
18
+
19
+ it { expect { action }.to change { website.title }.from(nil).to(value) }
20
+
21
+ end
22
+
23
+ describe '#model_class' do
24
+
25
+ let(:action) { instance.send(:model_class) }
26
+
27
+ before do
28
+ instance.stub(:attribute_name).and_return(attr)
29
+ end
30
+
31
+ context 'when internal class exists' do
32
+
33
+ let(:attr) { :title }
34
+
35
+ it { expect(action).to eq(::LinkThumbnailer::Models::Title) }
36
+
37
+ end
38
+
39
+ context 'when internal class does not exists' do
40
+
41
+ let(:attr) { :foo }
42
+
43
+ it { expect { action }.to raise_exception }
44
+
45
+ end
46
+
47
+ end
48
+
49
+ describe '#modelize' do
50
+
51
+ let(:node) { double('node') }
52
+ let(:text) { 'foo' }
53
+ let(:model_class) { double('model_class') }
54
+ let(:action) { instance.send(:modelize, node, text) }
55
+
56
+ before do
57
+ instance.stub(:model_class).and_return(model_class)
58
+ end
59
+
60
+ it 'instantiates a new model' do
61
+ expect(model_class).to receive(:new).with(node, text)
62
+ action
63
+ end
64
+
65
+ end
66
+
67
+ end
@@ -0,0 +1,94 @@
1
+ require 'spec_helper'
2
+
3
+ describe LinkThumbnailer::Scrapers::Opengraph::Base do
4
+
5
+ let(:node) { double('node') }
6
+ let(:document) { double('document') }
7
+ let(:instance) { described_class.new(document) }
8
+
9
+ describe '#applicable?' do
10
+
11
+ let(:meta) { [node, node] }
12
+ let(:action) { instance.applicable? }
13
+
14
+ before do
15
+ instance.stub(:meta).and_return(meta)
16
+ end
17
+
18
+ context 'when all node is an opengraph' do
19
+
20
+ before do
21
+ instance.stub(:opengraph_node?).and_return(true, true)
22
+ end
23
+
24
+ it { expect(action).to be_true }
25
+
26
+ end
27
+
28
+ context 'when any node is an opengraph' do
29
+
30
+ before do
31
+ instance.stub(:opengraph_node?).and_return(true, false)
32
+ end
33
+
34
+ it { expect(action).to be_true }
35
+
36
+ end
37
+
38
+ context 'when no node is an opengraph' do
39
+
40
+ before do
41
+ instance.stub(:opengraph_node?).and_return(false, false)
42
+ end
43
+
44
+ it { expect(action).to be_false }
45
+
46
+ end
47
+
48
+ end
49
+
50
+ describe '#opengraph_node?' do
51
+
52
+ let(:action) { instance.send(:opengraph_node?, node) }
53
+
54
+ before do
55
+ node.stub(:attribute).with('name').and_return(attribute_from_name)
56
+ end
57
+
58
+ context 'with attribute from name valid' do
59
+
60
+ let(:attribute_from_name) { 'og:foo' }
61
+
62
+ it { expect(action).to be_true }
63
+
64
+ end
65
+
66
+ context 'with attribute from name not valid' do
67
+
68
+ let(:attribute_from_name) { 'foo' }
69
+
70
+ before do
71
+ node.stub(:attribute).with('property').and_return(attribute_from_property)
72
+ end
73
+
74
+ context 'and attribute from property valid' do
75
+
76
+ let(:attribute_from_property) { 'og:bar' }
77
+
78
+ it { expect(action).to be_true }
79
+
80
+ end
81
+
82
+ context 'and attribute from property not valid' do
83
+
84
+ let(:attribute_from_property) { 'bar' }
85
+
86
+ it { expect(action).to be_false }
87
+
88
+ end
89
+
90
+ end
91
+
92
+ end
93
+
94
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,13 +1,15 @@
1
- require 'simplecov'
2
- require 'coveralls'
3
- Coveralls.wear!
4
-
5
- require 'link_thumbnailer'
6
- require 'rspec'
7
- require 'webmock/rspec'
8
- require 'json'
9
-
10
- SimpleCov.formatter = Coveralls::SimpleCov::Formatter
11
-
12
- RSpec.configure do |config|
13
- end
1
+ require 'simplecov'
2
+ require 'coveralls'
3
+ Coveralls.wear!
4
+
5
+ require 'link_thumbnailer'
6
+ require 'rspec'
7
+ require 'webmock/rspec'
8
+
9
+ SimpleCov.formatter = Coveralls::SimpleCov::Formatter
10
+
11
+ RSpec.configure do |config|
12
+ config.expect_with :rspec do |c|
13
+ c.syntax = :expect
14
+ end
15
+ end
metadata CHANGED
@@ -1,153 +1,105 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: link_thumbnailer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 2.0.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-03-04 00:00:00.000000000 Z
11
+ date: 2014-05-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rake
14
+ name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ! '>='
17
+ - - '>='
18
18
  - !ruby/object:Gem::Version
19
- version: '0.9'
19
+ version: '3.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ! '>='
24
+ - - '>='
25
25
  - !ruby/object:Gem::Version
26
- version: '0.9'
26
+ version: '3.0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: nokogiri
28
+ name: json
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ! '>='
31
+ - - '>='
32
32
  - !ruby/object:Gem::Version
33
- version: 1.5.5
34
- - - <
33
+ version: 1.7.7
34
+ - - ~>
35
35
  - !ruby/object:Gem::Version
36
36
  version: '1.7'
37
37
  type: :runtime
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
- - - ! '>='
41
+ - - '>='
42
42
  - !ruby/object:Gem::Version
43
- version: 1.5.5
44
- - - <
43
+ version: 1.7.7
44
+ - - ~>
45
45
  - !ruby/object:Gem::Version
46
46
  version: '1.7'
47
47
  - !ruby/object:Gem::Dependency
48
- name: hashie
48
+ name: rake
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
- - - ! '>='
51
+ - - '>='
52
52
  - !ruby/object:Gem::Version
53
- version: 1.2.0
53
+ version: '0.9'
54
54
  type: :runtime
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
- - - ! '>='
58
+ - - '>='
59
59
  - !ruby/object:Gem::Version
60
- version: 1.2.0
60
+ version: '0.9'
61
61
  - !ruby/object:Gem::Dependency
62
- name: net-http-persistent
62
+ name: nokogiri
63
63
  requirement: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - ~>
66
66
  - !ruby/object:Gem::Version
67
- version: '2.7'
67
+ version: '1.6'
68
68
  type: :runtime
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - ~>
73
73
  - !ruby/object:Gem::Version
74
- version: '2.7'
74
+ version: '1.6'
75
75
  - !ruby/object:Gem::Dependency
76
- name: fastimage
76
+ name: net-http-persistent
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
79
  - - ~>
80
80
  - !ruby/object:Gem::Version
81
- version: 1.5.5
82
- type: :runtime
83
- prerelease: false
84
- version_requirements: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - ~>
87
- - !ruby/object:Gem::Version
88
- version: 1.5.5
89
- - !ruby/object:Gem::Dependency
90
- name: json
91
- requirement: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - ! '>='
94
- - !ruby/object:Gem::Version
95
- version: 1.7.6
96
- - - <
97
- - !ruby/object:Gem::Version
98
- version: '1.9'
81
+ version: '2.9'
99
82
  type: :runtime
100
83
  prerelease: false
101
84
  version_requirements: !ruby/object:Gem::Requirement
102
- requirements:
103
- - - ! '>='
104
- - !ruby/object:Gem::Version
105
- version: 1.7.6
106
- - - <
107
- - !ruby/object:Gem::Version
108
- version: '1.9'
109
- - !ruby/object:Gem::Dependency
110
- name: bundler
111
- requirement: !ruby/object:Gem::Requirement
112
85
  requirements:
113
86
  - - ~>
114
87
  - !ruby/object:Gem::Version
115
- version: '1.3'
116
- type: :development
117
- prerelease: false
118
- version_requirements: !ruby/object:Gem::Requirement
119
- requirements:
120
- - - ~>
121
- - !ruby/object:Gem::Version
122
- version: '1.3'
88
+ version: '2.9'
123
89
  - !ruby/object:Gem::Dependency
124
- name: rspec
125
- requirement: !ruby/object:Gem::Requirement
126
- requirements:
127
- - - ~>
128
- - !ruby/object:Gem::Version
129
- version: '2.14'
130
- type: :development
131
- prerelease: false
132
- version_requirements: !ruby/object:Gem::Requirement
133
- requirements:
134
- - - ~>
135
- - !ruby/object:Gem::Version
136
- version: '2.14'
137
- - !ruby/object:Gem::Dependency
138
- name: pry
90
+ name: fastimage
139
91
  requirement: !ruby/object:Gem::Requirement
140
92
  requirements:
141
93
  - - ~>
142
94
  - !ruby/object:Gem::Version
143
- version: '0.9'
144
- type: :development
95
+ version: '1.5'
96
+ type: :runtime
145
97
  prerelease: false
146
98
  version_requirements: !ruby/object:Gem::Requirement
147
99
  requirements:
148
100
  - - ~>
149
101
  - !ruby/object:Gem::Version
150
- version: '0.9'
102
+ version: '1.5'
151
103
  description: Ruby gem generating thumbnail images from a given URL.
152
104
  email:
153
105
  - pierrelouis.gottfrois@gmail.com
@@ -160,44 +112,80 @@ files:
160
112
  - .travis.yml
161
113
  - CHANGELOG.md
162
114
  - Gemfile
163
- - LICENSE
115
+ - LICENSE.txt
164
116
  - README.md
165
117
  - Rakefile
166
- - app/controllers/link_thumbnailer/application_controller.rb
167
- - app/controllers/link_thumbnailer/previews_controller.rb
168
118
  - lib/generators/link_thumbnailer/install_generator.rb
169
119
  - lib/generators/templates/initializer.rb
170
120
  - lib/link_thumbnailer.rb
171
121
  - lib/link_thumbnailer/configuration.rb
172
- - lib/link_thumbnailer/doc.rb
173
- - lib/link_thumbnailer/doc_parser.rb
174
- - lib/link_thumbnailer/engine.rb
175
- - lib/link_thumbnailer/fetcher.rb
176
- - lib/link_thumbnailer/img_comparator.rb
177
- - lib/link_thumbnailer/img_parser.rb
178
- - lib/link_thumbnailer/img_url_filter.rb
179
- - lib/link_thumbnailer/object.rb
180
- - lib/link_thumbnailer/opengraph.rb
181
- - lib/link_thumbnailer/rails/routes.rb
182
- - lib/link_thumbnailer/rails/routes/mapper.rb
183
- - lib/link_thumbnailer/rails/routes/mapping.rb
122
+ - lib/link_thumbnailer/exceptions.rb
123
+ - lib/link_thumbnailer/grader.rb
124
+ - lib/link_thumbnailer/graders/base.rb
125
+ - lib/link_thumbnailer/graders/html_attribute.rb
126
+ - lib/link_thumbnailer/graders/length.rb
127
+ - lib/link_thumbnailer/graders/link_density.rb
128
+ - lib/link_thumbnailer/graders/position.rb
129
+ - lib/link_thumbnailer/image_comparator.rb
130
+ - lib/link_thumbnailer/image_comparators/base.rb
131
+ - lib/link_thumbnailer/image_comparators/size.rb
132
+ - lib/link_thumbnailer/image_parser.rb
133
+ - lib/link_thumbnailer/image_parsers/size.rb
134
+ - lib/link_thumbnailer/image_parsers/type.rb
135
+ - lib/link_thumbnailer/image_validator.rb
136
+ - lib/link_thumbnailer/model.rb
137
+ - lib/link_thumbnailer/models/description.rb
138
+ - lib/link_thumbnailer/models/image.rb
139
+ - lib/link_thumbnailer/models/title.rb
140
+ - lib/link_thumbnailer/models/website.rb
141
+ - lib/link_thumbnailer/page.rb
142
+ - lib/link_thumbnailer/parser.rb
143
+ - lib/link_thumbnailer/processor.rb
184
144
  - lib/link_thumbnailer/railtie.rb
145
+ - lib/link_thumbnailer/scraper.rb
146
+ - lib/link_thumbnailer/scrapers/base.rb
147
+ - lib/link_thumbnailer/scrapers/default/base.rb
148
+ - lib/link_thumbnailer/scrapers/default/description.rb
149
+ - lib/link_thumbnailer/scrapers/default/images.rb
150
+ - lib/link_thumbnailer/scrapers/default/title.rb
151
+ - lib/link_thumbnailer/scrapers/opengraph/base.rb
152
+ - lib/link_thumbnailer/scrapers/opengraph/description.rb
153
+ - lib/link_thumbnailer/scrapers/opengraph/image.rb
154
+ - lib/link_thumbnailer/scrapers/opengraph/images.rb
155
+ - lib/link_thumbnailer/scrapers/opengraph/title.rb
185
156
  - lib/link_thumbnailer/version.rb
186
- - lib/link_thumbnailer/web_image.rb
187
157
  - link_thumbnailer.gemspec
188
- - spec/doc_parser_spec.rb
189
- - spec/doc_spec.rb
190
- - spec/examples/empty_example.html
191
- - spec/examples/example.html
192
- - spec/examples/og_example.html
193
- - spec/fetcher_spec.rb
194
- - spec/img_comparator_spec.rb
195
- - spec/img_url_filter_spec.rb
196
- - spec/link_thumbnailer_spec.rb
197
- - spec/object_spec.rb
198
- - spec/opengraph_spec.rb
158
+ - spec/configuration_spec.rb
159
+ - spec/examples/empty_og_image_example.html
160
+ - spec/fixture_spec.rb
161
+ - spec/fixtures/bar.png
162
+ - spec/fixtures/default_from_body.html
163
+ - spec/fixtures/default_from_meta.html
164
+ - spec/fixtures/example.html
165
+ - spec/fixtures/foo.png
166
+ - spec/fixtures/og_not_valid_example.html
167
+ - spec/fixtures/og_valid_example.html
168
+ - spec/fixtures/og_valid_multi_image_example.html
169
+ - spec/grader_spec.rb
170
+ - spec/graders/base_spec.rb
171
+ - spec/graders/html_attribute_spec.rb
172
+ - spec/graders/length_spec.rb
173
+ - spec/graders/link_density_spec.rb
174
+ - spec/image_comparators/size_spec.rb
175
+ - spec/image_parsers/size_spec.rb
176
+ - spec/image_parsers/type_spec.rb
177
+ - spec/image_validator_spec.rb
178
+ - spec/model_spec.rb
179
+ - spec/models/description_spec.rb
180
+ - spec/models/image_spec.rb
181
+ - spec/models/title_spec.rb
182
+ - spec/models/website_spec.rb
183
+ - spec/page_spec.rb
184
+ - spec/processor_spec.rb
185
+ - spec/scraper_spec.rb
186
+ - spec/scrapers/base_spec.rb
187
+ - spec/scrapers/opengraph/base_spec.rb
199
188
  - spec/spec_helper.rb
200
- - spec/web_image_spec.rb
201
189
  homepage: https://github.com/gottfrois/link_thumbnailer
202
190
  licenses: []
203
191
  metadata: {}
@@ -207,32 +195,50 @@ require_paths:
207
195
  - lib
208
196
  required_ruby_version: !ruby/object:Gem::Requirement
209
197
  requirements:
210
- - - ! '>='
198
+ - - '>='
211
199
  - !ruby/object:Gem::Version
212
200
  version: '0'
213
201
  required_rubygems_version: !ruby/object:Gem::Requirement
214
202
  requirements:
215
- - - ! '>='
203
+ - - '>='
216
204
  - !ruby/object:Gem::Version
217
205
  version: '0'
218
206
  requirements: []
219
207
  rubyforge_project:
220
- rubygems_version: 2.1.11
208
+ rubygems_version: 2.2.2
221
209
  signing_key:
222
210
  specification_version: 4
223
211
  summary: Ruby gem ranking images from a given URL returning an object containing images
224
212
  and website informations.
225
213
  test_files:
226
- - spec/doc_parser_spec.rb
227
- - spec/doc_spec.rb
228
- - spec/examples/empty_example.html
229
- - spec/examples/example.html
230
- - spec/examples/og_example.html
231
- - spec/fetcher_spec.rb
232
- - spec/img_comparator_spec.rb
233
- - spec/img_url_filter_spec.rb
234
- - spec/link_thumbnailer_spec.rb
235
- - spec/object_spec.rb
236
- - spec/opengraph_spec.rb
214
+ - spec/configuration_spec.rb
215
+ - spec/examples/empty_og_image_example.html
216
+ - spec/fixture_spec.rb
217
+ - spec/fixtures/bar.png
218
+ - spec/fixtures/default_from_body.html
219
+ - spec/fixtures/default_from_meta.html
220
+ - spec/fixtures/example.html
221
+ - spec/fixtures/foo.png
222
+ - spec/fixtures/og_not_valid_example.html
223
+ - spec/fixtures/og_valid_example.html
224
+ - spec/fixtures/og_valid_multi_image_example.html
225
+ - spec/grader_spec.rb
226
+ - spec/graders/base_spec.rb
227
+ - spec/graders/html_attribute_spec.rb
228
+ - spec/graders/length_spec.rb
229
+ - spec/graders/link_density_spec.rb
230
+ - spec/image_comparators/size_spec.rb
231
+ - spec/image_parsers/size_spec.rb
232
+ - spec/image_parsers/type_spec.rb
233
+ - spec/image_validator_spec.rb
234
+ - spec/model_spec.rb
235
+ - spec/models/description_spec.rb
236
+ - spec/models/image_spec.rb
237
+ - spec/models/title_spec.rb
238
+ - spec/models/website_spec.rb
239
+ - spec/page_spec.rb
240
+ - spec/processor_spec.rb
241
+ - spec/scraper_spec.rb
242
+ - spec/scrapers/base_spec.rb
243
+ - spec/scrapers/opengraph/base_spec.rb
237
244
  - spec/spec_helper.rb
238
- - spec/web_image_spec.rb
@@ -1,4 +0,0 @@
1
- module LinkThumbnailer
2
- class ApplicationController < ActionController::Base
3
- end
4
- end
@@ -1,11 +0,0 @@
1
- module LinkThumbnailer
2
- class PreviewsController < ApplicationController
3
-
4
- respond_to :json
5
-
6
- def create
7
- @preview = LinkThumbnailer.generate(params[:url])
8
- render json: @preview.to_json
9
- end
10
- end
11
- end
@@ -1,65 +0,0 @@
1
- require 'uri'
2
-
3
- module LinkThumbnailer
4
-
5
- module Doc
6
-
7
- def doc_base_href
8
- base = at('//head/base')
9
- base['href'] if base
10
- end
11
-
12
- def img_srcs
13
- search('//img').map { |i| i['src'] }.compact
14
- end
15
-
16
- def img_abs_urls(base_url = nil)
17
- result = []
18
-
19
- img_srcs.each do |i|
20
- begin
21
- u = URI(i)
22
- rescue URI::InvalidURIError
23
- next
24
- end
25
-
26
- result << if u.is_a?(URI::HTTP)
27
- u
28
- else
29
- URI.join(base_url || doc_base_href || source_url, i)
30
- end
31
- end
32
-
33
- result
34
- end
35
-
36
- def title
37
- css('title').text.strip
38
- end
39
-
40
- def description
41
- if element = xpath("//meta[translate(@name,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz') = 'description' and @content]").first
42
- return element.attributes['content'].value.strip
43
- end
44
-
45
- css('body p').each do |node|
46
- if !node.has_attribute?('style') && node.first_element_child.nil?
47
- return node.text.strip
48
- end
49
- end
50
-
51
- nil
52
- end
53
-
54
- def canonical_url
55
- if element = xpath("//link[translate(@rel, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz') = 'canonical' and @href]").first
56
- return element.attributes['href'].value.strip
57
- end
58
- nil
59
- end
60
-
61
- attr_accessor :source_url
62
-
63
- end
64
-
65
- end
@@ -1,15 +0,0 @@
1
- require 'nokogiri'
2
-
3
- module LinkThumbnailer
4
-
5
- class DocParser
6
-
7
- def parse(doc_string, source_url = nil)
8
- doc = Nokogiri::HTML(doc_string).extend(LinkThumbnailer::Doc)
9
- doc.source_url = source_url
10
- doc
11
- end
12
-
13
- end
14
-
15
- end
@@ -1,4 +0,0 @@
1
- module LinkThumbnailer
2
- class Engine < ::Rails::Engine
3
- end
4
- end
@@ -1,34 +0,0 @@
1
- require 'net/http/persistent'
2
-
3
- module LinkThumbnailer
4
-
5
- class Fetcher
6
-
7
- attr_accessor :url
8
-
9
- def fetch(url, redirect_count = 0)
10
- if redirect_count > LinkThumbnailer.configuration.redirect_limit
11
- raise ArgumentError, "too many redirects (#{redirect_count})"
12
- end
13
-
14
- self.url = url.is_a?(URI) ? url : URI(url)
15
-
16
- if self.url.is_a?(URI::HTTP)
17
- http = Net::HTTP::Persistent.new('linkthumbnailer')
18
- http.headers['User-Agent'] = LinkThumbnailer.configuration.user_agent
19
- http.verify_mode = OpenSSL::SSL::VERIFY_NONE unless LinkThumbnailer.configuration.verify_ssl
20
- http.open_timeout = LinkThumbnailer.configuration.http_timeout
21
- resp = http.request(self.url)
22
- case resp
23
- when Net::HTTPSuccess then resp.body
24
- when Net::HTTPRedirection
25
- location = resp['location'].start_with?('http') ? resp['location'] : "#{self.url.scheme}://#{self.url.host}#{resp['location']}"
26
- fetch(location, redirect_count + 1)
27
- else resp.error!
28
- end
29
- end
30
- end
31
-
32
- end
33
-
34
- end