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 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: []