Class: Csv::Query::InMemoryAR
- Inherits:
-
Object
- Object
- Csv::Query::InMemoryAR
- Defined in:
- lib/csv/query.rb
Defined Under Namespace
Classes: Record
Instance Attribute Summary collapse
-
#file_path ⇒ Object
readonly
Returns the value of attribute file_path.
Instance Method Summary collapse
- #csv ⇒ Object
- #csv_headers ⇒ Object
-
#header_converter ⇒ Object
‘LP(iphone)`みたいに 半角カッコ内にアルファベットだと Rubyのsyntax的にsetterと勘違いされるので対策.
-
#initialize(file_path, json) ⇒ InMemoryAR
constructor
A new instance of InMemoryAR.
- #json_format? ⇒ Boolean
- #migration(csv_headers) ⇒ Object
- #run! ⇒ Object
Constructor Details
#initialize(file_path, json) ⇒ InMemoryAR
55 56 57 58 59 60 |
# File 'lib/csv/query.rb', line 55 def initialize(file_path, json) @json = json @file_path = file_path migration(csv_headers) end |
Instance Attribute Details
#file_path ⇒ Object (readonly)
Returns the value of attribute file_path.
53 54 55 |
# File 'lib/csv/query.rb', line 53 def file_path @file_path end |
Instance Method Details
#csv ⇒ Object
38 39 40 41 42 43 44 45 46 47 |
# File 'lib/csv/query.rb', line 38 def csv contents = File.read(file_path) detection = contents.detect_encoding case detection[:encoding] when "Shift_JIS" CSV.read(file_path, encoding: "SJIS:UTF-8", headers: true, header_converters: header_converter) when "UTF-8" CSV.read(file_path, encoding: "UTF-8:UTF-8", headers: true, header_converters: header_converter) end end |
#csv_headers ⇒ Object
49 50 51 |
# File 'lib/csv/query.rb', line 49 def csv_headers csv.headers end |
#header_converter ⇒ Object
‘LP(iphone)`みたいに半角カッコ内にアルファベットだとRubyのsyntax的にsetterと勘違いされるので対策
32 33 34 35 36 |
# File 'lib/csv/query.rb', line 32 def header_converter lambda do |h| h.gsub('(','(').gsub(')', ')') end end |
#json_format? ⇒ Boolean
76 77 78 |
# File 'lib/csv/query.rb', line 76 def json_format? @json end |
#migration(csv_headers) ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/csv/query.rb', line 62 def migration csv_headers ActiveRecord::Migration.verbose = false ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:") ActiveRecord::Schema.define(:version => 1) do create_table :records do |t| csv_headers.map do |column_name| t.text column_name.to_sym end end end end |
#run! ⇒ Object
80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/csv/query.rb', line 80 def run! csv.each do |row| Record.create!(row.to_h) end records = yield if json_format? puts records.map { |e| e.attributes }.to_json else rows = records.map { |e| e.attributes.values } puts Terminal::Table.new :headings => csv_headers, :rows => rows end end |