Skip to content

ReciteCSV assists to implement a class for csv reader.

License

Notifications You must be signed in to change notification settings

yujideveloper/recite_csv

Folders and files

NameName
Last commit message
Last commit date

Latest commit

79c25f8 · Feb 25, 2025
Feb 25, 2025
Feb 25, 2025
Dec 25, 2023
Feb 25, 2025
Nov 29, 2017
Nov 29, 2017
Feb 25, 2025
Feb 25, 2025
Feb 25, 2025
Dec 25, 2023
Oct 28, 2021
Nov 30, 2017
Dec 25, 2023

Repository files navigation

ReciteCSV

ReciteCSV assists to implement a class for CSV reader.
A reader class implemented by ReciteCSV iterate each row as PORO(Plain Old Ruby Object).

Gem Version Build Maintainability

Installation

Add this line to your application's Gemfile:

gem 'recite_csv'

And then execute:

$ bundle

Or install it yourself as:

$ gem install recite_csv

Usage

The following is a example csv file.

COL1,COL2
VALUE1,VALUE2
VALUE3,VALUE4

Specify header definition using hash object.

class Foo
  include ReciteCSV::Reader::Builder.new(col1: "COL1", col2: "COL2")
end

Foo.new("./example.csv").each do |row|
  row.class # => Foo::Row
  row.col1
  row.col2
end

Specify header definition using array object.

class Bar
  include ReciteCSV::Reader::Builder.new(%w[col1 col2])
end

Bar.new("./example.csv").each do |row|
  row.class # => Bar::Row
  row.col1
  row.col2
end

Define custom methods of row object.

class Baz
  include(
    ReciteCSV::Reader::Builder.new(col1: "COL1", col2: "COL2") do
      # define methods of Row class
      def col1
        "override #{super}"
      end

      def custom_method
        # do somethings..
      end
    end
  )
end

Baz.new("./example.csv").each do |row|
  row.class # => Baz::Row
  row.col1
  row.col2
  row.custom_method
end

Define custom methods of row object using row_methods.

class Qux
  include ReciteCSV::Reader::Builder.new(col1: "COL1", col2: "COL2")

  row_methods do
    def col1
      "override #{super}"
    end

    def custom_method
      # do somethings..
    end
  end
end

Qux.new("./example.csv").each do |row|
  row.class # => Qux::Row
  row.col1
  row.col2
  row.custom_method
end

Specify file mode and encoding.

class Quux
  include ReciteCSV::Reader::Builder.new(col1: "COL1", col2: "COL2")
end

Quux.new("./example.csv", file_options: "rb:UTF-8").each do |row|
  # do something
end

Convert encoding.

class Corge
  include ReciteCSV::Reader::Builder.new(col1: "COL1", col2: "COL2")
end

Corge.new("./example.csv", file_options: ["rb:Shift_JIS:UTF-8", invalid: :replace, undef: :replace]).each do |row|
  # do something
end

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/yujideveloper/recite_csv.

License

The gem is available as open source under the terms of the MIT License.