film_snob 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
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
- Gemfile.lock
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
- coverage
10
- doc/
11
- lib/bundler/man
22
+ mkmf.log
12
23
  pkg
13
24
  rdoc
14
- spec/reports
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
@@ -1 +1,2 @@
1
1
  --color
2
+ --require spec_helper
data/README.md CHANGED
@@ -51,6 +51,8 @@ film_snob uses the oembed protocol to get html for embed codes. These options as
51
51
  * Coub
52
52
  * Instagram
53
53
  * Dailymotion
54
+ * Vine
55
+ * Rutube
54
56
 
55
57
  The same methods work with all of these providers.
56
58
 
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.0"
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.26.1"
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
- require "film_snob/coub"
2
- require "film_snob/funny_or_die"
3
- require "film_snob/hulu"
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 ||= VIDEO_SITES.find do |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
@@ -1,4 +1,4 @@
1
1
  class FilmSnob
2
- VERSION = "0.4.0"
2
+ VERSION = "0.5.0"
3
3
  end
4
4
 
@@ -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
@@ -1,3 +1,5 @@
1
+ require "film_snob/video_site"
2
+
1
3
  class FilmSnob
2
4
  class FunnyOrDie < VideoSite
3
5
  def self.valid_url_patterns
@@ -1,3 +1,5 @@
1
+ require "film_snob/video_site"
2
+
1
3
  class FilmSnob
2
4
  class Hulu < VideoSite
3
5
  def self.valid_url_patterns
@@ -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
+
@@ -1,3 +1,5 @@
1
+ require "film_snob/video_site"
2
+
1
3
  class FilmSnob
2
4
  class YouTube < VideoSite
3
5
  def self.valid_url_patterns
@@ -1,5 +1,3 @@
1
- require_relative "spec_helper"
2
-
3
1
  class FilmSnob
4
2
  describe Deprecated do
5
3
 
@@ -1,4 +1,4 @@
1
- require_relative "spec_helper"
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
@@ -1,5 +1,3 @@
1
- require_relative "spec_helper"
2
-
3
1
  describe FilmSnob::YouTube do
4
2
  it "may not be embeddable" do
5
3
  VCR.use_cassette("youtube/bad_youtube_url") do
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.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-06 00:00:00.000000000 Z
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.0'
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.0'
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.26.1
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.26.1
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
- - ".gitignore"
134
- - ".hound.yml"
135
- - ".rspec"
136
- - ".rubocop.yml"
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/vimeo.rb
155
- - lib/film_snob/youtube.rb
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: 2.4.4
206
+ rubygems_version: 1.8.23.2
188
207
  signing_key:
189
- specification_version: 4
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
@@ -1,3 +0,0 @@
1
- ruby:
2
- enabled: true
3
- config_file: .rubocop.yml