Sha256: ba950d72ee34ce457a68253c7bee7079ebb2e956e4a5c46743c1809cb5d30eeb

Contents?: true

Size: 1.58 KB

Versions: 3

Compression:

Stored size: 1.58 KB

Contents

# encoding: utf-8
module Jiralicious
  module Parsers
    ##
    # The FieldParser module is an extention that assists in
    # managing hash parsing and implementation.
    #
    module FieldParser
      ##
      # Parses an Array or Hash into the current class object.
      #
      def parse!(fields)
        unless fields.is_a?(Hash)
          raise ArgumentError
        end
        @jiralicious_field_parser_data = {}
        singleton = class << self; self end

        fields.each do |field, details|
          if details.is_a?(Hash)
            next if details["name"].nil?
            method_value = mashify(details["value"])
            method_name  = normalize(details["name"])
          else
            method_value = mashify(details)
            method_name = normalize(field)
          end

          if singleton.method_defined?(method_name)
            method_name = "jira_#{method_name}"
          end

          @jiralicious_field_parser_data[method_name] = method_value
          singleton.send :define_method, method_name do
            @jiralicious_field_parser_data[method_name]
          end
        end
      end

      private

      ##
      # Normalizes key names
      #
      def normalize(name)
        name.gsub(/(\w+)([A-Z].*)/, '\1_\2').
          gsub(/\W/, "_").
          downcase
      end

      ##
      # Converts Array or Hash to a Mash object
      #
      def mashify(data)
        if data.is_a?(Array)
          data.map { |d| mashify(d) }
        elsif data.is_a?(Hash)
          Hashie::Mash.new(data)
        else
          data
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
jiralicious-0.3.0 lib/jiralicious/parsers/field_parser.rb
jiralicious-0.2.2 lib/jiralicious/parsers/field_parser.rb
jiralicious-0.2.1 lib/jiralicious/parsers/field_parser.rb