loop_dance 0.2.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.
Files changed (56) hide show
  1. data/.document +5 -0
  2. data/Gemfile +18 -0
  3. data/LICENSE.txt +20 -0
  4. data/README.rdoc +54 -0
  5. data/Rakefile +60 -0
  6. data/VERSION +1 -0
  7. data/init.rb +1 -0
  8. data/lib/loop_dance/commands.rb +91 -0
  9. data/lib/loop_dance/controller.rb +55 -0
  10. data/lib/loop_dance/dancer.rb +27 -0
  11. data/lib/loop_dance/railtie.rb +27 -0
  12. data/lib/loop_dance/task.rb +23 -0
  13. data/lib/loop_dance.rb +19 -0
  14. data/loop_dance.gemspec +142 -0
  15. data/rails/init.rb +1 -0
  16. data/spec/dancer_spec.rb +85 -0
  17. data/spec/spec_helper.rb +13 -0
  18. data/spec/task_spec.rb +42 -0
  19. data/test/rails/.gitignore +4 -0
  20. data/test/rails/Gemfile +35 -0
  21. data/test/rails/Rakefile +7 -0
  22. data/test/rails/app/controllers/application_controller.rb +3 -0
  23. data/test/rails/config/application.rb +42 -0
  24. data/test/rails/config/boot.rb +13 -0
  25. data/test/rails/config/database.yml +22 -0
  26. data/test/rails/config/environment.rb +5 -0
  27. data/test/rails/config/environments/development.rb +26 -0
  28. data/test/rails/config/environments/production.rb +49 -0
  29. data/test/rails/config/environments/test.rb +35 -0
  30. data/test/rails/config/initializers/backtrace_silencers.rb +7 -0
  31. data/test/rails/config/initializers/inflections.rb +10 -0
  32. data/test/rails/config/initializers/mime_types.rb +5 -0
  33. data/test/rails/config/initializers/secret_token.rb +7 -0
  34. data/test/rails/config/initializers/session_store.rb +8 -0
  35. data/test/rails/config/locales/en.yml +5 -0
  36. data/test/rails/config/routes.rb +58 -0
  37. data/test/rails/config.ru +4 -0
  38. data/test/rails/db/seeds.rb +7 -0
  39. data/test/rails/lib/dancers.rb +18 -0
  40. data/test/rails/lib/tasks/.gitkeep +0 -0
  41. data/test/rails/public/404.html +26 -0
  42. data/test/rails/public/422.html +26 -0
  43. data/test/rails/public/500.html +26 -0
  44. data/test/rails/public/favicon.ico +0 -0
  45. data/test/rails/public/images/rails.png +0 -0
  46. data/test/rails/public/index.html +239 -0
  47. data/test/rails/public/javascripts/application.js +2 -0
  48. data/test/rails/public/javascripts/controls.js +965 -0
  49. data/test/rails/public/javascripts/dragdrop.js +974 -0
  50. data/test/rails/public/javascripts/effects.js +1123 -0
  51. data/test/rails/public/javascripts/prototype.js +6001 -0
  52. data/test/rails/public/javascripts/rails.js +175 -0
  53. data/test/rails/public/robots.txt +5 -0
  54. data/test/rails/public/stylesheets/.gitkeep +0 -0
  55. data/test/rails/script/rails +6 -0
  56. metadata +285 -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'
metadata ADDED
@@ -0,0 +1,285 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: loop_dance
3
+ version: !ruby/object:Gem::Version
4
+ hash: 23
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 2
9
+ - 0
10
+ version: 0.2.0
11
+ platform: ruby
12
+ authors:
13
+ - Danil Pismenny
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-01-01 00:00:00 +03:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ prerelease: false
23
+ name: activesupport
24
+ version_requirements: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 7
30
+ segments:
31
+ - 3
32
+ - 0
33
+ version: "3.0"
34
+ requirement: *id001
35
+ type: :runtime
36
+ - !ruby/object:Gem::Dependency
37
+ prerelease: false
38
+ name: i18n
39
+ version_requirements: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ hash: 3
45
+ segments:
46
+ - 0
47
+ version: "0"
48
+ requirement: *id002
49
+ type: :runtime
50
+ - !ruby/object:Gem::Dependency
51
+ prerelease: false
52
+ name: daemon_controller
53
+ version_requirements: &id003 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ hash: 3
59
+ segments:
60
+ - 0
61
+ version: "0"
62
+ requirement: *id003
63
+ type: :runtime
64
+ - !ruby/object:Gem::Dependency
65
+ prerelease: false
66
+ name: bundler
67
+ version_requirements: &id004 !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ~>
71
+ - !ruby/object:Gem::Version
72
+ hash: 23
73
+ segments:
74
+ - 1
75
+ - 0
76
+ - 0
77
+ version: 1.0.0
78
+ requirement: *id004
79
+ type: :development
80
+ - !ruby/object:Gem::Dependency
81
+ prerelease: false
82
+ name: jeweler
83
+ version_requirements: &id005 !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ~>
87
+ - !ruby/object:Gem::Version
88
+ hash: 7
89
+ segments:
90
+ - 1
91
+ - 5
92
+ - 2
93
+ version: 1.5.2
94
+ requirement: *id005
95
+ type: :development
96
+ - !ruby/object:Gem::Dependency
97
+ prerelease: false
98
+ name: rcov
99
+ version_requirements: &id006 !ruby/object:Gem::Requirement
100
+ none: false
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ hash: 3
105
+ segments:
106
+ - 0
107
+ version: "0"
108
+ requirement: *id006
109
+ type: :development
110
+ - !ruby/object:Gem::Dependency
111
+ prerelease: false
112
+ name: ruby-debug
113
+ version_requirements: &id007 !ruby/object:Gem::Requirement
114
+ none: false
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ hash: 3
119
+ segments:
120
+ - 0
121
+ version: "0"
122
+ requirement: *id007
123
+ type: :development
124
+ - !ruby/object:Gem::Dependency
125
+ prerelease: false
126
+ name: rspec
127
+ version_requirements: &id008 !ruby/object:Gem::Requirement
128
+ none: false
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ hash: 3
133
+ segments:
134
+ - 0
135
+ version: "0"
136
+ requirement: *id008
137
+ type: :development
138
+ - !ruby/object:Gem::Dependency
139
+ prerelease: false
140
+ name: shoulda
141
+ version_requirements: &id009 !ruby/object:Gem::Requirement
142
+ none: false
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ hash: 3
147
+ segments:
148
+ - 0
149
+ version: "0"
150
+ requirement: *id009
151
+ type: :development
152
+ - !ruby/object:Gem::Dependency
153
+ prerelease: false
154
+ name: daemon_controller
155
+ version_requirements: &id010 !ruby/object:Gem::Requirement
156
+ none: false
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ hash: 29
161
+ segments:
162
+ - 0
163
+ - 2
164
+ - 5
165
+ version: 0.2.5
166
+ requirement: *id010
167
+ type: :runtime
168
+ description: Really easy setup. Auto-start daaemon at rails server startup. Rake's tasks based control.
169
+ email: danil@orionet.ru
170
+ executables: []
171
+
172
+ extensions: []
173
+
174
+ extra_rdoc_files:
175
+ - LICENSE.txt
176
+ - README.rdoc
177
+ files:
178
+ - .document
179
+ - Gemfile
180
+ - LICENSE.txt
181
+ - README.rdoc
182
+ - Rakefile
183
+ - VERSION
184
+ - init.rb
185
+ - lib/loop_dance.rb
186
+ - lib/loop_dance/commands.rb
187
+ - lib/loop_dance/controller.rb
188
+ - lib/loop_dance/dancer.rb
189
+ - lib/loop_dance/railtie.rb
190
+ - lib/loop_dance/task.rb
191
+ - loop_dance.gemspec
192
+ - rails/init.rb
193
+ - spec/dancer_spec.rb
194
+ - spec/spec_helper.rb
195
+ - spec/task_spec.rb
196
+ - test/rails/.gitignore
197
+ - test/rails/Gemfile
198
+ - test/rails/Rakefile
199
+ - test/rails/app/controllers/application_controller.rb
200
+ - test/rails/config.ru
201
+ - test/rails/config/application.rb
202
+ - test/rails/config/boot.rb
203
+ - test/rails/config/database.yml
204
+ - test/rails/config/environment.rb
205
+ - test/rails/config/environments/development.rb
206
+ - test/rails/config/environments/production.rb
207
+ - test/rails/config/environments/test.rb
208
+ - test/rails/config/initializers/backtrace_silencers.rb
209
+ - test/rails/config/initializers/inflections.rb
210
+ - test/rails/config/initializers/mime_types.rb
211
+ - test/rails/config/initializers/secret_token.rb
212
+ - test/rails/config/initializers/session_store.rb
213
+ - test/rails/config/locales/en.yml
214
+ - test/rails/config/routes.rb
215
+ - test/rails/db/seeds.rb
216
+ - test/rails/lib/dancers.rb
217
+ - test/rails/lib/tasks/.gitkeep
218
+ - test/rails/public/404.html
219
+ - test/rails/public/422.html
220
+ - test/rails/public/500.html
221
+ - test/rails/public/favicon.ico
222
+ - test/rails/public/images/rails.png
223
+ - test/rails/public/index.html
224
+ - test/rails/public/javascripts/application.js
225
+ - test/rails/public/javascripts/controls.js
226
+ - test/rails/public/javascripts/dragdrop.js
227
+ - test/rails/public/javascripts/effects.js
228
+ - test/rails/public/javascripts/prototype.js
229
+ - test/rails/public/javascripts/rails.js
230
+ - test/rails/public/robots.txt
231
+ - test/rails/public/stylesheets/.gitkeep
232
+ - test/rails/script/rails
233
+ has_rdoc: true
234
+ homepage: http://github.com/dapi/loop_dance
235
+ licenses:
236
+ - MIT
237
+ post_install_message:
238
+ rdoc_options: []
239
+
240
+ require_paths:
241
+ - lib
242
+ required_ruby_version: !ruby/object:Gem::Requirement
243
+ none: false
244
+ requirements:
245
+ - - ">="
246
+ - !ruby/object:Gem::Version
247
+ hash: 3
248
+ segments:
249
+ - 0
250
+ version: "0"
251
+ required_rubygems_version: !ruby/object:Gem::Requirement
252
+ none: false
253
+ requirements:
254
+ - - ">="
255
+ - !ruby/object:Gem::Version
256
+ hash: 3
257
+ segments:
258
+ - 0
259
+ version: "0"
260
+ requirements: []
261
+
262
+ rubyforge_project:
263
+ rubygems_version: 1.3.7
264
+ signing_key:
265
+ specification_version: 3
266
+ summary: Simple auto-starting daemon based on the looper and daemon_controller
267
+ test_files:
268
+ - spec/dancer_spec.rb
269
+ - spec/spec_helper.rb
270
+ - spec/task_spec.rb
271
+ - test/rails/app/controllers/application_controller.rb
272
+ - test/rails/config/application.rb
273
+ - test/rails/config/boot.rb
274
+ - test/rails/config/environment.rb
275
+ - test/rails/config/environments/development.rb
276
+ - test/rails/config/environments/production.rb
277
+ - test/rails/config/environments/test.rb
278
+ - test/rails/config/initializers/backtrace_silencers.rb
279
+ - test/rails/config/initializers/inflections.rb
280
+ - test/rails/config/initializers/mime_types.rb
281
+ - test/rails/config/initializers/secret_token.rb
282
+ - test/rails/config/initializers/session_store.rb
283
+ - test/rails/config/routes.rb
284
+ - test/rails/db/seeds.rb
285
+ - test/rails/lib/dancers.rb