menu_maker 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -10,6 +10,11 @@ module MenuMaker
10
10
  assert_equal 'my/path', item.path
11
11
  end
12
12
 
13
+ test 'accepts many paths' do
14
+ item = Menu::MenuItem.new 'My title', 'path/1', 'path/2', 'path/3'
15
+ assert_equal ['path/1', 'path/2', 'path/3'], item.paths.map(&:address)
16
+ end
17
+
13
18
  test 'submenu_paths returns submenu paths recursively' do
14
19
  item = Menu::MenuItem.new 'Level 1', 'level/1'
15
20
 
@@ -28,7 +33,7 @@ module MenuMaker
28
33
 
29
34
  expected = %w[level/2 level/2/1 level/2/2 level/3 level/4 level/5 level/6]
30
35
 
31
- assert_equal expected, item.submenu_paths.sort
36
+ assert_equal expected, item.submenu_paths.map(&:address).sort
32
37
  end
33
38
 
34
39
  test 'all_paths returns submenu paths + current menu path' do
@@ -47,7 +52,7 @@ module MenuMaker
47
52
 
48
53
  expected = %w[level/1 level/2 level/3 level/4 level/5 level/6]
49
54
 
50
- assert_equal expected, item.all_paths.sort
55
+ assert_equal expected, item.all_paths.map(&:address).sort
51
56
  end
52
57
 
53
58
  test 'has_path? also checks for submenus' do
@@ -69,6 +74,25 @@ module MenuMaker
69
74
  refute item.has_path?('level/8')
70
75
  end
71
76
 
77
+ test 'Menu#add accepts multiple paths and options' do
78
+ menu = Menu.new proc {}
79
+ menu.add('Item', 'path/1', [:post, 'path/2'], [:put, 'path/3'], option: 'optional')
80
+
81
+ result = menu.items.first.paths.map(&:address)
82
+
83
+ expected = %w[path/1 path/2 path/3]
84
+
85
+ assert_equal expected, result
86
+ assert_equal 'optional', menu.items.first.option
87
+ end
88
+
89
+ test 'has_path? matches on other restful paths' do
90
+ item = Menu::MenuItem.new 'Item', 'main_path', [:post, 'other/path']
91
+
92
+ assert item.has_path? [:post, 'other/path']
93
+ assert item.has_path? Path.new(:post, 'other/path')
94
+ end
95
+
72
96
  test "has_submenu? when returns false" do
73
97
  item = Menu::MenuItem.new 'Level 1', 'level/1'
74
98
  refute item.has_submenu?
@@ -1,4 +1,5 @@
1
1
  require 'test_helper'
2
+ require 'ostruct'
2
3
 
3
4
  module MenuMaker
4
5
  class MenuRendererTest < ActiveSupport::TestCase
@@ -60,5 +61,19 @@ module MenuMaker
60
61
  end
61
62
  end
62
63
  end
64
+
65
+ context 'with a MenuRenderer class renderer' do
66
+ should 'detect the path when not provided and the context responds to request' do
67
+ request = Class.new do
68
+ def method; 'POST' end
69
+ def path; '/path' end
70
+ end.new
71
+
72
+ context = OpenStruct.new request: request
73
+ renderer = MenuRenderer.new context
74
+
75
+ assert_equal Path.new(:post, '/path'), renderer.current_path
76
+ end
77
+ end
63
78
  end
64
79
  end
data/test/path_test.rb ADDED
@@ -0,0 +1,84 @@
1
+ require 'test_helper'
2
+
3
+ module MenuMaker
4
+ class PathTest < ActionView::TestCase
5
+ test 'accepts get, post, put, patch and delete' do
6
+ %i[get post put patch delete].each do |method|
7
+ Path.new method, '/path'
8
+ end
9
+ end
10
+
11
+ test "doesn't accept a method other than get, post, put, patch and delete" do
12
+ assert_raise Path::PathError do
13
+ Path.new :ouch, '/path'
14
+ end
15
+ end
16
+
17
+ test 'to_s returns the address' do
18
+ assert_equal '/path', Path.new(:get, '/path').to_s
19
+ end
20
+
21
+ test 'creates a get path from a given string' do
22
+ assert_equal Path.new(:get, '/path'), Path.convert('/path')
23
+ end
24
+
25
+ test 'creates a path from an array' do
26
+ assert_equal Path.new(:post, '/path'), Path.convert([:post, '/path'])
27
+ end
28
+
29
+ test "creates a path from an array assumes get when can't find request method" do
30
+ assert_equal Path.new(:get, '/path'), Path.convert(['/path'])
31
+ end
32
+
33
+ test "creates a path from an array on empty array creates empty get path" do
34
+ assert_equal Path.new(:get, ''), Path.convert([])
35
+ end
36
+
37
+ test "returns back the path if already a Path" do
38
+ path = Path.new :put, '/path'
39
+ assert_equal path, Path.convert(path)
40
+ end
41
+
42
+ test "creates a path from an object wich responds to path and method" do
43
+ request = Class.new do
44
+ def path
45
+ '/path'
46
+ end
47
+
48
+ def method
49
+ 'PUT'
50
+ end
51
+ end.new
52
+
53
+ assert_equal Path.new(:put, '/path'), Path.convert(request)
54
+ end
55
+
56
+ test "fails if can't create path from object which responds to path and method" do
57
+ assert_raise Path::PathError do
58
+ Path.convert(Object.new)
59
+ end
60
+ end
61
+
62
+ test "from_path fails when not a path" do
63
+ assert_raise Path::PathError do
64
+ Path.from_path(Object.new)
65
+ end
66
+ end
67
+
68
+ test "equality works with an equal path" do
69
+ assert_equal Path.new(:put, '/path'), Path.new(:put, '/path')
70
+ end
71
+
72
+ test "equality works with a convertible string" do
73
+ assert_equal Path.new(:get, '/path'), '/path'
74
+ end
75
+
76
+ test "equality works with a convertible array" do
77
+ assert Path.new(:post, '/path') == [:post, '/path']
78
+ end
79
+
80
+ test "a Path global conversion method is also available" do
81
+ assert_equal Path.new(:post, '/path'), Path(:post, '/path')
82
+ end
83
+ end
84
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: menu_maker
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
  - Thiago A. Silva
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-07 00:00:00.000000000 Z
11
+ date: 2014-07-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -57,6 +57,7 @@ files:
57
57
  - lib/menu_maker/menu.rb
58
58
  - lib/menu_maker/menu_renderer.rb
59
59
  - lib/menu_maker/menu_renderer_container.rb
60
+ - lib/menu_maker/path.rb
60
61
  - lib/menu_maker/version.rb
61
62
  - lib/tasks/menu_maker_tasks.rake
62
63
  - test/dummy/README.rdoc
@@ -100,6 +101,7 @@ files:
100
101
  - test/menu_item_test.rb
101
102
  - test/menu_maker_test.rb
102
103
  - test/menu_renderer_test.rb
104
+ - test/path_test.rb
103
105
  - test/test_helper.rb
104
106
  homepage: http://github.com/thiagoa/menu_maker
105
107
  licenses:
@@ -167,4 +169,5 @@ test_files:
167
169
  - test/menu_item_test.rb
168
170
  - test/menu_maker_test.rb
169
171
  - test/menu_renderer_test.rb
172
+ - test/path_test.rb
170
173
  - test/test_helper.rb