to_xls-rails 1.1.1 → 1.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,18 +1,21 @@
1
1
  0.1.0
2
- first commit
2
+ First commit
3
3
 
4
4
  0.1.1
5
- add gem dependency on gemspec file
5
+ Added gem dependency on gemspec file
6
6
 
7
7
  0.1.2
8
- update documentation
8
+ Update README.rdoc
9
9
 
10
10
  1.0.0
11
- fix typo
11
+ Fixed typo
12
12
 
13
13
  1.1.0
14
14
  Translation of a column-value
15
- Add options :header
15
+ Added options :header
16
16
 
17
17
  1.1.1
18
- Add options :header_columns
18
+ Added options :header_columns
19
+
20
+ 1.1.2
21
+ Added prepend option. Prepend some data above header and access current array element index in &block
data/Gemfile CHANGED
@@ -2,3 +2,5 @@ source "http://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in refinerycms-multisite.gemspec
4
4
  gemspec
5
+
6
+ gem 'spreadsheet', '~> 0.6.5'
@@ -1,26 +1,36 @@
1
- == to_xls plugin
1
+ == to_xls-rails
2
2
 
3
- This simple plugin gives you the ability to call to_xls to a collection of activerecords. The builder options are the same as to_json / to_xml, except for the :include.
3
+ This simple plugin gives you the ability to call to_xls to a collection of activerecords for Rails.
4
+
5
+
6
+ == Install
7
+ gem install spreadsheet
8
+ gem install to_xls-rails
4
9
 
5
10
 
6
11
  == Usage
7
12
 
8
13
  add below to RAILS_ROOT/config/initializers/mime_types.rb
9
14
  Mime::Type.register_alias "text/excel", :xls
10
-
15
+
11
16
  @posts = Post.all
12
-
17
+
13
18
  #
14
- # default are export header and all fileds
19
+ # default are export header and all fileds
15
20
  #
16
-
21
+
17
22
  @posts.to_xls
18
23
  @posts.to_xls(:only => [:title, :body])
19
24
  @posts.to_xls(:except => [:id])
20
25
  @posts.to_xls(:header => false)
21
26
 
27
+ # Will prepend above header
28
+ # | Col 0, Row 0 | Col 1, Row 0 |
29
+ # | Col 0, Row 1 | |
30
+ @posts.to_xls(:prepend => [["Col 0, Row 0", "Col 1, Row 0"], ["Col 0, Row 1"]])
31
+
22
32
  # Translation of a column-value
23
- @posts.to_xls{|column, value| column==:salutation ? t(value) : value}
33
+ @posts.to_xls{|column, value, row_index| column==:salutation ? t(value) + " at #{row_index}" : value}
24
34
 
25
35
 
26
36
  == Example
@@ -28,34 +38,41 @@ This simple plugin gives you the ability to call to_xls to a collection of activ
28
38
  class PostsController < ApplicationController
29
39
  def index
30
40
  @posts = Post.all
31
-
41
+
32
42
  respond_to do |format|
33
43
  format.xls { send_data(@posts.to_xls) }
34
- #format.xls {
35
- # filename = "posts-#{Time.now.strftime("%Y%m%d%H%M%S")}.xls"
36
- # send_data(@posts.to_xls, :type => "application/excel; charset=utf-8; header=present", :filename => filename)
37
- #}
44
+ # format.xls {
45
+ # filename = "posts-#{Time.now.strftime("%Y%m%d%H%M%S")}.xls"
46
+ # send_data(@posts.to_xls, :type => "application/excel; charset=utf-8; header=present", :filename => filename)
47
+ # }
38
48
  end
39
49
  end
40
50
  end
41
51
 
42
52
 
43
- == Dependencies
53
+ Works on Rails 3:
44
54
 
45
- gem install spreadsheet
46
-
55
+ class PostsController < ApplicationController
56
+ def index
57
+ # add this to config/initializers/mime_types.rb
58
+ Mime::Type.register "application/vnd.ms-excel", :xls
47
59
 
48
- == Install
60
+ @posts = Post.all
61
+
62
+ respond_to do |format|
63
+ format.xls {
64
+ send_data @posts.to_xls
65
+ return # prevet Rails to seek for index.xls.erb
66
+ }
67
+ end
68
+ end
69
+ end
49
70
 
50
- with gem
51
- gem install to_xls-rails
52
71
 
53
- with bundler
54
- gem 'to_xls-rails'
55
- bundle install
72
+ == Contributors
56
73
 
57
- with git
58
- git clone http://github.com/liangwenke/to_xls-rails.git
74
+ * {Juan Pablo Marzetti}[http://github.com/yonpols] Added Support for Value-Substitution
75
+ * {Denis Yagofarov}[http://github.com/denyago] Added prepend some data above header and access current array element index in &block
59
76
 
60
77
 
61
78
  == Note
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.1
1
+ 1.1.2
@@ -3,8 +3,10 @@ require 'spreadsheet'
3
3
  class Array
4
4
 
5
5
  def to_xls(options = {}, &block)
6
- return '' if self.empty?
7
-
6
+
7
+ return '' if self.empty? && options[:prepend].blank?
8
+
9
+ columns = []
8
10
  options.reverse_merge!(:header => true)
9
11
 
10
12
  xls_report = StringIO.new
@@ -13,23 +15,33 @@ class Array
13
15
 
14
16
  if options[:only]
15
17
  columns = Array(options[:only]).map(&:to_sym)
16
- else
18
+ elsif !self.empty?
17
19
  columns = self.first.class.column_names.map(&:to_sym) - Array(options[:except]).map(&:to_sym)
18
20
  end
19
21
 
20
- return '' if columns.empty?
22
+ return '' if columns.empty? && options[:prepend].blank?
23
+
24
+ sheet_index = 0
25
+
26
+ unless options[:prepend].blank?
27
+ options[:prepend].each do |array|
28
+ sheet.row(sheet_index).concat(array)
29
+ sheet_index += 1
30
+ end
31
+ end
21
32
 
22
33
  if options[:header]
23
- sheet.row(0).concat(options[:header_columns].blank? ? columns.map(&:to_s).map(&:humanize) : options[:header_columns])
34
+ sheet.row(sheet_index).concat(options[:header_columns].blank? ? columns.map(&:to_s).map(&:humanize) : options[:header_columns])
35
+ sheet_index += 1
24
36
  end
25
37
 
26
38
  self.each_with_index do |obj, index|
27
- index = options[:header] ? (index + 1) : index
28
39
  if block
29
- sheet.row(index).replace(columns.map { |column| block.call(column, obj.send(column)) })
40
+ sheet.row(sheet_index).replace(columns.map { |column| block.call(column, obj.send(column), index) })
30
41
  else
31
- sheet.row(index).replace(columns.map { |column| obj.send(column) })
42
+ sheet.row(sheet_index).replace(columns.map { |column| obj.send(column) })
32
43
  end
44
+ sheet_index += 1
33
45
  end
34
46
 
35
47
  book.write(xls_report)
@@ -5,16 +5,16 @@ version = File.read(File.expand_path("../VERSION", __FILE__)).strip
5
5
  Gem::Specification.new do |s|
6
6
  s.name = 'to_xls-rails'
7
7
  s.version = version
8
- s.author = "LiangWenKe"
8
+ s.author = "Mike Liang"
9
9
  s.email = "liangwenke.com@gmail.com"
10
10
  s.homepage = "http://github.com/liangwenke/to_xls-rails"
11
- s.summary = "Export data to xls on Rails"
12
- s.description = "This simple plugin gives you the ability to call to_xls to a collection of activerecords. The builder options are the same as to_json / to_xml, except for the :include."
11
+ s.summary = "Export Rails ActiveRecord data to excel file"
12
+ s.description = "This simple plugin gives you the ability to call to_xls to a collection of activerecords for Rails."
13
13
 
14
14
  s.files = Dir["{lib,test}/**/*", "[a-zA-Z]*", "init.rb"] - ["Gemfile.lock"]
15
15
  s.require_path = "lib"
16
16
 
17
- s.add_dependency('spreadsheet', '~>0.6.5')
17
+ s.add_dependency('spreadsheet', '~> 0.6.5')
18
18
 
19
19
  s.platform = Gem::Platform::RUBY
20
20
  s.required_rubygems_version = ">= 1.3.4"
metadata CHANGED
@@ -1,19 +1,19 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: to_xls-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
- - LiangWenKe
8
+ - Mike Liang
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-11-16 00:00:00.000000000Z
12
+ date: 2012-01-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: spreadsheet
16
- requirement: &2152315200 !ruby/object:Gem::Requirement
16
+ requirement: &70151257218860 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,9 @@ dependencies:
21
21
  version: 0.6.5
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2152315200
24
+ version_requirements: *70151257218860
25
25
  description: This simple plugin gives you the ability to call to_xls to a collection
26
- of activerecords. The builder options are the same as to_json / to_xml, except for
27
- the :include.
26
+ of activerecords for Rails.
28
27
  email: liangwenke.com@gmail.com
29
28
  executables: []
30
29
  extensions: []
@@ -59,8 +58,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
59
58
  version: 1.3.4
60
59
  requirements: []
61
60
  rubyforge_project:
62
- rubygems_version: 1.8.10
61
+ rubygems_version: 1.8.12
63
62
  signing_key:
64
63
  specification_version: 3
65
- summary: Export data to xls on Rails
64
+ summary: Export Rails ActiveRecord data to excel file
66
65
  test_files: []