class Dslable::Generators::ProductCodes::Dsl

Constants

DSL_TEMPLATE

Attributes

dsl[RW]

Public Class Methods

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

# File lib/generators/product_codes/dsl.rb, line 45
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.rb, line 50
def generate
  dsl_src = adapt_template(@dsl.camelized_gem_name, get_string_fields, get_other_fields, get_set_defaults)
  generate_dsl_src dsl_src
end

Private Instance Methods

adapt_template(gem_name_camel, string_fields, array_hash_fields, set_defaults) click to toggle source
# File lib/generators/product_codes/dsl.rb, line 83
def adapt_template(gem_name_camel, string_fields, array_hash_fields, set_defaults)
  gem_name = @dsl._gem_name
  erb = ERB.new(DSL_TEMPLATE)
  erb.result(binding)
end
generate_dsl_src(dsl_src) click to toggle source
# File lib/generators/product_codes/dsl.rb, line 89
def generate_dsl_src(dsl_src)
  File.open("./lib/#{@dsl._gem_name}_dsl.rb", 'w') { |f|f.puts dsl_src }
end
get_other_fields() click to toggle source
# File lib/generators/product_codes/dsl.rb, line 64
def get_other_fields
  fields = []
  @dsl.fields.each do |field|
    fields << ":#{field._field_name}" unless field._args._klass == String
  end
  fields.join(', ')
end
get_set_defaults() click to toggle source
# File lib/generators/product_codes/dsl.rb, line 72
def get_set_defaults
  set_defaults = []
  gem_name = @dsl._gem_name
  @dsl.fields.each_with_index do |field, index|
    next if field._args._default_value.nil?
    default_value = field._args._klass == String ? "'#{field._args._default_value}'" : field._args._default_value
    set_defaults << "      @#{gem_name}.#{field._field_name} = #{default_value}"
  end
  set_defaults.join("\n")
end
get_string_fields() click to toggle source
# File lib/generators/product_codes/dsl.rb, line 56
def get_string_fields
  fields = []
  @dsl.fields.each do |field|
    fields << ":#{field._field_name}" if field._args._klass == String
  end
  fields.join(', ')
end