class Model

Attributes

columns[R]
name[R]
super_class[R]

Public Class Methods

new(rails_model) click to toggle source
# File lib/rails_model_visualizer/model.rb, line 4
def initialize(rails_model)
  @name = rails_model.name
  @columns = rails_model.columns
  @rails_model = rails_model
  @super_class = @rails_model.superclass
  @children = @rails_model.descendants
end

Public Instance Methods

associations() click to toggle source
# File lib/rails_model_visualizer/model.rb, line 114
def associations
  assoc = {}
  @rails_model.reflections.each do |name, association|
    if association.class.name.include?("HasManyReflection")
      type = "has_many"
    elsif association.class.name.include?("HasOneReflection")
      type = "has_one"
    elsif association.class.name.include?("BelongsToReflection")
      type = "belongs_to"
    else
      type = "other"
    end
    options = []
    association.options.each do |key, value|
      options.push("#{key}: #{value}")
    end

    assoc[association.name.to_s] = {"type" => type, "options" => options.join("\n") }

  end
  assoc
end
get_methods(type) click to toggle source
# File lib/rails_model_visualizer/model.rb, line 92
def get_methods(type)
  filename = "#{@name.underscore}.rb"
  result = {};

  @rails_model.new.method(type).call(false).each do |pm|
    source_file = source(@rails_model, pm)
    if source_file[0].include?(filename)
      result[pm] = source_code(source_file, pm)
    end
  end

  result
end
indent(string) click to toggle source
# File lib/rails_model_visualizer/model.rb, line 66
def indent(string)
  indent = ">"
  string.each_char do |char|
    break unless char == " "
    indent += ">"
  end
  indent = indent[2..-1] if indent.length > 1
  indent + string
end
private_methods() click to toggle source
# File lib/rails_model_visualizer/model.rb, line 110
def private_methods
  get_methods(:private_methods)
end
public_methods() click to toggle source
# File lib/rails_model_visualizer/model.rb, line 106
def public_methods
  get_methods(:public_methods)
end
source(model, method) click to toggle source
# File lib/rails_model_visualizer/model.rb, line 61
def source(model, method)
  m = method.to_sym
  @rails_model.new.method(m).source_location
end
source_code(source_file, method) click to toggle source
# File lib/rails_model_visualizer/model.rb, line 76
def source_code(source_file, method)
  path, start_line = source_file
  source_code = []
  line_to_read = start_line - 1
  file = File.readlines(path)

  while true
    source_code.push(indent(file[line_to_read]))
    break if file[line_to_read] == "  end\n"

    line_to_read += 1
  end

  source_code.join("<br>")
end
to_div() click to toggle source
# File lib/rails_model_visualizer/model.rb, line 12
def to_div
  columns = []
  @columns.each do |c|
    columns.push(
    "<div class=\"list-name\">#{c.name}
    <div class=\"list-source\">#{c.sql_type}</div>
    </div>")
  end

  methods = []
  public_methods.each do |name, source_code|
    methods.push(
    "<div class=\"list-name\">#{name}
    <div class=\"list-source\">#{source_code}</div>
    </div>")
  end

  private_methods.each do |name, source_code|
    methods.push(
    "<div class=\"list-name\">#{name}
    <div class=\"list-source\">#{source_code}</div>
    </div>")
  end

  assoc_list = []
  associations.each do |assoc_name, value|
    assoc_list.push(
    "<div class=\"list-name\">#{value["type"]}: #{assoc_name}
    <div class=\"list-source\">#{value["options"]}</div>
    </div>")
  end
  return (
    "<div class=\"model\">
      <h1>#{@name}</h1>
      <div class=\"model-details\">
        <ul>SQL Columns
        #{columns.join("")}
        </ul>
        <ul>Methods
        #{methods.join("")}
        </ul>
        <ul>Associations
        #{assoc_list.join("")}
        </ul>
      </div>
    </div>"
  )
end