Created
September 25, 2019 18:28
-
-
Save SViccari/23c332b6eb7561a6c6b2e81e2c2b7b58 to your computer and use it in GitHub Desktop.
Generate CSV data
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class CsvGenerator | |
def initialize(file_name, collection) | |
@file_name = file_name | |
@collection = collection | |
@columns = [] | |
end | |
def register_column(column_header, &block) | |
columns << Column.new(column_header, block) | |
end | |
def to_csv | |
CSV.open(file_name, 'w') do |csv| | |
csv << build_header | |
collection.each { |record| csv << build_row(record) } | |
end | |
end | |
private | |
attr_reader :file_name, :collection | |
attr_accessor :columns | |
def build_header | |
columns.map(&:header) | |
end | |
def build_row(record) | |
columns.map { |column| record.instance_exec(&column.block) } | |
end | |
class Column < Struct.new(:header, :block); end | |
end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'csv' | |
class InviteCodesReport | |
def to_csv(file_name) | |
CsvGenerator.new("#{file_name}.csv", invite_codes).tap do |generator| | |
generator.register_column("Invite Code") { code } | |
generator.register_column("Invite Code Created At") { created_at } | |
generator.register_column("Care Provider Name") { care_provider.name } | |
generator.register_column("Care Provider ID") { care_provider.id } | |
end.to_csv | |
end | |
private | |
def invite_codes | |
InviteCode.where(id: invite_code_ids).includes(care_provider: :address) | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment