class BrainDamage::ModelGenerator
Public Class Methods
new(resource, options = {})
click to toggle source
Calls superclass method
# File lib/generators/brain_damage/lib/model/model_generator.rb, line 5 def initialize(resource, options = {}) @template_file = 'model.rb' super end
Public Instance Methods
add_lines_from_fields()
click to toggle source
# File lib/generators/brain_damage/lib/model/model_generator.rb, line 87 def add_lines_from_fields @parser.class_method_calls[:after_class_definition] += @resource.fields.values.map(&:model_lines).flatten.reject(&:nil?).reject(&:empty?).map { |line| RubySimpleParser::CodeLine.new line } end
add_options_to_belongs_to_line(line)
click to toggle source
# File lib/generators/brain_damage/lib/model/model_generator.rb, line 94 def add_options_to_belongs_to_line(line) related_field = line.scan(/:(\w+)/).first.first.to_sym options = @resource.columns[related_field].dup options.delete :type options = options.map { |key, value| "#{key}: '#{value}'" } if options.any? "#{line}, #{options.join(', ')}" else line end end
attribute_white_list()
click to toggle source
# File lib/generators/brain_damage/lib/model/model_generator.rb, line 69 def attribute_white_list @resource.fields.values.map(&:attr_white_list).reject(&:nil?).join ', ' end
generate()
click to toggle source
Calls superclass method
# File lib/generators/brain_damage/lib/model/model_generator.rb, line 10 def generate improve_belongs_to_lines add_lines_from_fields prettify_lines super end
improve_belongs_to_lines()
click to toggle source
# File lib/generators/brain_damage/lib/model/model_generator.rb, line 73 def improve_belongs_to_lines return unless @parser and @parser.class_method_calls[:after_class_definition] belongs_to_lines = @parser.class_method_calls[:after_class_definition].each_with_index.map { |line, index| [index, line.print] }.select{ |pair| pair.second =~ /belongs_to :(\w+)\s*$/ }.map { |pair| [pair.first, add_options_to_belongs_to_line(pair.second) ] }.each { |pair| @parser.class_method_calls[:after_class_definition][pair.first].line = pair.second } end
prettify_lines()
click to toggle source
# File lib/generators/brain_damage/lib/model/model_generator.rb, line 17 def prettify_lines return if @parser.class_method_calls[:after_class_definition].empty? infos = @parser.class_method_calls[:after_class_definition].map { |line| code = line.print.strip order = if code.starts_with? 'include' 0 elsif code.strip[0, 3].upcase == code.strip[0, 3] unless ['[', '{'].include? code.split("\n").first[-1] 1 else 2 end elsif code.starts_with? 'default_scope' 3 elsif code.starts_with? 'scope :' 4 elsif code.starts_with? 'validates ' 5 elsif code =~ /^(has_many)|(has_and_bel)|(belongs_to)/ 6 elsif code.starts_with? 'accepts_nested_attributes_for' 7 elsif code.starts_with? 'validates_associated' 8 else 9 end { code: code, line: line, order: order } }.sort { |info_a, info_b| order = info_a[:order] <=> info_b[:order] if order != 0 then order else info_a[:code] <=> info_b[:code] end } @parser.class_method_calls[:after_class_definition] = [] current_info = infos.first new_line_number = 0 infos.each do |info| if info[:order] != current_info[:order] @parser.class_method_calls[:after_class_definition] << RubySimpleParser::CodeLine.new("NEW_LINE_#{new_line_number}") new_line_number += 1 current_info = info end @parser.class_method_calls[:after_class_definition] << info[:line] end end
Private Instance Methods
dir()
click to toggle source
# File lib/generators/brain_damage/lib/model/model_generator.rb, line 111 def dir __dir__ end