netshade-oembed_links 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -48,6 +48,10 @@ require 'oembed_links/response'
48
48
  # r.from?(:youtube) { |vid| vid["html"] }
49
49
  # end
50
50
  #
51
+ # OEmbed.transform("Some more text from http://en.wikipedia.com/wiki/Dinosaurs!") do |r, url|
52
+ # r.from?(:wikipedia, :template => "links/wiki_links")
53
+ # end
54
+ #
51
55
  # See the OEmbed.transform function for more details.
52
56
  #
53
57
  #
@@ -225,9 +229,9 @@ class OEmbed
225
229
  # OEmbed.transform(some_string) do |r, url|
226
230
  # r.from?(:provider_name) { |content| content["html"] }
227
231
  # r.matches?(/some_regex_against_the_url/) { |content| content["title"] }
228
- # r.video? { |video| content["html"] }
232
+ # r.video?(:template => "videos/oembed_link")
229
233
  # r.audio? { |audio| content["html"] }
230
- # r.hedgehog? { |hog| content["title"] }
234
+ # r.hedgehog?(:template => File.join(File.dirname(__FILE__), "templates", "hedgehogs.haml"))
231
235
  # r.photo? { |photo| "<img src='#{photo["url"]}' title='#{photo['title']} />" }
232
236
  # r.any? { |anythingelse| content["title"] }
233
237
  # end
@@ -248,6 +252,19 @@ class OEmbed
248
252
  # The value passed to these conditional blocks is a hash representing the data returned
249
253
  # by the server. The keys of all the attributes will be strings.
250
254
  #
255
+ # If you specify the :template option, a template will be found for you based on your current engironment.
256
+ # Currently there is support for Haml, Erubis and ERB templates. Each template will have the following
257
+ # local variables available to it:
258
+ #
259
+ # url : The URL for which OEmbed data exists
260
+ # data : A hash of the actual OEmbed data for that URL
261
+ # response : The OEmbed::Response object for the URL
262
+ #
263
+ #
264
+ # If you are using Rails, you may specify your template relative to your application's
265
+ # view root (eg "photos/flickr_oembed"), and your template will be found based on your application settings.
266
+ # For more options regarding template support, see the documentation for OEmbed::TemplateResolver.
267
+ #
251
268
  # NOTE: The type equivalent blocks (.video?, .audio?, .hedgehog?, .photo?, etc.) perform
252
269
  # an equality test between the method name and the type returned by the OEmbed provider.
253
270
  # You may specify any type name you wish as the method name, and its type will be checked
@@ -1,5 +1,6 @@
1
1
  # The class used to represent data returned by the server.
2
2
  #
3
+ require 'oembed_links/template_resolver'
3
4
  class OEmbed
4
5
  class Response
5
6
 
@@ -23,22 +24,22 @@ class OEmbed
23
24
 
24
25
  # Test if this response has been returned from
25
26
  # the given provider_name.
26
- def from?(provider_name, &block)
27
+ def from?(provider_name, *args, &block)
27
28
  if @provider.to_s === provider_name.to_s
28
29
  if can_render_type?(:provider)
29
30
  @rendered_via_provider = true
30
- return render_content(&block)
31
+ return render_content(*args, &block)
31
32
  end
32
33
  end
33
34
  end
34
35
 
35
36
  # Test if this response came from a URL
36
37
  # that matches the given regex.
37
- def matches?(regex, &block)
38
+ def matches?(regex, *args, &block)
38
39
  if @url =~ regex
39
40
  if can_render_type?(:regex)
40
41
  @rendered_via_regex = true
41
- render_content(&block)
42
+ render_content(*args, &block)
42
43
  end
43
44
  end
44
45
  end
@@ -46,9 +47,9 @@ class OEmbed
46
47
  # Lowest priority renderer, which will execute
47
48
  # a block regardless of conditions so long as
48
49
  # no content has yet been rendered for this response.
49
- def any?(&block)
50
+ def any?(*args, &block)
50
51
  if can_render_type?
51
- return render_content(&block)
52
+ return render_content(*args, &block)
52
53
  end
53
54
  end
54
55
 
@@ -63,7 +64,7 @@ class OEmbed
63
64
  if @response["type"] == ts
64
65
  if can_render_type?(:type)
65
66
  @rendered_via_type = true
66
- return render_content(&block)
67
+ return render_content(*args, &block)
67
68
  end
68
69
  end
69
70
  else
@@ -90,8 +91,11 @@ class OEmbed
90
91
  !@rendered.nil?
91
92
  end
92
93
 
93
- def render_content(&block)
94
- if block_given?
94
+ def render_content(*args, &block)
95
+ options = (args.last.is_a?(Hash)) ? args.last : { }
96
+ if options[:template]
97
+ @rendered = TemplateResolver.eval_template_for_path(options[:template], @url, @response, self)
98
+ elsif block_given?
95
99
  @rendered = yield(@response)
96
100
  else
97
101
  @rendered = self.to_s
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "oembed_links"
3
- s.version = "0.0.4"
3
+ s.version = "0.0.5"
4
4
  s.author = "Indianapolis Star"
5
5
  s.email = "bugs at indystar dot com"
6
6
  s.homepage = "http://www.indystar.com"
@@ -74,6 +74,8 @@ describe OEmbed, "transforming functions" do
74
74
  "type" => "video"
75
75
  }.to_json)
76
76
  OEmbed.register_yaml_file(File.join(File.dirname(__FILE__), "oembed_links_test.yml"))
77
+ @current_path = File.dirname(__FILE__)
78
+ @template_path = File.join(@current_path, "templates")
77
79
  end
78
80
 
79
81
  it "should always give priority to provider conditional blocks" do
@@ -121,8 +123,124 @@ describe OEmbed, "transforming functions" do
121
123
  r.matches?(/baz/) { |m| "regex" }
122
124
  end.should == "foo"
123
125
  end
126
+
127
+ it "should allow templates to be used to process the output" do
128
+ url_provides({
129
+ "url" => "template!"
130
+ }.to_json)
131
+
132
+ OEmbed.transform("http://test1.net/foo") do |r, url|
133
+ r.any?(:template => File.join(@template_path, "test.rhtml"))
134
+ end.should == "template! rhtml"
135
+ end
136
+
137
+
138
+ it "should allow a template root to be set programmatically to process the output" do
139
+ url_provides({
140
+ "url" => "template!"
141
+ }.to_json)
142
+ OEmbed::TemplateResolver.template_root = @template_path
143
+ OEmbed.transform("http://test1.net/foo") do |r, url|
144
+ r.any?(:template => "test.html.erb")
145
+ end.should == "template! erb\n"
146
+ end
147
+
148
+ it "should allow for selection of different template renderers" do
149
+ url_provides({
150
+ "url" => "template!"
151
+ }.to_json)
152
+ defined?(Erubis).should_not == true
153
+ defined?(Haml).should_not == true
154
+ OEmbed::TemplateResolver.template_root = @template_path
155
+ OEmbed::TemplateResolver.template_processor = :erubis
156
+ OEmbed.transform("http://test1.net/foo") do |r, url|
157
+ r.any?(:template => "test.html.erb")
158
+ end.should == "template! erb\n"
159
+ defined?(Erubis).should == "constant"
160
+ OEmbed::TemplateResolver.template_processor = :haml
161
+ OEmbed.transform("http://test1.net/foo") do |r, url|
162
+ r.any?(:template => "test.haml")
163
+ end.should == "template! haml\n"
164
+ defined?(Haml).should == "constant"
165
+ end
166
+
167
+ it "should throw an exception if a path to a template specified does not exist" do
168
+ url_provides({
169
+ "url" => "template!"
170
+ }.to_json)
171
+ lambda { OEmbed.transform("http://test1.net/foo") do |r, url|
172
+ r.any?(:template => "does.not.exist")
173
+ end }.should raise_error
174
+ end
124
175
 
125
176
 
126
177
  end
127
178
 
128
179
 
180
+ describe OEmbed, "Rails template resolving functions" do
181
+ include SpecHelper
182
+ before(:each) do
183
+ OEmbed.clear_registrations
184
+ clear_urls
185
+ url_provides({
186
+ "html" => "foo",
187
+ "type" => "video",
188
+ "url" => "rails"
189
+ }.to_json)
190
+ OEmbed.register_yaml_file(File.join(File.dirname(__FILE__), "oembed_links_test.yml"))
191
+ OEmbed::TemplateResolver.template_processor = nil
192
+ @current_path = File.dirname(__FILE__)
193
+ @template_path = File.join(@current_path, "templates")
194
+
195
+ class ::ActionView
196
+ class Template
197
+ @@template_handlers = { }
198
+
199
+ def self.support_haml!
200
+ @@template_handlers = {"haml" => "nothing"}
201
+ end
202
+
203
+ def self.do_not_support_haml!
204
+ @@template_handlers = { }
205
+ end
206
+
207
+ end
208
+ end
209
+
210
+ class ::ApplicationController
211
+ def self.view_paths
212
+ [File.dirname(__FILE__)]
213
+ end
214
+ end
215
+
216
+ end
217
+
218
+ it "should support Rails-like template paths for template selection" do
219
+ OEmbed.transform("http://test1.net/foo") do |r, url|
220
+ r.any?(:template => "templates/test")
221
+ end.should == "rails erb\n"
222
+ end
223
+
224
+ it "should support Rails-like template paths with extension specified" do
225
+ OEmbed.transform("http://test1.net/foo") do |r, url|
226
+ r.any?(:template => "templates/test.rhtml")
227
+ end.should == "rails rhtml"
228
+ end
229
+
230
+ it "should allow haml support in the Rails app" do
231
+ ActionView::Template.support_haml!
232
+ OEmbed.transform("http://test1.net/foo") do |r, url|
233
+ r.any?(:template => "templates/test")
234
+ end.should == "rails haml\n"
235
+ ActionView::Template.do_not_support_haml!
236
+ OEmbed.transform("http://test1.net/foo") do |r, url|
237
+ r.any?(:template => "templates/test")
238
+ end.should == "rails erb\n"
239
+ end
240
+
241
+ end
242
+
243
+
244
+
245
+
246
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: netshade-oembed_links
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Indianapolis Star