simple-navigation 2.2.2 → 2.2.3

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,8 @@
1
+ *2.2.3
2
+
3
+ * changed error handling in config-file. Do not ignore errors in config-file anymore.
4
+ * only load config-file if it is present. Needed when directly providing items in render_navigation.
5
+
1
6
  *2.2.2
2
7
 
3
8
  * added lib/simple-navigation.rb to allow 'require simple-navigation' or 'config.gem "simple-navigation"'
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  :major: 2
3
3
  :minor: 2
4
- :patch: 2
4
+ :patch: 3
@@ -18,10 +18,14 @@ module SimpleNavigation
18
18
 
19
19
  class << self
20
20
 
21
+ def config_file?(navigation_context=nil)
22
+ File.exists?(config_file_name(navigation_context))
23
+ end
24
+
21
25
  # Reads the config_file for the specified navigation_context and stores it for later evaluation.
22
26
  def load_config(navigation_context = :default)
23
27
  raise "config_file_path is not set!" unless self.config_file_path
24
- raise "Config file '#{config_file_name(navigation_context)}' does not exists!" unless File.exists?(config_file_name(navigation_context))
28
+ raise "Config file '#{config_file_name(navigation_context)}' does not exists!" unless config_file?(navigation_context)
25
29
  if ::RAILS_ENV == 'production'
26
30
  self.config_files[navigation_context] ||= IO.read(config_file_name(navigation_context))
27
31
  else
@@ -29,6 +33,18 @@ module SimpleNavigation
29
33
  end
30
34
  end
31
35
 
36
+ def set_template_from(context)
37
+ SimpleNavigation.controller = extract_controller_from context
38
+ SimpleNavigation.template = SimpleNavigation.controller.instance_variable_get(:@template)
39
+ end
40
+
41
+ # Returns the context in which the config file should be evaluated.
42
+ # This is preferably the template, otherwise te controller
43
+ def context_for_eval
44
+ raise 'no context set for evaluation the config file' unless SimpleNavigation.template || SimpleNavigation.controller
45
+ SimpleNavigation.template || SimpleNavigation.controller
46
+ end
47
+
32
48
  # Returns the singleton instance of the SimpleNavigation::Configuration
33
49
  def config
34
50
  SimpleNavigation::Configuration.instance
@@ -88,8 +104,18 @@ module SimpleNavigation
88
104
  end
89
105
  end
90
106
 
107
+ # Extracts a controller from the context.
108
+ def extract_controller_from(context)
109
+ if context.respond_to? :controller
110
+ context.controller
111
+ else
112
+ context
113
+ end
114
+ end
115
+
91
116
  private
92
117
 
118
+
93
119
  # TODO: refactor this ugly thing to make it nice and short
94
120
  def parse_explicit_navigation_args
95
121
  args = SimpleNavigation.explicit_navigation_args
@@ -14,31 +14,14 @@ module SimpleNavigation
14
14
 
15
15
  # Evals the config_file for the given navigation_context inside the specified context (usually a controller or view)
16
16
  def eval_config(context, navigation_context = :default)
17
- SimpleNavigation.controller = extract_controller_from context
18
- SimpleNavigation.template = SimpleNavigation.controller.instance_variable_get(:@template)
19
- context_for_eval.instance_eval(SimpleNavigation.config_files[navigation_context])
17
+ SimpleNavigation.set_template_from context
18
+ SimpleNavigation.context_for_eval.instance_eval(SimpleNavigation.config_files[navigation_context])
20
19
  end
21
20
 
22
21
  # Starts processing the configuration
23
22
  def run(&block)
24
23
  block.call Configuration.instance
25
24
  end
26
-
27
- # Returns the context in which the config file should be evaluated.
28
- # This is preferably the template, otherwise te controller
29
- def context_for_eval
30
- raise 'no context set for evaluation the config file' unless SimpleNavigation.template || SimpleNavigation.controller
31
- SimpleNavigation.template || SimpleNavigation.controller
32
- end
33
-
34
- # Extracts a controller from the context.
35
- def extract_controller_from(context)
36
- if context.respond_to? :controller
37
- context.controller
38
- else
39
- context
40
- end
41
- end
42
25
 
43
26
  end #class << self
44
27
 
@@ -35,8 +35,11 @@ module SimpleNavigation
35
35
  options = extract_backwards_compatible_options(*args)
36
36
  options = {:context => :default, :level => :all}.merge(options)
37
37
  ctx = options.delete(:context)
38
- SimpleNavigation.load_config(ctx) rescue nil
39
- SimpleNavigation::Configuration.eval_config(self, ctx) rescue nil
38
+ SimpleNavigation.set_template_from self
39
+ if SimpleNavigation.config_file?(ctx)
40
+ SimpleNavigation.load_config(ctx)
41
+ SimpleNavigation::Configuration.eval_config(self, ctx)
42
+ end
40
43
  SimpleNavigation.config.items(options[:items]) if options[:items]
41
44
  SimpleNavigation.handle_explicit_navigation
42
45
  raise "no primary navigation defined, either use a navigation config file or pass items directly to render_navigation" unless SimpleNavigation.primary_navigation
@@ -18,7 +18,7 @@ describe SimpleNavigation::Configuration do
18
18
  before(:each) do
19
19
  @context = mock(:context)
20
20
  @context.stub!(:instance_eval)
21
- SimpleNavigation::Configuration.stub!(:context_for_eval => @context)
21
+ SimpleNavigation.stub!(:context_for_eval => @context)
22
22
  @config_files = {:default => 'default', :my_context => 'my_context'}
23
23
  SimpleNavigation.stub!(:config_files).and_return(@config_files)
24
24
  end
@@ -34,82 +34,9 @@ describe SimpleNavigation::Configuration do
34
34
  SimpleNavigation::Configuration.eval_config(@context, :my_context)
35
35
  end
36
36
  end
37
- it "should set the controller" do
38
- @controller = stub(:controller)
39
- SimpleNavigation::Configuration.should_receive(:extract_controller_from).with(@context).and_return(@controller)
40
- SimpleNavigation.should_receive(:controller=).with(@controller)
41
- SimpleNavigation::Configuration.eval_config(@context)
42
- end
43
- it "should set the template" do
44
- @template = stub(:template)
45
- @controller = stub(:controller, :instance_variable_get => @template)
46
- SimpleNavigation.stub!(:controller => @controller)
47
- SimpleNavigation.should_receive(:template=).with(@template)
48
- SimpleNavigation::Configuration.eval_config(@context)
49
- end
50
- end
51
-
52
- describe 'context_for_eval' do
53
- context 'controller is present' do
54
- before(:each) do
55
- @controller = stub(:controller)
56
- SimpleNavigation.stub!(:controller => @controller)
57
- end
58
- context 'template is present' do
59
- before(:each) do
60
- @template = stub(:template)
61
- SimpleNavigation.stub!(:template => @template)
62
- end
63
- it {SimpleNavigation::Configuration.context_for_eval.should == @template}
64
- end
65
- context 'template is not present' do
66
- before(:each) do
67
- SimpleNavigation.stub!(:template => nil)
68
- end
69
- it {SimpleNavigation::Configuration.context_for_eval.should == @controller}
70
- end
71
- end
72
- context 'controller is not present' do
73
- before(:each) do
74
- SimpleNavigation.stub!(:controller => nil)
75
- end
76
- context 'template is present' do
77
- before(:each) do
78
- @template = stub(:template)
79
- SimpleNavigation.stub!(:template => @template)
80
- end
81
- it {SimpleNavigation::Configuration.context_for_eval.should == @template}
82
- end
83
- context 'template is not present' do
84
- before(:each) do
85
- SimpleNavigation.stub!(:template => nil)
86
- end
87
- it {lambda {SimpleNavigation::Configuration.context_for_eval}.should raise_error}
88
- end
89
- end
90
- end
91
-
92
- describe 'self.extract_controller_from' do
93
- before(:each) do
94
- @nav_context = stub(:nav_context)
95
- end
96
-
97
- context 'object responds to controller' do
98
- before(:each) do
99
- @controller = stub(:controller)
100
- @nav_context.stub!(:controller).and_return(@controller)
101
- end
102
-
103
- it "should return the controller" do
104
- SimpleNavigation::Configuration.extract_controller_from(@nav_context).should == @controller
105
- end
106
-
107
- end
108
-
109
- context 'object does not respond to controller' do
110
- it "should return the nav_context" do
111
- SimpleNavigation::Configuration.extract_controller_from(@nav_context).should == @nav_context
112
- end
37
+ it "should set the template from the specified context" do
38
+ SimpleNavigation.should_receive(:set_template_from).with(@context)
39
+ SimpleNavigation::Configuration.eval_config(@context, :my_context)
113
40
  end
114
41
  end
115
42
 
@@ -11,28 +11,49 @@ describe SimpleNavigation::Helpers do
11
11
  SimpleNavigation::Configuration.stub!(:eval_config)
12
12
  @primary_navigation = stub(:primary_navigation, :null_object => true)
13
13
  SimpleNavigation.stub!(:primary_navigation).and_return(@primary_navigation)
14
+ SimpleNavigation.stub!(:config_file? => true)
14
15
  end
15
16
 
16
17
  describe 'render_navigation' do
17
- describe 'regarding loading of the config-file' do
18
- context 'no options specified' do
19
- it "should load the config-file for the default context" do
20
- SimpleNavigation.should_receive(:load_config).with(:default)
21
- @controller.render_navigation
18
+
19
+ context 'with config_file present' do
20
+ before(:each) do
21
+ SimpleNavigation.stub!(:config_file? => true)
22
+ end
23
+ describe 'regarding loading of the config-file' do
24
+ context 'no options specified' do
25
+ it "should load the config-file for the default context" do
26
+ SimpleNavigation.should_receive(:load_config).with(:default)
27
+ @controller.render_navigation
28
+ end
22
29
  end
23
- end
24
-
25
- context 'with options specified' do
26
- it "should load the config-file for the specified context" do
27
- SimpleNavigation.should_receive(:load_config).with(:my_context)
28
- @controller.render_navigation(:context => :my_context)
30
+
31
+ context 'with options specified' do
32
+ it "should load the config-file for the specified context" do
33
+ SimpleNavigation.should_receive(:load_config).with(:my_context)
34
+ @controller.render_navigation(:context => :my_context)
35
+ end
29
36
  end
30
37
  end
38
+
39
+ it "should eval the config on every request" do
40
+ SimpleNavigation::Configuration.should_receive(:eval_config).with(@controller, :default)
41
+ @controller.render_navigation
42
+ end
31
43
  end
32
-
33
- it "should eval the config on every request" do
34
- SimpleNavigation::Configuration.should_receive(:eval_config).with(@controller, :default)
35
- @controller.render_navigation
44
+ context 'with config_file not present' do
45
+ before(:each) do
46
+ SimpleNavigation.stub!(:config_file? => false)
47
+ end
48
+ it "should not load the config file" do
49
+ SimpleNavigation.should_not_receive(:load_config)
50
+ @controller.render_navigation
51
+ end
52
+
53
+ it "should not eval the config on every request" do
54
+ SimpleNavigation::Configuration.should_not_receive(:eval_config)
55
+ @controller.render_navigation
56
+ end
36
57
  end
37
58
 
38
59
  describe 'regarding setting of items' do
@@ -11,6 +11,28 @@ describe SimpleNavigation do
11
11
  end
12
12
  end
13
13
 
14
+ describe 'config_file?' do
15
+ before(:each) do
16
+ SimpleNavigation.stub!(:config_file_name => 'file_name')
17
+ end
18
+ it "should check for the file existance with the file_name" do
19
+ File.should_receive(:exists?).with('file_name')
20
+ SimpleNavigation.config_file?(:ctx)
21
+ end
22
+ context 'config file exists' do
23
+ before(:each) do
24
+ File.stub!(:exists? => true)
25
+ end
26
+ it {SimpleNavigation.config_file?(:ctx).should be_true}
27
+ end
28
+ context 'config file does not exist' do
29
+ before(:each) do
30
+ File.stub!(:exists? => false)
31
+ end
32
+ it {SimpleNavigation.config_file?(:ctx).should be_false}
33
+ end
34
+ end
35
+
14
36
  describe 'config_file_name' do
15
37
  before(:each) do
16
38
  SimpleNavigation.config_file_path = 'path_to_config'
@@ -31,6 +53,91 @@ describe SimpleNavigation do
31
53
  end
32
54
  end
33
55
 
56
+ describe 'set_template_from' do
57
+ before(:each) do
58
+ @context = stub :context
59
+ SimpleNavigation.stub!(:extract_controller_from => @controller)
60
+ end
61
+ it "should set the controller" do
62
+ @controller = stub(:controller)
63
+ SimpleNavigation.should_receive(:extract_controller_from).with(@context).and_return(@controller)
64
+ SimpleNavigation.should_receive(:controller=).with(@controller)
65
+ SimpleNavigation.set_template_from @context
66
+ end
67
+ it "should set the template" do
68
+ @template = stub(:template)
69
+ @controller = stub(:controller, :instance_variable_get => @template)
70
+ SimpleNavigation.stub!(:controller => @controller)
71
+ SimpleNavigation.should_receive(:template=).with(@template)
72
+ SimpleNavigation.set_template_from @context
73
+ end
74
+ end
75
+
76
+ describe 'self.extract_controller_from' do
77
+ before(:each) do
78
+ @nav_context = stub(:nav_context)
79
+ end
80
+
81
+ context 'object responds to controller' do
82
+ before(:each) do
83
+ @controller = stub(:controller)
84
+ @nav_context.stub!(:controller).and_return(@controller)
85
+ end
86
+
87
+ it "should return the controller" do
88
+ SimpleNavigation.send(:extract_controller_from, @nav_context).should == @controller
89
+ end
90
+
91
+ end
92
+
93
+ context 'object does not respond to controller' do
94
+ it "should return the nav_context" do
95
+ SimpleNavigation.send(:extract_controller_from, @nav_context).should == @nav_context
96
+ end
97
+ end
98
+ end
99
+
100
+ describe 'context_for_eval' do
101
+ context 'controller is present' do
102
+ before(:each) do
103
+ @controller = stub(:controller)
104
+ SimpleNavigation.stub!(:controller => @controller)
105
+ end
106
+ context 'template is present' do
107
+ before(:each) do
108
+ @template = stub(:template)
109
+ SimpleNavigation.stub!(:template => @template)
110
+ end
111
+ it {SimpleNavigation.context_for_eval.should == @template}
112
+ end
113
+ context 'template is not present' do
114
+ before(:each) do
115
+ SimpleNavigation.stub!(:template => nil)
116
+ end
117
+ it {SimpleNavigation.context_for_eval.should == @controller}
118
+ end
119
+ end
120
+ context 'controller is not present' do
121
+ before(:each) do
122
+ SimpleNavigation.stub!(:controller => nil)
123
+ end
124
+ context 'template is present' do
125
+ before(:each) do
126
+ @template = stub(:template)
127
+ SimpleNavigation.stub!(:template => @template)
128
+ end
129
+ it {SimpleNavigation.context_for_eval.should == @template}
130
+ end
131
+ context 'template is not present' do
132
+ before(:each) do
133
+ SimpleNavigation.stub!(:template => nil)
134
+ end
135
+ it {lambda {SimpleNavigation.context_for_eval}.should raise_error}
136
+ end
137
+ end
138
+ end
139
+
140
+
34
141
  describe 'load_config' do
35
142
  context 'config_file_path is set' do
36
143
  before(:each) do
@@ -40,7 +147,7 @@ describe SimpleNavigation do
40
147
 
41
148
  context 'config_file does exist' do
42
149
  before(:each) do
43
- File.stub!(:exists?).and_return(true)
150
+ SimpleNavigation.stub!(:config_file? => true)
44
151
  IO.stub!(:read).and_return('file_content')
45
152
  end
46
153
  it "should not raise an error" do
@@ -51,12 +158,12 @@ describe SimpleNavigation do
51
158
  SimpleNavigation.load_config
52
159
  end
53
160
  it "should store the read content in the module (default context)" do
54
- SimpleNavigation.should_receive(:config_file_name).with(:default).twice
161
+ SimpleNavigation.should_receive(:config_file_name).with(:default)
55
162
  SimpleNavigation.load_config
56
163
  SimpleNavigation.config_files[:default].should == 'file_content'
57
164
  end
58
165
  it "should store the content in the module (non default context)" do
59
- SimpleNavigation.should_receive(:config_file_name).with(:my_context).twice
166
+ SimpleNavigation.should_receive(:config_file_name).with(:my_context)
60
167
  SimpleNavigation.load_config(:my_context)
61
168
  SimpleNavigation.config_files[:my_context].should == 'file_content'
62
169
  end
@@ -64,7 +171,7 @@ describe SimpleNavigation do
64
171
 
65
172
  context 'config_file does not exist' do
66
173
  before(:each) do
67
- File.stub!(:exists?).and_return(false)
174
+ SimpleNavigation.stub!(:config_file? => false)
68
175
  end
69
176
  it {lambda{SimpleNavigation.load_config}.should raise_error}
70
177
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple-navigation
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.2
4
+ version: 2.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andi Schacke
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-02-05 00:00:00 +01:00
12
+ date: 2010-02-21 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies: []
15
15