hyper-router 4.0.0 → 4.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 77e89bd0516ef8221fa2520ca3959c01b3310818
4
- data.tar.gz: 33a47f5a63a77de06ab7d13947cdc53d7997dc07
3
+ metadata.gz: 6e5fcad96836cef5e80a04939e0a50ffc6884584
4
+ data.tar.gz: 7728921b4f4f45a9b60a9e8e22eac90cd6ad86cb
5
5
  SHA512:
6
- metadata.gz: 8c78ae7c11bc1942b5f46ba15626cf87f879f4059a4716723d937dc463ef216c1606a845ab9c895b4215ddf22c2163cacf07336c259e4c1c4d92c2a680a6071b
7
- data.tar.gz: 164b196fce9e58159800e1dc44ed33830c24dd24e49cc8274a1a0b1f96be6c84401da08be1ec6422f0734d5dd41b2c15902944b33b58e4aa25d8be4ccfad967e
6
+ metadata.gz: 0a3f6ab32532f2b455e17539b8ee74b93192239a55fd64eb5d190ee1419b872b47026375939c9fc49e13855081492ab2ac894dde68ae34543db609eeffe4c546
7
+ data.tar.gz: a25595ed8d84964d8df069cfcb57f9e4f7688a4b73eee454dc7526f90dde1d63bb1c817affa16543cb3b4510f3cd0f7548bc85c0b0a808f5d1a4d8d060d69a5d
data/README.md CHANGED
@@ -1,6 +1,17 @@
1
- ## HyperRouter
1
+ <p align="center">
2
+ <a href="http://ruby-hyperloop.io/" alt="Hyperloop" title="Hyperloop">
3
+ <img src="https://github.com/ruby-hyperloop/ruby-hyperloop.io/blob/sprint/source/images/HyperRouter.png" width="150px"/>
4
+ </a>
5
+ </p>
6
+
7
+ <h1 align="center">
8
+ HyperRouter
9
+ </h1>
10
+
11
+ <p align="center">
12
+ HyperRouter allows you write and use the React Router in Ruby through Opal.
13
+ </p>
2
14
 
3
- HyperRouter allows you write and use the React Router in Ruby through Opal.
4
15
 
5
16
  ## Installation
6
17
 
@@ -201,7 +212,7 @@ class MyRouter < Hyperloop::Router
201
212
  end
202
213
  ```
203
214
 
204
- ### BrowserRouter, HashRouter, MemoryRouter, StaticRouter
215
+ ### BrowserRouter, HashRouter, MemoryRouter
205
216
 
206
217
  Using one of these classes automatically takes care of the history for you,
207
218
  so you don't need to specify one.
@@ -216,6 +227,25 @@ class MyRouter < React::Component::Base
216
227
  end
217
228
  ```
218
229
 
230
+ ### StaticRouter
231
+
232
+ Static router is a little different, since it doesn't actually have a history.
233
+ These are used under-the-hood for any other Router during prerendering.
234
+ To use a path with a StaticRouter, with the macro `initial_path`.
235
+ This acts the same as `prerender_path` for other routers.
236
+
237
+ ```ruby
238
+ class MyRouter < Hyperloop::StaticRouter
239
+ initial_path :current_path
240
+
241
+ route do
242
+ DIV do
243
+ Route('/:name', mounts: Greet)
244
+ end
245
+ end
246
+ end
247
+ ```
248
+
219
249
  ### Rendering a Router
220
250
 
221
251
  To render children/routes use the `route` macro, it is the equivalent to `render` of a component.
@@ -30,12 +30,8 @@ IF USING NPM/WEBPACK:
30
30
  require 'hyper-router/match'
31
31
  require 'hyper-router/class_methods'
32
32
  require 'hyper-router/component_methods'
33
+ require 'hyper-router/instance_methods'
33
34
 
34
- require 'hyperloop/router/base/class_methods'
35
- require 'hyperloop/router/browser/class_methods'
36
- require 'hyperloop/router/hash/class_methods'
37
- require 'hyperloop/router/memory/class_methods'
38
- require 'hyperloop/router/static/class_methods'
39
35
  require 'hyperloop/router/base'
40
36
  require 'hyperloop/router/browser'
41
37
  require 'hyperloop/router/component'
@@ -1,43 +1,41 @@
1
1
  module HyperRouter
2
+ class NoHistoryError < StandardError; end
3
+
2
4
  module ClassMethods
3
- def prerender_path(*args)
5
+ def initial_path(*args)
4
6
  name = args[0].is_a?(Hash) ? args[0].first[0] : args[0]
5
7
 
6
- define_method(:prerender_path) do
8
+ define_method(:initial_path) do
7
9
  params.send(:"#{name}")
8
10
  end
9
11
 
10
12
  param(*args)
11
13
  end
12
14
 
13
- def history(history_type)
14
- define_method(:history) do
15
- @history ||= self.class.send(:"#{history_type}_history")
15
+ alias prerender_path initial_path
16
+
17
+ def history(*args)
18
+ if args.count > 0
19
+ @__history_type = args.first
20
+ elsif @__history_type
21
+ @__history ||= send(:"#{@__history_type}_history")
16
22
  end
17
23
  end
18
24
 
19
- def prerender_router(&block)
20
- define_method(:render) do
21
- location = {}.tap do |hash|
22
- pathname, search = (respond_to?(:prerender_path) ? prerender_path : '').split('?', 2)
23
- hash[:pathname] = pathname
24
- hash[:search] = search ? "?#{search}" : ''
25
- end
26
-
27
- React::Router::StaticRouter(location: location.to_n, context: {}.to_n) do
28
- instance_eval(&block)
29
- end
30
- end
25
+ def location
26
+ Location.new(`#{history.to_n}.location`)
31
27
  end
32
28
 
33
29
  def route(&block)
34
- if React::IsomorphicHelpers.on_opal_client?
35
- render_router(&block)
36
- else
30
+ if React::IsomorphicHelpers.on_opal_server?
37
31
  prerender_router(&block)
32
+ else
33
+ render_router(&block)
38
34
  end
39
35
  end
40
36
 
37
+ private
38
+
41
39
  def browser_history
42
40
  React::Router::History.current.create_browser_history
43
41
  end
@@ -49,5 +47,29 @@ module HyperRouter
49
47
  def memory_history(*args)
50
48
  React::Router::History.current.create_memory_history(*args)
51
49
  end
50
+
51
+ def render_router(&block)
52
+ define_method(:render) do
53
+ raise(HyperRouter::NoHistoryError, 'A history must be defined') unless history
54
+
55
+ React::Router::Router(history: history.to_n) do
56
+ instance_eval(&block)
57
+ end
58
+ end
59
+ end
60
+
61
+ def prerender_router(&block)
62
+ define_method(:render) do
63
+ location = {}.tap do |hash|
64
+ pathname, search = (respond_to?(:initial_path) ? initial_path : '').split('?', 2)
65
+ hash[:pathname] = pathname
66
+ hash[:search] = search ? "?#{search}" : ''
67
+ end
68
+
69
+ React::Router::StaticRouter(location: location.to_n, context: {}.to_n) do
70
+ instance_eval(&block)
71
+ end
72
+ end
73
+ end
52
74
  end
53
75
  end
@@ -10,12 +10,15 @@ module HyperRouter
10
10
  @native
11
11
  end
12
12
 
13
+ def location
14
+ HyperRouter::Location.new(`#{@native}.location`)
15
+ end
16
+
13
17
  alias_native :block
14
18
  alias_native :create_href, :createHref
15
19
  alias_native :go
16
20
  alias_native :go_back, :goBack
17
21
  alias_native :go_forward, :goForward
18
- alias_native :location, :location
19
22
  alias_native :push, :push
20
23
  alias_native :replace, :replace
21
24
  end
@@ -0,0 +1,11 @@
1
+ module HyperRouter
2
+ module InstanceMethods
3
+ def history
4
+ self.class.history
5
+ end
6
+
7
+ def location
8
+ self.class.location
9
+ end
10
+ end
11
+ end
@@ -1,3 +1,3 @@
1
1
  module HyperRouter
2
- VERSION = '4.0.0'
2
+ VERSION = '4.0.1'
3
3
  end
@@ -1,35 +1,35 @@
1
1
  module Hyperloop
2
2
  class Router
3
3
  def self.inherited(child)
4
- child.include(React::Component)
4
+ child.include(Hyperloop::Component::Mixin)
5
5
  child.include(Base)
6
6
  end
7
7
  end
8
8
 
9
9
  class BrowserRouter
10
10
  def self.inherited(child)
11
- child.include(React::Component)
11
+ child.include(Hyperloop::Component::Mixin)
12
12
  child.include(Hyperloop::Router::Browser)
13
13
  end
14
14
  end
15
15
 
16
16
  class HashRouter
17
17
  def self.inherited(child)
18
- child.include(React::Component)
18
+ child.include(Hyperloop::Component::Mixin)
19
19
  child.include(Hyperloop::Router::Hash)
20
20
  end
21
21
  end
22
22
 
23
23
  class MemoryRouter
24
24
  def self.inherited(child)
25
- child.include(React::Component)
25
+ child.include(Hyperloop::Component::Mixin)
26
26
  child.include(Hyperloop::Router::Memory)
27
27
  end
28
28
  end
29
29
 
30
30
  class StaticRouter
31
31
  def self.inherited(child)
32
- child.include(React::Component)
32
+ child.include(Hyperloop::Component::Mixin)
33
33
  child.include(Hyperloop::Router::Static)
34
34
  end
35
35
  end
@@ -3,8 +3,8 @@ module Hyperloop
3
3
  module Base
4
4
  def self.included(base)
5
5
  base.extend(HyperRouter::ClassMethods)
6
- base.extend(ClassMethods)
7
6
 
7
+ base.include(HyperRouter::InstanceMethods)
8
8
  base.include(HyperRouter::ComponentMethods)
9
9
  end
10
10
  end
@@ -3,8 +3,9 @@ module Hyperloop
3
3
  module Browser
4
4
  def self.included(base)
5
5
  base.extend(HyperRouter::ClassMethods)
6
- base.extend(ClassMethods)
6
+ base.history(:browser)
7
7
 
8
+ base.include(HyperRouter::InstanceMethods)
8
9
  base.include(HyperRouter::ComponentMethods)
9
10
  end
10
11
  end
@@ -2,7 +2,7 @@ module Hyperloop
2
2
  class Router
3
3
  class Component
4
4
  def self.inherited(base)
5
- base.include(React::Component)
5
+ base.include(Hyperloop::Component::Mixin)
6
6
  base.include(HyperRouter::ComponentMethods)
7
7
 
8
8
  base.class_eval do
@@ -1,10 +1,11 @@
1
1
  module Hyperloop
2
2
  class Router
3
- module Browser
3
+ module Hash
4
4
  def self.included(base)
5
5
  base.extend(HyperRouter::ClassMethods)
6
- base.extend(ClassMethods)
7
-
6
+ base.history(:hash)
7
+
8
+ base.include(HyperRouter::InstanceMethods)
8
9
  base.include(HyperRouter::ComponentMethods)
9
10
  end
10
11
  end
@@ -3,8 +3,9 @@ module Hyperloop
3
3
  module Memory
4
4
  def self.included(base)
5
5
  base.extend(HyperRouter::ClassMethods)
6
- base.extend(ClassMethods)
7
-
6
+ base.history(:memory)
7
+
8
+ base.include(HyperRouter::InstanceMethods)
8
9
  base.include(HyperRouter::ComponentMethods)
9
10
  end
10
11
  end
@@ -1,10 +1,17 @@
1
1
  module Hyperloop
2
2
  class Router
3
3
  module Static
4
+ module ClassMethods
5
+ def route(&block)
6
+ prerender_router(&block)
7
+ end
8
+ end
9
+
4
10
  def self.included(base)
5
11
  base.extend(HyperRouter::ClassMethods)
6
12
  base.extend(ClassMethods)
7
-
13
+
14
+ base.include(HyperRouter::InstanceMethods)
8
15
  base.include(HyperRouter::ComponentMethods)
9
16
  end
10
17
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hyper-router
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0
4
+ version: 4.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam George
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-24 00:00:00.000000000 Z
11
+ date: 2017-03-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hyper-component
@@ -486,22 +486,18 @@ files:
486
486
  - lib/hyper-router/class_methods.rb
487
487
  - lib/hyper-router/component_methods.rb
488
488
  - lib/hyper-router/history.rb
489
+ - lib/hyper-router/instance_methods.rb
489
490
  - lib/hyper-router/location.rb
490
491
  - lib/hyper-router/match.rb
491
492
  - lib/hyper-router/react-router-source.rb
492
493
  - lib/hyper-router/version.rb
493
494
  - lib/hyperloop/router.rb
494
495
  - lib/hyperloop/router/base.rb
495
- - lib/hyperloop/router/base/class_methods.rb
496
496
  - lib/hyperloop/router/browser.rb
497
- - lib/hyperloop/router/browser/class_methods.rb
498
497
  - lib/hyperloop/router/component.rb
499
498
  - lib/hyperloop/router/hash.rb
500
- - lib/hyperloop/router/hash/class_methods.rb
501
499
  - lib/hyperloop/router/memory.rb
502
- - lib/hyperloop/router/memory/class_methods.rb
503
500
  - lib/hyperloop/router/static.rb
504
- - lib/hyperloop/router/static/class_methods.rb
505
501
  - lib/react/router.rb
506
502
  - lib/react/router/dom.rb
507
503
  - lib/react/router/history.rb
@@ -527,7 +523,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
527
523
  version: '0'
528
524
  requirements: []
529
525
  rubyforge_project:
530
- rubygems_version: 2.5.1
526
+ rubygems_version: 2.5.2
531
527
  signing_key:
532
528
  specification_version: 4
533
529
  summary: react-router for Opal, part of the hyperloop gem family
@@ -1,21 +0,0 @@
1
- module Hyperloop
2
- class Router
3
- module Base
4
- module ClassMethods
5
- def render_router(&block)
6
- define_method(:render) do
7
- if respond_to?(:history)
8
- React::Router::Router(history: history.to_n) do
9
- instance_eval(&block)
10
- end
11
- else
12
- React::Router::MemoryRouter(location: { pathname: '/' }.to_n) do
13
- instance_eval(&block)
14
- end
15
- end
16
- end
17
- end
18
- end
19
- end
20
- end
21
- end
@@ -1,15 +0,0 @@
1
- module Hyperloop
2
- class Router
3
- module Browser
4
- module ClassMethods
5
- def render_router(&block)
6
- define_method(:render) do
7
- React::Router::DOM::BrowserRouter() do
8
- instance_eval(&block)
9
- end
10
- end
11
- end
12
- end
13
- end
14
- end
15
- end
@@ -1,15 +0,0 @@
1
- module Hyperloop
2
- class Router
3
- module Hash
4
- module ClassMethods
5
- def render(&block)
6
- define_method(:render) do
7
- React::Router::DOM::HashRouter() do
8
- instance_eval(&block)
9
- end
10
- end
11
- end
12
- end
13
- end
14
- end
15
- end
@@ -1,15 +0,0 @@
1
- module Hyperloop
2
- class Router
3
- module Memory
4
- module ClassMethods
5
- def render(&block)
6
- define_method(:render) do
7
- React::Router::MemoryRouter() do
8
- instance_eval(&block)
9
- end
10
- end
11
- end
12
- end
13
- end
14
- end
15
- end
@@ -1,15 +0,0 @@
1
- module Hyperloop
2
- class Router
3
- module Static
4
- module ClassMethods
5
- def render_router(&block)
6
- define_method(:render) do
7
- React::Router::StaticRouter() do
8
- instance_eval(&block)
9
- end
10
- end
11
- end
12
- end
13
- end
14
- end
15
- end