active_record_to_xls 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: c52c2f9748f585a25ce7925fe0ae4f138c4ce1c672e508da8a9325d503ce8a1f
4
+ data.tar.gz: 8e95741bd3ad84276ce8583a1f7801c0003a2504db9511fa70f499ce9048dd2e
5
+ SHA512:
6
+ metadata.gz: 7c2be1c0e1487891b38220e98b953c7178219bdfdbb27c4c4ca1b98ca79cc1686bbf28ff695a8b3c0d1e17be7a9064fb24e9763babda62af7cb4af65c175f33f
7
+ data.tar.gz: 574e48a1a514b27a5984bc6339df7786ae26ff096329cbcc9e8a896bb96e9b46c32645b890d62dfbd8b4b73abcbf8c035210a658b909d40ff720916c45bbb7a4
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "https://rubygems.org/"
2
+
3
+
4
+ gemspec
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010 Mike Liang
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,116 @@
1
+ # ActiveRecordToXls
2
+
3
+ This gem will generate XLS data for a collection of ActiveRecord models.
4
+
5
+ It was forked from the [to_xls-rails gem](https://github.com/liangwenke/to_xls-rails).
6
+
7
+ ## Installation
8
+
9
+ **Gemfile**:
10
+
11
+ ```ruby
12
+ gem 'active_record_to_xls'
13
+ ```
14
+
15
+ **config/initializers/mime_types.rb**:
16
+
17
+ ```ruby
18
+ Mime::Type.register_alias "text/excel", :xls
19
+ ```
20
+
21
+ ## Usage
22
+
23
+ **controller**:
24
+
25
+ ```ruby
26
+ format.xls {
27
+ filename = “my_export.xls”
28
+ send_data ActiveRecordToXls.call(Widget.all)
29
+ }
30
+ ```
31
+
32
+ **view:**
33
+
34
+ ```ruby
35
+ link_to 'Export Excel', my_action_path(format: :xls)
36
+ ```
37
+
38
+ ### Options
39
+
40
+ #### client_encoding
41
+
42
+ - **Type:** String
43
+ - **Default**: UTF-8
44
+
45
+ #### only
46
+
47
+ - **Type:** Array
48
+
49
+ Will only include the columns specified in this array:
50
+
51
+ ```ruby
52
+ send_data ActiveRecordToXls.call( Widget.all, only: [:title, :body] )
53
+ ```
54
+
55
+ #### except
56
+
57
+ - **Type:** Array
58
+
59
+ Will omit the columns specified in this array, eg:
60
+
61
+ ```ruby
62
+ send_data ActiveRecordToXls.call( Widget.all, omit: [:id] )
63
+ ```
64
+
65
+ #### prepend
66
+
67
+ - **Type:** Array of row arrays
68
+
69
+ Will prepend above header:
70
+
71
+ ```ruby
72
+ send_data ActiveRecordToXls.call( Widget.all, prepend: [["Col 0, Row 0", "Col 1, Row 0"], ["Col 0, Row 1"]] )
73
+ ```
74
+
75
+ #### header
76
+
77
+ - **Type:** true or false
78
+ - **Default:** false
79
+
80
+ Will omit the header row:
81
+
82
+ ```ruby
83
+ send_data ActiveRecordToXls.call( Widget.all, header: false )
84
+ ```
85
+
86
+ #### header_columns
87
+
88
+ - **Type**: Array
89
+
90
+ Specify header column names:
91
+
92
+ ```ruby
93
+ send_data ActiveRecordToXls.call( Widget.all, header: false , header_columns: ['Title', 'Description])
94
+ ```
95
+
96
+ #### column_width
97
+
98
+ - **Type:** Array of integers
99
+
100
+ Set column widths:
101
+
102
+ ```ruby
103
+ send_data ActiveRecordToXls.call( Widget.all, column_width: [17,15,15,40,25,37] )
104
+ ```
105
+
106
+ #### append
107
+
108
+ - **Type:** Array of row arrays
109
+
110
+ Will append this row at end, eg:
111
+
112
+ ```ruby
113
+ send_data ActiveRecordToXls.call( Widget.all, append: [["Col 0, Row 0", "Col 1, Row 0"], ["Col 0, Row 1"]] )
114
+ ```
115
+
116
+
@@ -0,0 +1,7 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new
5
+
6
+ task :default => :spec
7
+ task :test => :spec
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.0.0
@@ -0,0 +1,20 @@
1
+ # encoding: utf-8
2
+
3
+ version = File.read(File.expand_path("../VERSION", __FILE__)).strip
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'active_record_to_xls'
7
+ spec.version = version
8
+ spec.author = "Gordon B. Isnor"
9
+ spec.email = "info@isnorcreative.com"
10
+ spec.homepage = "http://github.com/gordonbisnor/active_record_to_xls"
11
+ spec.summary = "Export Rails ActiveRecord data to Excel XLS data"
12
+ spec.description = "This simple plugin gives you the ability to get XLS for a collection of ActiveRecord models."
13
+ spec.files = Dir["{lib,test}/**/*", "[a-zA-Z]*", "init.rb"] - ["Gemfile.lock"]
14
+ spec.require_path = "lib"
15
+ spec.license = 'MIT'
16
+ spec.add_runtime_dependency 'spreadsheet', '~> 0.8.5'
17
+ spec.add_development_dependency 'rspec', '~> 3.7', '>= 3.7.0'
18
+ spec.platform = Gem::Platform::RUBY
19
+ spec.required_rubygems_version = ">= 1.3.4"
20
+ end
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ require 'active_record_to_xls'
@@ -0,0 +1,59 @@
1
+ require 'spreadsheet'
2
+
3
+ class ActiveRecordToXls
4
+
5
+ def self.call(target, options = {}, &block)
6
+
7
+ return '' if target.nil? && options[:prepend].nil?
8
+
9
+ columns = []
10
+
11
+ show_header = options[:header] == true
12
+
13
+ xls_report = StringIO.new
14
+
15
+ Spreadsheet.client_encoding = options[:client_encoding] || "UTF-8"
16
+
17
+ book = Spreadsheet::Workbook.new
18
+ sheet = book.create_worksheet
19
+
20
+ columns = if options[:only]
21
+ Array(options[:only]).map(&:to_sym)
22
+ elsif !target.nil?
23
+ if target.first.is_a? Hash
24
+ target.first.keys.map(&:to_sym) - Array(options[:except]).map(&:to_sym)
25
+ else
26
+ target.first.attributes.keys.map(&:to_sym) - Array(options[:except]).map(&:to_sym)
27
+ end
28
+ end
29
+
30
+ return '' if columns.empty? && options[:prepend].nil?
31
+
32
+ sheet_index = 0
33
+
34
+ options[:prepend].map { |arr| sheet.row(sheet_index).concat(arr); sheet_index += 1 } unless options[:prepend].nil?
35
+
36
+ if show_header
37
+ sheet.row(sheet_index).concat(options[:header_columns].nil? ? columns.map(&:to_s).map(&:humanize) : options[:header_columns])
38
+ sheet_index += 1
39
+ end
40
+
41
+ options[:column_width].each_index { |index| sheet.column(index).width = options[:column_width][index] } if options[:column_width]
42
+
43
+ target.each_with_index do |obj, i|
44
+ if block
45
+ sheet.row(sheet_index).replace(columns.map { |col| block.call(col, obj.is_a?(Hash) ? obj[col] : obj.send(col), i) } )
46
+ else
47
+ sheet.row(sheet_index).replace(columns.map { |col| obj.is_a?(Hash) ? obj[col] : obj.send(col) } )
48
+ end
49
+ sheet_index += 1
50
+ end
51
+
52
+ options[:append].map { |arr| sheet.row(sheet_index).concat(arr); sheet_index += 1 } unless options[:append].nil?
53
+
54
+ book.write(xls_report)
55
+
56
+ xls_report.string
57
+ end
58
+
59
+ end
metadata ADDED
@@ -0,0 +1,86 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: active_record_to_xls
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Gordon B. Isnor
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-06-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: spreadsheet
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.8.5
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.8.5
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.7'
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 3.7.0
37
+ type: :development
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - "~>"
42
+ - !ruby/object:Gem::Version
43
+ version: '3.7'
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 3.7.0
47
+ description: This simple plugin gives you the ability to get XLS for a collection
48
+ of ActiveRecord models.
49
+ email: info@isnorcreative.com
50
+ executables: []
51
+ extensions: []
52
+ extra_rdoc_files: []
53
+ files:
54
+ - Gemfile
55
+ - MIT-LICENSE
56
+ - README.md
57
+ - Rakefile
58
+ - VERSION
59
+ - active_record_to_xls.gemspec
60
+ - init.rb
61
+ - lib/active_record_to_xls.rb
62
+ homepage: http://github.com/gordonbisnor/active_record_to_xls
63
+ licenses:
64
+ - MIT
65
+ metadata: {}
66
+ post_install_message:
67
+ rdoc_options: []
68
+ require_paths:
69
+ - lib
70
+ required_ruby_version: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ required_rubygems_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: 1.3.4
80
+ requirements: []
81
+ rubyforge_project:
82
+ rubygems_version: 2.7.6
83
+ signing_key:
84
+ specification_version: 4
85
+ summary: Export Rails ActiveRecord data to Excel XLS data
86
+ test_files: []