simple-navigation 3.13.0 → 4.0.5
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/.gitignore +3 -0
- data/.rspec +1 -0
- data/.travis.yml +10 -3
- data/CHANGELOG.md +420 -0
- data/Guardfile +4 -2
- data/LICENSE +1 -1
- data/README.md +30 -7
- data/Rakefile +25 -2
- data/gemfiles/.bundle/config +2 -0
- data/gemfiles/rails-3-2-stable.gemfile +11 -0
- data/gemfiles/rails-4-1-stable.gemfile +7 -0
- data/gemfiles/rails-4-2-stable.gemfile +7 -0
- data/generators/navigation_config/navigation_config_generator.rb +0 -1
- data/generators/navigation_config/templates/config/navigation.rb +18 -15
- data/lib/simple_navigation.rb +25 -42
- data/lib/simple_navigation/adapters/padrino.rb +2 -2
- data/lib/simple_navigation/adapters/rails.rb +1 -24
- data/lib/simple_navigation/adapters/sinatra.rb +2 -11
- data/lib/simple_navigation/config_file.rb +36 -0
- data/lib/simple_navigation/config_file_finder.rb +42 -0
- data/lib/simple_navigation/{core/configuration.rb → configuration.rb} +7 -1
- data/lib/simple_navigation/{rendering/helpers.rb → helpers.rb} +0 -4
- data/lib/simple_navigation/{core/item.rb → item.rb} +76 -83
- data/lib/simple_navigation/{core/item_adapter.rb → item_adapter.rb} +3 -17
- data/lib/simple_navigation/{core/item_container.rb → item_container.rb} +23 -14
- data/lib/simple_navigation/{core/items_provider.rb → items_provider.rb} +0 -0
- data/lib/simple_navigation/railtie.rb +7 -0
- data/lib/simple_navigation/renderer.rb +12 -0
- data/lib/simple_navigation/{rendering/renderer → renderer}/base.rb +1 -1
- data/lib/simple_navigation/{rendering/renderer → renderer}/breadcrumbs.rb +0 -0
- data/lib/simple_navigation/{rendering/renderer → renderer}/json.rb +2 -0
- data/lib/simple_navigation/{rendering/renderer → renderer}/links.rb +0 -0
- data/lib/simple_navigation/{rendering/renderer → renderer}/list.rb +0 -0
- data/lib/simple_navigation/{rendering/renderer → renderer}/text.rb +0 -0
- data/lib/simple_navigation/version.rb +1 -1
- data/simple-navigation.gemspec +6 -5
- data/spec/fake_app/config/navigation.rb +6 -0
- data/spec/fake_app/rails_app.rb +35 -0
- data/spec/initializers/coveralls.rb +3 -0
- data/spec/initializers/have_css_matcher.rb +8 -3
- data/spec/initializers/memfs.rb +7 -0
- data/spec/initializers/rails.rb +4 -0
- data/spec/initializers/rspec.rb +7 -0
- data/spec/integration/rendering_navigation_spec.rb +14 -0
- data/spec/{lib/simple_navigation → simple_navigation}/adapters/padrino_spec.rb +0 -2
- data/spec/{lib/simple_navigation → simple_navigation}/adapters/rails_spec.rb +43 -94
- data/spec/{lib/simple_navigation → simple_navigation}/adapters/sinatra_spec.rb +4 -6
- data/spec/simple_navigation/config_file_finder_spec.rb +50 -0
- data/spec/simple_navigation/config_file_spec.rb +25 -0
- data/spec/{lib/simple_navigation/core → simple_navigation}/configuration_spec.rb +29 -19
- data/spec/{lib/simple_navigation/rendering → simple_navigation}/helpers_spec.rb +10 -13
- data/spec/{lib/simple_navigation/core → simple_navigation}/item_adapter_spec.rb +14 -11
- data/spec/{lib/simple_navigation/core → simple_navigation}/item_container_spec.rb +130 -42
- data/spec/simple_navigation/item_spec.rb +475 -0
- data/spec/{lib/simple_navigation/core → simple_navigation}/items_provider_spec.rb +1 -3
- data/spec/{lib/simple_navigation/rendering → simple_navigation}/renderer/base_spec.rb +34 -36
- data/spec/{lib/simple_navigation/rendering → simple_navigation}/renderer/breadcrumbs_spec.rb +4 -7
- data/spec/{lib/simple_navigation/rendering → simple_navigation}/renderer/json_spec.rb +5 -11
- data/spec/{lib/simple_navigation/rendering → simple_navigation}/renderer/links_spec.rb +5 -8
- data/spec/{lib/simple_navigation/rendering → simple_navigation}/renderer/list_spec.rb +4 -7
- data/spec/{lib/simple_navigation/rendering → simple_navigation}/renderer/text_spec.rb +4 -7
- data/spec/simple_navigation_spec.rb +190 -0
- data/spec/spec_helper.rb +29 -35
- metadata +128 -113
- data/CHANGELOG +0 -288
- data/lib/simple_navigation/core.rb +0 -5
- data/lib/simple_navigation/rails_controller_methods.rb +0 -164
- data/lib/simple_navigation/rendering.rb +0 -12
- data/rails/init.rb +0 -1
- data/spec/lib/simple_navigation/core/item_spec.rb +0 -703
- data/spec/lib/simple_navigation/rails_controller_methods_spec.rb +0 -270
- data/spec/lib/simple_navigation_spec.rb +0 -300
data/Guardfile
CHANGED
@@ -1,5 +1,7 @@
|
|
1
|
-
guard :rspec do
|
1
|
+
guard :rspec, all_after_pass: true, failed_mode: :none do
|
2
2
|
watch(%r{^spec/.+_spec\.rb$})
|
3
|
-
watch(%r{^lib/(.+)\.rb$}) { |m| "spec
|
3
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
4
|
+
watch(%r{^spec/fake_app/.+\.rb$}) { 'spec/integration' }
|
5
|
+
|
4
6
|
watch('spec/spec_helper.rb') { 'spec' }
|
5
7
|
end
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
[](https://codeclimate.com/github/codeplant/simple-navigation)
|
6
6
|
[](https://coveralls.io/r/codeplant/simple-navigation)
|
7
7
|
|
8
|
-
Simple Navigation is a ruby library for creating navigations (with multiple levels) for your Rails
|
8
|
+
Simple Navigation is a ruby library for creating navigations (with multiple levels) for your Rails, Sinatra or Padrino applications. It runs with all ruby versions (including ruby 2.x).
|
9
9
|
|
10
10
|
## Documentation
|
11
11
|
|
@@ -29,12 +29,35 @@ Don't hesitate to come talk on the [project's group](http://groups.google.com/gr
|
|
29
29
|
|
30
30
|
## Contributing
|
31
31
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
32
|
+
Fork, fix, then send a Pull Request.
|
33
|
+
|
34
|
+
To run the test suite locally against all supported frameworks:
|
35
|
+
|
36
|
+
% bundle install
|
37
|
+
% rake spec:all
|
38
|
+
|
39
|
+
To target the test suite against one framework:
|
40
|
+
|
41
|
+
% rake spec:rails-4-2-stable
|
42
|
+
|
43
|
+
You can find a list of supported spec tasks by running rake -T. You may also find it useful to run a specific test for a specific framework. To do so, you'll have to first make sure you have bundled everything for that configuration, then you can run the specific test:
|
44
|
+
|
45
|
+
% BUNDLE_GEMFILE='gemfiles/rails-4-2-stable.gemfile' bundle install -j 4
|
46
|
+
% BUNDLE_GEMFILE='gemfiles/rails-4-2-stable.gemfile' bundle exec rspec ./spec/requests/users_spec.rb
|
47
|
+
|
48
|
+
### Rake and Bundler
|
49
|
+
|
50
|
+
If you use a shell plugin (like oh-my-zsh:bundler) that auto-prefixes commands with `bundle exec` using the `rake` command will fail.
|
51
|
+
|
52
|
+
Get the original command with `type -a rake`:
|
53
|
+
|
54
|
+
% type -a rake
|
55
|
+
rake is an alias for bundled_rake
|
56
|
+
rake is /Users/username/.rubies/ruby-2.2.3/bin/rake
|
57
|
+
rake is /usr/bin/rake
|
58
|
+
|
59
|
+
In this situation `/Users/username/.rubies/ruby-2.2.3/bin/rake` is the command you should use.
|
37
60
|
|
38
61
|
## License
|
39
62
|
|
40
|
-
Copyright (c)
|
63
|
+
Copyright (c) 2017 codeplant GmbH, released under the MIT license
|
data/Rakefile
CHANGED
@@ -1,10 +1,33 @@
|
|
1
|
-
require 'bundler
|
1
|
+
require 'bundler'
|
2
|
+
Bundler::GemHelper.install_tasks
|
3
|
+
|
4
|
+
require 'rspec/core'
|
2
5
|
require 'rspec/core/rake_task'
|
6
|
+
|
3
7
|
require 'rdoc/task'
|
4
8
|
|
5
9
|
RSpec::Core::RakeTask.new(:spec)
|
6
10
|
|
7
|
-
task default:
|
11
|
+
task default: 'spec'
|
12
|
+
|
13
|
+
namespace :spec do
|
14
|
+
mappers = %w[
|
15
|
+
rails-3-2-stable
|
16
|
+
rails-4-1-stable
|
17
|
+
rails-4-2-stable
|
18
|
+
]
|
19
|
+
|
20
|
+
mappers.each do |gemfile|
|
21
|
+
desc "Run Tests against #{gemfile}"
|
22
|
+
task gemfile do
|
23
|
+
sh "BUNDLE_GEMFILE='gemfiles/#{gemfile}.gemfile' bundle -j 4 --quiet"
|
24
|
+
sh "BUNDLE_GEMFILE='gemfiles/#{gemfile}.gemfile' bundle exec rake -t spec"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
desc 'Run Tests against all ORMs'
|
29
|
+
task all: mappers
|
30
|
+
end
|
8
31
|
|
9
32
|
RDoc::Task.new do |rdoc|
|
10
33
|
rdoc.rdoc_dir = 'rdoc'
|
@@ -4,35 +4,38 @@ SimpleNavigation::Configuration.run do |navigation|
|
|
4
4
|
# Specify a custom renderer if needed.
|
5
5
|
# The default renderer is SimpleNavigation::Renderer::List which renders HTML lists.
|
6
6
|
# The renderer can also be specified as option in the render_navigation call.
|
7
|
-
#
|
7
|
+
#navigation.renderer = Your::Custom::Renderer
|
8
8
|
|
9
|
-
# Specify the class that will be applied to active navigation items.
|
10
|
-
#
|
9
|
+
# Specify the class that will be applied to active navigation items. Defaults to 'selected'
|
10
|
+
#navigation.selected_class = 'selected'
|
11
11
|
|
12
12
|
# Specify the class that will be applied to the current leaf of
|
13
13
|
# active navigation items. Defaults to 'simple-navigation-active-leaf'
|
14
|
-
#
|
14
|
+
#navigation.active_leaf_class = 'simple-navigation-active-leaf'
|
15
15
|
|
16
|
-
#
|
17
|
-
#
|
18
|
-
# navigation.autogenerate_item_ids = false
|
16
|
+
# Specify if item keys are added to navigation items as id. Defaults to true
|
17
|
+
#navigation.autogenerate_item_ids = true
|
19
18
|
|
20
19
|
# You can override the default logic that is used to autogenerate the item ids.
|
21
20
|
# To do this, define a Proc which takes the key of the current item as argument.
|
22
21
|
# The example below would add a prefix to each key.
|
23
|
-
#
|
22
|
+
#navigation.id_generator = Proc.new {|key| "my-prefix-#{key}"}
|
24
23
|
|
25
24
|
# If you need to add custom html around item names, you can define a proc that
|
26
25
|
# will be called with the name you pass in to the navigation.
|
27
26
|
# The example below shows how to wrap items spans.
|
28
|
-
#
|
27
|
+
#navigation.name_generator = Proc.new {|name, item| "<span>#{name}</span>"}
|
29
28
|
|
30
|
-
#
|
31
|
-
#
|
32
|
-
|
29
|
+
# Specify if the auto highlight feature is turned on (globally, for the whole navigation). Defaults to true
|
30
|
+
#navigation.auto_highlight = true
|
31
|
+
|
32
|
+
# Specifies whether auto highlight should ignore query params and/or anchors when
|
33
|
+
# comparing the navigation items with the current URL. Defaults to true
|
34
|
+
#navigation.ignore_query_params_on_auto_highlight = true
|
35
|
+
#navigation.ignore_anchors_on_auto_highlight = true
|
33
36
|
|
34
37
|
# If this option is set to true, all item names will be considered as safe (passed through html_safe). Defaults to false.
|
35
|
-
#
|
38
|
+
#navigation.consider_item_names_as_safe = false
|
36
39
|
|
37
40
|
# Define the primary navigation
|
38
41
|
navigation.items do |primary|
|
@@ -69,9 +72,9 @@ SimpleNavigation::Configuration.run do |navigation|
|
|
69
72
|
|
70
73
|
# you can also specify html attributes to attach to this particular level
|
71
74
|
# works for all levels of the menu
|
72
|
-
#
|
75
|
+
#primary.dom_attributes = {id: 'menu-id', class: 'menu-class'}
|
73
76
|
|
74
77
|
# You can turn off auto highlighting for a specific level
|
75
|
-
#
|
78
|
+
#primary.auto_highlight = false
|
76
79
|
end
|
77
80
|
end
|
data/lib/simple_navigation.rb
CHANGED
@@ -4,9 +4,15 @@ require 'active_support/core_ext/hash'
|
|
4
4
|
require 'active_support/core_ext/module/attribute_accessors'
|
5
5
|
|
6
6
|
require 'simple_navigation/version'
|
7
|
-
require 'simple_navigation/
|
8
|
-
require 'simple_navigation/
|
7
|
+
require 'simple_navigation/configuration'
|
8
|
+
require 'simple_navigation/item_adapter'
|
9
|
+
require 'simple_navigation/item'
|
10
|
+
require 'simple_navigation/item_container'
|
11
|
+
require 'simple_navigation/items_provider'
|
12
|
+
require 'simple_navigation/renderer'
|
9
13
|
require 'simple_navigation/adapters'
|
14
|
+
require 'simple_navigation/config_file_finder'
|
15
|
+
require 'simple_navigation/railtie' if defined?(::Rails::Railtie)
|
10
16
|
|
11
17
|
require 'forwardable'
|
12
18
|
|
@@ -55,7 +61,7 @@ module SimpleNavigation
|
|
55
61
|
def set_env(root, environment)
|
56
62
|
self.root = root
|
57
63
|
self.environment = environment
|
58
|
-
config_file_paths <<
|
64
|
+
config_file_paths << default_config_file_path
|
59
65
|
end
|
60
66
|
|
61
67
|
# Returns the current framework in which the plugin is running.
|
@@ -89,30 +95,6 @@ module SimpleNavigation
|
|
89
95
|
File.join(root, 'config')
|
90
96
|
end
|
91
97
|
|
92
|
-
# Returns true if the config_file for specified context does exist.
|
93
|
-
def config_file?(navigation_context = :default)
|
94
|
-
!!config_file(navigation_context)
|
95
|
-
end
|
96
|
-
|
97
|
-
# Returns the path to the config file for the given navigation context or
|
98
|
-
# nil if no matching config file can be found.
|
99
|
-
# If multiple config_paths are set, it returns the first matching path.
|
100
|
-
def config_file(navigation_context = :default)
|
101
|
-
config_file_paths
|
102
|
-
.map { |path| File.join(path, config_file_name(navigation_context)) }
|
103
|
-
.find { |full_path| File.exist?(full_path) }
|
104
|
-
end
|
105
|
-
|
106
|
-
# Returns the name of the config file for the given navigation_context
|
107
|
-
def config_file_name(navigation_context = :default)
|
108
|
-
prefix = if navigation_context == :default
|
109
|
-
''
|
110
|
-
else
|
111
|
-
"#{navigation_context.to_s.underscore}_"
|
112
|
-
end
|
113
|
-
"#{prefix}navigation.rb"
|
114
|
-
end
|
115
|
-
|
116
98
|
# Resets the list of config_file_paths to the specified path
|
117
99
|
def config_file_path=(path)
|
118
100
|
self.config_file_paths = [path]
|
@@ -121,20 +103,10 @@ module SimpleNavigation
|
|
121
103
|
# Reads the config_file for the specified navigation_context and stores it
|
122
104
|
# for later evaluation.
|
123
105
|
def load_config(navigation_context = :default)
|
124
|
-
unless config_file?(navigation_context)
|
125
|
-
fail "Config file '#{config_file_name(navigation_context)}' not " \
|
126
|
-
"found in path(s) #{config_file_paths.join(', ')}!"
|
127
|
-
end
|
128
|
-
|
129
|
-
# FIXME: what about update_config and update_config! methods ?
|
130
106
|
if environment == 'production'
|
131
|
-
|
132
|
-
IO.read(config_file(navigation_context))
|
133
|
-
end
|
107
|
+
update_config(navigation_context)
|
134
108
|
else
|
135
|
-
|
136
|
-
IO.read(config_file(navigation_context))
|
137
|
-
end
|
109
|
+
update_config!(navigation_context)
|
138
110
|
end
|
139
111
|
end
|
140
112
|
|
@@ -186,9 +158,20 @@ module SimpleNavigation
|
|
186
158
|
|
187
159
|
private
|
188
160
|
|
189
|
-
def
|
190
|
-
|
191
|
-
|
161
|
+
def config_file(navigation_context)
|
162
|
+
ConfigFileFinder.new(config_file_paths).find(navigation_context)
|
163
|
+
end
|
164
|
+
|
165
|
+
def read_config(navigation_context)
|
166
|
+
File.read config_file(navigation_context)
|
167
|
+
end
|
168
|
+
|
169
|
+
def update_config(navigation_context)
|
170
|
+
config_files[navigation_context] ||= read_config(navigation_context)
|
171
|
+
end
|
172
|
+
|
173
|
+
def update_config!(navigation_context)
|
174
|
+
config_files[navigation_context] = read_config(navigation_context)
|
192
175
|
end
|
193
176
|
end
|
194
177
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
module SimpleNavigation
|
2
2
|
module Adapters
|
3
3
|
class Padrino < Sinatra
|
4
|
-
def self.register
|
5
|
-
SimpleNavigation.set_env(
|
4
|
+
def self.register(app)
|
5
|
+
SimpleNavigation.set_env(::Padrino.root, ::Padrino.env)
|
6
6
|
::Padrino::Application.send(:helpers, SimpleNavigation::Helpers)
|
7
7
|
end
|
8
8
|
|
@@ -4,7 +4,7 @@ module SimpleNavigation
|
|
4
4
|
attr_reader :controller, :template
|
5
5
|
|
6
6
|
def self.register
|
7
|
-
SimpleNavigation.set_env(
|
7
|
+
SimpleNavigation.set_env(::Rails.root, ::Rails.env)
|
8
8
|
ActionController::Base.send(:include, SimpleNavigation::Helpers)
|
9
9
|
SimpleNavigation::Helpers.instance_methods.each do |m|
|
10
10
|
ActionController::Base.send(:helper_method, m.to_sym)
|
@@ -51,18 +51,6 @@ module SimpleNavigation
|
|
51
51
|
|
52
52
|
protected
|
53
53
|
|
54
|
-
def self.rails_root
|
55
|
-
gte_rails3? ? ::Rails.root : ::RAILS_ROOT
|
56
|
-
end
|
57
|
-
|
58
|
-
def self.rails_env
|
59
|
-
gte_rails3? ? ::Rails.env : ::RAILS_ENV
|
60
|
-
end
|
61
|
-
|
62
|
-
def self.gte_rails3?
|
63
|
-
::Rails::VERSION::MAJOR >= 3
|
64
|
-
end
|
65
|
-
|
66
54
|
def template_from(controller)
|
67
55
|
if controller.respond_to?(:view_context)
|
68
56
|
controller.view_context
|
@@ -97,14 +85,3 @@ module SimpleNavigation
|
|
97
85
|
end
|
98
86
|
end
|
99
87
|
end
|
100
|
-
|
101
|
-
# Initializer for Rails3
|
102
|
-
if defined?(Rails) && SimpleNavigation::Adapters::Rails.gte_rails3?
|
103
|
-
module SimpleNavigation
|
104
|
-
class Railtie < Rails::Railtie
|
105
|
-
initializer 'simple_navigation.register' do |app|
|
106
|
-
SimpleNavigation.register
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|
@@ -3,9 +3,8 @@ require 'cgi'
|
|
3
3
|
module SimpleNavigation
|
4
4
|
module Adapters
|
5
5
|
class Sinatra < Base
|
6
|
-
def self.register
|
7
|
-
SimpleNavigation.set_env(
|
8
|
-
::Sinatra::Application.send(:helpers, SimpleNavigation::Helpers)
|
6
|
+
def self.register(app)
|
7
|
+
SimpleNavigation.set_env(app.root, app.environment)
|
9
8
|
end
|
10
9
|
|
11
10
|
def initialize(context)
|
@@ -50,14 +49,6 @@ module SimpleNavigation
|
|
50
49
|
|
51
50
|
protected
|
52
51
|
|
53
|
-
def self.sinatra_root
|
54
|
-
::Sinatra::Application.root
|
55
|
-
end
|
56
|
-
|
57
|
-
def self.sinatra_environment
|
58
|
-
::Sinatra::Application.environment
|
59
|
-
end
|
60
|
-
|
61
52
|
def to_attributes(options)
|
62
53
|
options.map { |k, v| v.nil? ? '' : " #{k}='#{v}'" }.join
|
63
54
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'active_support/core_ext/string'
|
2
|
+
|
3
|
+
module SimpleNavigation
|
4
|
+
# Internal: Encapsulates the config file naming knowledge.
|
5
|
+
class ConfigFile
|
6
|
+
# Internal: Initializes a ConfigFile.
|
7
|
+
#
|
8
|
+
# context - The navigation context for this ConfigFile.
|
9
|
+
def initialize(context)
|
10
|
+
@prefix = prefix_for_context(context)
|
11
|
+
end
|
12
|
+
|
13
|
+
# Internal: Returns the name of the configuration file on disk.
|
14
|
+
#
|
15
|
+
# Based on the the initialization context the outcome may differ.
|
16
|
+
#
|
17
|
+
# Examples
|
18
|
+
#
|
19
|
+
# ConfigFile.new.name # => "navigation.rb"
|
20
|
+
# ConfigFile.new(:default).name # => "navigation.rb"
|
21
|
+
# ConfigFile.new(:other).name # => "other_navigation.rb"
|
22
|
+
#
|
23
|
+
# Returns a String representing the name of the configuration file on disk.
|
24
|
+
def name
|
25
|
+
@name ||= "#{prefix}navigation.rb"
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
attr_reader :prefix
|
31
|
+
|
32
|
+
def prefix_for_context(context)
|
33
|
+
context == :default ? '' : "#{context.to_s.underscore}_"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'simple_navigation/config_file'
|
2
|
+
|
3
|
+
module SimpleNavigation
|
4
|
+
# Internal: Encapsulates the configuration file finding logic.
|
5
|
+
class ConfigFileFinder
|
6
|
+
# Internal: Initializes a ConfigFileFinder.
|
7
|
+
#
|
8
|
+
# paths - an enumerable list of paths in which to look for configuration
|
9
|
+
# files.
|
10
|
+
def initialize(paths)
|
11
|
+
@paths = paths
|
12
|
+
end
|
13
|
+
|
14
|
+
# Internal: Searches a configuration file for the given context in the
|
15
|
+
# initialization paths.
|
16
|
+
#
|
17
|
+
# context - The navigation context for which to look the configuration file.
|
18
|
+
#
|
19
|
+
# Returns a String representing the full path of the configuation file.
|
20
|
+
# Raises StandardError if no file is found.
|
21
|
+
def find(context)
|
22
|
+
config_file_name = config_file_name_for_context(context)
|
23
|
+
|
24
|
+
find_config_file(config_file_name) ||
|
25
|
+
fail("Config file '#{config_file_name}' not found in " \
|
26
|
+
"path(s) #{paths.join(', ')}!")
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
attr_reader :paths
|
32
|
+
|
33
|
+
def config_file_name_for_context(context)
|
34
|
+
ConfigFile.new(context).name
|
35
|
+
end
|
36
|
+
|
37
|
+
def find_config_file(config_file_name)
|
38
|
+
paths.map { |path| File.join(path, config_file_name) }
|
39
|
+
.find { |full_path| File.exist?(full_path) }
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|