Module: ESV
- Defined in:
- lib/esv.rb,
lib/esv/version.rb,
lib/esv/rails_controller.rb
Defined Under Namespace
Modules: RailsController Classes: Generator
Constant Summary collapse
- HEADER_CONVERTERS =
You can register your own header converters in this Hash.
{ downcase: ->(value) { value.respond_to?(:downcase) ? value.downcase : value }, # Details: # # Strips leading and trailing whitespace. # Downcases the header. # Replaces embedded spaces with underscores. # Removes non-word characters. # Makes the string into a Symbol. symbol: ->(value) { value.to_s.strip.downcase.tr(" ", "_").gsub(/\W+/, "").to_sym }, }
- VERSION =
"3.1.0"- MIME_TYPE =
"application/vnd.ms-excel"- CONTENT_TYPE =
"#{MIME_TYPE}; charset=utf-8"
Class Method Summary collapse
- .generate {|generator| ... } ⇒ Object
- .generate_file(path, &block) ⇒ Object
-
.parse(data, header_converters: nil, worksheet_index: nil) ⇒ Array<Array>
A list of rows.
- .parse_file(path, header_converters: nil) ⇒ Object
Class Method Details
.generate {|generator| ... } ⇒ Object
7 8 9 10 11 |
# File 'lib/esv.rb', line 7 def self.generate generator = Generator.new yield(generator) generator.render end |
.generate_file(path, &block) ⇒ Object
13 14 15 16 17 |
# File 'lib/esv.rb', line 13 def self.generate_file(path, &block) File.open(path, "wb") do |file| file.write generate(&block) end end |
.parse(data, header_converters: nil, worksheet_index: nil) ⇒ Array<Array>
Returns a list of rows.
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/esv.rb', line 45 def self.parse(data, header_converters: nil, worksheet_index: nil) fake_file = StringIO.new(data) book = Spreadsheet.open(fake_file) # We prefer raising to silently ignoring worksheets. if !worksheet_index && book.worksheets.length > 1 raise "Expected 1 worksheet, found #{book.worksheets.length}." end worksheet_index ||= 0 is_first_row = true book.worksheet(worksheet_index).to_a.map(&:to_a).map { |row| row.each_with_index.map { |cell, index| value = case cell when Spreadsheet::Formula then cell.value when Spreadsheet::Link then cell.href else cell end if header_converters && is_first_row case header_converters when Proc then value = header_converters.call(value) when Symbol then value = HEADER_CONVERTERS[header_converters].call(value) when Enumerable then # Apply the converters in order. header_converters.each { |name| value = HEADER_CONVERTERS.fetch(name).call(value) } else raise "Unsupported kind of header_converters #{header_converters.inspect}" end value else value end }.tap { is_first_row = false } } end |
.parse_file(path, header_converters: nil) ⇒ Object
90 91 92 |
# File 'lib/esv.rb', line 90 def self.parse_file(path, header_converters: nil) parse(File.read(path), header_converters: header_converters) end |