simple_menu 0.1.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.
@@ -0,0 +1,76 @@
1
+ require 'active_support/core_ext'
2
+ require 'nokogiri'
3
+
4
+ require 'simple_menu/railtie' if defined?(Rails)
5
+ require 'simple_menu/version'
6
+
7
+ class SimpleMenu
8
+ def initialize(template, &block)
9
+ self.template = template
10
+ self.menu = []
11
+ self.options = {
12
+ save_with: Nokogiri::XML::Node::SaveOptions::FORMAT |
13
+ Nokogiri::XML::Node::SaveOptions::NO_DECLARATION |
14
+ Nokogiri::XML::Node::SaveOptions::NO_EMPTY_TAGS,
15
+ indent: 2
16
+ }
17
+
18
+ add(&block) if block_given?
19
+ end
20
+
21
+ def add(index = menu.length, &block)
22
+ menu.insert(index, instance_eval(&block))
23
+ end
24
+
25
+ def before(href_or_name, &block)
26
+ add(index_of(href_or_name), &block)
27
+ end
28
+
29
+ def after(href_or_name, &block)
30
+ add(index_of(href_or_name) + 1, &block)
31
+ end
32
+
33
+ def method_missing(name, *args, &block)
34
+ template.send(name, *args, &block)
35
+ end
36
+
37
+ def to_s
38
+ Nokogiri::XML::Builder.new do |xml|
39
+ xml.ul do
40
+ each do |item|
41
+ xml.li do
42
+ xml << highlight_current(item)
43
+ end
44
+ end
45
+ end
46
+ end.to_xml(options).html_safe
47
+ end
48
+
49
+ private
50
+ attr_accessor :menu, :template, :options
51
+ delegate :each, to: :menu
52
+
53
+ def element(item)
54
+ Nokogiri::HTML(item).children.search('body > *')
55
+ end
56
+
57
+ def href(element)
58
+ href = element.attribute('href')
59
+ href.present? ? href.value : ''
60
+ end
61
+
62
+ def highlight_current(item)
63
+ element(item).tap do |element|
64
+ element.add_class(:active) if element.present? && template.url_for == href(element)
65
+ end.to_html
66
+ end
67
+
68
+ def index_of(href_or_name)
69
+ each.with_index do |item, index|
70
+ element = element(item)
71
+ next unless element.present?
72
+
73
+ return index if element.text.match(href_or_name) || href(element).match(href_or_name)
74
+ end.length
75
+ end
76
+ end
@@ -0,0 +1,9 @@
1
+ require 'simple_menu/view_helpers'
2
+
3
+ class SimpleMenu
4
+ class Railtie < Rails::Railtie
5
+ initializer('simple_menu.view_helpers') do
6
+ ActionView::Base.send(:include, SimpleMenu::ViewHelpers)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ class SimpleMenu
2
+ VERSION = '0.1.1'
3
+ end
@@ -0,0 +1,7 @@
1
+ class SimpleMenu
2
+ module ViewHelpers
3
+ def simple_menu(&block)
4
+ SimpleMenu.new(self, &block)
5
+ end
6
+ end
7
+ end
metadata ADDED
@@ -0,0 +1,115 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: simple_menu
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Mario Uher
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-02-23 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: actionpack
16
+ requirement: &70327159113800 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '3.0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70327159113800
25
+ - !ruby/object:Gem::Dependency
26
+ name: activesupport
27
+ requirement: &70327159113300 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: '3.0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70327159113300
36
+ - !ruby/object:Gem::Dependency
37
+ name: nokogiri
38
+ requirement: &70327159112920 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *70327159112920
47
+ - !ruby/object:Gem::Dependency
48
+ name: minitest
49
+ requirement: &70327159112360 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *70327159112360
58
+ - !ruby/object:Gem::Dependency
59
+ name: purdytest
60
+ requirement: &70327159111780 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *70327159111780
69
+ - !ruby/object:Gem::Dependency
70
+ name: rails
71
+ requirement: &70327159127380 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ version: '3.0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *70327159127380
80
+ description: Super simple and bulletproof menus for your rails app.
81
+ email: uher.mario@gmail.com
82
+ executables: []
83
+ extensions: []
84
+ extra_rdoc_files: []
85
+ files:
86
+ - lib/simple_menu/railtie.rb
87
+ - lib/simple_menu/version.rb
88
+ - lib/simple_menu/view_helpers.rb
89
+ - lib/simple_menu.rb
90
+ homepage: https://www.github.com/haihappen/simple_menu
91
+ licenses: []
92
+ post_install_message:
93
+ rdoc_options: []
94
+ require_paths:
95
+ - lib
96
+ required_ruby_version: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ required_rubygems_version: !ruby/object:Gem::Requirement
103
+ none: false
104
+ requirements:
105
+ - - ! '>='
106
+ - !ruby/object:Gem::Version
107
+ version: '0'
108
+ requirements: []
109
+ rubyforge_project:
110
+ rubygems_version: 1.8.11
111
+ signing_key:
112
+ specification_version: 3
113
+ summary: Super simple and bulletproof menus for your rails app.
114
+ test_files: []
115
+ has_rdoc: