link_thumbnailer 1.1.2 → 2.0.0

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.
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