ruta 1.0.2 → 1.2.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: 713338f9d71694f60b3d07c4dde867f4cd5424eb
4
- data.tar.gz: accb5345eac50bb53720905eaaa2beb26f9115a9
3
+ metadata.gz: c031c5e2a865625d021d0f25c9bfb080bcb5355b
4
+ data.tar.gz: fa54e3be8f2f33388d2b21bb15f636872860b34d
5
5
  SHA512:
6
- metadata.gz: 30eda8ca028915a8c03b9cd68f6e7db38195fd08010d732651065c0c607be06d7327e5011542db6aa11376e56526d74f2a325ae9896f081da2245298c290f8ad
7
- data.tar.gz: e855f91c7cd7e88d16b3de849d2e8b39f04f55ab3f05aa193b09aee02d9f45706061cd28d8fc88d20899e61c7c22354bc017251d4c4b80ffa60fa445313e9a46
6
+ metadata.gz: 31a11420d5e281cc6a9d067625a4038d1e847067e7ad722157281fc6b45574e8e8a267879d36642da0c8ebb530412f130f7146395ef844f3e6731894b89f95b1
7
+ data.tar.gz: 453a1427861d14731546a0a86ec41173fc335f636bb4d3d5791e608eec0bd049c8f2f2198c7a72582b205dea763e4d50440b9081e718b689bc66af5054ef5189
data/README.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Ruta
2
2
 
3
+ ##TODO
4
+ ### Patch
5
+
6
+
7
+ ### Minor
8
+
9
+ ### Major
10
+
3
11
  ## Installation
4
12
 
5
13
  Add this line to your application's Gemfile:
@@ -18,6 +26,24 @@ Or install it yourself as:
18
26
 
19
27
  ## Usage
20
28
 
29
+ ##config settings
30
+
31
+ To configure Ruta's settings you can use a config block
32
+
33
+ Here's a config block with Ruta's default settings
34
+ ```ruby
35
+ Ruta.configure do |config|
36
+ config.context_prefix = false
37
+ end
38
+ ```
39
+
40
+ The following settings have the following effects:
41
+ 1. `context_prefix`
42
+ This setting turns on context prefixing, whenever you navigate to a route
43
+ the context it's located in is pre-fixed to the front of it, navigating to
44
+ a context with this turned on will set the url to being just the context name
45
+
46
+
21
47
  Making use of this router is pretty simple.
22
48
 
23
49
  ###Contexts
@@ -76,15 +102,23 @@ end
76
102
  Next you should define some handlers, not every component needs a handler but every component has one
77
103
  needs to match names with a corresponding handler.
78
104
 
79
- you use the `handle` method to define a handler and you pass into it the name of the element you want this
105
+ you use the `handle` macro to define a handler and you pass into it the name of the element you want this
80
106
  handler to drive.
81
107
 
108
+ You can also however render a sub-context instead of a component, just use:
109
+
110
+ ```ruby
111
+ handle :component do |params,url|
112
+ mount :sub_context
113
+ end
114
+ ```
115
+
82
116
  The handler has two variables passed to it:
83
117
 
84
118
  1. `params` a hash containing the named params of the route
85
119
  2. `url` a string containing the url of the route being passed to the handler
86
120
 
87
- The handler must return a renderable component.
121
+ The handler must return a renderable component or mount a sub-context.
88
122
 
89
123
  ```ruby
90
124
  Ruta::Handlers.define_for :main do
@@ -106,6 +140,9 @@ Ruta::Handlers.define_for :sign_up do
106
140
  end
107
141
  ```
108
142
 
143
+ You can use `default` inside of a handler to render the component in the default state
144
+ as it is defined in the context.
145
+
109
146
  ###Routes
110
147
 
111
148
  The last thing to define before your app is ready is the routes that will activate the correct handlers to
@@ -138,9 +175,9 @@ end
138
175
 
139
176
  ###Renderer
140
177
 
141
- The last step is to tell the router how to render your components.
178
+ The penultimate step is to tell the router how to render your components.
142
179
 
143
- You do this using `Ruta::Context.handle_render` and then creating a macro.
180
+ You do this using `Ruta::Context.handle_render` and then define the render macro.
144
181
  Passed into the macro is the `component` you wish to render and the `element_id` of the components mounting
145
182
  point.
146
183
 
@@ -163,7 +200,7 @@ All you have to do is this
163
200
  ```ruby
164
201
  Ruta.navigate_to_ref(:info_view,:i_switch,value)
165
202
  ```
166
- The first arg is the context the route you wish to navigate to is located in, the second is the
203
+ The first arg is the context of the route you wish to navigate to is located in, the second is the
167
204
  reference of the route, lastly any params you wish to place into the route go next, they are placed into the route as they come.
168
205
 
169
206
  You would most probably use it in a 'click' callback in response to the user clicking on somthing
data/lib/ruta/context.rb CHANGED
@@ -25,7 +25,7 @@ module Ruta
25
25
  @handlers = {}
26
26
  @routes = {}
27
27
  @sub_contexts = []
28
- instance_exec &block if block
28
+ instance_exec(&block) if block
29
29
  end
30
30
 
31
31
  # define a component of the composition
data/lib/ruta/handler.rb CHANGED
@@ -16,13 +16,12 @@ module Ruta
16
16
  # @see #Handlers#define_for
17
17
  def initialize context,block
18
18
  @context = context
19
- instance_exec &block
19
+ instance_exec(&block)
20
20
  end
21
21
 
22
22
  # wipe the matching element and render a context
23
23
  #
24
24
  # @param [Symbol] context context to be mounted to matching element of handler
25
- # @return [Proc] returns a proc to be executed later
26
25
  def mount context
27
26
  handler_name = @handler_name
28
27
  proc {
@@ -31,6 +30,21 @@ module Ruta
31
30
  }
32
31
  end
33
32
 
33
+ # Render the default content for this component as it is defined in the context.
34
+ #
35
+ def default
36
+ handler_name = @handler_name
37
+ proc {
38
+ comp = @context.elements[handler_name][:content]
39
+ if comp.kind_of?(Proc)
40
+ comp.call
41
+ else
42
+ Context.wipe handler_name
43
+ Context.render comp, handler_name
44
+ end
45
+ }
46
+ end
47
+
34
48
  class << self
35
49
  # define handlers for a context
36
50
  #
data/lib/ruta/history.rb CHANGED
@@ -9,7 +9,8 @@ module Ruta
9
9
  # @param [String] url to be added to history
10
10
  # @param [Hash] data to be added to history
11
11
  # @param [String] title to be added to history, defaults to ""
12
- def push(url,data,title="")
12
+ def push(context,url,data,title="")
13
+ url = Ruta.config.context_prefix ? "/#{context}#{url}" : url
13
14
  `history.pushState(#{data.to_n}, #{title}, #{url})`
14
15
  end
15
16
 
data/lib/ruta/route.rb CHANGED
@@ -31,7 +31,7 @@ module Ruta
31
31
 
32
32
  if flags[:to]
33
33
  @type = :handlers
34
- @handlers = [flags.delete :to].flatten
34
+ @handlers = [flags.delete(:to)].flatten
35
35
  elsif flags[:context]
36
36
  @type = :context
37
37
  @handlers = flags.delete :context
@@ -129,6 +129,7 @@ module Ruta
129
129
  when :context
130
130
  Context.wipe
131
131
  Context.render handlers
132
+ History.push(@context_ref.ref,"",[],@context_ref.ref)
132
133
  end
133
134
  end
134
135
 
data/lib/ruta/router.rb CHANGED
@@ -15,7 +15,7 @@ module Ruta
15
15
  def initialize block
16
16
  @current_context = []
17
17
  Context.define(:no_context)
18
- instance_exec &block
18
+ instance_exec(&block)
19
19
  end
20
20
 
21
21
  # set which Context to map the following routes to
@@ -40,7 +40,7 @@ module Ruta
40
40
  # @param [Symbol] reference to context
41
41
  def root_to reference
42
42
  Router.set_root_to reference
43
- context = Context.collection[:no_context]
43
+ context = Context.collection[reference]
44
44
  context.routes[:root]= Route.new('/', context,{ context: reference})
45
45
  end
46
46
 
@@ -79,8 +79,6 @@ module Ruta
79
79
  # root_to :main
80
80
  # end
81
81
  # @note please be aware that placing contexts within other contexts doesn't actully do anything.
82
- # however it is planed to be able to mount sub contexts to a route and re-direct as neccasary
83
- # think mounting engines or sub apps in RoR or Padrino
84
82
  # @yield Use this block to define any routes
85
83
  def define &block
86
84
  new block
@@ -91,6 +89,12 @@ module Ruta
91
89
  end
92
90
 
93
91
  def find_and_execute(path)
92
+ path =
93
+ if Ruta.config.context_prefix
94
+ ( path == '/' || path == "") ? path : (path[/(?:\/.*?)(\/.*)/];$1)
95
+ else
96
+ path
97
+ end
94
98
  res = find(path)
95
99
  if res
96
100
  navigate_to res
data/lib/ruta/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Ruta
2
- VERSION = "1.0.2"
2
+ VERSION = "1.2.1"
3
3
  end
data/lib/ruta.rb CHANGED
@@ -14,10 +14,29 @@ if RUBY_ENGINE == 'opal'
14
14
 
15
15
 
16
16
  module Ruta
17
- class << self
17
+ class Config
18
+ attr_accessor :context_prefix
19
+ def initialize &block
20
+ @context_prefix = false
21
+ block_given?
22
+ instance_exec(self,&block) if block_given?
23
+ end
18
24
 
25
+ def configure &block
26
+ instance_exec(&block)
27
+ end
28
+ end
19
29
 
30
+ class << self
31
+ attr_reader :config
20
32
 
33
+ def configure &block
34
+ if self.config
35
+ @config.configure(&block)
36
+ else
37
+ @config = Config.new(&block)
38
+ end
39
+ end
21
40
  # used to retrieve a stored url
22
41
  #
23
42
  # @param [Symbol] context of the stored url, if this is nil it defaults to the current context
@@ -32,10 +51,9 @@ if RUBY_ENGINE == 'opal'
32
51
  # @param [Symbol] context that route is mounted to
33
52
  # @param [Symbol] ref to a route that you wish to navigate to
34
53
  # @param [Array<String,Number,Boolean>] *params 0 or more params to replace params in the paramterized route
35
- # @return [Proc] A proc that can be used as a callback block for an event
36
54
  def navigate_to_ref context, ref,*params
37
55
  route = Router.route_for(context,ref,params)
38
- History.push(route[:path],route[:params],route[:title])
56
+ History.push(context,route[:path],route[:params],route[:title])
39
57
  Router.navigate_to(route)
40
58
  end
41
59
 
@@ -44,7 +62,12 @@ if RUBY_ENGINE == 'opal'
44
62
  # $document.ready do
45
63
  # Ruta.start_app
46
64
  # end
47
- def start_app
65
+ def start_app &block
66
+ if block_given?
67
+ configure(&block)
68
+ else
69
+ configure unless self.config
70
+ end
48
71
  Context.render(Router.current_context)
49
72
  Router.find_and_execute(History.current :path)
50
73
  History.listen_for_pop
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruta
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Becker
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2016-01-30 00:00:00.000000000 Z
12
+ date: 2016-02-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: opal