Sha256: bb7f0bf3d933721de1a27d957e0c80134fa9c654d121dc51b89adbdc7dbbae35

Contents?: true

Size: 1.72 KB

Versions: 16

Compression:

Stored size: 1.72 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 if v
                when 'TrueClass', 'FalseClass', 'Spider::DataTypes::Bool'
                    v = (v.to_s == 'false' || v.to_s.empty?) ? 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

16 entries across 16 versions & 1 rubygems

Version Path
spiderfw-0.6.21 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.6.20 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.6.19 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.6.18 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.6.17 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.6.16 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.6.15 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.6.14 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.6.13 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.6.12 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.6.11 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.6.10 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.6.9 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.6.8 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.6.7 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.6.6 lib/spiderfw/widget/widget_attributes.rb