link_oracle 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b6e2b4ab5504ee1e7c46cdae0c8e09e6da8fe011
4
- data.tar.gz: ca23aebe0f05bbfcda265765b221e293435a1407
3
+ metadata.gz: 110e466f12d3efec41aec60490aca1c9377c04a0
4
+ data.tar.gz: f004c197875373848602feb923a0e663e081257f
5
5
  SHA512:
6
- metadata.gz: 031ed89722243b59d04c5cd789d45f53350dd99245a2eb73b9015a81da788f0751327ce8046250f3b4e81252cae29dad3adef0a1539d649f086681ae32257132
7
- data.tar.gz: 53d17b8638ee5b37b33b33a89d40f9191d8bf9b507793be4f58be2d06f522e13195ce3a96bfee78a4f8bd1b107c0193398c8c122d216b74b530e76f6703fe890
6
+ metadata.gz: 0fdc3d962d3d294a41ff82623a964eaf8d1e9ce0990c9ec88c0bd5178a1c17e7f1a11449f266de2d57635bad5094a914e973c87f719be006de77fe28cad6d45e
7
+ data.tar.gz: 8a3f2936855992f32ad6d2140164361e0763d7dc3d3182b1a8e8c801080acd1bd8d44c2dc1ef3df5d0feb9cbe94cd64b3a0db291cce020c8518dcdf14282cebb
data/README.md CHANGED
@@ -18,7 +18,41 @@ Or install it yourself as:
18
18
 
19
19
  ## Usage
20
20
 
21
- TODO: Write usage instructions here
21
+ To parse a link and extract information:
22
+
23
+ ```ruby
24
+ link_data = LinkOracle.extract_from('http://example.com')
25
+ ```
26
+
27
+ This will return a LinkData object. This object makes a a semi-intelligent guess about which image, title, and description to use. To access these defaults:
28
+
29
+ ```ruby
30
+ title = link_data.title
31
+ image_url = link_data.image_url
32
+ description = link_data.description
33
+ ```
34
+
35
+ The LinkData object also contains the parsed data:
36
+
37
+ ```ruby
38
+ parsed_data = link_data.parsed_data
39
+ ```
40
+
41
+ Finally, the LinkData object contains the results from individual sections broken into OpenGraph, Meta, and Body. If you are only interested in OpenGraph results:
42
+
43
+ ```ruby
44
+ found_og_data = link_data.og
45
+ title = found_og_data.title
46
+ image_url = found_og_data.image
47
+ description = found_og_data.description
48
+ ```
49
+
50
+ For Meta or body:
51
+
52
+ ```ruby
53
+ found_meta_data = link_data.meta
54
+ found_body_data = link_data.body
55
+ ```
22
56
 
23
57
  ## Contributing
24
58
 
@@ -26,7 +26,7 @@ class LinkOracle
26
26
  def validate_url
27
27
  !!URI.parse(url)
28
28
  rescue URI::InvalidURIError
29
- raise InvalidUrl
29
+ raise InvalidUrl, url
30
30
  end
31
31
 
32
32
  def response
@@ -34,19 +34,27 @@ class LinkOracle
34
34
  end
35
35
 
36
36
  def request
37
- ::RestClient.get url
37
+ c = ::Curl::Easy.new(url)
38
+ c.follow_location = true
39
+ begin
40
+ c.perform
41
+ rescue ::Curl::Err::SSLConnectError
42
+ c.ssl_version = 3
43
+ c.perform
44
+ end
45
+ c
38
46
  end
39
47
 
40
48
  def error_class
41
- return if response.code == 200
49
+ return if response.response_code == 200
42
50
  {
43
51
  404 => PageNotFound,
44
52
  403 => PermissionDenied
45
- }[response.code] || BadThingsHappened
53
+ }[response.response_code] || BadThingsHappened
46
54
  end
47
55
 
48
56
  def parsed_data
49
- ::Nokogiri::HTML.parse(response.body)
57
+ ::Nokogiri::HTML.parse(response.body_str)
50
58
  rescue
51
59
  raise ParsingError
52
60
  end
@@ -57,4 +65,4 @@ class LinkOracle
57
65
  class BadThingsHappened < StandardError; end
58
66
  class InvalidUrl < StandardError; end
59
67
  class ParsingError < StandardError; end
60
- end
68
+ end
@@ -1,4 +1,4 @@
1
1
  class LinkOracle
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
4
4
 
data/lib/link_oracle.rb CHANGED
@@ -1,4 +1,4 @@
1
- require "rest-client"
1
+ require 'curb'
2
2
  require 'nokogiri'
3
3
  require 'uri'
4
4
 
@@ -13,4 +13,4 @@ class LinkOracle
13
13
  parsed_url = LinkOracle::Request.new(url).parsed_url
14
14
  LinkData.new(parsed_url)
15
15
  end
16
- end
16
+ end
data/link_preview.gemspec CHANGED
@@ -20,9 +20,10 @@ Gem::Specification.new do |spec|
20
20
  spec.require_paths = ["lib"]
21
21
 
22
22
  spec.add_dependency 'nokogiri'
23
- spec.add_dependency 'rest-client'
23
+ spec.add_dependency 'curb'
24
24
 
25
25
  spec.add_development_dependency "bundler", "~> 1.3"
26
26
  spec.add_development_dependency "rake"
27
27
  spec.add_development_dependency "rspec"
28
+ spec.add_development_dependency "webmock"
28
29
  end
@@ -6,7 +6,7 @@ describe LinkOracle::Request do
6
6
  let(:code) { 200 }
7
7
  let(:response_hash) {
8
8
  {
9
- code: code,
9
+ status: code,
10
10
  body: body,
11
11
  headers: {}
12
12
  }
@@ -26,47 +26,59 @@ describe LinkOracle::Request do
26
26
  </html>"
27
27
  }
28
28
 
29
+
29
30
  describe 'perform' do
30
- before do
31
- RestClient.stub(:get).and_return(
32
- double(
33
- 'response',
34
- response_hash
35
- )
36
- )
37
- end
31
+ context 'request failures' do
32
+ before do
33
+ stub_request(:any, url).to_return(response_hash)
34
+ end
38
35
 
39
- context 'invalid url' do
40
- context 'response code is 404' do
41
- let(:code) { 404 }
36
+ context 'invalid url' do
37
+ context 'response code is 404' do
38
+ let(:code) { 404 }
42
39
 
43
- it 'should raise PageNotFound' do
44
- expect {
45
- requester.parsed_url
46
- }.to raise_error(LinkOracle::PageNotFound)
40
+ it 'should raise PageNotFound' do
41
+ expect {
42
+ requester.parsed_url
43
+ }.to raise_error(LinkOracle::PageNotFound)
44
+ end
47
45
  end
48
- end
49
46
 
50
- context 'response code is 403' do
51
- let(:code) { 403 }
47
+ context 'response code is 403' do
48
+ let(:code) { 403 }
52
49
 
53
- it 'should raise PermissionDenied' do
54
- expect {
55
- requester.parsed_url
56
- }.to raise_error(LinkOracle::PermissionDenied)
50
+ it 'should raise PermissionDenied' do
51
+ expect {
52
+ requester.parsed_url
53
+ }.to raise_error(LinkOracle::PermissionDenied)
54
+ end
57
55
  end
58
- end
59
56
 
60
- context 'response code is weird' do
61
- let(:code) { 42 }
57
+ context 'response code is weird' do
58
+ let(:code) { 42 }
62
59
 
63
- it 'should raise BadThingsHappened' do
64
- expect {
65
- requester.parsed_url
66
- }.to raise_error(LinkOracle::BadThingsHappened)
60
+ it 'should raise BadThingsHappened' do
61
+ expect {
62
+ requester.parsed_url
63
+ }.to raise_error(LinkOracle::BadThingsHappened)
64
+ end
65
+ end
66
+
67
+ context 'parsing goes awry' do
68
+ before do
69
+ ::Nokogiri::HTML.should_receive(:parse).and_raise(ArgumentError)
70
+ end
71
+
72
+ it 'should raise ParsingError' do
73
+ expect {
74
+ requester.parsed_url
75
+ }.to raise_error(LinkOracle::ParsingError)
76
+ end
67
77
  end
68
78
  end
79
+ end
69
80
 
81
+ context 'malformed url' do
70
82
  context 'url is invalid' do
71
83
  let(:url) { nil }
72
84
 
@@ -76,18 +88,6 @@ describe LinkOracle::Request do
76
88
  }.to raise_error(LinkOracle::InvalidUrl)
77
89
  end
78
90
  end
79
-
80
- context 'parsing goes awry' do
81
- before do
82
- ::Nokogiri::HTML.should_receive(:parse).and_raise(ArgumentError)
83
- end
84
-
85
- it 'should raise ParsingError' do
86
- expect {
87
- requester.parsed_url
88
- }.to raise_error(LinkOracle::ParsingError)
89
- end
90
- end
91
91
  end
92
92
  end
93
- end
93
+ end
@@ -1,13 +1,14 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe LinkOracle do
4
- let(:link_data) { LinkOracle.extract_from('http://someurl.com') }
4
+ let(:link_data) { LinkOracle.extract_from(url) }
5
+ let(:url) { 'http://someurl.com' }
5
6
  let(:response) {
6
- double(
7
- code: 200,
7
+ {
8
+ status: 200,
8
9
  body: body,
9
10
  headers: {}
10
- )
11
+ }
11
12
  }
12
13
 
13
14
  let(:body) {
@@ -39,7 +40,7 @@ describe LinkOracle do
39
40
  HTML
40
41
  }
41
42
  before do
42
- RestClient.stub(:get).and_return(response)
43
+ stub_request(:any, url).to_return(response)
43
44
  end
44
45
 
45
46
  describe '.extract_from' do
@@ -59,4 +60,4 @@ describe LinkOracle do
59
60
  link_data.description.should == 'A description for your face'
60
61
  end
61
62
  end
62
- end
63
+ end
data/spec/spec_helper.rb CHANGED
@@ -2,6 +2,7 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
2
  $LOAD_PATH.unshift(File.dirname(__FILE__))
3
3
 
4
4
  require 'rspec'
5
+ require 'webmock/rspec'
5
6
  # Requires supporting files with custom matchers and macros, etc,
6
7
  # in ./support/ and its subdirectories.
7
8
  Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: link_oracle
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ian Cooper
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2013-10-29 00:00:00.000000000 Z
14
+ date: 2014-04-23 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: nokogiri
@@ -28,7 +28,7 @@ dependencies:
28
28
  - !ruby/object:Gem::Version
29
29
  version: '0'
30
30
  - !ruby/object:Gem::Dependency
31
- name: rest-client
31
+ name: curb
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  requirements:
34
34
  - - '>='
@@ -83,6 +83,20 @@ dependencies:
83
83
  - - '>='
84
84
  - !ruby/object:Gem::Version
85
85
  version: '0'
86
+ - !ruby/object:Gem::Dependency
87
+ name: webmock
88
+ requirement: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - '>='
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ type: :development
94
+ prerelease: false
95
+ version_requirements: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - '>='
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
86
100
  description: Scrapes pages for open graph, meta, and lastly, body preview data
87
101
  email:
88
102
  - developers@socialchorus.com