zh_kostev_ext 0.1.4 → 0.1.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.
@@ -0,0 +1,53 @@
1
+ module ControllerExtensions
2
+ module ExportToExcel
3
+ def self.included(base)
4
+ base.class_eval do
5
+ private
6
+ #This is method to create excel file with data and send it to user.
7
+ #
8
+ # Example:
9
+ #
10
+ # class PermissionSetsController < ApplicationController
11
+ # def export_to_excel
12
+ # records = User.where(:super_admin => true).all #find record to export
13
+ # export_to_excel_prototype(records, ["First Name", "Last Name"], %w(first_name, last_name))
14
+ # end
15
+ #
16
+ # You can specify file_name to provide name of excel file
17
+ #
18
+ # export_to_excel_prototype(records, ["First Name", "Last Name"], %w(first_name, last_name), :file_name => "Super Admin excel export")
19
+ #
20
+ # You can specify worksheet_name to provide name of worksheet in excel file
21
+ #
22
+ # export_to_excel_prototype(records, ["First Name", "Last Name"], %w(first_name, last_name), :file_name => "Super Admin excel export", :worksheet_name => "super admins")
23
+ #
24
+ def export_to_excel_prototype(records, column_names, model_column_names, options)
25
+ spreadsheet = StringIO.new
26
+ book = create_spreadsheet_for_export(records, column_names, model_column_names, options)
27
+ book.write spreadsheet
28
+ send_data spreadsheet.string, :filename => (options[:file_name].presence || "export_#{Time.now.to_s.underscore}.xls"), :type => "application/vnd.ms-excel"
29
+ end
30
+
31
+
32
+ #create workbook and write data to it
33
+ def create_spreadsheet_for_export(records, column_names, model_column_names, options = {})
34
+ book = Spreadsheet::Workbook.new #create new book for writing
35
+ sheet = book.create_worksheet :name => (options[:worksheet_name].presence || options[:file_name].presence || 'Excel export') #create new sheet in book
36
+ sheet.row(0).concat column_names #write first row(column names)
37
+ records.each_with_index do |record, index|
38
+ write_record_to_sheet(sheet, record, model_column_names, index + 1) #index+1 - begin from second line(first line is column names)
39
+ end
40
+
41
+ book
42
+ end
43
+
44
+ #write to worksheet one line of data
45
+ def write_record_to_sheet(sheet, record, model_column_names, row_index)
46
+ model_column_names.each_with_index do |name, column_index|
47
+ sheet[row_index, column_index] = record.send(name.underscore.to_sym)
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -2,22 +2,31 @@ module ControllerExtensions
2
2
  module GeneralMethods
3
3
  def self.included(base)
4
4
  base.class_eval do
5
- #load resource or redirect to 404 if can't load resource. Used as before filter.
6
- #You can specify DB_MODEL constant in controller if controller name doesn't connects with model which it used.
7
- #You can specify DB_SCOPE constant in controller if you need to find model in special scope.
8
- #example:
9
- #class PermissionSetsController < ApplicationController
10
- # DB_MODEL = :contact
11
- # DB_SCOPE = :sent
12
- # before_filter :find_resource_or_404, :only => [:edit,:show, :destroy, :update]
13
- # end #it will find model as Contact.sent.find_by_id(params[:id])
14
- #
15
- #
16
- #OR
17
- #
18
- #class PermissionSetsController < ApplicationController
19
- # before_filter :find_resource_or_404, :only => [:edit,:show, :destroy, :update]
20
- # end
5
+ #Load resource or redirect to 404 if can't load resource. Used as before filter.
6
+ #
7
+ # Example:
8
+ #
9
+ # class PermissionSetsController < ApplicationController
10
+ # before_filter :find_resource_or_404, :only => [:edit,:show, :destroy, :update] #it will find model as PermissionSet.find(params[:id])
11
+ #
12
+ # You can specify DB_MODEL constant in controller if controller name doesn't connects with model which it used.
13
+ #
14
+ # DB_MODEL = :contact
15
+ #
16
+ # You can specify DB_SCOPE constant in controller if you need to find model in special scope.
17
+ #
18
+ # DB_SCOPE = :sent
19
+ #
20
+ # You can specify DB_SCOPE and DB_MODEL together
21
+ #
22
+ # class PermissionSetsController < ApplicationController
23
+ # DB_MODEL = :contact
24
+ # DB_SCOPE = :sent
25
+ # before_filter :find_resource_or_404, :only => [:edit,:show, :destroy, :update] #it will find model as Contact.sent.find(params[:id])
26
+ #
27
+ # Valid Options:
28
+ #
29
+ # * <tt>:only/:except</tt> - Passed to the <tt>before_filter</tt> call. Set which actions are verified.
21
30
  def find_resource_or_404
22
31
  model_name = defined?(self.class::DB_MODEL) ? self.class::DB_MODEL : controller_name.singularize
23
32
  model_to_find = defined?(self.class::DB_SCOPE) ? model_name.to_s.classify.constantize.send(self.class::DB_SCOPE) : model_name.to_s.classify.constantize
data/lib/zh_kostev_ext.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  require "controller_extensions/general_methods"
2
+ require "controller_extensions/export_to_excel"
2
3
  class ActionController::Base
3
4
  include ControllerExtensions::GeneralMethods
5
+ include ControllerExtensions::ExportToExcel
4
6
  end
5
7
 
6
8
  require "ruby_classes_extensions/hash_extensions"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zh_kostev_ext
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,8 +9,24 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-02 00:00:00.000000000 Z
12
+ date: 2012-10-04 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: spreadsheet
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
14
30
  - !ruby/object:Gem::Dependency
15
31
  name: shoulda
16
32
  requirement: !ruby/object:Gem::Requirement
@@ -99,6 +115,7 @@ extra_rdoc_files:
99
115
  - LICENSE.txt
100
116
  - README.rdoc
101
117
  files:
118
+ - lib/controller_extensions/export_to_excel.rb
102
119
  - lib/controller_extensions/general_methods.rb
103
120
  - lib/ruby_classes_extensions/hash_extensions.rb
104
121
  - lib/zh_kostev_ext.rb
@@ -119,7 +136,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
119
136
  version: '0'
120
137
  segments:
121
138
  - 0
122
- hash: -797292081
139
+ hash: -764461171
123
140
  required_rubygems_version: !ruby/object:Gem::Requirement
124
141
  none: false
125
142
  requirements: