Iprog Export Model ToXlsx
Welcome to iprog_export_model_to_xlsx! This gem provides functionality to export ActiveRecord models to XLSX format.
Installation
To install the gem and add it to your application's Gemfile, run:
$ bundle add iprog_export_model_to_xlsx
If you're not using Bundler to manage dependencies, install the gem by running:
$ gem install iprog_export_model_to_xlsx
Initialization
To use the gem in your rails project, include it with:
# app/models/model.rb
require 'iprog_export_model_to_xlsx'
class Model < ApplicationRecord
extend IprogExportModelToXlsx
end
You can then export your models to XLSX format as shown below.
Basic Usage
Export without any options:
# with default filepath
Model.export_to_xlsx
Output file: rails_app_folder/models.xlsx
# with custom filepath
Model.export_to_xlsx('public/custom_models.xlsx')
Output file: rails_app_folder/public/models.xlsx
Sample with Options in a Model Class
You can customize the export by providing options:
# adding custom class methods
require 'iprog_export_model_to_xlsx'
class Model < ApplicationRecord
extend IprogExportModelToXlsx
def self.export_published_items_to_xlsx filepath = nil
# Custom condition
custom_conditions = ->(scope) { scope.where(status: 'published') }
# Custom column formats
column_formats = { 'status' => ->(value) { value.upcase } }
# Custom progress callback
custom_progress_callback = ->(current, total) { puts "Custom Progress: Exported #{current}/#{total} records" }
options = {
exclude_columns: ['created_at', 'updated_at'],
limit: 100,
conditions: custom_conditions,
column_formats: column_formats,
sheet_name: "Published Items",
progress_callback: custom_progress_callback
}
# with custom filepath
export_to_xlsx(filepath, options)
# OR
# with default filepath
export_to_xlsx(filepath, options)
end
end
# Usage with custom file path
Model.export_published_items_to_xlsx("published_items.xlsx")
Output: rails_app_folder/published_items.xlsx
# Usage with default file path
Model.export_published_items_to_xlsx
Output: rails_app_folder/models.xlsx
Sample in a Service Class
Create a service class:
# app/services/model_export_service.rb
class ModelExportService
attr_reader :model, :exclude_columns, :limit, :conditions, :sheet_name, :column_formats, :progress_callback
def initialize(model, exclude_columns: [], limit: nil, conditions: nil, sheet_name: nil, column_formats: {}, progress_callback: nil )
@model = model.constantize
@exclude_columns = exclude_columns
@limit = limit
@conditions = conditions
@sheet_name = sheet_name
@column_formats = column_formats
@progress_callback = progress_callback
end
def export_to_xlsx(file_path = nil)
options = {
exclude_columns: exclude_columns,
limit: limit,
conditions: conditions,
sheet_name: sheet_name,
column_formats: column_formats,
progress_callback: progress_callback
}
model.export_to_xlsx(file_path, options)
rescue StandardError => e
raise IprogExportModelToXlsx::Error, "Failed to export to XLSX: #{e.message}"
end
end
# Usage
model_export_service = ModelExportService.new("Model",
excluded_columns: ["created_at", "updated_at"],
limit: 100,
column_formats: { 'status' => ->(value) { value.upcase } },
progress_callback: ->(current, total) { puts "Custom Progress: Exported #{current}/#{total} records" }
)
# Usage with custom file path
model_export_service.export_to_xlsx("published_items.xlsx")
Output: rails_app_folder/published_items.xlsx
# Usage with default file path
model_export_service.export_to_xlsx
Output: rails_app_folder/models.xlsx
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/iprog21/iprog_export_model_to_xlsx.
License
This gem is available as open source under the terms of the MIT License.