menu_maker 0.0.1

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.
Files changed (56) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +3 -0
  4. data/Rakefile +32 -0
  5. data/app/helpers/menu_maker/menu_helper.rb +20 -0
  6. data/lib/menu_maker/custom_menu_renderer.rb +51 -0
  7. data/lib/menu_maker/custom_submenu_renderer.rb +17 -0
  8. data/lib/menu_maker/default_menu_renderer.rb +51 -0
  9. data/lib/menu_maker/engine.rb +4 -0
  10. data/lib/menu_maker/menu.rb +99 -0
  11. data/lib/menu_maker/menu_renderer.rb +59 -0
  12. data/lib/menu_maker/menu_renderer_container.rb +27 -0
  13. data/lib/menu_maker/version.rb +3 -0
  14. data/lib/menu_maker.rb +10 -0
  15. data/lib/tasks/menu_maker_tasks.rake +4 -0
  16. data/test/dummy/README.rdoc +28 -0
  17. data/test/dummy/Rakefile +6 -0
  18. data/test/dummy/app/assets/javascripts/application.js +13 -0
  19. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  20. data/test/dummy/app/controllers/application_controller.rb +5 -0
  21. data/test/dummy/app/helpers/application_helper.rb +2 -0
  22. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  23. data/test/dummy/bin/bundle +3 -0
  24. data/test/dummy/bin/rails +4 -0
  25. data/test/dummy/bin/rake +4 -0
  26. data/test/dummy/config/application.rb +26 -0
  27. data/test/dummy/config/boot.rb +5 -0
  28. data/test/dummy/config/database.yml +25 -0
  29. data/test/dummy/config/environment.rb +5 -0
  30. data/test/dummy/config/environments/development.rb +37 -0
  31. data/test/dummy/config/environments/production.rb +82 -0
  32. data/test/dummy/config/environments/test.rb +39 -0
  33. data/test/dummy/config/initializers/assets.rb +8 -0
  34. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  35. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  36. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  37. data/test/dummy/config/initializers/inflections.rb +16 -0
  38. data/test/dummy/config/initializers/mime_types.rb +4 -0
  39. data/test/dummy/config/initializers/session_store.rb +3 -0
  40. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  41. data/test/dummy/config/locales/en.yml +23 -0
  42. data/test/dummy/config/routes.rb +56 -0
  43. data/test/dummy/config/secrets.yml +22 -0
  44. data/test/dummy/config.ru +4 -0
  45. data/test/dummy/db/test.sqlite3 +0 -0
  46. data/test/dummy/log/test.log +635 -0
  47. data/test/dummy/public/404.html +67 -0
  48. data/test/dummy/public/422.html +67 -0
  49. data/test/dummy/public/500.html +66 -0
  50. data/test/dummy/public/favicon.ico +0 -0
  51. data/test/fixtures/menu.html +12 -0
  52. data/test/helpers/menu_maker/menu_helper_test.rb +27 -0
  53. data/test/integration_test_helper.rb +49 -0
  54. data/test/menu_maker_test.rb +36 -0
  55. data/test/test_helper.rb +8 -0
  56. metadata +153 -0
@@ -0,0 +1,67 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The page you were looking for doesn't exist (404)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ body {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body>
58
+ <!-- This file lives in public/404.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>The page you were looking for doesn't exist.</h1>
62
+ <p>You may have mistyped the address or the page may have moved.</p>
63
+ </div>
64
+ <p>If you are the application owner check the logs for more information.</p>
65
+ </div>
66
+ </body>
67
+ </html>
@@ -0,0 +1,67 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ body {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body>
58
+ <!-- This file lives in public/422.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>The change you wanted was rejected.</h1>
62
+ <p>Maybe you tried to change something you didn't have access to.</p>
63
+ </div>
64
+ <p>If you are the application owner check the logs for more information.</p>
65
+ </div>
66
+ </body>
67
+ </html>
@@ -0,0 +1,66 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ body {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body>
58
+ <!-- This file lives in public/500.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>We're sorry, but something went wrong.</h1>
62
+ </div>
63
+ <p>If you are the application owner check the logs for more information.</p>
64
+ </div>
65
+ </body>
66
+ </html>
File without changes
@@ -0,0 +1,12 @@
1
+ <ul class="nav navbar-nav side-nav">
2
+ <li{dashboard_li_class}>
3
+ <a href="/cms/dashboard"><i class="fa fa-dashboard"></i> Dashboard</a>
4
+ </li>
5
+ <li{suppliers_li_class}>
6
+ <a class="dropdown-toggle" data-toggle="dropdown" href="#"><i class="fa fa-user"></i> Suppliers <b class="caret"></b></a>
7
+ <ul class="dropdown-menu">
8
+ <li><a{add_supplier_class} href="/cms/suppliers/new">Add Supplier</a></li>
9
+ <li><a{list_supplier_class} href="/cms/suppliers">List Suppliers</a></li>
10
+ </ul>
11
+ </li>
12
+ </ul>
@@ -0,0 +1,27 @@
1
+ require 'test_helper'
2
+ require 'menu_maker'
3
+ require 'integration_test_helper'
4
+
5
+ module MenuMaker
6
+ class MenuHelperTest < ActionView::TestCase
7
+ include MenuTestHelper
8
+ include MenuHelper
9
+
10
+ test 'menu helper that maps to Menu class' do
11
+ expected_output = menu_fixture(
12
+ suppliers_li_class: 'dropdown active open',
13
+ list_supplier_class: 'active'
14
+ )
15
+
16
+ current_output = menu_maker('/cms/suppliers') do |menu|
17
+ menu.add 'Dashboard', '/cms/dashboard', icon: 'fa fa-dashboard'
18
+ menu.add 'Suppliers', '#', icon: 'fa fa-user' do |submenu|
19
+ submenu.add 'Add Supplier', '/cms/suppliers/new'
20
+ submenu.add 'List Suppliers', '/cms/suppliers'
21
+ end
22
+ end
23
+
24
+ assert_equal expected_output, current_output
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,49 @@
1
+ module MenuMaker
2
+ module MenuTestHelper
3
+ private
4
+
5
+ def menu_definition
6
+ Proc.new do |menu|
7
+ menu.add 'Dashboard', '/cms/dashboard', icon: 'fa fa-dashboard'
8
+ menu.add 'Suppliers', '#', icon: 'fa fa-user' do |submenu|
9
+ submenu.add 'Add Supplier', '/cms/suppliers/new'
10
+ submenu.add 'List Suppliers', '/cms/suppliers'
11
+ end
12
+ end
13
+ end
14
+
15
+ def example_menu(url)
16
+ renderers = MenuRendererContainer.new do |c|
17
+ c.add_for_next_depth(CustomMenuRenderer.new self, url)
18
+ c.add_for_next_depth(CustomSubmenuRenderer.new self, url)
19
+ end
20
+
21
+ Menu.new(renderers, &menu_definition)
22
+ end
23
+
24
+ def menu_fixture(replacements = {})
25
+ replacements.each do |k, v|
26
+ replacements[k] = v.blank? ? '' : %{ class="#{v}"}
27
+ end
28
+
29
+ replacement_keys = %i{
30
+ dashboard_li_class
31
+ suppliers_li_class
32
+ add_supplier_class
33
+ list_supplier_class
34
+ }
35
+
36
+ output = raw_menu_html
37
+ replacement_keys.each { |k| replacements[k] ||= '' }
38
+ replacements.each { |k,v| output.sub!("{#{k}}", v) }
39
+
40
+ output
41
+ end
42
+
43
+ def raw_menu_html
44
+ path = File.expand_path('../fixtures/menu.html', __FILE__)
45
+ html = File.read path
46
+ html.split("\n").map(&:strip).join('')
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,36 @@
1
+ require 'test_helper'
2
+ require 'menu_maker'
3
+ require 'integration_test_helper'
4
+
5
+ module MenuMaker
6
+ class MenuHelperTest < ActionView::TestCase
7
+ include MenuTestHelper
8
+
9
+ test 'outputs the menu with the first li active' do
10
+ expected_output = menu_fixture(
11
+ dashboard_li_class: 'active open',
12
+ suppliers_li_class: 'dropdown'
13
+ )
14
+
15
+ assert_equal example_menu('/cms/dashboard').render, expected_output
16
+ end
17
+
18
+ test 'outputs the menu with the first li submenu item active' do
19
+ expected_output = menu_fixture(
20
+ suppliers_li_class: 'dropdown active open',
21
+ add_supplier_class: 'active'
22
+ )
23
+
24
+ assert_equal example_menu('/cms/suppliers/new').render, expected_output
25
+ end
26
+
27
+ test 'outputs the menu with the second li submenu item selected' do
28
+ expected_output = menu_fixture(
29
+ suppliers_li_class: 'dropdown active open',
30
+ list_supplier_class: 'active'
31
+ )
32
+
33
+ assert_equal example_menu('/cms/suppliers').render, expected_output
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,8 @@
1
+ ENV["RAILS_ENV"] = "test"
2
+
3
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
4
+ require "rails/test_help"
5
+
6
+ Rails.backtrace_cleaner.remove_silencers!
7
+
8
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
metadata ADDED
@@ -0,0 +1,153 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: menu_maker
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Thiago A. Silva
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-06-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '4.0'
27
+ description: Flexible solution to build any kind of menu in any Ruby framework. Currently
28
+ the best integration is with Rails. Supports recursive menus.
29
+ email:
30
+ - thiago@mixinternet.com.br
31
+ executables: []
32
+ extensions: []
33
+ extra_rdoc_files: []
34
+ files:
35
+ - MIT-LICENSE
36
+ - README.rdoc
37
+ - Rakefile
38
+ - app/helpers/menu_maker/menu_helper.rb
39
+ - lib/menu_maker.rb
40
+ - lib/menu_maker/custom_menu_renderer.rb
41
+ - lib/menu_maker/custom_submenu_renderer.rb
42
+ - lib/menu_maker/default_menu_renderer.rb
43
+ - lib/menu_maker/engine.rb
44
+ - lib/menu_maker/menu.rb
45
+ - lib/menu_maker/menu_renderer.rb
46
+ - lib/menu_maker/menu_renderer_container.rb
47
+ - lib/menu_maker/version.rb
48
+ - lib/tasks/menu_maker_tasks.rake
49
+ - test/dummy/README.rdoc
50
+ - test/dummy/Rakefile
51
+ - test/dummy/app/assets/javascripts/application.js
52
+ - test/dummy/app/assets/stylesheets/application.css
53
+ - test/dummy/app/controllers/application_controller.rb
54
+ - test/dummy/app/helpers/application_helper.rb
55
+ - test/dummy/app/views/layouts/application.html.erb
56
+ - test/dummy/bin/bundle
57
+ - test/dummy/bin/rails
58
+ - test/dummy/bin/rake
59
+ - test/dummy/config.ru
60
+ - test/dummy/config/application.rb
61
+ - test/dummy/config/boot.rb
62
+ - test/dummy/config/database.yml
63
+ - test/dummy/config/environment.rb
64
+ - test/dummy/config/environments/development.rb
65
+ - test/dummy/config/environments/production.rb
66
+ - test/dummy/config/environments/test.rb
67
+ - test/dummy/config/initializers/assets.rb
68
+ - test/dummy/config/initializers/backtrace_silencers.rb
69
+ - test/dummy/config/initializers/cookies_serializer.rb
70
+ - test/dummy/config/initializers/filter_parameter_logging.rb
71
+ - test/dummy/config/initializers/inflections.rb
72
+ - test/dummy/config/initializers/mime_types.rb
73
+ - test/dummy/config/initializers/session_store.rb
74
+ - test/dummy/config/initializers/wrap_parameters.rb
75
+ - test/dummy/config/locales/en.yml
76
+ - test/dummy/config/routes.rb
77
+ - test/dummy/config/secrets.yml
78
+ - test/dummy/db/test.sqlite3
79
+ - test/dummy/log/test.log
80
+ - test/dummy/public/404.html
81
+ - test/dummy/public/422.html
82
+ - test/dummy/public/500.html
83
+ - test/dummy/public/favicon.ico
84
+ - test/fixtures/menu.html
85
+ - test/helpers/menu_maker/menu_helper_test.rb
86
+ - test/integration_test_helper.rb
87
+ - test/menu_maker_test.rb
88
+ - test/test_helper.rb
89
+ homepage: http://github.com/thiagoa/menu_maker
90
+ licenses:
91
+ - MIT
92
+ metadata: {}
93
+ post_install_message:
94
+ rdoc_options: []
95
+ require_paths:
96
+ - lib
97
+ required_ruby_version: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ required_rubygems_version: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ requirements: []
108
+ rubyforge_project:
109
+ rubygems_version: 2.2.2
110
+ signing_key:
111
+ specification_version: 4
112
+ summary: Flexible solution to build any kind of menu in any Ruby framework
113
+ test_files:
114
+ - test/dummy/app/assets/javascripts/application.js
115
+ - test/dummy/app/assets/stylesheets/application.css
116
+ - test/dummy/app/controllers/application_controller.rb
117
+ - test/dummy/app/helpers/application_helper.rb
118
+ - test/dummy/app/views/layouts/application.html.erb
119
+ - test/dummy/bin/bundle
120
+ - test/dummy/bin/rails
121
+ - test/dummy/bin/rake
122
+ - test/dummy/config/application.rb
123
+ - test/dummy/config/boot.rb
124
+ - test/dummy/config/database.yml
125
+ - test/dummy/config/environment.rb
126
+ - test/dummy/config/environments/development.rb
127
+ - test/dummy/config/environments/production.rb
128
+ - test/dummy/config/environments/test.rb
129
+ - test/dummy/config/initializers/assets.rb
130
+ - test/dummy/config/initializers/backtrace_silencers.rb
131
+ - test/dummy/config/initializers/cookies_serializer.rb
132
+ - test/dummy/config/initializers/filter_parameter_logging.rb
133
+ - test/dummy/config/initializers/inflections.rb
134
+ - test/dummy/config/initializers/mime_types.rb
135
+ - test/dummy/config/initializers/session_store.rb
136
+ - test/dummy/config/initializers/wrap_parameters.rb
137
+ - test/dummy/config/locales/en.yml
138
+ - test/dummy/config/routes.rb
139
+ - test/dummy/config/secrets.yml
140
+ - test/dummy/config.ru
141
+ - test/dummy/db/test.sqlite3
142
+ - test/dummy/log/test.log
143
+ - test/dummy/public/404.html
144
+ - test/dummy/public/422.html
145
+ - test/dummy/public/500.html
146
+ - test/dummy/public/favicon.ico
147
+ - test/dummy/Rakefile
148
+ - test/dummy/README.rdoc
149
+ - test/fixtures/menu.html
150
+ - test/helpers/menu_maker/menu_helper_test.rb
151
+ - test/integration_test_helper.rb
152
+ - test/menu_maker_test.rb
153
+ - test/test_helper.rb