Sha256: 8d3e7aafdc403595b3f28f84a2dabe4bb3a0597936cd99539c9b11a88048838b

Contents?: true

Size: 1.19 KB

Versions: 5

Compression:

Stored size: 1.19 KB

Contents

module Wukong

  # :nodoc:
  # 
  # This code is gross and nasty.
  module DynamicGet

    # :nodoc:
    def self.included klass
      klass.send(:field, :separator, String, :default => "\t", :doc => "The default separator between fields on a single line")
    end

    # :nodoc:
    def get field, obj
      return obj unless field
      case
      when field.to_s.to_i > 0 && obj.is_a?(String)
        obj.split(separator)[field.to_s.to_i - 1]
      when field.to_s.to_i > 0
        obj[field.to_s.to_i - 1]
      when field.to_s.to_i == 0 && obj.is_a?(String) && obj =~ /^\s*\{/
        begin
          get_nested(field, MultiJson.load(obj))
        rescue MultiJson::DecodeError => e
        end
      when field.to_s.to_i == 0 && (!field.to_s.include?('.')) && obj.respond_to?(field.to_s)
        obj.send(field.to_s)
      when field.to_s.to_i == 0 && obj.respond_to?(:[])
        get_nested(field, obj)
      else obj
      end
    end

    # :nodoc:
    def get_nested fields, obj
      parts = fields.to_s.split('.')
      field = parts.shift
      return unless field
      if slice = obj[field]
        return slice if parts.empty?
        get_nested(parts.join('.'), slice)
      end
    end

  end
end

Version data entries

5 entries across 5 versions & 2 rubygems

Version Path
ul-wukong-4.1.1 lib/wukong/widget/utils.rb
ul-wukong-4.1.0 lib/wukong/widget/utils.rb
wukong-4.0.0 lib/wukong/widget/utils.rb
wukong-3.0.1 lib/wukong/widget/utils.rb
wukong-3.0.0 lib/wukong/widget/utils.rb