Sha256: bd40ec03d1b974ab4a05f1901472c38b7f9440cff0e4291bd403363dc465379c

Contents?: true

Size: 1.29 KB

Versions: 2

Compression:

Stored size: 1.29 KB

Contents

require "dotremap/dsl/item"
require "dotremap/xml_tree"

class Dotremap::Item
  include Dotremap::XmlTree
  include Dotremap::DSL::Item

  AVAILABLE_OPTIONS = %i(
    not
    only
    config_not
    config_only
  ).freeze

  def initialize(name, options = {})
    @skip_identifier = options.delete(:skip_identifier)

    if name
      property = Dotremap::Property.new("name", name)
      add_child(property)
    end

    options.each do |option, value|
      raise "Unavailable option: #{option}" unless AVAILABLE_OPTIONS.include?(option)

      property = Dotremap::Property.new(option, value)
      add_child(property)
    end
  end

  def to_xml
    validate_name_existence
    generate_identifier unless @skip_identifier

    super
  end

  private

  def validate_name_existence
    properties = search_childs(Dotremap::Property)
    raise "Name property does not exist" unless properties.map(&:attr).include?("name")
  end

  def generate_identifier
    properties = search_childs(Dotremap::Property)
    return if properties.map(&:attr).include?("identifier")

    name = properties.find { |p| p.attr == "name" }
    generated_identifier = name.value.gsub(/[^a-zA-Z]/, "_").downcase
    identifier = Dotremap::Property.new("identifier", "remap.#{generated_identifier}")
    childs[1, 0] = identifier
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
dotremap-0.0.8 lib/dotremap/item.rb
dotremap-0.0.7 lib/dotremap/item.rb