active_model_exporters 0.0.4 → 0.0.5
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -1
- data/README.md +15 -2
- data/lib/action_controller/exportation/mime_types.rb +1 -0
- data/lib/action_controller/exportation/renderers.rb +16 -0
- data/lib/active_model/array_exporter.rb +2 -5
- data/lib/active_model/exporter/types.rb +1 -1
- data/lib/active_model/exporter/version.rb +1 -1
- data/lib/active_model_exporters.rb +2 -11
- metadata +4 -4
- data/test/integration/action_controller/exportation/xlsx_test.rb +0 -139
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 30a964ee00e6f0e49c06fafa36d234ecc9f0c830
|
4
|
+
data.tar.gz: 4e4ccce791d424d0bc328a8233e3c7b71c624ad8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d7343fe3ab75b28039cea63a2a46a2cb3c076427ab550c06305fb60a15366a82fd068d02f1d8f1e1c696449f4d3c30123fb83a7f44a560b1e227737e2d539363
|
7
|
+
data.tar.gz: 059e57436e2e4d0fd1ac4fc9f1682d71c87660e5f20261ce192e6076328fd38fafb91082b20d605de7a82f03618eb242c8c20755cb5c531e4527d419861de1c3
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
### Version 0.0.5
|
4
|
+
* Using send_data method
|
5
|
+
* Customizable filename
|
6
|
+
* Customizable encode format
|
7
|
+
|
3
8
|
### Version 0.0.4
|
4
9
|
* Exporting to XLS format
|
5
10
|
|
@@ -14,4 +19,4 @@
|
|
14
19
|
### Version 0.0.1
|
15
20
|
* First version
|
16
21
|
* Computed properties
|
17
|
-
*
|
22
|
+
* Customizable exporter
|
data/README.md
CHANGED
@@ -50,11 +50,24 @@ end
|
|
50
50
|
```
|
51
51
|
|
52
52
|
### Custom exporter
|
53
|
-
To specify a custom exporter for
|
53
|
+
To specify a custom exporter for each object, you can do the next in your controller:
|
54
54
|
```ruby
|
55
55
|
render csv: @posts, exporter: OtherPostExporter
|
56
56
|
```
|
57
57
|
|
58
|
+
### Custom filename
|
59
|
+
By default filename is the pluralized collection type. Example: `posts.xls`.
|
60
|
+
To specify another, you can do the next:
|
61
|
+
```ruby
|
62
|
+
render xls: @posts, filename: 'super_posts.xls'
|
63
|
+
```
|
64
|
+
|
65
|
+
### Custom encode format
|
66
|
+
By default encode format is `iso-8859-1`. You can change it doing the next:
|
67
|
+
```ruby
|
68
|
+
render csv: @posts, encode: 'UTF-8'
|
69
|
+
```
|
70
|
+
|
58
71
|
### Computed properties
|
59
72
|
As `ActiveModel::Serializers` does, you can access the object being exported as `object`.
|
60
73
|
```ruby
|
@@ -84,7 +97,7 @@ end
|
|
84
97
|
#### 2. Explicit scope
|
85
98
|
In your controller, include the scope option:
|
86
99
|
```ruby
|
87
|
-
render csv: @posts, scope:
|
100
|
+
render csv: @posts, scope: current_admin
|
88
101
|
```
|
89
102
|
|
90
103
|
#### 3. Calling exportation_scope
|
@@ -0,0 +1 @@
|
|
1
|
+
Mime::Type.register('application/vnd.ms-excel', :xls)
|
@@ -0,0 +1,16 @@
|
|
1
|
+
ActiveModel::Exporter::TYPES.each do |type|
|
2
|
+
ActionController::Renderers.add type do |resource, options|
|
3
|
+
method = "to_#{type}".to_sym
|
4
|
+
|
5
|
+
if resource.respond_to?(method)
|
6
|
+
encode = options[:encode] || 'iso-8859-1'
|
7
|
+
mtype = "Mime::#{type.upcase}".safe_constantize
|
8
|
+
file = resource.send(method).encode(encode)
|
9
|
+
|
10
|
+
default_options = {type: mtype, disposition: 'attachment'}
|
11
|
+
send_data(file, default_options.merge(options))
|
12
|
+
else
|
13
|
+
resource
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -16,15 +16,12 @@ module ActiveModel
|
|
16
16
|
generate_file(col_sep: "\t")
|
17
17
|
end
|
18
18
|
|
19
|
-
alias :to_xlsx :to_xls
|
20
|
-
|
21
19
|
def generate_file(options = {})
|
22
20
|
CSV.generate(options) do |file|
|
23
21
|
collection.each do |object|
|
24
|
-
|
25
|
-
file << exporter.values
|
22
|
+
file << exporter_for(object).values
|
26
23
|
end
|
27
|
-
end
|
24
|
+
end
|
28
25
|
end
|
29
26
|
|
30
27
|
private
|
@@ -7,17 +7,8 @@ require 'active_model/exporter/version'
|
|
7
7
|
|
8
8
|
if defined?(ActionController)
|
9
9
|
require 'action_controller/exportation'
|
10
|
-
|
11
|
-
|
12
|
-
Mime::Type.register('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', :xlsx)
|
13
|
-
|
14
|
-
ActiveModel::Exporter::TYPES.each do |type|
|
15
|
-
ActionController::Renderers.add type do |resource, options|
|
16
|
-
method = "to_#{type}".to_sym
|
17
|
-
self.content_type ||= "Mime::#{type.upcase}".safe_constantize
|
18
|
-
resource.respond_to?(method) ? resource.send(method) : resource
|
19
|
-
end
|
20
|
-
end
|
10
|
+
require 'action_controller/exportation/mime_types'
|
11
|
+
require 'action_controller/exportation/renderers'
|
21
12
|
|
22
13
|
ActiveSupport.on_load(:action_controller) do
|
23
14
|
include ::ActionController::Exportation
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_model_exporters
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alejandro Gutiérrez
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-07-
|
11
|
+
date: 2014-07-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|
@@ -54,6 +54,8 @@ files:
|
|
54
54
|
- Rakefile
|
55
55
|
- active_model_exporters.gemspec
|
56
56
|
- lib/action_controller/exportation.rb
|
57
|
+
- lib/action_controller/exportation/mime_types.rb
|
58
|
+
- lib/action_controller/exportation/renderers.rb
|
57
59
|
- lib/active_model/array_exporter.rb
|
58
60
|
- lib/active_model/exporter.rb
|
59
61
|
- lib/active_model/exporter/types.rb
|
@@ -63,7 +65,6 @@ files:
|
|
63
65
|
- test/fixtures/models.rb
|
64
66
|
- test/integration/action_controller/exportation/csv_test.rb
|
65
67
|
- test/integration/action_controller/exportation/xls_test.rb
|
66
|
-
- test/integration/action_controller/exportation/xlsx_test.rb
|
67
68
|
- test/test_helper.rb
|
68
69
|
homepage: https://github.com/alejandrogutierrez/active_model_exporters
|
69
70
|
licenses:
|
@@ -94,5 +95,4 @@ test_files:
|
|
94
95
|
- test/fixtures/models.rb
|
95
96
|
- test/integration/action_controller/exportation/csv_test.rb
|
96
97
|
- test/integration/action_controller/exportation/xls_test.rb
|
97
|
-
- test/integration/action_controller/exportation/xlsx_test.rb
|
98
98
|
- test/test_helper.rb
|
@@ -1,139 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
module ActionController
|
4
|
-
module Exportation::XLSX
|
5
|
-
class ImplicitExporterTest < ActionController::TestCase
|
6
|
-
class TestsController < ActionController::Base
|
7
|
-
def render_using_implicit_exporter
|
8
|
-
render xlsx: [
|
9
|
-
User.new(first_name: 'Foo1', last_name: 'Bar1'),
|
10
|
-
User.new(first_name: 'Foo2', last_name: 'Bar2'),
|
11
|
-
User.new(first_name: 'Foo3', last_name: 'Bar3')
|
12
|
-
]
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
tests TestsController
|
17
|
-
|
18
|
-
def test_render_using_implicit_exporter
|
19
|
-
get :render_using_implicit_exporter
|
20
|
-
assert_equal 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', @response.content_type
|
21
|
-
assert_equal "Foo1\tBar1\tFoo1-Bar1\n"\
|
22
|
-
"Foo2\tBar2\tFoo2-Bar2\n"\
|
23
|
-
"Foo3\tBar3\tFoo3-Bar3\n", @response.body
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
class ExplicitExporterTest < ActionController::TestCase
|
28
|
-
class TestsController < ActionController::Base
|
29
|
-
def render_using_explicit_exporter
|
30
|
-
render xlsx: [
|
31
|
-
User.new(first_name: 'Foo1', last_name: 'Bar1')
|
32
|
-
], exporter: FancyUserExporter
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
tests TestsController
|
37
|
-
|
38
|
-
def test_render_using_explicit_exporter
|
39
|
-
get :render_using_explicit_exporter
|
40
|
-
assert_equal 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', @response.content_type
|
41
|
-
assert_equal "Foo1\tBar1\n", @response.body
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
class ImplicitExportationScopeTest < ActionController::TestCase
|
46
|
-
class TestsController < ActionController::Base
|
47
|
-
def render_using_implicit_exportation_scope
|
48
|
-
render xlsx: [
|
49
|
-
User.new(first_name: 'Foo1', last_name: 'Bar1')
|
50
|
-
]
|
51
|
-
end
|
52
|
-
|
53
|
-
private
|
54
|
-
|
55
|
-
def current_user
|
56
|
-
'current_user'
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
tests TestsController
|
61
|
-
|
62
|
-
def test_render_using_implicit_exportation_scope
|
63
|
-
get :render_using_implicit_exportation_scope
|
64
|
-
assert_equal 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', @response.content_type
|
65
|
-
assert_equal "Foo1\tBar1\tFoo1-Bar1-current_user\n", @response.body
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
class ExplicitExportationScopeTest < ActionController::TestCase
|
70
|
-
class TestsController < ActionController::Base
|
71
|
-
def render_using_explicit_exportation_scope
|
72
|
-
render xlsx: [
|
73
|
-
User.new(first_name: 'Foo1', last_name: 'Bar1')
|
74
|
-
], scope: current_admin
|
75
|
-
end
|
76
|
-
|
77
|
-
private
|
78
|
-
|
79
|
-
def current_admin
|
80
|
-
'current_admin'
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
tests TestsController
|
85
|
-
|
86
|
-
def test_render_using_explicit_exportation_scope
|
87
|
-
get :render_using_explicit_exportation_scope
|
88
|
-
assert_equal 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', @response.content_type
|
89
|
-
assert_equal "Foo1\tBar1\tFoo1-Bar1-current_admin\n", @response.body
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
class CallingExportationScopeTest < ActionController::TestCase
|
94
|
-
class TestsController < ActionController::Base
|
95
|
-
exportation_scope :current_admin
|
96
|
-
|
97
|
-
def render_calling_exportation_scope
|
98
|
-
render xlsx: [
|
99
|
-
User.new(first_name: 'Foo1', last_name: 'Bar1')
|
100
|
-
]
|
101
|
-
end
|
102
|
-
|
103
|
-
private
|
104
|
-
|
105
|
-
def current_admin
|
106
|
-
'current_admin'
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
tests TestsController
|
111
|
-
|
112
|
-
def test_render_calling_exportation_scope
|
113
|
-
get :render_calling_exportation_scope
|
114
|
-
assert_equal 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', @response.content_type
|
115
|
-
assert_equal "Foo1\tBar1\tFoo1-Bar1-current_admin\n", @response.body
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
class UsingFilterAttributesTest < ActionController::TestCase
|
120
|
-
class TestsController < ActionController::Base
|
121
|
-
def render_using_filter_attributes
|
122
|
-
render xlsx: [
|
123
|
-
User.new(first_name: 'Foo1', last_name: 'Bar1', email: 'FooBar1'),
|
124
|
-
User.new(first_name: 'Foo2', last_name: 'Bar2', email: 'FooBar2')
|
125
|
-
], exporter: FilterUserExporter
|
126
|
-
end
|
127
|
-
end
|
128
|
-
|
129
|
-
tests TestsController
|
130
|
-
|
131
|
-
def test_render_using_filter_attributes
|
132
|
-
get :render_using_filter_attributes
|
133
|
-
assert_equal 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', @response.content_type
|
134
|
-
assert_equal "Foo1\t\tFooBar1\n"\
|
135
|
-
"Foo2\tBar2\tFooBar2\n", @response.body
|
136
|
-
end
|
137
|
-
end
|
138
|
-
end
|
139
|
-
end
|