clearwater-crossroads 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/clearwater-crossroads.rb +13 -0
- data/lib/crossroads/link.rb +16 -0
- data/lib/crossroads/match.rb +51 -0
- data/lib/crossroads/miss.rb +17 -0
- data/lib/crossroads/redirect.rb +8 -0
- data/lib/crossroads/router.rb +31 -0
- data/lib/crossroads/version.rb +3 -0
- metadata +71 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a7d29f77129d2d25e6c49129f29f392ee7487455
|
4
|
+
data.tar.gz: 0234cbadd671d0abad90c9d66d8d9d0127042ed1
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 36a7870637e98362587b666d7f3cf1f75822f34ae7271cdd940f709c112c589aa44ca622f6040689a7af173e141706c06eabde1dcfb94926b981725370b9abcb
|
7
|
+
data.tar.gz: decf68c7f46e3368153fb995e02e0bc1e223a78e33ec684fb9f44eca6037574bf5f6c5ea16c9c6f60d3d7ccb368f0a065aed8f8ccf7bce029d096563bc46731a
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require_relative 'crossroads/router.rb'
|
2
|
+
require_relative 'crossroads/match.rb'
|
3
|
+
require_relative 'crossroads/miss.rb'
|
4
|
+
require_relative 'crossroads/link.rb'
|
5
|
+
require_relative 'crossroads/redirect.rb'
|
6
|
+
|
7
|
+
unless RUBY_ENGINE == 'opal'
|
8
|
+
begin
|
9
|
+
require 'opal'
|
10
|
+
Opal.append_path File.expand_path('..', __FILE__).untaint
|
11
|
+
rescue LoadError
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Crossroads
|
2
|
+
class Link
|
3
|
+
include Clearwater::Component
|
4
|
+
|
5
|
+
def initialize(attributes = {}, content = nil, &block)
|
6
|
+
@content = content
|
7
|
+
@attributes = attributes
|
8
|
+
@attributes[:href] ||= attributes.delete(:to)
|
9
|
+
end
|
10
|
+
|
11
|
+
def render
|
12
|
+
a(@attributes, @content)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Crossroads
|
2
|
+
|
3
|
+
class Match
|
4
|
+
|
5
|
+
include Clearwater::Component
|
6
|
+
|
7
|
+
def initialize(attributes = {}, pattern:, component: nil, render: nil, &block)
|
8
|
+
@names = []
|
9
|
+
if pattern.kind_of?(Regexp)
|
10
|
+
@pattern = pattern
|
11
|
+
else
|
12
|
+
@pattern = Regexp.new( pattern.split('/').map { |part|
|
13
|
+
md = /:([a-z]+)/.match(part)
|
14
|
+
if md.nil?
|
15
|
+
Regexp.escape(part)
|
16
|
+
else
|
17
|
+
@names << part[1..-1]
|
18
|
+
'([^\/.+])'
|
19
|
+
end
|
20
|
+
}.join('\/') )
|
21
|
+
end
|
22
|
+
|
23
|
+
@attributes = attributes
|
24
|
+
# @attributes[:key] ||= pattern
|
25
|
+
|
26
|
+
@render = ->(params) { component.new(params) } if component
|
27
|
+
@render = render if render
|
28
|
+
@render = block if block
|
29
|
+
end
|
30
|
+
|
31
|
+
def render
|
32
|
+
return nil if Router.matched.last == true
|
33
|
+
location = Router.locations.last
|
34
|
+
md = @pattern.match(location)
|
35
|
+
return nil if md.nil?
|
36
|
+
params = {}
|
37
|
+
@names.each_with_index { |name, i| params[name] = md[i+1] }
|
38
|
+
Router.locations.push(location[md.offset(0)[1]..-1])
|
39
|
+
Router.matched.push(false)
|
40
|
+
|
41
|
+
result = div(@attributes, [@render.call(params)])
|
42
|
+
|
43
|
+
Router.matched.pop()
|
44
|
+
Router.locations.pop()
|
45
|
+
Router.matched.pop()
|
46
|
+
Router.matched.push(true)
|
47
|
+
|
48
|
+
return result
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Crossroads
|
2
|
+
class Miss
|
3
|
+
include Clearwater::Component
|
4
|
+
|
5
|
+
def initialize(attributes = {}, component: nil, render: nil, &block)
|
6
|
+
@attributes = attributes
|
7
|
+
# @attributes[:key] ||= 'miss'
|
8
|
+
@render = -> { component.new } if component
|
9
|
+
@render = render if render
|
10
|
+
@render = block if block
|
11
|
+
end
|
12
|
+
|
13
|
+
def render
|
14
|
+
div(@attributes, [@render.call()]) if !Router.matched.last
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Crossroads
|
2
|
+
class Router
|
3
|
+
include Clearwater::Component
|
4
|
+
|
5
|
+
def initialize(attributes = {}, component: nil, render: nil, &block)
|
6
|
+
@render = ->(params) { component.new(params) } if component
|
7
|
+
@render = render if render
|
8
|
+
@render = block if block
|
9
|
+
|
10
|
+
location = attributes.delete(:location) || $$.window.location.pathname
|
11
|
+
@attributes = attributes
|
12
|
+
# @attributes[:key] ||= location
|
13
|
+
|
14
|
+
@@locations = [ location ]
|
15
|
+
@@matched = [false]
|
16
|
+
end
|
17
|
+
|
18
|
+
def render
|
19
|
+
div(@attributes, [@render.call])
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.locations
|
23
|
+
return @@locations
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.matched
|
27
|
+
return @@matched
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
metadata
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: clearwater-crossroads
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- John Susi
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-10-29 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: clearwater
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.9'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '2'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0.9'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '2'
|
33
|
+
description: Render the router just like you would any other component. Use Matches
|
34
|
+
and Miss for selecting the current path being visible.
|
35
|
+
email: john@susi.se
|
36
|
+
executables: []
|
37
|
+
extensions: []
|
38
|
+
extra_rdoc_files: []
|
39
|
+
files:
|
40
|
+
- lib/clearwater-crossroads.rb
|
41
|
+
- lib/crossroads/link.rb
|
42
|
+
- lib/crossroads/match.rb
|
43
|
+
- lib/crossroads/miss.rb
|
44
|
+
- lib/crossroads/redirect.rb
|
45
|
+
- lib/crossroads/router.rb
|
46
|
+
- lib/crossroads/version.rb
|
47
|
+
homepage: http://rubygems.org/gems/clearwater-crossroads
|
48
|
+
licenses:
|
49
|
+
- MIT
|
50
|
+
metadata: {}
|
51
|
+
post_install_message:
|
52
|
+
rdoc_options: []
|
53
|
+
require_paths:
|
54
|
+
- lib
|
55
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0'
|
60
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
61
|
+
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: '0'
|
65
|
+
requirements: []
|
66
|
+
rubyforge_project:
|
67
|
+
rubygems_version: 2.4.8
|
68
|
+
signing_key:
|
69
|
+
specification_version: 4
|
70
|
+
summary: A declarative router for Clearwater
|
71
|
+
test_files: []
|