Sha256: 0bc3b9fd867e046510e1a530828c54a6a70098e98a963da730def259139cbee0

Contents?: true

Size: 1.97 KB

Versions: 3

Compression:

Stored size: 1.97 KB

Contents

require "columns/version"
require "columns/table"
require "columns/regex"
require "columns/raw_data"
require "columns/model_data"
require "columns/model_cleaner"
require "columns/model_writer"
require "columns/extended_content"

# Public: Columns annotate your activerecord models from a `schema.rb` file.
# That could be handy when your application don't use Rails.
module Columns

  # Public: Annotate models.
  #
  # schema_dir - String directory (absolute or relative) to find the
  #              `schema.rb` file. Default is `./db/`.
  # models_dir - String directory (absolute or relative) to find the
  #              models. Default is `./app/models/`.
  #
  # Returns nothing.
  #
  # Raises SystemExit if the `schema.rb` doesn't exist.
  def self.execute(schema_dir: './db/', models_dir: './app/models/')
    application = Application.new(schema_dir, models_dir)
    application.execute
  end

  private

  # The tool chain.
  class Application

    # Creates a new Application.
    #
    # See Columns.execute for arguments.
    #
    # Raises SystemExit if it can't find the `schema.rb`.
    def initialize(schema_dir, models_dir)
      @models_dir = models_dir
      schema_path = File.expand_path(File.join(schema_dir,'schema.rb'))

      unless File.exists?(schema_path)
        puts "COLUMNS ERROR : #{schema_path} doesn't exist!"
        exit 1
      end
      table = Table.new(File.read(schema_path))

      raw_data_objects = []
      table.names.each do |name|
        raw_data_objects << RawData.new(name, table.content_for(name))
      end

      @model_data_objects = raw_data_objects.map do |object|
        ModelData.new(object)
      end
    end

    # Cleans then writes models.
    #
    # Returns nothing.
    def execute
      writer = ModelWriter.new(path: @models_dir)
      @model_data_objects.each do |object|
        path = File.expand_path(File.join(@models_dir, object.name) + '.rb')
        ModelCleaner.clean(path)
        writer.add_info(object)
      end
    end

  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
columns-0.2.0 lib/columns.rb
columns-0.1.1 lib/columns.rb
columns-0.1.0 lib/columns.rb