class Dslable::Generators::ProductCodes::DslModel

Constants

DSL_MODEL_TEMPLATE

Attributes

dsl[RW]

Public Class Methods

new(_dsl) click to toggle source
== initialize dsl model
=== Params
  • _dsl: input from dsl

# File lib/generators/product_codes/dsl_model.rb, line 30
def initialize(_dsl)
  fail InvalidDslError.new('dsl not allow nil') if _dsl.nil?
  @dsl = _dsl
end

Public Instance Methods

generate() click to toggle source
# File lib/generators/product_codes/dsl_model.rb, line 35
def generate
  dsl_model_src = adapt_template(@dsl.camelized_gem_name, get_fields)
  generate_dsl_model_src dsl_model_src
end

Private Instance Methods

adapt_template(gem_name_camel, fields) click to toggle source
# File lib/generators/product_codes/dsl_model.rb, line 54
def adapt_template(gem_name_camel, fields)
  gem_name = @dsl._gem_name
  erb = ERB.new(DSL_MODEL_TEMPLATE)
  erb.result(binding)
end
generate_dsl_model_src(dsl_model_src) click to toggle source
# File lib/generators/product_codes/dsl_model.rb, line 60
def generate_dsl_model_src(dsl_model_src)
  File.open("./lib/#{@dsl._gem_name}_dsl_model.rb", 'w') { |f|f.puts dsl_model_src }
end
get_fields() click to toggle source
# File lib/generators/product_codes/dsl_model.rb, line 41
def get_fields
  fields = []
  @dsl.fields.each do |field|
    field_codes = []
    field_codes << "    # #{field._desc}"
    field_codes << "    attr_accessor :#{field._field_name}"
    field_codes << "    validates :#{field._field_name}, presence: true" if field._args._required
    field_codes << ''
    fields << field_codes.join("\n")
  end
  fields.join("\n")
end