film_snob 0.4.0 → 0.5.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.
- data/.gitignore +16 -14
- data/.rspec +1 -0
- data/README.md +2 -0
- data/film_snob.gemspec +2 -2
- data/lib/film_snob/url_to_video.rb +4 -18
- data/lib/film_snob/version.rb +1 -1
- data/lib/film_snob/video_site.rb +10 -1
- data/lib/film_snob/{coub.rb → video_sites/coub.rb} +0 -0
- data/lib/film_snob/{dailymotion.rb → video_sites/dailymotion.rb} +0 -0
- data/lib/film_snob/{funny_or_die.rb → video_sites/funny_or_die.rb} +2 -0
- data/lib/film_snob/{hulu.rb → video_sites/hulu.rb} +2 -0
- data/lib/film_snob/{instagram.rb → video_sites/instagram.rb} +0 -0
- data/lib/film_snob/video_sites/rutube.rb +24 -0
- data/lib/film_snob/{vimeo.rb → video_sites/vimeo.rb} +2 -1
- data/lib/film_snob/video_sites/vine.rb +20 -0
- data/lib/film_snob/{youtube.rb → video_sites/youtube.rb} +2 -0
- data/spec/deprecated_spec.rb +0 -2
- data/spec/film_snob_spec.rb +36 -1
- data/spec/spec_helper.rb +16 -0
- data/spec/youtube_spec.rb +0 -2
- metadata +58 -39
- checksums.yaml +0 -7
- data/.hound.yml +0 -3
data/.gitignore
CHANGED
@@ -1,23 +1,25 @@
|
|
1
|
+
*.a
|
1
2
|
*.gem
|
3
|
+
*.o
|
2
4
|
*.rbc
|
5
|
+
*.so
|
3
6
|
.bundle
|
4
7
|
.config
|
5
8
|
.yardoc
|
6
|
-
|
9
|
+
/*.bundle
|
10
|
+
/.ruby-version
|
11
|
+
/Gemfile.lock
|
12
|
+
/coverage
|
13
|
+
/doc/
|
14
|
+
/lib/bundler/man
|
15
|
+
/spec/cassettes/**/*.yml
|
16
|
+
/spec/reports
|
17
|
+
/test/tmp
|
18
|
+
/test/version_tmp
|
19
|
+
/tmp
|
7
20
|
InstalledFiles
|
8
21
|
_yardoc
|
9
|
-
|
10
|
-
doc/
|
11
|
-
lib/bundler/man
|
22
|
+
mkmf.log
|
12
23
|
pkg
|
13
24
|
rdoc
|
14
|
-
|
15
|
-
test/tmp
|
16
|
-
test/version_tmp
|
17
|
-
tmp
|
18
|
-
*.bundle
|
19
|
-
*.so
|
20
|
-
*.o
|
21
|
-
*.a
|
22
|
-
mkmf.log
|
23
|
-
spec/cassettes/**/*.yml
|
25
|
+
.DS_Store
|
data/.rspec
CHANGED
data/README.md
CHANGED
data/film_snob.gemspec
CHANGED
@@ -21,11 +21,11 @@ Gem::Specification.new do |spec|
|
|
21
21
|
|
22
22
|
spec.add_development_dependency "bundler", "~> 1.6"
|
23
23
|
spec.add_development_dependency "rake", "~> 10.3"
|
24
|
-
spec.add_development_dependency "rspec", "~> 3.
|
24
|
+
spec.add_development_dependency "rspec", "~> 3.1"
|
25
25
|
spec.add_development_dependency "webmock", "~> 1.17"
|
26
26
|
spec.add_development_dependency "vcr", "~> 2.9"
|
27
27
|
spec.add_development_dependency "pry", "~> 0.9"
|
28
|
-
spec.add_development_dependency "rubocop", "~> 0.
|
28
|
+
spec.add_development_dependency "rubocop", "~> 0.27.1"
|
29
29
|
spec.add_development_dependency "codeclimate-test-reporter", "~> 0.4"
|
30
30
|
spec.required_ruby_version = ">= 1.9.3"
|
31
31
|
end
|
@@ -1,23 +1,9 @@
|
|
1
|
-
|
2
|
-
require "film_snob/
|
3
|
-
|
4
|
-
require "film_snob/instagram"
|
5
|
-
require "film_snob/vimeo"
|
6
|
-
require "film_snob/youtube"
|
7
|
-
require "film_snob/dailymotion"
|
1
|
+
Dir.entries(File.join(File.dirname(__FILE__), "video_sites")).each do |file|
|
2
|
+
require "film_snob/video_sites/#{file}" unless [".", ".."].include?(file)
|
3
|
+
end
|
8
4
|
|
9
5
|
class FilmSnob
|
10
6
|
class UrlToVideo
|
11
|
-
VIDEO_SITES = [
|
12
|
-
Vimeo,
|
13
|
-
YouTube,
|
14
|
-
Hulu,
|
15
|
-
FunnyOrDie,
|
16
|
-
Coub,
|
17
|
-
Dailymotion,
|
18
|
-
Instagram
|
19
|
-
]
|
20
|
-
|
21
7
|
attr_reader :url, :options
|
22
8
|
|
23
9
|
def initialize(url, options)
|
@@ -32,7 +18,7 @@ class FilmSnob
|
|
32
18
|
private
|
33
19
|
|
34
20
|
def site
|
35
|
-
@site ||=
|
21
|
+
@site ||= VideoSite.subclasses.find do |site|
|
36
22
|
site.valid_url_patterns.any? do |pattern|
|
37
23
|
pattern.match(url)
|
38
24
|
end
|
data/lib/film_snob/version.rb
CHANGED
data/lib/film_snob/video_site.rb
CHANGED
@@ -4,7 +4,7 @@ require "json"
|
|
4
4
|
class FilmSnob
|
5
5
|
class VideoSite
|
6
6
|
attr_reader :url, :options
|
7
|
-
def initialize(url, options)
|
7
|
+
def initialize(url, options = {})
|
8
8
|
@url = url
|
9
9
|
@options = options
|
10
10
|
end
|
@@ -17,6 +17,15 @@ class FilmSnob
|
|
17
17
|
@site ||= self.class.to_s.split("::").last.downcase.to_sym
|
18
18
|
end
|
19
19
|
|
20
|
+
SUBCLASSES = []
|
21
|
+
def self.inherited(base)
|
22
|
+
SUBCLASSES << base
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.subclasses
|
26
|
+
SUBCLASSES
|
27
|
+
end
|
28
|
+
|
20
29
|
def self.valid_url_patterns
|
21
30
|
[]
|
22
31
|
end
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require "film_snob/video_site"
|
2
|
+
|
3
|
+
class FilmSnob
|
4
|
+
class Rutube < VideoSite
|
5
|
+
def initialize(url, options = {})
|
6
|
+
super(url, options.merge(format: :json))
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.valid_url_patterns
|
10
|
+
[
|
11
|
+
%r{http://rutube.ru/video/(\w*)/}
|
12
|
+
]
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.oembed_endpoint
|
16
|
+
"http://rutube.ru/api/oembed/"
|
17
|
+
end
|
18
|
+
|
19
|
+
def clean_url
|
20
|
+
@clean_url ||= "http://rutube.ru/video/#{id}/"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
@@ -6,7 +6,8 @@ class FilmSnob
|
|
6
6
|
[
|
7
7
|
%r{https?://vimeo.com/(\d{1,})},
|
8
8
|
%r{https?://vimeo.com/m/(\d{1,})},
|
9
|
-
%r{https?://vimeo.com/couchmode/\w+/[\w:]+/(\d{1,})}
|
9
|
+
%r{https?://vimeo.com/couchmode/\w+/[\w:]+/(\d{1,})},
|
10
|
+
%r{https?://vimeo.com/channels/\w+/(\d{1,})}
|
10
11
|
]
|
11
12
|
end
|
12
13
|
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require "film_snob/video_site"
|
2
|
+
|
3
|
+
class FilmSnob
|
4
|
+
class Vine < VideoSite
|
5
|
+
def self.valid_url_patterns
|
6
|
+
[
|
7
|
+
%r{https://vine.co/v/(\w+)}
|
8
|
+
]
|
9
|
+
end
|
10
|
+
|
11
|
+
def clean_url
|
12
|
+
@clean_url ||= "https://vine.co/v/#{id}"
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.oembed_endpoint
|
16
|
+
"https://vine.co/oembed.json"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
data/spec/deprecated_spec.rb
CHANGED
data/spec/film_snob_spec.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
# Encoding: utf-8
|
2
2
|
|
3
3
|
describe FilmSnob do
|
4
4
|
describe "not supported URLs" do
|
@@ -86,6 +86,16 @@ describe FilmSnob do
|
|
86
86
|
expect(snob.clean_url).to eq "https://vimeo.com/16010689"
|
87
87
|
end
|
88
88
|
|
89
|
+
it "should parse staff picks vimeo URLs" do
|
90
|
+
snob = FilmSnob.new("http://vimeo.com/channels/staffpicks/58511112")
|
91
|
+
expect(snob.id).to eq "58511112"
|
92
|
+
expect(snob.site).to eq :vimeo
|
93
|
+
expect(snob.clean_url).to eq "https://vimeo.com/58511112"
|
94
|
+
VCR.use_cassette("vimeo/staff") do
|
95
|
+
expect(snob.title).to eq "DANGER ISLAND"
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
89
99
|
it "should parse couchmode vimeo URLs" do
|
90
100
|
url = "https://vimeo.com/couchmode/staffpicks/sort:date/91157088"
|
91
101
|
snob = FilmSnob.new(url)
|
@@ -232,5 +242,30 @@ describe FilmSnob do
|
|
232
242
|
end
|
233
243
|
end
|
234
244
|
end
|
245
|
+
|
246
|
+
describe "Vine" do
|
247
|
+
it "should parse URLs" do
|
248
|
+
film = FilmSnob.new("https://vine.co/v/1")
|
249
|
+
expect(film.id).to eq "1"
|
250
|
+
expect(film.site).to eq :vine
|
251
|
+
VCR.use_cassette "vine/dom hofman" do
|
252
|
+
expect(film.title).to eq "Dom Hofmann's post on Vine"
|
253
|
+
expect { film.html }.not_to raise_error
|
254
|
+
end
|
255
|
+
end
|
256
|
+
end
|
257
|
+
|
258
|
+
describe "rutube URLs" do
|
259
|
+
it "should parse rutube URLs" do
|
260
|
+
url = "http://rutube.ru/video/586afc0f5c652439a2dca8b34d19a086/"
|
261
|
+
film = FilmSnob.new(url)
|
262
|
+
expect(film.id).to eq "586afc0f5c652439a2dca8b34d19a086"
|
263
|
+
expect(film.site).to eq :rutube
|
264
|
+
VCR.use_cassette "rutube/rabbit_eat_raspberry" do
|
265
|
+
expect(film.title).to eq "Кролик ест малину"
|
266
|
+
expect { film.html }.not_to raise_error
|
267
|
+
end
|
268
|
+
end
|
269
|
+
end
|
235
270
|
end
|
236
271
|
|
data/spec/spec_helper.rb
CHANGED
@@ -12,3 +12,19 @@ VCR.configure do |c|
|
|
12
12
|
c.ignore_hosts "codeclimate.com"
|
13
13
|
end
|
14
14
|
|
15
|
+
RSpec.configure do |config|
|
16
|
+
config.default_formatter = "doc" if config.files_to_run.one?
|
17
|
+
|
18
|
+
config.order = :random
|
19
|
+
|
20
|
+
config.expect_with :rspec do |expectations|
|
21
|
+
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
|
22
|
+
end
|
23
|
+
|
24
|
+
config.raise_errors_for_deprecations!
|
25
|
+
|
26
|
+
config.mock_with :rspec do |mocks|
|
27
|
+
mocks.verify_partial_doubles = true
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
data/spec/youtube_spec.rb
CHANGED
metadata
CHANGED
@@ -1,125 +1,142 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: film_snob
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Max Jacobson
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2014-12-
|
12
|
+
date: 2014-12-07 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: bundler
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
|
-
- -
|
19
|
+
- - ~>
|
18
20
|
- !ruby/object:Gem::Version
|
19
21
|
version: '1.6'
|
20
22
|
type: :development
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
|
-
- -
|
27
|
+
- - ~>
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: '1.6'
|
27
30
|
- !ruby/object:Gem::Dependency
|
28
31
|
name: rake
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
30
34
|
requirements:
|
31
|
-
- -
|
35
|
+
- - ~>
|
32
36
|
- !ruby/object:Gem::Version
|
33
37
|
version: '10.3'
|
34
38
|
type: :development
|
35
39
|
prerelease: false
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
37
42
|
requirements:
|
38
|
-
- -
|
43
|
+
- - ~>
|
39
44
|
- !ruby/object:Gem::Version
|
40
45
|
version: '10.3'
|
41
46
|
- !ruby/object:Gem::Dependency
|
42
47
|
name: rspec
|
43
48
|
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
44
50
|
requirements:
|
45
|
-
- -
|
51
|
+
- - ~>
|
46
52
|
- !ruby/object:Gem::Version
|
47
|
-
version: '3.
|
53
|
+
version: '3.1'
|
48
54
|
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
51
58
|
requirements:
|
52
|
-
- -
|
59
|
+
- - ~>
|
53
60
|
- !ruby/object:Gem::Version
|
54
|
-
version: '3.
|
61
|
+
version: '3.1'
|
55
62
|
- !ruby/object:Gem::Dependency
|
56
63
|
name: webmock
|
57
64
|
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
58
66
|
requirements:
|
59
|
-
- -
|
67
|
+
- - ~>
|
60
68
|
- !ruby/object:Gem::Version
|
61
69
|
version: '1.17'
|
62
70
|
type: :development
|
63
71
|
prerelease: false
|
64
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
65
74
|
requirements:
|
66
|
-
- -
|
75
|
+
- - ~>
|
67
76
|
- !ruby/object:Gem::Version
|
68
77
|
version: '1.17'
|
69
78
|
- !ruby/object:Gem::Dependency
|
70
79
|
name: vcr
|
71
80
|
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
72
82
|
requirements:
|
73
|
-
- -
|
83
|
+
- - ~>
|
74
84
|
- !ruby/object:Gem::Version
|
75
85
|
version: '2.9'
|
76
86
|
type: :development
|
77
87
|
prerelease: false
|
78
88
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
79
90
|
requirements:
|
80
|
-
- -
|
91
|
+
- - ~>
|
81
92
|
- !ruby/object:Gem::Version
|
82
93
|
version: '2.9'
|
83
94
|
- !ruby/object:Gem::Dependency
|
84
95
|
name: pry
|
85
96
|
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
86
98
|
requirements:
|
87
|
-
- -
|
99
|
+
- - ~>
|
88
100
|
- !ruby/object:Gem::Version
|
89
101
|
version: '0.9'
|
90
102
|
type: :development
|
91
103
|
prerelease: false
|
92
104
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
93
106
|
requirements:
|
94
|
-
- -
|
107
|
+
- - ~>
|
95
108
|
- !ruby/object:Gem::Version
|
96
109
|
version: '0.9'
|
97
110
|
- !ruby/object:Gem::Dependency
|
98
111
|
name: rubocop
|
99
112
|
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
100
114
|
requirements:
|
101
|
-
- -
|
115
|
+
- - ~>
|
102
116
|
- !ruby/object:Gem::Version
|
103
|
-
version: 0.
|
117
|
+
version: 0.27.1
|
104
118
|
type: :development
|
105
119
|
prerelease: false
|
106
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
107
122
|
requirements:
|
108
|
-
- -
|
123
|
+
- - ~>
|
109
124
|
- !ruby/object:Gem::Version
|
110
|
-
version: 0.
|
125
|
+
version: 0.27.1
|
111
126
|
- !ruby/object:Gem::Dependency
|
112
127
|
name: codeclimate-test-reporter
|
113
128
|
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
114
130
|
requirements:
|
115
|
-
- -
|
131
|
+
- - ~>
|
116
132
|
- !ruby/object:Gem::Version
|
117
133
|
version: '0.4'
|
118
134
|
type: :development
|
119
135
|
prerelease: false
|
120
136
|
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
121
138
|
requirements:
|
122
|
-
- -
|
139
|
+
- - ~>
|
123
140
|
- !ruby/object:Gem::Version
|
124
141
|
version: '0.4'
|
125
142
|
description: Find information about URLs from video sites, such as the title and embed
|
@@ -130,29 +147,30 @@ executables: []
|
|
130
147
|
extensions: []
|
131
148
|
extra_rdoc_files: []
|
132
149
|
files:
|
133
|
-
-
|
134
|
-
-
|
135
|
-
-
|
136
|
-
-
|
137
|
-
- ".travis.yml"
|
150
|
+
- .gitignore
|
151
|
+
- .rspec
|
152
|
+
- .rubocop.yml
|
153
|
+
- .travis.yml
|
138
154
|
- Gemfile
|
139
155
|
- LICENSE.txt
|
140
156
|
- README.md
|
141
157
|
- Rakefile
|
142
158
|
- film_snob.gemspec
|
143
159
|
- lib/film_snob.rb
|
144
|
-
- lib/film_snob/coub.rb
|
145
|
-
- lib/film_snob/dailymotion.rb
|
146
160
|
- lib/film_snob/deprecated.rb
|
147
161
|
- lib/film_snob/exceptions.rb
|
148
|
-
- lib/film_snob/funny_or_die.rb
|
149
|
-
- lib/film_snob/hulu.rb
|
150
|
-
- lib/film_snob/instagram.rb
|
151
162
|
- lib/film_snob/url_to_video.rb
|
152
163
|
- lib/film_snob/version.rb
|
153
164
|
- lib/film_snob/video_site.rb
|
154
|
-
- lib/film_snob/
|
155
|
-
- lib/film_snob/
|
165
|
+
- lib/film_snob/video_sites/coub.rb
|
166
|
+
- lib/film_snob/video_sites/dailymotion.rb
|
167
|
+
- lib/film_snob/video_sites/funny_or_die.rb
|
168
|
+
- lib/film_snob/video_sites/hulu.rb
|
169
|
+
- lib/film_snob/video_sites/instagram.rb
|
170
|
+
- lib/film_snob/video_sites/rutube.rb
|
171
|
+
- lib/film_snob/video_sites/vimeo.rb
|
172
|
+
- lib/film_snob/video_sites/vine.rb
|
173
|
+
- lib/film_snob/video_sites/youtube.rb
|
156
174
|
- spec/cassettes/coub/.keep
|
157
175
|
- spec/cassettes/dailymotion/.keep
|
158
176
|
- spec/cassettes/funnyordie/.keep
|
@@ -167,26 +185,27 @@ files:
|
|
167
185
|
homepage: https://github.com/maxjacobson/film_snob
|
168
186
|
licenses:
|
169
187
|
- MIT
|
170
|
-
metadata: {}
|
171
188
|
post_install_message:
|
172
189
|
rdoc_options: []
|
173
190
|
require_paths:
|
174
191
|
- lib
|
175
192
|
required_ruby_version: !ruby/object:Gem::Requirement
|
193
|
+
none: false
|
176
194
|
requirements:
|
177
|
-
- -
|
195
|
+
- - ! '>='
|
178
196
|
- !ruby/object:Gem::Version
|
179
197
|
version: 1.9.3
|
180
198
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
199
|
+
none: false
|
181
200
|
requirements:
|
182
|
-
- -
|
201
|
+
- - ! '>='
|
183
202
|
- !ruby/object:Gem::Version
|
184
203
|
version: '0'
|
185
204
|
requirements: []
|
186
205
|
rubyforge_project:
|
187
|
-
rubygems_version:
|
206
|
+
rubygems_version: 1.8.23.2
|
188
207
|
signing_key:
|
189
|
-
specification_version:
|
208
|
+
specification_version: 3
|
190
209
|
summary: Fetch embed codes for videos
|
191
210
|
test_files:
|
192
211
|
- spec/cassettes/coub/.keep
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 1acb76c2c15e8ea0c82ec3aab3132d2b0e5b0f7c
|
4
|
-
data.tar.gz: 2a55b8d551947ceab6109a286110843d9cf6a6d9
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: 8f2ec020294584d776de1787c3ddf01d968757a7ad335cb1599005fb68d59c2f7ee62091421cf13fa7c8cb7a76ab4478618252de353fb53afd2c448f6c3a8996
|
7
|
-
data.tar.gz: 863ced2514af6a67874e11de5e896dc49c17a08404c94c18bf600c96caacc5c0851eed56ea73960ba4a6a157171717adde78bd33085f5056c0b4f6a79fc6a262
|
data/.hound.yml
DELETED