clearwater-crossroads 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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,8 @@
1
+ module Crossroads
2
+ class Redirect
3
+ include Clearwater::Component
4
+
5
+ def render
6
+ end
7
+ end
8
+ 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
@@ -0,0 +1,3 @@
1
+ module Crossroads
2
+ VERSION = "0.0.1"
3
+ 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: []