class Gigya::GigyaDynamicImplementation

Attributes

area[RW]
connection[RW]
data_keys[RW]
data_results[RW]
function[RW]

Public Instance Methods

blank?() click to toggle source
# File lib/gigya/connection.rb, line 62
def blank?
        to_value.blank?
end
clone_gdi() click to toggle source
# File lib/gigya/connection.rb, line 26
def clone_gdi
        gdi = GigyaDynamicImplementation.new
        gdi.connection = connection
        gdi.area = area
        gdi.function = function
        gdi.data_results = data_results
        gdi.data_keys = (data_keys || []).clone

        return gdi
end
empty?() click to toggle source
# File lib/gigya/connection.rb, line 66
def empty?
        to_value.empty?
end
gdi_value() click to toggle source
# File lib/gigya/connection.rb, line 37
def gdi_value
        current_result = data_results
        data_keys.each do |k|
                current_result = current_result[k]
                return nil if current_result == nil
        end
        return current_result
end
method_missing(name, *args, &block) click to toggle source
Calls superclass method
# File lib/gigya/connection.rb, line 70
def method_missing(name, *args, &block)
        name = name.to_s
        gdi = clone_gdi

        if data_results == nil
                if(name[-1..-1] == "=" && args.size == 1)
                        field_name = name[0..-2]

                        if self.area == nil
                                raise "Can't run a setter on #{area}"
                        else
                                function_name = "set" + field_name.camelize
                                return connection.api_get(area, function_name, val)
                        end
                elsif args.size == 0
                        field_name = name
                        function_name = "get" + field_name.camelize
                        results = connection.api_get(area, function_name)
                        gdi.function = function_name
                        gdi.data_results = results
                        gdi.data_keys = []

                        return gdi
                end
        else
                field_name = name
                if field_name[-1..-1] == "="
                        field_name = field_name[0..-2]
                        if field_name[0..1] == "__"
                                field_name = field_name[2..-1]
                        else
                                field_name = field_name.camelize(:lower)
                        end
                        setter_hash = {}
                        cur_hashpoint = setter_hash
                        curval = gdi.data_results
                        gdi.data_keys.each do |k|
                                curval = curval[k]
                                if Hash === curval
                                        cur_hashpoint[k] = {}
                                        cur_hashpoint = cur_hashpoint[k]
                                elsif Array === curval
                                        cur_hashpoint[k] = []
                                        cur_hashpoint = cur_hashpoint[k]
                                else
                                        cur_hashpoint[k] = curval
                                        cur_hashpoint = curval
                                end
                        end
                        cur_hashpoint[field_name] = args[0]
                        setter_hash.keys.each do |k|
                                val = setter_hash[k]
                                if Hash === val || Array === val
                                        val = val.to_json
                                        setter_hash[k] = val
                                end
                        end

                        return connection.api_get(area, function.gsub(/^get/, "set"), setter_hash)
                else
                        if field_name[0..1] == "__" 
                                # This is an escape sequence to maintain capitalization
                                field_name = field_name[2..-1]
                        else
                                field_name = field_name.camelize(:lower) 
                        end
                        gdi.data_keys.push(field_name) 

                        val = gdi.to_value
                        if Hash === val || Array === val || val == nil
                                return gdi
                        else
                                return val
                        end
                end
        end

        super
end
nil?() click to toggle source
# File lib/gigya/connection.rb, line 58
def nil?
        to_value.nil?
end
to_h() click to toggle source
# File lib/gigya/connection.rb, line 46
def to_h
        gdi_value
end
to_hash() click to toggle source
# File lib/gigya/connection.rb, line 50
def to_hash
        gdi_value
end
to_value() click to toggle source
# File lib/gigya/connection.rb, line 54
def to_value
        gdi_value
end