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