Project

active_tsv

0.01
No commit activity in last 3 years
No release in over 3 years
A Class of Active record pattern for TSV/CSV
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 1.11
~> 10.0
>= 0

Runtime

 Project Readme

ActiveTsv

Build Status

A Class of Active record pattern for TSV/CSV

Usage

data/users.tsv

id	name	age
1	ksss	30
2	foo	29
3	bar	30

data/nicknames.tsv

id	user_id	nickname
1	1	yuki
2	1	kuri
3	1	k
4	2	f
require 'active_tsv'

class User < ActiveTsv::Base
  self.table_path = "data/users.tsv"    # required
  # self.encoding = Encoding::Shift_JIS # optional
  # self.primary_key = "uid"            # optional
  has_many :nicknames
end

class Nickname < ActiveTsv::Base
  self.table_path = "data/nicknames.tsv"
  belongs_to :user
end

User.all
=> #<ActiveTsv::Relation [#<User id: "1", name: "ksss", age: "30">, #<User id: "2", name: "foo", age: "29">, #<User id: "3", name: "bar", age: "30">]>
User.all.to_a
=> [#<User id: "1", name: "ksss", age: "30">, #<User id: "2", name: "foo", age: "29">, #<User id: "3", name: "bar", age: "30">]

User.first
#=> #<User id: "1", name: "ksss", age: "30">
User.last
#=> #<User id: "3", name: "bar", age: "30">

User.where(age: 30).each do |user|
  user.name #=> "ksss", "bar"
end

User.where(age: 30).to_a
#=> [#<User id: "1", name: "ksss", age: "30">, #<User id: "3", name: "bar", age: "30">]

User.where(age: 30).last
#=> #<User id: "3", name: "bar", age: "30">

User.where(age: 30).where(name: "ksss").first
#=> #<User id: "1", name: "ksss", age: "30">

User.where(id: [1, 2]).to_a
#=> [#<User id: "1", name: "ksss", age: "30">, #<User id: "2", name: "foo", age: "29">]

User.where.not(name: "ksss").first
#=> #<User id: "2", name: "foo", age: "29">

User.group(:age).count
#=> {"30"=>2, "29"=>1}

User.order(:name).to_a
#=> [#<User id: "3", name: "bar", age: "30">, #<User id: "2", name: "foo", age: "29">, #<User id: "1", name: "ksss", age: "30">]

User.order(name: :desc).to_a
=> [#<User id: "1", name: "ksss", age: "30">, #<User id: "2", name: "foo", age: "29">, #<User id: "3", name: "bar", age: "30">]

User.first.nicknames
#=> #<ActiveTsv::Relation [#<Nickname id: "1", user_id: "1", nickname: "yuki">, #<Nickname id: "2", user_id: "1", nickname: "kuri">, #<Nickname id: "3", user_id: "1", nickname: "k">]>

Nickname.last.user
#=> #<User id: "2", name: "foo", age: "29">

Also Supported CSV.

require 'active_csv'
class User < ActiveCsv::Base
  self.table_path = "data/users.csv"
end

Goal

Support all methods of ActiveRecord

Installation

Add this line to your application's Gemfile:

gem 'active_tsv'

And then execute:

$ bundle

Or install it yourself as:

$ gem install active_tsv

License

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