csv_builder 1.1.7 → 2.0.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 (61) hide show
  1. data/CHANGELOG.rdoc +10 -0
  2. data/README.md +99 -0
  3. data/Rakefile +22 -1
  4. data/VERSION +1 -0
  5. data/csv_builder.gemspec +116 -0
  6. data/lib/csv_builder.rb +13 -63
  7. data/lib/csv_builder/railtie.rb +5 -0
  8. data/lib/csv_builder/template_handler.rb +60 -0
  9. data/lib/{transliterating_filter.rb → csv_builder/transliterating_filter.rb} +3 -2
  10. data/rails/init.rb +1 -1
  11. data/spec/controllers/csv_builder_spec.rb +68 -0
  12. data/spec/rails_app/.gitignore +5 -0
  13. data/spec/rails_app/Gemfile +12 -0
  14. data/spec/rails_app/README +256 -0
  15. data/spec/rails_app/Rakefile +7 -0
  16. data/spec/rails_app/app/controllers/application_controller.rb +3 -0
  17. data/spec/rails_app/app/helpers/application_helper.rb +2 -0
  18. data/spec/rails_app/app/views/layouts/application.html.erb +14 -0
  19. data/spec/rails_app/config.ru +4 -0
  20. data/spec/rails_app/config/application.rb +42 -0
  21. data/spec/rails_app/config/boot.rb +6 -0
  22. data/spec/rails_app/config/database.yml +22 -0
  23. data/spec/rails_app/config/environment.rb +5 -0
  24. data/spec/rails_app/config/environments/development.rb +26 -0
  25. data/spec/rails_app/config/environments/production.rb +49 -0
  26. data/spec/rails_app/config/environments/test.rb +35 -0
  27. data/spec/rails_app/config/initializers/backtrace_silencers.rb +7 -0
  28. data/spec/rails_app/config/initializers/inflections.rb +10 -0
  29. data/spec/rails_app/config/initializers/mime_types.rb +5 -0
  30. data/spec/rails_app/config/initializers/secret_token.rb +7 -0
  31. data/spec/rails_app/config/initializers/session_store.rb +8 -0
  32. data/spec/rails_app/config/locales/en.yml +5 -0
  33. data/spec/rails_app/config/routes.rb +58 -0
  34. data/spec/rails_app/db/seeds.rb +7 -0
  35. data/spec/rails_app/doc/README_FOR_APP +2 -0
  36. data/spec/rails_app/lib/tasks/.gitkeep +0 -0
  37. data/spec/rails_app/public/404.html +26 -0
  38. data/spec/rails_app/public/422.html +26 -0
  39. data/spec/rails_app/public/500.html +26 -0
  40. data/spec/rails_app/public/favicon.ico +0 -0
  41. data/spec/rails_app/public/images/rails.png +0 -0
  42. data/spec/rails_app/public/index.html +239 -0
  43. data/spec/rails_app/public/javascripts/application.js +2 -0
  44. data/spec/rails_app/public/javascripts/controls.js +965 -0
  45. data/spec/rails_app/public/javascripts/dragdrop.js +974 -0
  46. data/spec/rails_app/public/javascripts/effects.js +1123 -0
  47. data/spec/rails_app/public/javascripts/prototype.js +6001 -0
  48. data/spec/rails_app/public/javascripts/rails.js +191 -0
  49. data/spec/rails_app/public/robots.txt +5 -0
  50. data/spec/rails_app/public/stylesheets/.gitkeep +0 -0
  51. data/spec/rails_app/script/rails +6 -0
  52. data/spec/rails_app/test/performance/browsing_test.rb +9 -0
  53. data/spec/rails_app/test/test_helper.rb +13 -0
  54. data/spec/rails_app/vendor/plugins/.gitkeep +0 -0
  55. data/spec/spec_helper.rb +20 -0
  56. data/spec/templates/csv_builder_reports/complex.csv.csvbuilder +3 -0
  57. data/spec/templates/csv_builder_reports/encoding.csv.csvbuilder +1 -0
  58. data/spec/templates/csv_builder_reports/simple.csv.csvbuilder +1 -0
  59. data/spec/templates/csv_builder_reports/simple.html.erb +1 -0
  60. metadata +106 -33
  61. data/README.rdoc +0 -74
@@ -0,0 +1,191 @@
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
+
176
+ Ajax.Responders.register({
177
+ onCreate: function(request) {
178
+ var csrf_meta_tag = $$('meta[name=csrf-token]')[0];
179
+
180
+ if (csrf_meta_tag) {
181
+ var header = 'X-CSRF-Token',
182
+ token = csrf_meta_tag.readAttribute('content');
183
+
184
+ if (!request.options.requestHeaders) {
185
+ request.options.requestHeaders = {};
186
+ }
187
+ request.options.requestHeaders[header] = token;
188
+ }
189
+ }
190
+ });
191
+ })();
@@ -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: /
@@ -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,20 @@
1
+ # encoding: utf-8
2
+
3
+ ENV["RAILS_ENV"] ||= 'test'
4
+ rails_root = File.expand_path('../rails_app', __FILE__)
5
+ require rails_root + '/config/environment.rb'
6
+
7
+ TEST_DATA = [
8
+ ['Lorem', 'ipsum'],
9
+ ['Lorem ipsum dolor sit amet,' 'consectetur adipiscing elit. Sed id '],
10
+ ['augue! "3" !@#$^&*()_+_', 'sed risus laoreet condimentum ac nec dui.'],
11
+ ['\'Aenean sagittis lorem ac', 'lorem comm<s>odo nec eleifend risus']
12
+ ]
13
+
14
+ def generate(options = {}, data = TEST_DATA)
15
+ CsvBuilder::CSV_LIB.generate(options) do |csv|
16
+ data.each do |row|
17
+ csv << row
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,3 @@
1
+ @data.each do |row|
2
+ csv << row
3
+ end
@@ -0,0 +1 @@
1
+ csv << ['ąčęėįšųūž']
@@ -0,0 +1 @@
1
+ csv << [ 'cell 1', 'cell 2' ]
metadata CHANGED
@@ -1,73 +1,146 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: csv_builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.7
4
+ hash: 15
5
+ prerelease:
6
+ segments:
7
+ - 2
8
+ - 0
9
+ - 0
10
+ version: 2.0.0
5
11
  platform: ruby
6
12
  authors:
7
13
  - Econsultancy
14
+ - Vidmantas Kabosis
15
+ - Gabe da Silveira
8
16
  autorequire:
9
17
  bindir: bin
10
18
  cert_chain: []
11
19
 
12
- date: 2009-12-29 00:00:00 -08:00
20
+ date: 2011-04-22 00:00:00 -07:00
13
21
  default_executable:
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
16
- name: fastercsv
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
20
- requirements:
21
- - - ">="
22
- - !ruby/object:Gem::Version
23
- version: "0"
24
- version:
25
- description: CSV template Rails plugin
26
- email: code@econsultancy.com
22
+ dependencies: []
23
+
24
+ description: CSV template handler for Rails. Enables :format => 'csv' in controllers, with templates of the form report.csv.csvbuilder.
25
+ email: gabe@websaviour.com
27
26
  executables: []
28
27
 
29
28
  extensions: []
30
29
 
31
30
  extra_rdoc_files:
32
- - README.rdoc
33
- - CHANGELOG.rdoc
34
- - MIT-LICENSE
31
+ - README.md
35
32
  files:
36
- - MIT-LICENSE
37
- - README.rdoc
38
33
  - CHANGELOG.rdoc
34
+ - MIT-LICENSE
35
+ - README.md
39
36
  - Rakefile
40
- - rails/init.rb
37
+ - VERSION
38
+ - csv_builder.gemspec
41
39
  - lib/csv_builder.rb
42
- - lib/transliterating_filter.rb
40
+ - lib/csv_builder/railtie.rb
41
+ - lib/csv_builder/template_handler.rb
42
+ - lib/csv_builder/transliterating_filter.rb
43
+ - rails/init.rb
44
+ - spec/controllers/csv_builder_spec.rb
45
+ - spec/rails_app/.gitignore
46
+ - spec/rails_app/Gemfile
47
+ - spec/rails_app/README
48
+ - spec/rails_app/Rakefile
49
+ - spec/rails_app/app/controllers/application_controller.rb
50
+ - spec/rails_app/app/helpers/application_helper.rb
51
+ - spec/rails_app/app/views/layouts/application.html.erb
52
+ - spec/rails_app/config.ru
53
+ - spec/rails_app/config/application.rb
54
+ - spec/rails_app/config/boot.rb
55
+ - spec/rails_app/config/database.yml
56
+ - spec/rails_app/config/environment.rb
57
+ - spec/rails_app/config/environments/development.rb
58
+ - spec/rails_app/config/environments/production.rb
59
+ - spec/rails_app/config/environments/test.rb
60
+ - spec/rails_app/config/initializers/backtrace_silencers.rb
61
+ - spec/rails_app/config/initializers/inflections.rb
62
+ - spec/rails_app/config/initializers/mime_types.rb
63
+ - spec/rails_app/config/initializers/secret_token.rb
64
+ - spec/rails_app/config/initializers/session_store.rb
65
+ - spec/rails_app/config/locales/en.yml
66
+ - spec/rails_app/config/routes.rb
67
+ - spec/rails_app/db/seeds.rb
68
+ - spec/rails_app/doc/README_FOR_APP
69
+ - spec/rails_app/lib/tasks/.gitkeep
70
+ - spec/rails_app/public/404.html
71
+ - spec/rails_app/public/422.html
72
+ - spec/rails_app/public/500.html
73
+ - spec/rails_app/public/favicon.ico
74
+ - spec/rails_app/public/images/rails.png
75
+ - spec/rails_app/public/index.html
76
+ - spec/rails_app/public/javascripts/application.js
77
+ - spec/rails_app/public/javascripts/controls.js
78
+ - spec/rails_app/public/javascripts/dragdrop.js
79
+ - spec/rails_app/public/javascripts/effects.js
80
+ - spec/rails_app/public/javascripts/prototype.js
81
+ - spec/rails_app/public/javascripts/rails.js
82
+ - spec/rails_app/public/robots.txt
83
+ - spec/rails_app/public/stylesheets/.gitkeep
84
+ - spec/rails_app/script/rails
85
+ - spec/rails_app/test/performance/browsing_test.rb
86
+ - spec/rails_app/test/test_helper.rb
87
+ - spec/rails_app/vendor/plugins/.gitkeep
88
+ - spec/spec_helper.rb
89
+ - spec/templates/csv_builder_reports/complex.csv.csvbuilder
90
+ - spec/templates/csv_builder_reports/encoding.csv.csvbuilder
91
+ - spec/templates/csv_builder_reports/simple.csv.csvbuilder
92
+ - spec/templates/csv_builder_reports/simple.html.erb
43
93
  has_rdoc: true
44
94
  homepage: http://github.com/dasil003/csv_builder
45
- licenses: []
46
-
95
+ licenses:
96
+ - MIT
47
97
  post_install_message:
48
- rdoc_options:
49
- - --main
50
- - README.rdoc
98
+ rdoc_options: []
99
+
51
100
  require_paths:
52
101
  - lib
53
102
  required_ruby_version: !ruby/object:Gem::Requirement
103
+ none: false
54
104
  requirements:
55
105
  - - ">="
56
106
  - !ruby/object:Gem::Version
107
+ hash: 3
108
+ segments:
109
+ - 0
57
110
  version: "0"
58
- version:
59
111
  required_rubygems_version: !ruby/object:Gem::Requirement
112
+ none: false
60
113
  requirements:
61
114
  - - ">="
62
115
  - !ruby/object:Gem::Version
116
+ hash: 3
117
+ segments:
118
+ - 0
63
119
  version: "0"
64
- version:
65
120
  requirements: []
66
121
 
67
122
  rubyforge_project:
68
- rubygems_version: 1.3.5
123
+ rubygems_version: 1.5.2
69
124
  signing_key:
70
125
  specification_version: 3
71
- summary: CSV template Rails plugin
72
- test_files: []
73
-
126
+ summary: CSV template handler for Rails
127
+ test_files:
128
+ - spec/controllers/csv_builder_spec.rb
129
+ - spec/rails_app/app/controllers/application_controller.rb
130
+ - spec/rails_app/app/helpers/application_helper.rb
131
+ - spec/rails_app/config/application.rb
132
+ - spec/rails_app/config/boot.rb
133
+ - spec/rails_app/config/environment.rb
134
+ - spec/rails_app/config/environments/development.rb
135
+ - spec/rails_app/config/environments/production.rb
136
+ - spec/rails_app/config/environments/test.rb
137
+ - spec/rails_app/config/initializers/backtrace_silencers.rb
138
+ - spec/rails_app/config/initializers/inflections.rb
139
+ - spec/rails_app/config/initializers/mime_types.rb
140
+ - spec/rails_app/config/initializers/secret_token.rb
141
+ - spec/rails_app/config/initializers/session_store.rb
142
+ - spec/rails_app/config/routes.rb
143
+ - spec/rails_app/db/seeds.rb
144
+ - spec/rails_app/test/performance/browsing_test.rb
145
+ - spec/rails_app/test/test_helper.rb
146
+ - spec/spec_helper.rb