zfben_rails_jobs 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 (42) hide show
  1. data/.gitignore +6 -0
  2. data/Gemfile +4 -0
  3. data/README.rdoc +21 -0
  4. data/Rakefile +14 -0
  5. data/lib/tasks.rb +37 -0
  6. data/lib/zfben_rails_jobs.rb +138 -0
  7. data/test/dummy/.gitignore +1 -0
  8. data/test/dummy/Rakefile +7 -0
  9. data/test/dummy/app/controllers/application_controller.rb +3 -0
  10. data/test/dummy/app/helpers/application_helper.rb +2 -0
  11. data/test/dummy/app/models/example.rb +12 -0
  12. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  13. data/test/dummy/config/application.rb +20 -0
  14. data/test/dummy/config/boot.rb +10 -0
  15. data/test/dummy/config/database.yml +22 -0
  16. data/test/dummy/config/environment.rb +5 -0
  17. data/test/dummy/config/environments/development.rb +23 -0
  18. data/test/dummy/config/environments/production.rb +49 -0
  19. data/test/dummy/config/environments/test.rb +25 -0
  20. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  21. data/test/dummy/config/initializers/inflections.rb +10 -0
  22. data/test/dummy/config/initializers/mime_types.rb +5 -0
  23. data/test/dummy/config/initializers/secret_token.rb +7 -0
  24. data/test/dummy/config/initializers/session_store.rb +8 -0
  25. data/test/dummy/config/locales/en.yml +5 -0
  26. data/test/dummy/config/routes.rb +58 -0
  27. data/test/dummy/config.ru +4 -0
  28. data/test/dummy/public/404.html +26 -0
  29. data/test/dummy/public/422.html +26 -0
  30. data/test/dummy/public/500.html +26 -0
  31. data/test/dummy/public/favicon.ico +0 -0
  32. data/test/dummy/public/javascripts/application.js +2 -0
  33. data/test/dummy/public/javascripts/controls.js +965 -0
  34. data/test/dummy/public/javascripts/dragdrop.js +974 -0
  35. data/test/dummy/public/javascripts/effects.js +1123 -0
  36. data/test/dummy/public/javascripts/prototype.js +6001 -0
  37. data/test/dummy/public/javascripts/rails.js +202 -0
  38. data/test/dummy/public/stylesheets/.gitkeep +0 -0
  39. data/test/dummy/script/rails +6 -0
  40. data/test/jobs_test.rb +60 -0
  41. data/zfben_rails_jobs.gemspec +33 -0
  42. metadata +132 -0
@@ -0,0 +1,202 @@
1
+ (function() {
2
+ Ajax.Responders.register({
3
+ onCreate: function(request) {
4
+ var token = $$('meta[name=csrf-token]')[0];
5
+ if (token) {
6
+ if (!request.options.requestHeaders) request.options.requestHeaders = {};
7
+ request.options.requestHeaders['X-CSRF-Token'] = token.readAttribute('content');
8
+ }
9
+ }
10
+ });
11
+
12
+ // Technique from Juriy Zaytsev
13
+ // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
14
+ function isEventSupported(eventName) {
15
+ var el = document.createElement('div');
16
+ eventName = 'on' + eventName;
17
+ var isSupported = (eventName in el);
18
+ if (!isSupported) {
19
+ el.setAttribute(eventName, 'return;');
20
+ isSupported = typeof el[eventName] == 'function';
21
+ }
22
+ el = null;
23
+ return isSupported;
24
+ }
25
+
26
+ function isForm(element) {
27
+ return Object.isElement(element) && element.nodeName.toUpperCase() == 'FORM';
28
+ }
29
+
30
+ function isInput(element) {
31
+ if (Object.isElement(element)) {
32
+ var name = element.nodeName.toUpperCase();
33
+ return name == 'INPUT' || name == 'SELECT' || name == 'TEXTAREA';
34
+ }
35
+ else return false;
36
+ }
37
+
38
+ var submitBubbles = isEventSupported('submit'),
39
+ changeBubbles = isEventSupported('change');
40
+
41
+ if (!submitBubbles || !changeBubbles) {
42
+ // augment the Event.Handler class to observe custom events when needed
43
+ Event.Handler.prototype.initialize = Event.Handler.prototype.initialize.wrap(
44
+ function(init, element, eventName, selector, callback) {
45
+ init(element, eventName, selector, callback);
46
+ // is the handler being attached to an element that doesn't support this event?
47
+ if ( (!submitBubbles && this.eventName == 'submit' && !isForm(this.element)) ||
48
+ (!changeBubbles && this.eventName == 'change' && !isInput(this.element)) ) {
49
+ // "submit" => "emulated:submit"
50
+ this.eventName = 'emulated:' + this.eventName;
51
+ }
52
+ }
53
+ );
54
+ }
55
+
56
+ if (!submitBubbles) {
57
+ // discover forms on the page by observing focus events which always bubble
58
+ document.on('focusin', 'form', function(focusEvent, form) {
59
+ // special handler for the real "submit" event (one-time operation)
60
+ if (!form.retrieve('emulated:submit')) {
61
+ form.on('submit', function(submitEvent) {
62
+ var emulated = form.fire('emulated:submit', submitEvent, true);
63
+ // if custom event received preventDefault, cancel the real one too
64
+ if (emulated.returnValue === false) submitEvent.preventDefault();
65
+ });
66
+ form.store('emulated:submit', true);
67
+ }
68
+ });
69
+ }
70
+
71
+ if (!changeBubbles) {
72
+ // discover form inputs on the page
73
+ document.on('focusin', 'input, select, textarea', function(focusEvent, input) {
74
+ // special handler for real "change" events
75
+ if (!input.retrieve('emulated:change')) {
76
+ input.on('change', function(changeEvent) {
77
+ input.fire('emulated:change', changeEvent, true);
78
+ });
79
+ input.store('emulated:change', true);
80
+ }
81
+ });
82
+ }
83
+
84
+ function handleRemote(element) {
85
+ var method, url, params;
86
+
87
+ var event = element.fire("ajax:before");
88
+ if (event.stopped) return false;
89
+
90
+ if (element.tagName.toLowerCase() === 'form') {
91
+ method = element.readAttribute('method') || 'post';
92
+ url = element.readAttribute('action');
93
+ // serialize the form with respect to the submit button that was pressed
94
+ params = element.serialize({ submit: element.retrieve('rails:submit-button') });
95
+ // clear the pressed submit button information
96
+ element.store('rails:submit-button', null);
97
+ } else {
98
+ method = element.readAttribute('data-method') || 'get';
99
+ url = element.readAttribute('href');
100
+ params = {};
101
+ }
102
+
103
+ new Ajax.Request(url, {
104
+ method: method,
105
+ parameters: params,
106
+ evalScripts: true,
107
+
108
+ onCreate: function(response) { element.fire("ajax:create", response); },
109
+ onComplete: function(response) { element.fire("ajax:complete", response); },
110
+ onSuccess: function(response) { element.fire("ajax:success", response); },
111
+ onFailure: function(response) { element.fire("ajax:failure", response); }
112
+ });
113
+
114
+ element.fire("ajax:after");
115
+ }
116
+
117
+ function insertHiddenField(form, name, value) {
118
+ form.insert(new Element('input', { type: 'hidden', name: name, value: value }));
119
+ }
120
+
121
+ function handleMethod(element) {
122
+ var method = element.readAttribute('data-method'),
123
+ url = element.readAttribute('href'),
124
+ csrf_param = $$('meta[name=csrf-param]')[0],
125
+ csrf_token = $$('meta[name=csrf-token]')[0];
126
+
127
+ var form = new Element('form', { method: "POST", action: url, style: "display: none;" });
128
+ $(element.parentNode).insert(form);
129
+
130
+ if (method !== 'post') {
131
+ insertHiddenField(form, '_method', method);
132
+ }
133
+
134
+ if (csrf_param) {
135
+ insertHiddenField(form, csrf_param.readAttribute('content'), csrf_token.readAttribute('content'));
136
+ }
137
+
138
+ form.submit();
139
+ }
140
+
141
+ function disableFormElements(form) {
142
+ form.select('input[type=submit][data-disable-with]').each(function(input) {
143
+ input.store('rails:original-value', input.getValue());
144
+ input.setValue(input.readAttribute('data-disable-with')).disable();
145
+ });
146
+ }
147
+
148
+ function enableFormElements(form) {
149
+ form.select('input[type=submit][data-disable-with]').each(function(input) {
150
+ input.setValue(input.retrieve('rails:original-value')).enable();
151
+ });
152
+ }
153
+
154
+ function allowAction(element) {
155
+ var message = element.readAttribute('data-confirm');
156
+ return !message || confirm(message);
157
+ }
158
+
159
+ document.on('click', 'a[data-confirm], a[data-remote], a[data-method]', function(event, link) {
160
+ if (!allowAction(link)) {
161
+ event.stop();
162
+ return false;
163
+ }
164
+
165
+ if (link.readAttribute('data-remote')) {
166
+ handleRemote(link);
167
+ event.stop();
168
+ } else if (link.readAttribute('data-method')) {
169
+ handleMethod(link);
170
+ event.stop();
171
+ }
172
+ });
173
+
174
+ document.on("click", "form input[type=submit], form button[type=submit], form button:not([type])", function(event, button) {
175
+ // register the pressed submit button
176
+ event.findElement('form').store('rails:submit-button', button.name || false);
177
+ });
178
+
179
+ document.on("submit", function(event) {
180
+ var form = event.findElement();
181
+
182
+ if (!allowAction(form)) {
183
+ event.stop();
184
+ return false;
185
+ }
186
+
187
+ if (form.readAttribute('data-remote')) {
188
+ handleRemote(form);
189
+ event.stop();
190
+ } else {
191
+ disableFormElements(form);
192
+ }
193
+ });
194
+
195
+ document.on('ajax:create', 'form', function(event, form) {
196
+ if (form == event.findElement()) disableFormElements(form);
197
+ });
198
+
199
+ document.on('ajax:complete', 'form', function(event, form) {
200
+ if (form == event.findElement()) enableFormElements(form);
201
+ });
202
+ })();
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'
data/test/jobs_test.rb ADDED
@@ -0,0 +1,60 @@
1
+ require File.realpath(File.dirname(__FILE__)) << '/../lib/zfben_rails_jobs.rb'
2
+ # Configure Rails Envinronment
3
+ ENV['RAILS_ENV'] = 'test'
4
+
5
+ require File.expand_path('../dummy/config/environment.rb', __FILE__)
6
+ require 'rails/test_help'
7
+
8
+ Rails.backtrace_cleaner.remove_silencers!
9
+
10
+ class JobsTest < Test::Unit::TestCase
11
+ def test_jobs_new
12
+ assert_equal Jobs.new.list, []
13
+ assert !Jobs.new.locked?
14
+ end
15
+
16
+ def test_jobs_add
17
+ jobs = Jobs.new
18
+ assert jobs.add Example, :job_0
19
+ assert_equal jobs.list, [['Example', :job_0, nil]]
20
+ assert jobs.add Example, :job, 5
21
+ assert_equal jobs.list, [['Example', :job_0, nil], ['Example', :job, 5]]
22
+ end
23
+
24
+ def test_jobs_save
25
+ jobs = Jobs.new
26
+ jobs.add Example, :job_0
27
+ assert jobs.save
28
+ end
29
+
30
+ def test_jobs_import
31
+ jobs = Jobs.new
32
+ jobs.add Example, :job_0
33
+ jobs.save
34
+ jobs2 = Jobs.new
35
+ assert jobs2.import(jobs.id)
36
+ assert_equal jobs.data, jobs2.data
37
+ end
38
+
39
+ def test_jobs_run
40
+ jobs = Jobs.new
41
+ jobs.add Example, :job_0
42
+ jobs.add Example, :job, 1
43
+ jobs.save
44
+ assert jobs.run
45
+ assert_equal jobs.result[:successed], 2
46
+ jobs2 = Jobs.new
47
+ jobs2.import jobs.id
48
+ assert jobs2.run
49
+ assert_equal jobs.result[:successed], 2
50
+ end
51
+
52
+ def test_jobs_run_at
53
+ at = 1.seconds.from_now
54
+ jobs = Jobs.new(at)
55
+ jobs.add Example, :job_0
56
+ assert !jobs.run
57
+ sleep 2
58
+ assert jobs.run
59
+ end
60
+ end
@@ -0,0 +1,33 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "zfben_rails_jobs"
6
+ s.version = '0.0.1'
7
+ s.platform = Gem::Platform::RUBY
8
+ s.authors = ["Ben"]
9
+ s.email = ["ben@zfben.com"]
10
+ s.homepage = "https://github.com/benz303/zfben_rails_jobs"
11
+ s.summary = %q{}
12
+ s.description = %q{}
13
+ s.post_install_message =%q{********************************************************************************
14
+ Thank you for using zfben_rails_jobs!
15
+
16
+ Please follow @zfben on Twitter for announcements, updates, and news.
17
+ https://twitter.com/zfben
18
+
19
+ ********************************************************************************
20
+ }
21
+
22
+ s.files = `git ls-files`.split("\n")
23
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
24
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
25
+ s.require_paths = ["lib"]
26
+
27
+ s.required_ruby_version = '>= 1.9'
28
+
29
+ s.add_dependency 'rails', '>=3.1.0'
30
+ s.add_dependency 'uuid'
31
+ s.add_dependency 'whenever'
32
+ s.add_dependency 'rainbow'
33
+ end
metadata ADDED
@@ -0,0 +1,132 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: zfben_rails_jobs
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Ben
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-11-27 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rails
16
+ requirement: &14133520 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 3.1.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *14133520
25
+ - !ruby/object:Gem::Dependency
26
+ name: uuid
27
+ requirement: &14133140 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *14133140
36
+ - !ruby/object:Gem::Dependency
37
+ name: whenever
38
+ requirement: &14132680 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *14132680
47
+ - !ruby/object:Gem::Dependency
48
+ name: rainbow
49
+ requirement: &14132260 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *14132260
58
+ description: ''
59
+ email:
60
+ - ben@zfben.com
61
+ executables: []
62
+ extensions: []
63
+ extra_rdoc_files: []
64
+ files:
65
+ - .gitignore
66
+ - Gemfile
67
+ - README.rdoc
68
+ - Rakefile
69
+ - lib/tasks.rb
70
+ - lib/zfben_rails_jobs.rb
71
+ - test/dummy/.gitignore
72
+ - test/dummy/Rakefile
73
+ - test/dummy/app/controllers/application_controller.rb
74
+ - test/dummy/app/helpers/application_helper.rb
75
+ - test/dummy/app/models/example.rb
76
+ - test/dummy/app/views/layouts/application.html.erb
77
+ - test/dummy/config.ru
78
+ - test/dummy/config/application.rb
79
+ - test/dummy/config/boot.rb
80
+ - test/dummy/config/database.yml
81
+ - test/dummy/config/environment.rb
82
+ - test/dummy/config/environments/development.rb
83
+ - test/dummy/config/environments/production.rb
84
+ - test/dummy/config/environments/test.rb
85
+ - test/dummy/config/initializers/backtrace_silencers.rb
86
+ - test/dummy/config/initializers/inflections.rb
87
+ - test/dummy/config/initializers/mime_types.rb
88
+ - test/dummy/config/initializers/secret_token.rb
89
+ - test/dummy/config/initializers/session_store.rb
90
+ - test/dummy/config/locales/en.yml
91
+ - test/dummy/config/routes.rb
92
+ - test/dummy/public/404.html
93
+ - test/dummy/public/422.html
94
+ - test/dummy/public/500.html
95
+ - test/dummy/public/favicon.ico
96
+ - test/dummy/public/javascripts/application.js
97
+ - test/dummy/public/javascripts/controls.js
98
+ - test/dummy/public/javascripts/dragdrop.js
99
+ - test/dummy/public/javascripts/effects.js
100
+ - test/dummy/public/javascripts/prototype.js
101
+ - test/dummy/public/javascripts/rails.js
102
+ - test/dummy/public/stylesheets/.gitkeep
103
+ - test/dummy/script/rails
104
+ - test/jobs_test.rb
105
+ - zfben_rails_jobs.gemspec
106
+ homepage: https://github.com/benz303/zfben_rails_jobs
107
+ licenses: []
108
+ post_install_message: ! "********************************************************************************\n
109
+ \ Thank you for using zfben_rails_jobs!\n \n Please follow @zfben on Twitter for
110
+ announcements, updates, and news.\n https://twitter.com/zfben\n\n********************************************************************************\n"
111
+ rdoc_options: []
112
+ require_paths:
113
+ - lib
114
+ required_ruby_version: !ruby/object:Gem::Requirement
115
+ none: false
116
+ requirements:
117
+ - - ! '>='
118
+ - !ruby/object:Gem::Version
119
+ version: '1.9'
120
+ required_rubygems_version: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ requirements: []
127
+ rubyforge_project:
128
+ rubygems_version: 1.8.10
129
+ signing_key:
130
+ specification_version: 3
131
+ summary: ''
132
+ test_files: []