Sha256: 438957e6e59a8cc8f2f6057441dfb2235646a9b4db333eb730cebb7d9e5a5f5a

Contents?: true

Size: 1.7 KB

Versions: 8

Compression:

Stored size: 1.7 KB

Contents

module Spider
    
    class WidgetAttributes < Hash
        
        def initialize(widget)
            @widget = widget
            @attributes = widget.class.attributes
            @attributes.each do |k, params|
                if params[:default]
                    if (params[:default].is_a?(Proc))
                        self[k] = params[:default].call
                    else
                        self[k] = params[:default]
                    end
                end
            end
        end
        
        def []=(k, v)
            params = @attributes[k]
            raise ArgumentError, "#{k} is not an allowed attribute for widget #{@widget}" unless params
            raise ArgumentError, "#{k} is not in the correct format" if params[:format] && v !=~ params[:format]
            if (params[:type])
                case params[:type].name
                when 'String'
                    v = v.to_s
                when 'Symbol'
                    v = v.to_sym
                when 'TrueClass', 'FalseClass', 'Spider::DataTypes::Bool'
                    v = v.to_s == 'false' ? false : true
                when 'Fixnum'
                    v = v.to_i
                end
            end
            v = params[:process].call(v) if params[:process] && v
            @widget.instance_variable_set("@#{k}", v) if params[:set_var]
            super(k, v)
        end
        
        def [](k)
            return nil unless @attributes[k]
            params = @attributes[k]
            v = super
            if (!v)
                return @widget.instance_variable_get("@#{k}") if params[:instance_attr]
                return nil
            end
            return v
        end
        
        
    end
    
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
spiderfw-0.5.7 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.5.6 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.5.5 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.5.4 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.5.3 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.5.2 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.5.1 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.5 lib/spiderfw/widget/widget_attributes.rb