oembed_provider_engine 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.
Files changed (68) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.rdoc +82 -0
  3. data/Rakefile +40 -0
  4. data/app/controllers/oembed_provider_engine/application_controller.rb +2 -0
  5. data/app/controllers/oembed_provider_engine/oembed_provider_controller.rb +56 -0
  6. data/app/helpers/oembed_provider_engine/application_helper.rb +4 -0
  7. data/app/helpers/oembed_provider_engine/oembed_provider_helper.rb +20 -0
  8. data/app/models/oembed_provider_engine/oembed_providable.rb +204 -0
  9. data/app/models/oembed_provider_engine/oembed_provider.rb +95 -0
  10. data/app/views/layouts/oembed_provider_engine/application.html.erb +14 -0
  11. data/config/routes.rb +3 -0
  12. data/lib/oembed_provider_engine/engine.rb +11 -0
  13. data/lib/oembed_provider_engine/version.rb +3 -0
  14. data/lib/oembed_provider_engine.rb +4 -0
  15. data/lib/tasks/oembed_providerengine_tasks.rake +4 -0
  16. data/test/dummy/README.rdoc +261 -0
  17. data/test/dummy/Rakefile +7 -0
  18. data/test/dummy/app/assets/javascripts/application.js +15 -0
  19. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  20. data/test/dummy/app/controllers/application_controller.rb +3 -0
  21. data/test/dummy/app/controllers/photos_controller.rb +11 -0
  22. data/test/dummy/app/helpers/application_helper.rb +2 -0
  23. data/test/dummy/app/models/item.rb +4 -0
  24. data/test/dummy/app/models/photo.rb +4 -0
  25. data/test/dummy/app/views/items/edit.html.erb +24 -0
  26. data/test/dummy/app/views/items/index.html.erb +24 -0
  27. data/test/dummy/app/views/items/new.html.erb +23 -0
  28. data/test/dummy/app/views/items/show.html.erb +21 -0
  29. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  30. data/test/dummy/app/views/layouts/items.html.erb +20 -0
  31. data/test/dummy/app/views/layouts/photos.html.erb +18 -0
  32. data/test/dummy/app/views/photos/edit.html.erb +12 -0
  33. data/test/dummy/app/views/photos/index.html.erb +18 -0
  34. data/test/dummy/app/views/photos/new.html.erb +11 -0
  35. data/test/dummy/app/views/photos/show.html.erb +3 -0
  36. data/test/dummy/config/application.rb +59 -0
  37. data/test/dummy/config/boot.rb +10 -0
  38. data/test/dummy/config/database.yml +25 -0
  39. data/test/dummy/config/environment.rb +5 -0
  40. data/test/dummy/config/environments/development.rb +37 -0
  41. data/test/dummy/config/environments/production.rb +67 -0
  42. data/test/dummy/config/environments/test.rb +37 -0
  43. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  44. data/test/dummy/config/initializers/inflections.rb +15 -0
  45. data/test/dummy/config/initializers/mime_types.rb +5 -0
  46. data/test/dummy/config/initializers/oembed_provider.rb +2 -0
  47. data/test/dummy/config/initializers/secret_token.rb +7 -0
  48. data/test/dummy/config/initializers/session_store.rb +8 -0
  49. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  50. data/test/dummy/config/locales/en.yml +5 -0
  51. data/test/dummy/config/routes.rb +7 -0
  52. data/test/dummy/config.ru +4 -0
  53. data/test/dummy/db/migrate/20110212010602_create_items.rb +13 -0
  54. data/test/dummy/db/migrate/20110212022722_create_photos.rb +15 -0
  55. data/test/dummy/db/schema.rb +37 -0
  56. data/test/dummy/public/404.html +26 -0
  57. data/test/dummy/public/422.html +26 -0
  58. data/test/dummy/public/500.html +25 -0
  59. data/test/dummy/public/favicon.ico +0 -0
  60. data/test/dummy/script/rails +6 -0
  61. data/test/factories/photos.rb +14 -0
  62. data/test/functional/oembed_provider_controller_test.rb +52 -0
  63. data/test/integration/navigation_test.rb +10 -0
  64. data/test/integration/oembed_test.rb +84 -0
  65. data/test/oembed_providable_test.rb +215 -0
  66. data/test/oembed_provider_test.rb +110 -0
  67. data/test/test_helper.rb +25 -0
  68. metadata +378 -0
@@ -0,0 +1,215 @@
1
+ require 'test_helper'
2
+
3
+ class OembedProvidableTest < ActiveSupport::TestCase
4
+ n = 0
5
+ context "A model class that includes OembedProvidable" do
6
+
7
+ context "when declaring oembed_providable_as" do
8
+ setup do
9
+ n += 1
10
+ @a_class_name = "Klass#{n}"
11
+
12
+ Object.const_set(@a_class_name, Class.new(ActiveRecord::Base)).class_eval do
13
+ include OembedProviderEngine::OembedProvidable
14
+ end
15
+
16
+ @a_class = @a_class_name.constantize
17
+ end
18
+
19
+ should "not be able to be able to declare oembed_providable_as without an argument for type" do
20
+ assert_raise(ArgumentError) { @a_class.send(:oembed_providable_as) }
21
+ end
22
+
23
+ should "be able to be able to declare oembed_providable_as with a type" do
24
+ assert_nothing_raised { @a_class.send(:oembed_providable_as, :link) }
25
+ end
26
+
27
+ should "be able to be able to declare oembed_providable_as with a type and a hash for a spec" do
28
+ assert_nothing_raised { @a_class.send(:oembed_providable_as, :link, { :title => :label }) }
29
+ end
30
+
31
+ should "have the ability to return an oembed_type" do
32
+ @a_class.send(:oembed_providable_as, :link)
33
+ assert @a_class.respond_to?(:oembed_type)
34
+ assert_equal @a_class.oembed_type, :link
35
+ end
36
+ end
37
+
38
+ context "will have method" do
39
+ setup do
40
+ @method_specs = Hash.new
41
+ end
42
+
43
+ context "methods_specs_for that" do
44
+ should "return an array of hashes that match defaults when there is no hash of overriding specs" do
45
+ assert_nothing_raised { Photo::OembedResponse.send(:method_specs_for, OembedProviderEngine::OembedProvider.optional_attributes) }
46
+ OembedProviderEngine::OembedProvider.optional_attributes.each { |attr| @method_specs[attr] = attr }
47
+ results_for_test = Photo::OembedResponse.send(:method_specs_for, OembedProviderEngine::OembedProvider.optional_attributes)
48
+ assert_equal results_for_test, @method_specs
49
+ end
50
+
51
+ should "return an array of hashes that take into account overriding specs" do
52
+ OembedProviderEngine::OembedProvider.optional_attributes.each { |attr| @method_specs[attr] = attr }
53
+ @method_specs[:title] = :label
54
+ results_for_test = Item::OembedResponse.send(:method_specs_for, OembedProviderEngine::OembedProvider.optional_attributes)
55
+ assert_equal results_for_test, @method_specs
56
+ end
57
+ end
58
+
59
+ context "optional_attributes_specs set and " do
60
+ should "match the OembedProvider defaults when there is no hash of overriding specs in the oembed_providable_as call" do
61
+ assert Photo::OembedResponse.respond_to?(:optional_attributes_specs)
62
+ OembedProviderEngine::OembedProvider.optional_attributes.each { |attr| @method_specs[attr] = attr }
63
+ assert_equal Photo::OembedResponse.optional_attributes_specs, @method_specs
64
+ end
65
+
66
+ should "match the oembed_providable_as specs if they are specified" do
67
+ OembedProviderEngine::OembedProvider.optional_attributes.each { |attr| @method_specs[attr] = attr }
68
+ @method_specs[:title] = :label
69
+ assert_equal Item::OembedResponse.optional_attributes_specs, @method_specs
70
+ end
71
+ end
72
+
73
+ context "required_attributes_specs set and " do
74
+ should "match the OembedProvider defaults when there is no hash of overriding specs in the oembed_providable_as call" do
75
+ assert Photo::OembedResponse.respond_to?(:required_attributes_specs)
76
+ OembedProviderEngine::OembedProvider.required_attributes[:photo].each { |attr| @method_specs[attr] = attr }
77
+ assert_equal Photo::OembedResponse.required_attributes_specs, @method_specs
78
+ end
79
+
80
+ should "match the oembed_providable_as specs if they are specified" do
81
+ Object.const_set("RichItem", Class.new(ActiveRecord::Base)).class_eval do
82
+ include OembedProviderEngine::OembedProvidable
83
+ oembed_providable_as :rich, :html => :description
84
+ def description
85
+ "<h1>some html</h1>"
86
+ end
87
+ end
88
+
89
+ OembedProviderEngine::OembedProvider.required_attributes[:rich].each { |attr| @method_specs[attr] = attr }
90
+ @method_specs[:html] = :description
91
+ assert_equal RichItem::OembedResponse.required_attributes_specs, @method_specs
92
+ end
93
+ end
94
+
95
+ context "providable_all_attributes set and " do
96
+ should "have all relevant attributes for the type" do
97
+ assert Item::OembedResponse.respond_to?(:providable_all_attributes)
98
+ all_attributes = OembedProviderEngine::OembedProvider.optional_attributes +
99
+ OembedProviderEngine::OembedProvider.required_attributes[:link] +
100
+ OembedProviderEngine::OembedProvider.base_attributes
101
+ assert_equal all_attributes, Item::OembedResponse.providable_all_attributes
102
+ end
103
+ end
104
+ end
105
+ end
106
+
107
+ context "A photo that includes OembedProvidable" do
108
+ setup do
109
+ @photo = FactoryGirl.create(:photo)
110
+ end
111
+
112
+ should "have an oembed_response object" do
113
+ assert @photo.oembed_response
114
+ end
115
+
116
+ should "have an oembed_max_dimensions object when maxheight and maxwidth are specified" do
117
+ maxheight = 400
118
+ maxwidth = 600
119
+ assert @photo.oembed_response(:maxheight => maxheight,
120
+ :maxwidth => maxwidth)
121
+ assert_equal maxheight, @photo.oembed_response.maxheight
122
+ assert_equal maxwidth, @photo.oembed_response.maxwidth
123
+
124
+ assert @photo.respond_to?(:oembed_max_dimensions)
125
+ assert_equal maxheight, @photo.oembed_max_dimensions[:height]
126
+ assert_equal maxwidth, @photo.oembed_max_dimensions[:width]
127
+ end
128
+
129
+ context "has an oembed_response and" do
130
+ setup do
131
+ @response = @photo.oembed_response
132
+ end
133
+
134
+ context "has required attribute that" do
135
+ should "be title" do
136
+ assert @response.title.present?
137
+ end
138
+
139
+ should "be version" do
140
+ assert @response.version.present?
141
+ end
142
+
143
+ should "be height" do
144
+ assert @response.height.present?
145
+ end
146
+
147
+ should "be width" do
148
+ assert @response.width.present?
149
+ end
150
+
151
+ should "be url" do
152
+ assert @response.url.present?
153
+ end
154
+
155
+ should "be provider_url" do
156
+ assert @response.provider_url.present?
157
+ end
158
+
159
+ should "be provider_name" do
160
+ assert @response.provider_name.present?
161
+ end
162
+
163
+ should "be type" do
164
+ assert @response.type.present?
165
+ end
166
+ end
167
+
168
+ context "has can have optional attribute that" do
169
+ should "be author_name" do
170
+ @photo = FactoryGirl.create(:photo, :author_name => "Snappy")
171
+ assert @photo.oembed_response.author_name.present?
172
+ assert_equal "Snappy", @photo.oembed_response.author_name
173
+ end
174
+
175
+ should "be author_url" do
176
+ @photo = FactoryGirl.create(:photo, :author_url => "http://snapsnap.com")
177
+ assert @photo.oembed_response.author_url.present?
178
+ assert_equal "http://snapsnap.com", @photo.oembed_response.author_url
179
+ end
180
+
181
+ should "be thumbnail_url" do
182
+ @photo = FactoryGirl.create(:photo, :thumbnail_url => "http://snapsnap.com/thumb.jpg")
183
+ assert @photo.oembed_response.thumbnail_url.present?
184
+ assert_equal "http://snapsnap.com/thumb.jpg", @photo.oembed_response.thumbnail_url
185
+ end
186
+
187
+ should "be thumbnail_width" do
188
+ @photo = FactoryGirl.create(:photo, :thumbnail_width => 50)
189
+ assert @photo.oembed_response.thumbnail_width.present?
190
+ assert_equal 50, @photo.oembed_response.thumbnail_width
191
+ end
192
+
193
+ should "be thumbnail_height" do
194
+ @photo = FactoryGirl.create(:photo, :thumbnail_height => 50)
195
+ assert @photo.oembed_response.thumbnail_height.present?
196
+ assert_equal 50, @photo.oembed_response.thumbnail_height
197
+ end
198
+ end
199
+
200
+ context "when returning json" do
201
+ should "succeed" do
202
+ assert @response.as_json
203
+ assert !@response.to_json.to_s.include?(':null')
204
+ end
205
+ end
206
+
207
+ context "when returning xml" do
208
+ should "succeed" do
209
+ assert @response.to_xml
210
+ end
211
+ end
212
+ end
213
+ end
214
+ end
215
+
@@ -0,0 +1,110 @@
1
+ require 'test_helper'
2
+
3
+ class OembedProviderTest < ActiveSupport::TestCase
4
+ test "truth" do
5
+ assert_kind_of Module, OembedProviderEngine
6
+ end
7
+
8
+ context "The OembedProvider object" do
9
+ should "be able to set and return its provider name" do
10
+ name = "Media Conglomerate International"
11
+ OembedProviderEngine::OembedProvider.provider_name = name
12
+ assert_equal OembedProviderEngine::OembedProvider.provider_name, name
13
+ end
14
+
15
+ should "be able to set and return its provider url" do
16
+ url = "http://example.com"
17
+ OembedProviderEngine::OembedProvider.provider_url = url
18
+ assert_equal OembedProviderEngine::OembedProvider.provider_url, url
19
+ end
20
+
21
+ should "be able to set and return its cache age" do
22
+ age = "1440"
23
+ OembedProviderEngine::OembedProvider.cache_age = age
24
+ assert_equal OembedProviderEngine::OembedProvider.cache_age, age
25
+ end
26
+
27
+ should "return version as 1.0 of oEmbed spec" do
28
+ assert_equal "1.0", OembedProviderEngine::OembedProvider.version
29
+ end
30
+
31
+ should "have an array of base attribute keys" do
32
+ base_attributes = [:provider_url,
33
+ :provider_name,
34
+ :cache_age,
35
+ :type,
36
+ :version]
37
+
38
+ assert_equal OembedProviderEngine::OembedProvider.base_attributes, base_attributes
39
+ end
40
+
41
+ should "have an array of optional attribute keys" do
42
+ optional_attributes = [:title,
43
+ :author_name,
44
+ :author_url,
45
+ :thumbnail_url,
46
+ :thumbnail_width,
47
+ :thumbnail_height]
48
+
49
+ assert_equal OembedProviderEngine::OembedProvider.optional_attributes, optional_attributes
50
+ end
51
+
52
+ should "have a hash of keyed by oembed type with required attribute keys" do
53
+ required_attributes = {
54
+ :photo => [:url, :width, :height],
55
+ :video => [:html, :width, :height],
56
+ :link => [],
57
+ :rich => [:html, :width, :height] }
58
+
59
+ assert_equal OembedProviderEngine::OembedProvider.required_attributes, required_attributes
60
+ end
61
+
62
+ should "have a hash of keyed by oembed type photo with required attribute keys" do
63
+ requires = [:url, :width, :height]
64
+ assert_equal OembedProviderEngine::OembedProvider.required_attributes[:photo], requires
65
+ end
66
+
67
+ should "have a hash of keyed by oembed type video with required attribute keys" do
68
+ requires = [:html, :width, :height]
69
+ assert_equal OembedProviderEngine::OembedProvider.required_attributes[:video], requires
70
+ end
71
+
72
+ should "have a hash of keyed by oembed type link with required attribute keys" do
73
+ requires = []
74
+ assert_equal OembedProviderEngine::OembedProvider.required_attributes[:link], requires
75
+ end
76
+
77
+ should "have a hash of keyed by oembed type rich with required attribute keys" do
78
+ requires = [:html, :width, :height]
79
+ assert_equal OembedProviderEngine::OembedProvider.required_attributes[:rich], requires
80
+ end
81
+
82
+ context "have an cattr accessor for mapping controllers that aren't tableized version of models, to their corresponding models" do
83
+ should "be able to set and read controller_model_maps" do
84
+ assert OembedProviderEngine::OembedProvider.respond_to?(:controller_model_maps)
85
+ assert_equal Hash.new, OembedProviderEngine::OembedProvider.controller_model_maps
86
+ test_hash = { :images => 'StillImage' }
87
+ OembedProviderEngine::OembedProvider.controller_model_maps = test_hash
88
+ assert_equal test_hash, OembedProviderEngine::OembedProvider.controller_model_maps
89
+ test_hash[:audio] = 'AudioRecording'
90
+ OembedProviderEngine::OembedProvider.controller_model_maps[:audio] = 'AudioRecording'
91
+ assert_equal test_hash, OembedProviderEngine::OembedProvider.controller_model_maps
92
+ end
93
+ end
94
+
95
+ should "be able to answer find_provided_from with provided object based on passed in url" do
96
+ photo = FactoryGirl.create(:photo)
97
+ url = "http://example.com/photos/#{photo.id}"
98
+
99
+ assert_equal photo, OembedProviderEngine::OembedProvider.find_provided_from(url)
100
+ end
101
+
102
+ should "raise RecordNotFound with non existent photo" do
103
+ assert_raise ActiveRecord::RecordNotFound do
104
+ OembedProviderEngine::OembedProvider.find_provided_from("http://example.com/photos/123")
105
+ end
106
+ end
107
+ end
108
+ end
109
+
110
+
@@ -0,0 +1,25 @@
1
+ # Configure Rails Environment
2
+ ENV["RAILS_ENV"] = "test"
3
+
4
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
5
+ require "rails/test_help"
6
+ require 'factory_girl_rails'
7
+ require 'shoulda'
8
+ require 'nokogiri'
9
+ require 'capybara/rails'
10
+
11
+ module ActionController
12
+ class IntegrationTest
13
+ include Capybara::DSL
14
+ end
15
+ end
16
+
17
+ Rails.backtrace_cleaner.remove_silencers!
18
+
19
+ # Load support files
20
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
21
+
22
+ # Load fixtures from the engine
23
+ if ActiveSupport::TestCase.method_defined?(:fixture_path=)
24
+ ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__)
25
+ end