snippet 0.0.1
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.
- data/Gemfile +11 -0
- data/Gemfile.lock +49 -0
- data/README.rdoc +12 -0
- data/Rakefile +45 -0
- data/VERSION +1 -0
- data/lib/snippet.rb +24 -0
- data/lib/snippet/any.rb +15 -0
- data/lib/snippet/facebook.rb +4 -0
- data/snippet.gemspec +58 -0
- data/spec/lib/snippet_spec.rb +17 -0
- data/spec/spec_helper.rb +5 -0
- metadata +104 -0
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
coderay (1.0.6)
|
5
|
+
domain_name (0.5.3)
|
6
|
+
unf (~> 0.0.3)
|
7
|
+
git (1.2.5)
|
8
|
+
jeweler (1.8.3)
|
9
|
+
bundler (~> 1.0)
|
10
|
+
git (>= 1.2.5)
|
11
|
+
rake
|
12
|
+
rdoc
|
13
|
+
json (1.6.6)
|
14
|
+
mechanize (2.3)
|
15
|
+
domain_name (~> 0.5, >= 0.5.1)
|
16
|
+
mime-types (~> 1.17, >= 1.17.2)
|
17
|
+
net-http-digest_auth (~> 1.1, >= 1.1.1)
|
18
|
+
net-http-persistent (~> 2.5, >= 2.5.2)
|
19
|
+
nokogiri (~> 1.4)
|
20
|
+
ntlm-http (~> 0.1, >= 0.1.1)
|
21
|
+
webrobots (~> 0.0, >= 0.0.9)
|
22
|
+
method_source (0.7.1)
|
23
|
+
mime-types (1.18)
|
24
|
+
minitest (2.12.1)
|
25
|
+
net-http-digest_auth (1.2)
|
26
|
+
net-http-persistent (2.6)
|
27
|
+
nokogiri (1.5.2)
|
28
|
+
ntlm-http (0.1.1)
|
29
|
+
pry (0.9.9.3)
|
30
|
+
coderay (~> 1.0.5)
|
31
|
+
method_source (~> 0.7.1)
|
32
|
+
slop (>= 2.4.4, < 3)
|
33
|
+
rake (0.9.2.2)
|
34
|
+
rdoc (3.12)
|
35
|
+
json (~> 1.4)
|
36
|
+
slop (2.4.4)
|
37
|
+
unf (0.0.5)
|
38
|
+
unf_ext
|
39
|
+
unf_ext (0.0.4)
|
40
|
+
webrobots (0.0.13)
|
41
|
+
|
42
|
+
PLATFORMS
|
43
|
+
ruby
|
44
|
+
|
45
|
+
DEPENDENCIES
|
46
|
+
jeweler
|
47
|
+
mechanize
|
48
|
+
minitest
|
49
|
+
pry
|
data/README.rdoc
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
= snippet
|
2
|
+
|
3
|
+
Creates little snippet like facebook or Google+ does from given uri.
|
4
|
+
|
5
|
+
for example:
|
6
|
+
|
7
|
+
```ruby
|
8
|
+
obj = Snippet.new('http://stackoverflow.com/questions/3837717/get-html-of-external-url-in-jquery')
|
9
|
+
obj.get_meta
|
10
|
+
```
|
11
|
+
|
12
|
+
returns hash: {img, title, text}
|
data/Rakefile
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'bundler'
|
5
|
+
begin
|
6
|
+
Bundler.setup(:default, :development)
|
7
|
+
rescue Bundler::BundlerError => e
|
8
|
+
$stderr.puts e.message
|
9
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
10
|
+
exit e.status_code
|
11
|
+
end
|
12
|
+
require 'rake'
|
13
|
+
|
14
|
+
require 'jeweler'
|
15
|
+
Jeweler::Tasks.new do |gem|
|
16
|
+
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
17
|
+
gem.name = "snippet"
|
18
|
+
gem.homepage = "http://github.com/kiote/snippet"
|
19
|
+
gem.license = "MIT"
|
20
|
+
gem.summary = %Q{Creates little snippet like facebook or Google+ does from given uri.}
|
21
|
+
gem.description = %Q{Creates little snippet like facebook or Google+ does from given uri.}
|
22
|
+
gem.email = "kiote_the_one@mail.ru"
|
23
|
+
gem.authors = ["krivich ekaterina"]
|
24
|
+
# dependencies defined in Gemfile
|
25
|
+
end
|
26
|
+
Jeweler::RubygemsDotOrgTasks.new
|
27
|
+
|
28
|
+
require 'rake/testtask'
|
29
|
+
Rake::TestTask.new(:test) do |test|
|
30
|
+
test.libs << 'lib' << 'test'
|
31
|
+
test.pattern = 'test/**/test_*.rb'
|
32
|
+
test.verbose = true
|
33
|
+
end
|
34
|
+
|
35
|
+
task :default => :test
|
36
|
+
|
37
|
+
require 'rdoc/task'
|
38
|
+
Rake::RDocTask.new do |rdoc|
|
39
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
40
|
+
|
41
|
+
rdoc.rdoc_dir = 'rdoc'
|
42
|
+
rdoc.title = "snippet #{version}"
|
43
|
+
rdoc.rdoc_files.include('README*')
|
44
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
45
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.1
|
data/lib/snippet.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'mechanize'
|
2
|
+
require 'open-uri'
|
3
|
+
|
4
|
+
class Snippet
|
5
|
+
def initialize(uri)
|
6
|
+
@uri = uri
|
7
|
+
@agent = Mechanize.new
|
8
|
+
@agent.user_agent_alias = 'Mac Safari'
|
9
|
+
@agent.agent.http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
10
|
+
@agent.agent.http.retry_change_requests = true
|
11
|
+
end
|
12
|
+
|
13
|
+
# the only method we need
|
14
|
+
# returns hash with {title, content, image}
|
15
|
+
# image can be null
|
16
|
+
def get_meta
|
17
|
+
@doc = @agent.get(@uri)
|
18
|
+
|
19
|
+
Snippet::Any.get_meta(@doc)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
require 'snippet/facebook'
|
24
|
+
require 'snippet/any'
|
data/lib/snippet/any.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
# gets not-facebook formatted snippet
|
2
|
+
class Snippet::Any
|
3
|
+
class << self
|
4
|
+
def get_meta(doc)
|
5
|
+
title = doc.root.xpath("//meta[@name='title']/@content").first || \
|
6
|
+
doc.root.xpath("//title").to_s
|
7
|
+
title = title.value unless title.respond_to? :capitalize
|
8
|
+
title.gsub!(/<[^>]+>/m,'').strip!
|
9
|
+
text = doc.root.xpath("//p/text()").first || doc.root.xpath("//meta[@name='description']/@content").first
|
10
|
+
img = doc.root.xpath("//link[@rel='image_src']/@href").first
|
11
|
+
img = img.value unless img.nil?
|
12
|
+
{ title: title, text: text.to_s, img: img }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/snippet.gemspec
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "snippet"
|
8
|
+
s.version = "0.0.1"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["krivich ekaterina"]
|
12
|
+
s.date = "2012-04-30"
|
13
|
+
s.description = "Creates little snippet like facebook or Google+ does from given uri."
|
14
|
+
s.email = "kiote_the_one@mail.ru"
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"README.rdoc"
|
17
|
+
]
|
18
|
+
s.files = [
|
19
|
+
"Gemfile",
|
20
|
+
"Gemfile.lock",
|
21
|
+
"README.rdoc",
|
22
|
+
"Rakefile",
|
23
|
+
"VERSION",
|
24
|
+
"lib/snippet.rb",
|
25
|
+
"lib/snippet/any.rb",
|
26
|
+
"lib/snippet/facebook.rb",
|
27
|
+
"snippet.gemspec",
|
28
|
+
"spec/lib/snippet_spec.rb",
|
29
|
+
"spec/spec_helper.rb"
|
30
|
+
]
|
31
|
+
s.homepage = "http://github.com/kiote/snippet"
|
32
|
+
s.licenses = ["MIT"]
|
33
|
+
s.require_paths = ["lib"]
|
34
|
+
s.rubygems_version = "1.8.17"
|
35
|
+
s.summary = "Creates little snippet like facebook or Google+ does from given uri."
|
36
|
+
|
37
|
+
if s.respond_to? :specification_version then
|
38
|
+
s.specification_version = 3
|
39
|
+
|
40
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
41
|
+
s.add_runtime_dependency(%q<mechanize>, [">= 0"])
|
42
|
+
s.add_development_dependency(%q<minitest>, [">= 0"])
|
43
|
+
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
44
|
+
s.add_development_dependency(%q<pry>, [">= 0"])
|
45
|
+
else
|
46
|
+
s.add_dependency(%q<mechanize>, [">= 0"])
|
47
|
+
s.add_dependency(%q<minitest>, [">= 0"])
|
48
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
49
|
+
s.add_dependency(%q<pry>, [">= 0"])
|
50
|
+
end
|
51
|
+
else
|
52
|
+
s.add_dependency(%q<mechanize>, [">= 0"])
|
53
|
+
s.add_dependency(%q<minitest>, [">= 0"])
|
54
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
55
|
+
s.add_dependency(%q<pry>, [">= 0"])
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
$LOAD_PATH << File.expand_path('../../', __FILE__)
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Snippet do
|
6
|
+
describe 'any-style' do
|
7
|
+
before do
|
8
|
+
@obj = Snippet.new('http://stackoverflow.com/questions/3837717/get-html-of-external-url-in-jquery')
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'should return valid hash' do
|
12
|
+
@obj.get_meta[:img].must_be_kind_of String
|
13
|
+
@obj.get_meta[:title].must_be_kind_of String
|
14
|
+
@obj.get_meta[:text].must_be_kind_of String
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,104 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: snippet
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- krivich ekaterina
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-04-30 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: mechanize
|
16
|
+
requirement: &70272875163160 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70272875163160
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: minitest
|
27
|
+
requirement: &70272875182640 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70272875182640
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: jeweler
|
38
|
+
requirement: &70272875191100 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70272875191100
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: pry
|
49
|
+
requirement: &70272875187420 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *70272875187420
|
58
|
+
description: Creates little snippet like facebook or Google+ does from given uri.
|
59
|
+
email: kiote_the_one@mail.ru
|
60
|
+
executables: []
|
61
|
+
extensions: []
|
62
|
+
extra_rdoc_files:
|
63
|
+
- README.rdoc
|
64
|
+
files:
|
65
|
+
- Gemfile
|
66
|
+
- Gemfile.lock
|
67
|
+
- README.rdoc
|
68
|
+
- Rakefile
|
69
|
+
- VERSION
|
70
|
+
- lib/snippet.rb
|
71
|
+
- lib/snippet/any.rb
|
72
|
+
- lib/snippet/facebook.rb
|
73
|
+
- snippet.gemspec
|
74
|
+
- spec/lib/snippet_spec.rb
|
75
|
+
- spec/spec_helper.rb
|
76
|
+
homepage: http://github.com/kiote/snippet
|
77
|
+
licenses:
|
78
|
+
- MIT
|
79
|
+
post_install_message:
|
80
|
+
rdoc_options: []
|
81
|
+
require_paths:
|
82
|
+
- lib
|
83
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
84
|
+
none: false
|
85
|
+
requirements:
|
86
|
+
- - ! '>='
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
segments:
|
90
|
+
- 0
|
91
|
+
hash: -2621209020786483623
|
92
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
93
|
+
none: false
|
94
|
+
requirements:
|
95
|
+
- - ! '>='
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
98
|
+
requirements: []
|
99
|
+
rubyforge_project:
|
100
|
+
rubygems_version: 1.8.17
|
101
|
+
signing_key:
|
102
|
+
specification_version: 3
|
103
|
+
summary: Creates little snippet like facebook or Google+ does from given uri.
|
104
|
+
test_files: []
|