Sha256: f62f0018b0bd96ba96012d5026146a14ca3551b714ada55dba344f8272b0f017

Contents?: true

Size: 1.56 KB

Versions: 6

Compression:

Stored size: 1.56 KB

Contents

module HyperRouter
  class NoHistoryError < StandardError; end

  module ClassMethods
    def history(*args)
      if args.count > 0
        @__history_type = args.first
      elsif @__history_type
        @__history ||= send(:"#{@__history_type}_history")
      end
    end

    def location
      Location.new(`#{history.to_n}.location`)
    end

    def route(&block)
      if React::IsomorphicHelpers.on_opal_server?
        prerender_router(&block)
      else
        render_router(&block)
      end
    end

    private

    def browser_history
      @__browser_history ||= React::Router::History.current.create_browser_history
    end

    def hash_history(*args)
      @__hash_history ||= React::Router::History.current.create_hash_history(*args)
    end

    def memory_history(*args)
      @__memory_history ||= React::Router::History.current.create_memory_history(*args)
    end

    def render_router(&block)
      define_method(:render) do
        raise(HyperRouter::NoHistoryError, 'A history must be defined') unless history

        React::Router::Router(history: history.to_n) do
          instance_eval(&block)
        end
      end
    end

    def prerender_router(&block)
      define_method(:render) do
        location = {}.tap do |hash|
          pathname, search = IsomorphicMethods.request_fullpath.split('?', 2)
          hash[:pathname] = pathname
          hash[:search] = search ? "?#{search}" : ''
        end

        React::Router::StaticRouter(location: location.to_n, context: {}.to_n) do
          instance_eval(&block)
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
hyper-router-4.2.6.lap27 lib/hyper-router/class_methods.rb
hyper-router-4.2.6.lap26 lib/hyper-router/class_methods.rb
hyper-router-4.2.6.lap25 lib/hyper-router/class_methods.rb
hyper-router-4.2.6.lap24 lib/hyper-router/class_methods.rb
hyper-router-4.2.6.lap23 lib/hyper-router/class_methods.rb
hyper-router-4.2.6.lap22 lib/hyper-router/class_methods.rb