prototype-rails 4.0.0 → 4.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 (38) hide show
  1. checksums.yaml +4 -4
  2. data/MIT-LICENSE +20 -0
  3. data/{README → README.md} +12 -0
  4. data/Rakefile +2 -0
  5. data/lib/prototype-rails/on_load_action_view.rb +5 -3
  6. metadata +15 -46
  7. data/test/assert_select_test.rb +0 -457
  8. data/test/controller/caching_test.rb +0 -43
  9. data/test/controller/content_type_test.rb +0 -16
  10. data/test/controller/mime_responds_test.rb +0 -213
  11. data/test/controller/new_base/content_type_test.rb +0 -19
  12. data/test/controller/new_base/render_rjs_test.rb +0 -71
  13. data/test/controller/render_js_test.rb +0 -22
  14. data/test/fixtures/functional_caching/_partial.erb +0 -3
  15. data/test/fixtures/functional_caching/formatted_fragment_cached.js.rjs +0 -6
  16. data/test/fixtures/functional_caching/js_fragment_cached_with_partial.js.rjs +0 -1
  17. data/test/fixtures/old_content_type/render_default_for_rjs.rjs +0 -1
  18. data/test/fixtures/respond_to/all_types_with_layout.js.rjs +0 -1
  19. data/test/fixtures/respond_to/layouts/standard.html.erb +0 -1
  20. data/test/fixtures/respond_to/using_defaults.js.rjs +0 -1
  21. data/test/fixtures/respond_to/using_defaults_with_type_list.js.rjs +0 -1
  22. data/test/fixtures/respond_with/using_resource.js.rjs +0 -1
  23. data/test/fixtures/test/_one.html.erb +0 -1
  24. data/test/fixtures/test/_partial.html.erb +0 -1
  25. data/test/fixtures/test/_partial.js.erb +0 -1
  26. data/test/fixtures/test/_two.html.erb +0 -1
  27. data/test/fixtures/test/delete_with_js.rjs +0 -2
  28. data/test/fixtures/test/enum_rjs_test.rjs +0 -6
  29. data/test/fixtures/test/greeting.js.rjs +0 -1
  30. data/test/fixtures/test/render_explicit_html_template.js.rjs +0 -1
  31. data/test/fixtures/test/render_implicit_html_template.js.rjs +0 -1
  32. data/test/javascript_helper_test.rb +0 -61
  33. data/test/lib/abstract_unit.rb +0 -225
  34. data/test/lib/controller/fake_models.rb +0 -29
  35. data/test/render_other_test.rb +0 -256
  36. data/test/template/prototype_helper_test.rb +0 -476
  37. data/test/template/render_test.rb +0 -24
  38. data/test/template/scriptaculous_helper_test.rb +0 -86
@@ -1 +0,0 @@
1
- page[:body].visual_effect :highlight
@@ -1 +0,0 @@
1
- page.call "document.write", render(:partial => 'one')
@@ -1 +0,0 @@
1
- page.call "document.write", render(:partial => "one")
@@ -1,61 +0,0 @@
1
- require 'abstract_unit'
2
-
3
- class JavaScriptHelperTest < ActionView::TestCase
4
- tests ActionView::Helpers::JavaScriptHelper
5
-
6
- def _evaluate_assigns_and_ivars() end
7
-
8
- attr_accessor :formats, :output_buffer
9
-
10
- def update_details(details)
11
- @details = details
12
- yield if block_given?
13
- end
14
-
15
- def setup
16
- super
17
- ActiveSupport.escape_html_entities_in_json = true
18
- @template = self
19
- end
20
-
21
- def teardown
22
- ActiveSupport.escape_html_entities_in_json = false
23
- end
24
-
25
- def test_link_to_function_with_rjs_block
26
- html = link_to_function( "Greet me!" ) do |page|
27
- page.replace_html 'header', "<h1>Greetings</h1>"
28
- end
29
- assert_dom_equal %(<a href="#" onclick="Element.update(&quot;header&quot;, &quot;\\u003Ch1\\u003EGreetings\\u003C/h1\\u003E&quot;);; return false;">Greet me!</a>), html
30
- end
31
-
32
- def test_link_to_function_with_rjs_block_and_options
33
- html = link_to_function( "Greet me!", :class => "updater" ) do |page|
34
- page.replace_html 'header', "<h1>Greetings</h1>"
35
- end
36
- assert_dom_equal %(<a href="#" class="updater" onclick="Element.update(&quot;header&quot;, &quot;\\u003Ch1\\u003EGreetings\\u003C/h1\\u003E&quot;);; return false;">Greet me!</a>), html
37
- end
38
-
39
- def test_link_to_function_with_inner_block_does_not_raise_exception
40
- html = link_to_function( "Greet me!" ) do |page|
41
- page.replace_html 'header', (content_tag :h1 do
42
- 'Greetings'
43
- end)
44
- end
45
- assert_dom_equal %(<a href="#" onclick="Element.update(&quot;header&quot;, &quot;\\u003Ch1\\u003EGreetings\\u003C/h1\\u003E&quot;);; return false;">Greet me!</a>), html
46
- end
47
-
48
- def test_button_to_function_with_rjs_block
49
- html = button_to_function( "Greet me!" ) do |page|
50
- page.replace_html 'header', "<h1>Greetings</h1>"
51
- end
52
- assert_dom_equal %(<input type="button" onclick="Element.update(&quot;header&quot;, &quot;\\u003Ch1\\u003EGreetings\\u003C/h1\\u003E&quot;);;" value="Greet me!" />), html
53
- end
54
-
55
- def test_button_to_function_with_rjs_block_and_options
56
- html = button_to_function( "Greet me!", :class => "greeter" ) do |page|
57
- page.replace_html 'header', "<h1>Greetings</h1>"
58
- end
59
- assert_dom_equal %(<input type="button" class="greeter" onclick="Element.update(&quot;header&quot;, &quot;\\u003Ch1\\u003EGreetings\\u003C\/h1\\u003E&quot;);;" value="Greet me!" />), html
60
- end
61
- end
@@ -1,225 +0,0 @@
1
- require 'rubygems'
2
- require 'bundler/setup'
3
- require 'minitest/autorun'
4
-
5
- require 'active_support'
6
- require 'active_support/test_case'
7
- require 'action_controller'
8
- require 'action_view'
9
- require 'action_view/testing/resolvers'
10
-
11
- require 'prototype-rails/on_load_action_controller'
12
- require 'prototype-rails/on_load_action_view'
13
-
14
- FIXTURE_LOAD_PATH = File.expand_path('../../fixtures', __FILE__)
15
- FIXTURES = Pathname.new(FIXTURE_LOAD_PATH)
16
-
17
-
18
- module SetupOnce
19
- extend ActiveSupport::Concern
20
-
21
- included do
22
- cattr_accessor :setup_once_block
23
- self.setup_once_block = nil
24
-
25
- setup :run_setup_once
26
- end
27
-
28
- module ClassMethods
29
- def setup_once(&block)
30
- self.setup_once_block = block
31
- end
32
- end
33
-
34
- private
35
- def run_setup_once
36
- if self.setup_once_block
37
- self.setup_once_block.call
38
- self.setup_once_block = nil
39
- end
40
- end
41
- end
42
-
43
- SharedTestRoutes = ActionDispatch::Routing::RouteSet.new
44
-
45
- module ActiveSupport
46
- class TestCase
47
- include SetupOnce
48
- # Hold off drawing routes until all the possible controller classes
49
- # have been loaded.
50
- setup_once do
51
- SharedTestRoutes.draw do
52
- get ':controller(/:action)'
53
- end
54
-
55
- ActionDispatch::IntegrationTest.app.routes.draw do
56
- get ':controller(/:action)'
57
- end
58
- end
59
- end
60
- end
61
-
62
- class RoutedRackApp
63
- attr_reader :routes
64
-
65
- def initialize(routes, &blk)
66
- @routes = routes
67
- @stack = ActionDispatch::MiddlewareStack.new(&blk).build(@routes)
68
- end
69
-
70
- def call(env)
71
- @stack.call(env)
72
- end
73
- end
74
-
75
- class BasicController
76
- attr_accessor :request
77
-
78
- def config
79
- @config ||= ActiveSupport::InheritableOptions.new(ActionController::Base.config).tap do |config|
80
- # VIEW TODO: View tests should not require a controller
81
- public_dir = "#{FIXTURE_LOAD_PATH}/public"
82
- config.assets_dir = public_dir
83
- config.javascripts_dir = "#{public_dir}/javascripts"
84
- config.stylesheets_dir = "#{public_dir}/stylesheets"
85
- config
86
- end
87
- end
88
- end
89
-
90
- class ActionDispatch::IntegrationTest < ActiveSupport::TestCase
91
- setup do
92
- @routes = SharedTestRoutes
93
- end
94
-
95
- def self.build_app(routes = nil)
96
- RoutedRackApp.new(routes || ActionDispatch::Routing::RouteSet.new) do |middleware|
97
- middleware.use "ActionDispatch::ShowExceptions", ActionDispatch::PublicExceptions.new("#{FIXTURE_LOAD_PATH}/public")
98
- middleware.use "ActionDispatch::Callbacks"
99
- middleware.use "ActionDispatch::ParamsParser"
100
- middleware.use "ActionDispatch::Cookies"
101
- middleware.use "ActionDispatch::Flash"
102
- middleware.use "Rack::Head"
103
- yield(middleware) if block_given?
104
- end
105
- end
106
-
107
- self.app = build_app
108
-
109
- # Stub Rails dispatcher so it does not get controller references and
110
- # simply return the controller#action as Rack::Body.
111
- class StubDispatcher < ::ActionDispatch::Routing::RouteSet::Dispatcher
112
- protected
113
- def controller_reference(controller_param)
114
- controller_param
115
- end
116
-
117
- def dispatch(controller, action, env)
118
- [200, {'Content-Type' => 'text/html'}, ["#{controller}##{action}"]]
119
- end
120
- end
121
-
122
- def self.stub_controllers
123
- old_dispatcher = ActionDispatch::Routing::RouteSet::Dispatcher
124
- ActionDispatch::Routing::RouteSet.module_eval { remove_const :Dispatcher }
125
- ActionDispatch::Routing::RouteSet.module_eval { const_set :Dispatcher, StubDispatcher }
126
- yield ActionDispatch::Routing::RouteSet.new
127
- ensure
128
- ActionDispatch::Routing::RouteSet.module_eval { remove_const :Dispatcher }
129
- ActionDispatch::Routing::RouteSet.module_eval { const_set :Dispatcher, old_dispatcher }
130
- end
131
-
132
- def with_routing(&block)
133
- temporary_routes = ActionDispatch::Routing::RouteSet.new
134
- old_app, self.class.app = self.class.app, self.class.build_app(temporary_routes)
135
- old_routes = SharedTestRoutes
136
- silence_warnings { Object.const_set(:SharedTestRoutes, temporary_routes) }
137
-
138
- yield temporary_routes
139
- ensure
140
- self.class.app = old_app
141
- silence_warnings { Object.const_set(:SharedTestRoutes, old_routes) }
142
- end
143
-
144
- def with_autoload_path(path)
145
- path = File.join(File.dirname(__FILE__), "fixtures", path)
146
- if ActiveSupport::Dependencies.autoload_paths.include?(path)
147
- yield
148
- else
149
- begin
150
- ActiveSupport::Dependencies.autoload_paths << path
151
- yield
152
- ensure
153
- ActiveSupport::Dependencies.autoload_paths.reject! {|p| p == path}
154
- ActiveSupport::Dependencies.clear
155
- end
156
- end
157
- end
158
- end
159
-
160
- # Temporary base class
161
- class Rack::TestCase < ActionDispatch::IntegrationTest
162
- def self.testing(klass = nil)
163
- if klass
164
- @testing = "/#{klass.name.underscore}".sub!(/_controller$/, '')
165
- else
166
- @testing
167
- end
168
- end
169
-
170
- def get(thing, *args)
171
- if thing.is_a?(Symbol)
172
- super("#{self.class.testing}/#{thing}", *args)
173
- else
174
- super
175
- end
176
- end
177
-
178
- def assert_body(body)
179
- assert_equal body, Array.wrap(response.body).join
180
- end
181
-
182
- def assert_status(code)
183
- assert_equal code, response.status
184
- end
185
-
186
- def assert_response(body, status = 200, headers = {})
187
- assert_body body
188
- assert_status status
189
- headers.each do |header, value|
190
- assert_header header, value
191
- end
192
- end
193
-
194
- def assert_content_type(type)
195
- assert_equal type, response.headers["Content-Type"]
196
- end
197
-
198
- def assert_header(name, value)
199
- assert_equal value, response.headers[name]
200
- end
201
- end
202
-
203
- module ActionController
204
- class Base
205
- include ActionController::Testing
206
- # This stub emulates the Railtie including the URL helpers from a Rails application
207
- include SharedTestRoutes.url_helpers
208
-
209
- self.view_paths = FIXTURE_LOAD_PATH
210
-
211
- def self.test_routes(&block)
212
- routes = ActionDispatch::Routing::RouteSet.new
213
- routes.draw(&block)
214
- include routes.url_helpers
215
- end
216
- end
217
-
218
- class TestCase
219
- include ActionDispatch::TestProcess
220
-
221
- setup do
222
- @routes = SharedTestRoutes
223
- end
224
- end
225
- end
@@ -1,29 +0,0 @@
1
- require "active_model"
2
-
3
- class Customer < Struct.new(:name, :id)
4
- extend ActiveModel::Naming
5
- include ActiveModel::Conversion
6
-
7
- undef_method :to_json
8
-
9
- def to_xml(options={})
10
- if options[:builder]
11
- options[:builder].name name
12
- else
13
- "<name>#{name}</name>"
14
- end
15
- end
16
-
17
- def to_js(options={})
18
- "name: #{name.inspect}"
19
- end
20
- alias :to_text :to_js
21
-
22
- def errors
23
- []
24
- end
25
-
26
- def persisted?
27
- id.present?
28
- end
29
- end
@@ -1,256 +0,0 @@
1
- require 'abstract_unit'
2
- require 'pathname'
3
- require 'securerandom'
4
-
5
- ActionController.add_renderer :simon do |says, options|
6
- self.content_type = Mime::TEXT
7
- self.response_body = "Simon says: #{says}"
8
- end
9
-
10
- class RenderOtherTest < ActionController::TestCase
11
- class TestController < ActionController::Base
12
- protect_from_forgery
13
-
14
- def self.controller_path
15
- 'test'
16
- end
17
-
18
- layout :determine_layout
19
-
20
- module RenderTestHelper
21
- def rjs_helper_method_from_module
22
- page.visual_effect :highlight
23
- end
24
- end
25
-
26
- helper RenderTestHelper
27
- helper do
28
- def rjs_helper_method(value)
29
- page.visual_effect :highlight, value
30
- end
31
- end
32
-
33
- def enum_rjs_test
34
- render :update do |page|
35
- page.select('.product').each do |value|
36
- page.rjs_helper_method_from_module
37
- page.rjs_helper_method(value)
38
- page.sortable(value, :url => { :action => "order" })
39
- page.draggable(value)
40
- end
41
- end
42
- end
43
-
44
- def render_explicit_html_template
45
- end
46
-
47
- def render_custom_code_rjs
48
- render :update, :status => 404 do |page|
49
- page.replace :foo, :partial => 'partial'
50
- end
51
- end
52
-
53
- def render_implicit_html_template
54
- end
55
-
56
- def render_js_with_explicit_template
57
- @project_id = 4
58
- render :template => 'test/delete_with_js'
59
- end
60
-
61
- def render_js_with_explicit_action_template
62
- @project_id = 4
63
- render :action => 'delete_with_js'
64
- end
65
-
66
- def delete_with_js
67
- @project_id = 4
68
- end
69
-
70
- def update_page
71
- render :update do |page|
72
- page.replace_html 'balance', '$37,000,000.00'
73
- page.visual_effect :highlight, 'balance'
74
- end
75
- end
76
-
77
- def update_page_with_instance_variables
78
- @money = '$37,000,000.00'
79
- @div_id = 'balance'
80
- render :update do |page|
81
- page.replace_html @div_id, @money
82
- page.visual_effect :highlight, @div_id
83
- end
84
- end
85
-
86
- def update_page_with_view_method
87
- render :update do |page|
88
- page.replace_html 'person', pluralize(2, 'person')
89
- end
90
- end
91
-
92
- def partial_as_rjs
93
- render :update do |page|
94
- page.replace :foo, :partial => 'partial'
95
- end
96
- end
97
-
98
- def respond_to_partial_as_rjs
99
- respond_to do |format|
100
- format.js do
101
- render :update do |page|
102
- page.replace :foo, :partial => 'partial'
103
- end
104
- end
105
- end
106
- end
107
-
108
- def render_alternate_default
109
- # For this test, the method "default_render" is overridden:
110
- @alternate_default_render = lambda do
111
- render :update do |page|
112
- page.replace :foo, :partial => 'partial'
113
- end
114
- end
115
- end
116
-
117
- def render_simon_says
118
- render :simon => "foo"
119
- end
120
-
121
- private
122
- def default_render
123
- @alternate_default_render ||= nil
124
- if @alternate_default_render
125
- @alternate_default_render.call
126
- else
127
- super
128
- end
129
- end
130
-
131
- def determine_layout
132
- case action_name
133
- when "hello_world", "layout_test", "rendering_without_layout",
134
- "rendering_nothing_on_layout", "render_text_hello_world",
135
- "render_text_hello_world_with_layout",
136
- "hello_world_with_layout_false",
137
- "partial_only", "partial_only_with_layout",
138
- "accessing_params_in_template",
139
- "accessing_params_in_template_with_layout",
140
- "render_with_explicit_template",
141
- "render_with_explicit_string_template",
142
- "update_page", "update_page_with_instance_variables"
143
-
144
- "layouts/standard"
145
- when "action_talk_to_layout", "layout_overriding_layout"
146
- "layouts/talk_from_action"
147
- when "render_implicit_html_template_from_xhr_request"
148
- (request.xhr? ? 'layouts/xhr' : 'layouts/standard')
149
- end
150
- end
151
- end
152
-
153
- tests TestController
154
-
155
- def setup
156
- # enable a logger so that (e.g.) the benchmarking stuff runs, so we can get
157
- # a more accurate simulation of what happens in "real life".
158
- super
159
- @controller.logger = Logger.new(nil)
160
-
161
- @request.host = "www.nextangle.com"
162
- end
163
-
164
- def test_enum_rjs_test
165
- pre = %[$$(".product").each(function(value, index) {
166
- new Effect.Highlight(element,{});
167
- new Effect.Highlight(value,{});
168
- Sortable.create(value, {onUpdate:function(){new Ajax.Request('/render_other_test/test/order', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize(value) + '&authenticity_token=' + encodeURIComponent('].gsub(/^\s+/, '')
169
- post = %[')})}});\nnew Draggable(value, {});\n});]
170
-
171
- get :enum_rjs_test
172
- assert_match pre, @response.body
173
- assert_match post, @response.body
174
- end
175
-
176
- def test_explicitly_rendering_an_html_template_with_implicit_html_template_renders_should_be_possible_from_an_rjs_template
177
- [:js, "js"].each do |format|
178
- assert_nothing_raised do
179
- get :render_explicit_html_template, :format => format
180
- assert_equal %(document.write("Hello world\\n");), @response.body
181
- end
182
- end
183
- end
184
-
185
- def test_render_custom_code_rjs
186
- get :render_custom_code_rjs
187
- assert_response 404
188
- assert_equal %(Element.replace("foo", "partial html");), @response.body
189
- end
190
-
191
- def test_render_in_an_rjs_template_should_pick_html_templates_when_available
192
- [:js, "js"].each do |format|
193
- assert_nothing_raised do
194
- get :render_implicit_html_template, :format => format
195
- assert_equal %(document.write("Hello world\\n");), @response.body
196
- end
197
- end
198
- end
199
-
200
- def test_render_rjs_template_explicitly
201
- get :render_js_with_explicit_template
202
- assert_equal %!Element.remove("person");\nnew Effect.Highlight(\"project-4\",{});!, @response.body
203
- end
204
-
205
- def test_rendering_rjs_action_explicitly
206
- get :render_js_with_explicit_action_template
207
- assert_equal %!Element.remove("person");\nnew Effect.Highlight(\"project-4\",{});!, @response.body
208
- end
209
-
210
- def test_render_rjs_with_default
211
- get :delete_with_js
212
- assert_equal %!Element.remove("person");\nnew Effect.Highlight(\"project-4\",{});!, @response.body
213
- end
214
-
215
- def test_update_page
216
- get :update_page
217
- assert_template nil
218
- assert_equal 'text/javascript; charset=utf-8', @response.headers['Content-Type']
219
- assert_equal 2, @response.body.split($/).length
220
- end
221
-
222
- def test_update_page_with_instance_variables
223
- get :update_page_with_instance_variables
224
- assert_template nil
225
- assert_equal 'text/javascript; charset=utf-8', @response.headers["Content-Type"]
226
- assert_match(/balance/, @response.body)
227
- assert_match(/\$37/, @response.body)
228
- end
229
-
230
- def test_update_page_with_view_method
231
- get :update_page_with_view_method
232
- assert_template nil
233
- assert_equal 'text/javascript; charset=utf-8', @response.headers["Content-Type"]
234
- assert_match(/2 people/, @response.body)
235
- end
236
-
237
- def test_should_render_html_formatted_partial_with_rjs
238
- xhr :get, :partial_as_rjs
239
- assert_equal %(Element.replace("foo", "partial html");), @response.body
240
- end
241
-
242
- def test_should_render_html_formatted_partial_with_rjs_and_js_format
243
- xhr :get, :respond_to_partial_as_rjs
244
- assert_equal %(Element.replace("foo", "partial html");), @response.body
245
- end
246
-
247
- def test_should_render_with_alternate_default_render
248
- xhr :get, :render_alternate_default
249
- assert_equal %(Element.replace("foo", "partial html");), @response.body
250
- end
251
-
252
- def test_using_custom_render_option
253
- get :render_simon_says
254
- assert_equal "Simon says: foo", @response.body
255
- end
256
- end