Sha256: 939a0d8ea9c6352eba386d953e9db6bf173dd5e549109e2d6a5972f0a37c1967

Contents?: true

Size: 1.76 KB

Versions: 20

Compression:

Stored size: 1.76 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("@#{params[:ruby_name]}", 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("@#{params[:ruby_name]}") if params[:instance_attr]
                return nil
            end
            return v
        end
        
        
    end
    
end

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
spiderfw-1.0.1 lib/spiderfw/widget/widget_attributes.rb
spiderfw-1.0.0 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.6.39 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.6.38 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.6.37 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.6.35 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.6.34 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.6.33 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.6.32 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.6.31 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.6.30 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.6.29 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.6.28 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.6.27 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.6.26 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.6.26.pre1 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.6.25 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.6.24 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.6.23 lib/spiderfw/widget/widget_attributes.rb
spiderfw-0.6.22 lib/spiderfw/widget/widget_attributes.rb