Sha256: ffa3233092ed3580b2b68e54dae25eb4f6396454de78222ff2bf7b1a431bfd8a

Contents?: true

Size: 1.47 KB

Versions: 1

Compression:

Stored size: 1.47 KB

Contents

module Ryakuzu
  class SchemaService
    include Ryakuzu::SchemaExtenstions

    def initialize
      @file     = File.readlines(Rails.root.join('db', 'schema.rb'))
      @schema   = ''
      @sch_hash = {}
    end

    def call
      parse_schema
      create_hash_from_schema
    end

    def hash
      call
      models = []
      sch_hash.map { |key, value| models << Ryakuzu::Table.generate_models(key, value) }
      models
    end

    def schema_to_csv
      CSV.open('schema.csv', 'wb') { |csv| sch_hash.to_a.map { |elem| csv << elem } }
    end

    private

    def parse_schema
      file.each do |line|
        parts = line.split ' '
        next if parts.nil? || parts.length < 1 || parts[0] == '#'
        if parts[0] == 'create_table'
          table_name = table_name(parts[1])
          schema << "__#{table_name},"
        end

        if parts[0][0] == 't'
          field_name = field_name(parts[1])
          schema << "#{field_name}__"
        end
      end
    end

    def create_hash_from_schema
      return if sch_hash.present?
      array      = convert_source
      hash_array = convert_to_hash(array)

      hash_array.each_with_index do |i, _v|
        sch_hash.merge!(i[0] => i.reject { |k| k == i[0] })
      end
    end

    def convert_source
      @schema = schema.split('__').join(',')
      schema[0] = ''
      schema.split(',,')
    end

    def convert_to_hash(array)
      arr_m = []
      array.map { |k, _v| arr_m << k.split(',') }
      arr_m
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ryakuzu-0.2.6 lib/ryakuzu/schema_service.rb