Sha256: 11f1b244011e566296a650d69248ee498b552870c0a8ed3fe2c0989d4635643a

Contents?: true

Size: 1.54 KB

Versions: 1

Compression:

Stored size: 1.54 KB

Contents

module React

  module Router

    class RR < React::NativeLibrary
      imports ReactRouter
    end

    def self.included(base)
      base.class_eval do

        include React::Component

        export_component

        def render
          show if self.class.routing?
        end

        def self.routing?
          @routing
        end

        def self.routing!
          was_routing = @routing
          @routing = true
          was_routing
        end

        def self.handler(handler)
          React::API.create_native_react_class(handler)
        end

        after_mount do
          unless self.class.routing!
            x = `React.findDOMNode(#{self}.native)`
            routes = self.class.class_eval { @routes.call }
            %x{
              ReactRouter.run(#{routes}, ReactRouter.HistoryLocation, function(root) {
                React.render(React.createElement(root), #{x});
              });
            }
          end
        end

        def self.routes(opts = {}, &block)
          opts[:handler] ||= self
          @routes = -> { self.route(opts, generate_node = true, &block) }
        end

        def self.route(opts = {}, generate_node = nil, &block)
          opts[:handler] = self.handler(opts[:handler])
          generate_node ? RR::Route_as_node(opts, &block) : RR::Route(opts, &block)
        end

        def self.default_route(ops = {}, &block)
          RR::DefaultRoute(opts, &block)
        end

        def self.redirect(opts = {}, &block)
          RR::Redirect(opts, &block)
        end

      end
    end

  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
reactive-router-0.2.0 lib/reactive-router/router.rb