navtastic 0.1.0 → 0.2.0

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: f1310ede0cecc3da85ea235b10c6bd7b6413d823
4
- data.tar.gz: 7507adc0d81b1e381463fabc7f0a912b24e8b586
3
+ metadata.gz: 0e38b165248d09e76592965914d31a637907efd3
4
+ data.tar.gz: c96c4568a2a0880b2b17cb0599a8bceaa9fa13d5
5
5
  SHA512:
6
- metadata.gz: fab8bbf0725908f60ecdd76c50709ea4cff88ccbf43ba30f4cd1d6085b03b4e3baeae5bd18ebec37ba19f8dec5e77a5e4a77c78395ec0a44621c0c049ce1749b
7
- data.tar.gz: d315fb9dc68df9e0d827b231421684d9b211611b249a69163fa65b95055c797062286a6935144af2246c33e011ff1d9aef3d75e67c6961c48063c312149eb297
6
+ metadata.gz: bad84049a62139b26dd37950e9cc4120056a52c52fc959068eca024fa7655e07f12c516d204e82bb685843604b2c927be13ffa6b53e95df0a7dd0cc23bee78f7
7
+ data.tar.gz: 7733f9d31ec353558f23b6e9db2a24995e86cb5f3529df0bf155b9009537f04c2dce431fd7eaefa9f4c741922a2e5efd7051501722cbb4f70aa9555b748fb8ed
@@ -8,6 +8,7 @@ AllCops:
8
8
  - 'spec/demo/**/*'
9
9
  - 'spec/support/**/*'
10
10
  - 'vendor/**/*'
11
+ - '*.gemspec'
11
12
  TargetRubyVersion: 2.4
12
13
 
13
14
  Metrics/AbcSize:
@@ -26,6 +27,6 @@ Style/FrozenStringLiteralComment:
26
27
  Style/StringLiterals:
27
28
  Enabled: false
28
29
 
29
- Style/TrailingCommaInLiteral:
30
+ Style/TrailingCommaInHashLiteral:
30
31
  EnforcedStyleForMultiline: consistent_comma
31
32
 
@@ -2,6 +2,13 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [0.2.0] - 2018-03-06
6
+
7
+ ### Added
8
+
9
+ - Hot reload option of renderer class
10
+ - Support for Rails (configuration and view helpers)
11
+
5
12
  ## [0.1.0] - 2017-09-05
6
13
 
7
14
  ### Added
@@ -21,4 +28,5 @@
21
28
  - Runtime parameters
22
29
 
23
30
  [Unreleased]: https://github.com/aramvisser/navtastic/compare/v0.1.0...HEAD
24
- [0.1.0]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.1...v0.1.0
31
+ [0.1.0]: https://github.com/aramvisser/navtastic/compare/v0.0.1...v0.1.0
32
+ [0.2.0]: https://github.com/aramvisser/navtastic/compare/v0.1.0...v0.2.0
data/README.md CHANGED
@@ -80,6 +80,12 @@ Using the default renderer, assuming that the current url starts with `/posts`,
80
80
  </ul>
81
81
  ```
82
82
 
83
+ ### Rails
84
+
85
+ When using rails, a `render_menu` helper is added that automatically sets the current_url.
86
+
87
+ Also, put defined menus in `app/menus` to take advantage of hot reload.
88
+
83
89
  ## Documentation
84
90
 
85
91
  ### Submenus
@@ -172,6 +178,9 @@ Navtastic.configure do |config|
172
178
 
173
179
  # Options that are passed to the renderer
174
180
  config.renderer_options = {}
181
+
182
+ # Reload the renderer class every time menu is rendered (helpful during development)
183
+ config.reload_renderer = false
175
184
  end
176
185
  ```
177
186
 
@@ -59,13 +59,13 @@ module Navtastic
59
59
  raise KeyError, "menu not defined: #{name.inspect}" if block.nil?
60
60
 
61
61
  # Merge renderer options globally with those passed at runtime
62
- renderer_options = configuration.renderer_options
62
+ renderer_options = configuration.renderer_options.dup
63
63
  renderer_options.merge!(params.delete(:renderer) || {})
64
64
 
65
65
  menu = Menu.new
66
66
  block.call(menu, params)
67
67
  menu.current_url = current_url
68
- Navtastic.configuration.renderer.render(menu, renderer_options)
68
+ Navtastic.configuration.current_renderer.render(menu, renderer_options)
69
69
  end
70
70
 
71
71
  # A list of all defined menus
@@ -75,3 +75,5 @@ module Navtastic
75
75
  @menu_store.keys
76
76
  end
77
77
  end
78
+
79
+ require 'navtastic/railtie.rb' if defined?(Rails)
@@ -22,9 +22,20 @@ module Navtastic # :nodoc:
22
22
  # @return [Hash]
23
23
  attr_accessor :renderer_options
24
24
 
25
+ # Should the renderer class be reloaded everytime the menu is rendered?
26
+ #
27
+ # This is helpful during development, to avoid restarting the server after
28
+ # every change, but should be disabled during production.
29
+ #
30
+ # Defaults to `false`
31
+ #
32
+ # @return bool
33
+ attr_accessor :reload_renderer
34
+
25
35
  def initialize
26
36
  @renderer = Navtastic::Renderer::Simple
27
37
  @renderer_options = {}
38
+ @reload_renderer = false
28
39
  @base_url = nil
29
40
  end
30
41
 
@@ -45,6 +56,20 @@ module Navtastic # :nodoc:
45
56
  end
46
57
  end
47
58
 
59
+ # @return [Navtastic::Renderer] renderer to use
60
+ #
61
+ # Will hot reload the renderer class if needed
62
+ def current_renderer
63
+ klass = renderer
64
+
65
+ if reload_renderer
66
+ klass = klass.to_s unless klass.is_a?(String)
67
+ Object.const_get(klass)
68
+ else
69
+ klass
70
+ end
71
+ end
72
+
48
73
  private
49
74
 
50
75
  # Built in renderers
@@ -0,0 +1,20 @@
1
+ module Navtastic
2
+ # Helper methods for ActionView
3
+ module ViewHelpers
4
+ def render_menu(menu, options = {})
5
+ Navtastic.render menu, request.fullpath, options
6
+ end
7
+ end
8
+
9
+ # Setup hot reload and add helper to ApplicationHelper
10
+ class Railtie < ::Rails::Railtie
11
+ initializer "navtastic_railtie.initialize_configuration" do |app|
12
+ Navtastic.configuration.reload_renderer = !app.config.eager_load
13
+ ActiveSupport.on_load(:action_view) { include Navtastic::ViewHelpers }
14
+ end
15
+
16
+ config.to_prepare do
17
+ Dir["app/menus/*.rb"].each { |file| load file }
18
+ end
19
+ end
20
+ end
@@ -1,3 +1,3 @@
1
1
  module Navtastic
2
- VERSION = '0.1.0'.freeze
2
+ VERSION = '0.2.0'.freeze
3
3
  end
@@ -85,5 +85,15 @@ RSpec.describe Navtastic do
85
85
  expect(render.options[:foo]).to eq :foo
86
86
  end
87
87
  end
88
+
89
+ context "when render gets called twice in a row" do
90
+ before do
91
+ described_class.render(menu_name, '/', renderer: { foo: :bar })
92
+ end
93
+
94
+ it "won't use the renderer params from the first call" do
95
+ expect(render.options[:foo]).to be_nil
96
+ end
97
+ end
88
98
  end
89
99
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: navtastic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aram Visser
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-05 00:00:00.000000000 Z
11
+ date: 2018-03-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: arbre
@@ -117,6 +117,7 @@ files:
117
117
  - lib/navtastic/configuration.rb
118
118
  - lib/navtastic/item.rb
119
119
  - lib/navtastic/menu.rb
120
+ - lib/navtastic/railtie.rb
120
121
  - lib/navtastic/renderer.rb
121
122
  - lib/navtastic/renderer/bootstrap4.rb
122
123
  - lib/navtastic/renderer/bulma.rb