Sha256: aeba1e41b1aee2932961d7d72d78967c1673e642b5a75e8930b9724f11b21fb9

Contents?: true

Size: 1.9 KB

Versions: 3

Compression:

Stored size: 1.9 KB

Contents

module React
  module Component
    class PropsWrapper
      attr_reader :props

      def self.define_param(name, param_type, owner)
        owner.define_method("#{name}") do |*args, &block|
          deprecated_params_method("#{name}", *args, &block)
        end
        if param_type == Observable
          owner.define_method("#{name}!") do |*args|
            deprecated_params_method("#{name}!", *args)
          end
          define_method("#{name}") do
            value_for(name)
          end
          define_method("#{name}!") do |*args|
            current_value = value_for(name)
            if args.count > 0
              props[name].call args[0]
              current_value
            else
              # rescue in case we in middle of render... What happens during a
              # render that causes exception?
              # Where does `dont_update_state` come from?
              props[name].call current_value unless @dont_update_state rescue nil
              props[name]
            end
          end
        elsif param_type == Proc
          define_method("#{name}") do |*args, &block|
            props[name].call(*args, &block) if props[name]
          end
        else
          define_method("#{name}") do
            if param_type.respond_to? :_react_param_conversion
              param_type._react_param_conversion props[name]
            elsif param_type.is_a?(Array) &&
              param_type[0].respond_to?(:_react_param_conversion)
              props[name].collect do |param|
                param_type[0]._react_param_conversion param
              end
            else
              props[name]
            end
          end
        end
      end

      def initialize(props)
        @props = props || {}
      end

      def [](prop)
        props[prop]
      end

      private

      def value_for(name)
        self[name].instance_variable_get("@value") if self[name]
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
reactive-ruby-0.7.36 lib/react/component/props_wrapper.rb
reactive-ruby-0.7.35 lib/react/component/props_wrapper.rb
reactive-ruby-0.7.34 lib/react/component/props_wrapper.rb