flash_render 1.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 (54) hide show
  1. data/.gitignore +5 -0
  2. data/Gemfile +4 -0
  3. data/Gemfile.lock +81 -0
  4. data/README.textile +7 -0
  5. data/Rakefile +13 -0
  6. data/flash_render.gemspec +25 -0
  7. data/lib/flash_render.rb +32 -0
  8. data/lib/flash_render/railtie.rb +10 -0
  9. data/lib/flash_render/version.rb +3 -0
  10. data/test/dummy/.gitignore +4 -0
  11. data/test/dummy/README +256 -0
  12. data/test/dummy/Rakefile +7 -0
  13. data/test/dummy/app/controllers/application_controller.rb +3 -0
  14. data/test/dummy/app/helpers/application_helper.rb +2 -0
  15. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  16. data/test/dummy/config.ru +4 -0
  17. data/test/dummy/config/application.rb +42 -0
  18. data/test/dummy/config/boot.rb +15 -0
  19. data/test/dummy/config/database.yml +22 -0
  20. data/test/dummy/config/environment.rb +5 -0
  21. data/test/dummy/config/environments/development.rb +22 -0
  22. data/test/dummy/config/environments/production.rb +49 -0
  23. data/test/dummy/config/environments/test.rb +35 -0
  24. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  25. data/test/dummy/config/initializers/inflections.rb +10 -0
  26. data/test/dummy/config/initializers/mime_types.rb +5 -0
  27. data/test/dummy/config/initializers/secret_token.rb +7 -0
  28. data/test/dummy/config/initializers/session_store.rb +8 -0
  29. data/test/dummy/config/locales/en.yml +5 -0
  30. data/test/dummy/config/routes.rb +58 -0
  31. data/test/dummy/db/seeds.rb +7 -0
  32. data/test/dummy/doc/README_FOR_APP +2 -0
  33. data/test/dummy/lib/tasks/.gitkeep +0 -0
  34. data/test/dummy/public/404.html +26 -0
  35. data/test/dummy/public/422.html +26 -0
  36. data/test/dummy/public/500.html +26 -0
  37. data/test/dummy/public/favicon.ico +0 -0
  38. data/test/dummy/public/images/rails.png +0 -0
  39. data/test/dummy/public/index.html +262 -0
  40. data/test/dummy/public/javascripts/application.js +2 -0
  41. data/test/dummy/public/javascripts/controls.js +965 -0
  42. data/test/dummy/public/javascripts/dragdrop.js +974 -0
  43. data/test/dummy/public/javascripts/effects.js +1123 -0
  44. data/test/dummy/public/javascripts/prototype.js +6001 -0
  45. data/test/dummy/public/javascripts/rails.js +175 -0
  46. data/test/dummy/public/robots.txt +5 -0
  47. data/test/dummy/public/stylesheets/.gitkeep +0 -0
  48. data/test/dummy/script/rails +6 -0
  49. data/test/dummy/test/performance/browsing_test.rb +9 -0
  50. data/test/dummy/test/test_helper.rb +13 -0
  51. data/test/dummy/vendor/plugins/.gitkeep +0 -0
  52. data/test/flash_render_test.rb +47 -0
  53. data/test/test_helper.rb +10 -0
  54. metadata +170 -0
@@ -0,0 +1,175 @@
1
+ (function() {
2
+ // Technique from Juriy Zaytsev
3
+ // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
4
+ function isEventSupported(eventName) {
5
+ var el = document.createElement('div');
6
+ eventName = 'on' + eventName;
7
+ var isSupported = (eventName in el);
8
+ if (!isSupported) {
9
+ el.setAttribute(eventName, 'return;');
10
+ isSupported = typeof el[eventName] == 'function';
11
+ }
12
+ el = null;
13
+ return isSupported;
14
+ }
15
+
16
+ function isForm(element) {
17
+ return Object.isElement(element) && element.nodeName.toUpperCase() == 'FORM'
18
+ }
19
+
20
+ function isInput(element) {
21
+ if (Object.isElement(element)) {
22
+ var name = element.nodeName.toUpperCase()
23
+ return name == 'INPUT' || name == 'SELECT' || name == 'TEXTAREA'
24
+ }
25
+ else return false
26
+ }
27
+
28
+ var submitBubbles = isEventSupported('submit'),
29
+ changeBubbles = isEventSupported('change')
30
+
31
+ if (!submitBubbles || !changeBubbles) {
32
+ // augment the Event.Handler class to observe custom events when needed
33
+ Event.Handler.prototype.initialize = Event.Handler.prototype.initialize.wrap(
34
+ function(init, element, eventName, selector, callback) {
35
+ init(element, eventName, selector, callback)
36
+ // is the handler being attached to an element that doesn't support this event?
37
+ if ( (!submitBubbles && this.eventName == 'submit' && !isForm(this.element)) ||
38
+ (!changeBubbles && this.eventName == 'change' && !isInput(this.element)) ) {
39
+ // "submit" => "emulated:submit"
40
+ this.eventName = 'emulated:' + this.eventName
41
+ }
42
+ }
43
+ )
44
+ }
45
+
46
+ if (!submitBubbles) {
47
+ // discover forms on the page by observing focus events which always bubble
48
+ document.on('focusin', 'form', function(focusEvent, form) {
49
+ // special handler for the real "submit" event (one-time operation)
50
+ if (!form.retrieve('emulated:submit')) {
51
+ form.on('submit', function(submitEvent) {
52
+ var emulated = form.fire('emulated:submit', submitEvent, true)
53
+ // if custom event received preventDefault, cancel the real one too
54
+ if (emulated.returnValue === false) submitEvent.preventDefault()
55
+ })
56
+ form.store('emulated:submit', true)
57
+ }
58
+ })
59
+ }
60
+
61
+ if (!changeBubbles) {
62
+ // discover form inputs on the page
63
+ document.on('focusin', 'input, select, texarea', function(focusEvent, input) {
64
+ // special handler for real "change" events
65
+ if (!input.retrieve('emulated:change')) {
66
+ input.on('change', function(changeEvent) {
67
+ input.fire('emulated:change', changeEvent, true)
68
+ })
69
+ input.store('emulated:change', true)
70
+ }
71
+ })
72
+ }
73
+
74
+ function handleRemote(element) {
75
+ var method, url, params;
76
+
77
+ var event = element.fire("ajax:before");
78
+ if (event.stopped) return false;
79
+
80
+ if (element.tagName.toLowerCase() === 'form') {
81
+ method = element.readAttribute('method') || 'post';
82
+ url = element.readAttribute('action');
83
+ params = element.serialize();
84
+ } else {
85
+ method = element.readAttribute('data-method') || 'get';
86
+ url = element.readAttribute('href');
87
+ params = {};
88
+ }
89
+
90
+ new Ajax.Request(url, {
91
+ method: method,
92
+ parameters: params,
93
+ evalScripts: true,
94
+
95
+ onComplete: function(request) { element.fire("ajax:complete", request); },
96
+ onSuccess: function(request) { element.fire("ajax:success", request); },
97
+ onFailure: function(request) { element.fire("ajax:failure", request); }
98
+ });
99
+
100
+ element.fire("ajax:after");
101
+ }
102
+
103
+ function handleMethod(element) {
104
+ var method = element.readAttribute('data-method'),
105
+ url = element.readAttribute('href'),
106
+ csrf_param = $$('meta[name=csrf-param]')[0],
107
+ csrf_token = $$('meta[name=csrf-token]')[0];
108
+
109
+ var form = new Element('form', { method: "POST", action: url, style: "display: none;" });
110
+ element.parentNode.insert(form);
111
+
112
+ if (method !== 'post') {
113
+ var field = new Element('input', { type: 'hidden', name: '_method', value: method });
114
+ form.insert(field);
115
+ }
116
+
117
+ if (csrf_param) {
118
+ var param = csrf_param.readAttribute('content'),
119
+ token = csrf_token.readAttribute('content'),
120
+ field = new Element('input', { type: 'hidden', name: param, value: token });
121
+ form.insert(field);
122
+ }
123
+
124
+ form.submit();
125
+ }
126
+
127
+
128
+ document.on("click", "*[data-confirm]", function(event, element) {
129
+ var message = element.readAttribute('data-confirm');
130
+ if (!confirm(message)) event.stop();
131
+ });
132
+
133
+ document.on("click", "a[data-remote]", function(event, element) {
134
+ if (event.stopped) return;
135
+ handleRemote(element);
136
+ event.stop();
137
+ });
138
+
139
+ document.on("click", "a[data-method]", function(event, element) {
140
+ if (event.stopped) return;
141
+ handleMethod(element);
142
+ event.stop();
143
+ });
144
+
145
+ document.on("submit", function(event) {
146
+ var element = event.findElement(),
147
+ message = element.readAttribute('data-confirm');
148
+ if (message && !confirm(message)) {
149
+ event.stop();
150
+ return false;
151
+ }
152
+
153
+ var inputs = element.select("input[type=submit][data-disable-with]");
154
+ inputs.each(function(input) {
155
+ input.disabled = true;
156
+ input.writeAttribute('data-original-value', input.value);
157
+ input.value = input.readAttribute('data-disable-with');
158
+ });
159
+
160
+ var element = event.findElement("form[data-remote]");
161
+ if (element) {
162
+ handleRemote(element);
163
+ event.stop();
164
+ }
165
+ });
166
+
167
+ document.on("ajax:after", "form", function(event, element) {
168
+ var inputs = element.select("input[type=submit][disabled=true][data-disable-with]");
169
+ inputs.each(function(input) {
170
+ input.value = input.readAttribute('data-original-value');
171
+ input.removeAttribute('data-original-value');
172
+ input.disabled = false;
173
+ });
174
+ });
175
+ })();
@@ -0,0 +1,5 @@
1
+ # See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file
2
+ #
3
+ # To ban all spiders from the entire site uncomment the next two lines:
4
+ # User-Agent: *
5
+ # Disallow: /
File without changes
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
5
+ require File.expand_path('../../config/boot', __FILE__)
6
+ require 'rails/commands'
@@ -0,0 +1,9 @@
1
+ require 'test_helper'
2
+ require 'rails/performance_test_help'
3
+
4
+ # Profiling results for each test method are written to tmp/performance.
5
+ class BrowsingTest < ActionDispatch::PerformanceTest
6
+ def test_homepage
7
+ get '/'
8
+ end
9
+ end
@@ -0,0 +1,13 @@
1
+ ENV["RAILS_ENV"] = "test"
2
+ require File.expand_path('../../config/environment', __FILE__)
3
+ require 'rails/test_help'
4
+
5
+ class ActiveSupport::TestCase
6
+ # Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order.
7
+ #
8
+ # Note: You'll currently still have to declare fixtures explicitly in integration tests
9
+ # -- they do not yet inherit this setting
10
+ fixtures :all
11
+
12
+ # Add more helper methods to be used by all tests here...
13
+ end
File without changes
@@ -0,0 +1,47 @@
1
+ require 'test_helper'
2
+ #require 'abstract_unit'
3
+
4
+ class FlashRenderTest < ActionController::TestCase
5
+ class TestController < ActionController::Base
6
+ def render_with_alert
7
+ render :inline => "hello", :alert => "Beware the nowheres!"
8
+ end
9
+
10
+ def render_with_notice
11
+ render :inline => "hello", :notice => "Good luck in the somewheres!"
12
+ end
13
+
14
+ def render_with_other_flashes
15
+ render :inline => "hello", :flash => { :joyride => "Horses!" }
16
+ end
17
+
18
+ def rescue_action(e)
19
+ raise unless ActionView::MissingTemplate === e
20
+ end
21
+ end
22
+
23
+ tests TestController
24
+
25
+ def setup
26
+ Rails.application.routes.draw do
27
+ match ':action', :to => FlashRenderTest::TestController
28
+ end
29
+ @routes = Rails.application.routes
30
+ end
31
+
32
+ def test_render_to_with_alert
33
+ get :render_with_alert
34
+ assert_equal "Beware the nowheres!", @controller.send(:flash)[:alert]
35
+ end
36
+
37
+ def test_render_to_with_notice
38
+ get :render_with_notice
39
+ assert_equal "Good luck in the somewheres!", @controller.send(:flash)[:notice]
40
+ end
41
+
42
+ def test_render_to_with_other_flashes
43
+ get :render_with_other_flashes
44
+ assert_equal "Horses!", @controller.send(:flash)[:joyride]
45
+ end
46
+
47
+ end
@@ -0,0 +1,10 @@
1
+ ENV['RAILS_ENV'] = 'test'
2
+ require 'dummy/config/environment'
3
+ require 'test/unit'
4
+
5
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
7
+ require 'flash_render'
8
+
9
+ class Test::Unit::TestCase
10
+ end
metadata ADDED
@@ -0,0 +1,170 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: flash_render
3
+ version: !ruby/object:Gem::Version
4
+ hash: 21
5
+ prerelease: false
6
+ segments:
7
+ - 1
8
+ - 0
9
+ - 1
10
+ version: 1.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Adam Hunter
14
+ - P.B.F.
15
+ autorequire:
16
+ bindir: bin
17
+ cert_chain: []
18
+
19
+ date: 2010-08-16 00:00:00 -04:00
20
+ default_executable:
21
+ dependencies:
22
+ - !ruby/object:Gem::Dependency
23
+ name: rails
24
+ prerelease: false
25
+ requirement: &id001 !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ">="
29
+ - !ruby/object:Gem::Version
30
+ hash: 19
31
+ segments:
32
+ - 2
33
+ - 3
34
+ - 8
35
+ version: 2.3.8
36
+ type: :runtime
37
+ version_requirements: *id001
38
+ - !ruby/object:Gem::Dependency
39
+ name: redgreen
40
+ prerelease: false
41
+ requirement: &id002 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ hash: 3
47
+ segments:
48
+ - 0
49
+ version: "0"
50
+ type: :development
51
+ version_requirements: *id002
52
+ - !ruby/object:Gem::Dependency
53
+ name: bundler
54
+ prerelease: false
55
+ requirement: &id003 !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ hash: 15424063
61
+ segments:
62
+ - 1
63
+ - 0
64
+ - 0
65
+ - rc
66
+ - 5
67
+ version: 1.0.0.rc.5
68
+ type: :development
69
+ version_requirements: *id003
70
+ description: Inspired by '_P.B.F._' at http://bit.ly/flash_render I use the `flash.now[:alert] and render` pattern all the time and wanted an easy way to share it with my apps.
71
+ email:
72
+ - adamhunter@me.com
73
+ executables: []
74
+
75
+ extensions: []
76
+
77
+ extra_rdoc_files: []
78
+
79
+ files:
80
+ - .gitignore
81
+ - Gemfile
82
+ - Gemfile.lock
83
+ - README.textile
84
+ - Rakefile
85
+ - flash_render.gemspec
86
+ - lib/flash_render.rb
87
+ - lib/flash_render/railtie.rb
88
+ - lib/flash_render/version.rb
89
+ - test/dummy/.gitignore
90
+ - test/dummy/README
91
+ - test/dummy/Rakefile
92
+ - test/dummy/app/controllers/application_controller.rb
93
+ - test/dummy/app/helpers/application_helper.rb
94
+ - test/dummy/app/views/layouts/application.html.erb
95
+ - test/dummy/config.ru
96
+ - test/dummy/config/application.rb
97
+ - test/dummy/config/boot.rb
98
+ - test/dummy/config/database.yml
99
+ - test/dummy/config/environment.rb
100
+ - test/dummy/config/environments/development.rb
101
+ - test/dummy/config/environments/production.rb
102
+ - test/dummy/config/environments/test.rb
103
+ - test/dummy/config/initializers/backtrace_silencers.rb
104
+ - test/dummy/config/initializers/inflections.rb
105
+ - test/dummy/config/initializers/mime_types.rb
106
+ - test/dummy/config/initializers/secret_token.rb
107
+ - test/dummy/config/initializers/session_store.rb
108
+ - test/dummy/config/locales/en.yml
109
+ - test/dummy/config/routes.rb
110
+ - test/dummy/db/seeds.rb
111
+ - test/dummy/doc/README_FOR_APP
112
+ - test/dummy/lib/tasks/.gitkeep
113
+ - test/dummy/public/404.html
114
+ - test/dummy/public/422.html
115
+ - test/dummy/public/500.html
116
+ - test/dummy/public/favicon.ico
117
+ - test/dummy/public/images/rails.png
118
+ - test/dummy/public/index.html
119
+ - test/dummy/public/javascripts/application.js
120
+ - test/dummy/public/javascripts/controls.js
121
+ - test/dummy/public/javascripts/dragdrop.js
122
+ - test/dummy/public/javascripts/effects.js
123
+ - test/dummy/public/javascripts/prototype.js
124
+ - test/dummy/public/javascripts/rails.js
125
+ - test/dummy/public/robots.txt
126
+ - test/dummy/public/stylesheets/.gitkeep
127
+ - test/dummy/script/rails
128
+ - test/dummy/test/performance/browsing_test.rb
129
+ - test/dummy/test/test_helper.rb
130
+ - test/dummy/vendor/plugins/.gitkeep
131
+ - test/flash_render_test.rb
132
+ - test/test_helper.rb
133
+ has_rdoc: true
134
+ homepage: http://rubygems.org/gems/flash_render
135
+ licenses: []
136
+
137
+ post_install_message:
138
+ rdoc_options: []
139
+
140
+ require_paths:
141
+ - lib
142
+ required_ruby_version: !ruby/object:Gem::Requirement
143
+ none: false
144
+ requirements:
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ hash: 3
148
+ segments:
149
+ - 0
150
+ version: "0"
151
+ required_rubygems_version: !ruby/object:Gem::Requirement
152
+ none: false
153
+ requirements:
154
+ - - ">="
155
+ - !ruby/object:Gem::Version
156
+ hash: 23
157
+ segments:
158
+ - 1
159
+ - 3
160
+ - 6
161
+ version: 1.3.6
162
+ requirements: []
163
+
164
+ rubyforge_project: flash_render
165
+ rubygems_version: 1.3.7
166
+ signing_key:
167
+ specification_version: 3
168
+ summary: Updates render to use flashes like redirect_to
169
+ test_files: []
170
+