lolita-menu 0.0.8 → 0.0.9

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.
@@ -1,3 +1,11 @@
1
+ === Version 0.0.9 / 2011-06-10
2
+ * Enhancements
3
+ * Active item detection based on request
4
+ * Item urls with arguments
5
+
6
+ * Bug fixes
7
+ * Delete works on newely added items
8
+
1
9
  === Version 0.0.8 / 2011-06-09
2
10
  * Enhancements
3
11
  * Delete functionality
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.8
1
+ 0.0.9
@@ -44,6 +44,7 @@ class Menu < ActiveRecord::Base
44
44
  end
45
45
  self.root.append(item)
46
46
  item.reload
47
+ item
47
48
  end
48
49
 
49
50
  def have_root?
@@ -6,7 +6,7 @@ class MenuItem < ActiveRecord::Base
6
6
  belongs_to :menu, :class_name => "Menu"
7
7
 
8
8
  validates :name,:presence => true
9
- validates :url, :format => {:with => /^\/.*/}, :unless=>:root?
9
+ validates :url, :format => {:with => /^(\/)|(http).*/}, :unless=>:root?
10
10
 
11
11
  before_create :set_default_positions
12
12
  after_create :put_in_place
@@ -29,6 +29,31 @@ class MenuItem < ActiveRecord::Base
29
29
  end
30
30
  # instance methods
31
31
 
32
+ def active?(request,options={})
33
+ active_item = self_and_all_children.detect{|item|
34
+ item.url_match?(request,options[:fullpath])
35
+ }
36
+
37
+ !!active_item
38
+ endg
39
+
40
+ def url_match?(request,fullpath=false)
41
+
42
+ if self.url.match(/^http/)
43
+ self.url==request.url
44
+ else
45
+ only_path = (fullpath ? request.fullpath : request.path).gsub(/\?.*/,"")
46
+ self.real_url(request.params) == only_path
47
+ end
48
+ end
49
+
50
+ def real_url(params)
51
+ self.url.gsub(/(:\w+)\/?/) do |m|
52
+ params_key = $1.gsub(":","").to_sym
53
+ params.has_key?(params_key) ? "#{params[params_key]}#{m[m.size-1]=="/" ? "/" : ""}" : ""
54
+ end
55
+ end
56
+
32
57
  def visible?
33
58
  self.is_visible
34
59
  end
@@ -53,6 +78,13 @@ class MenuItem < ActiveRecord::Base
53
78
  @children
54
79
  end
55
80
 
81
+ def self_and_all_children
82
+ @self_and_all_children||=self.class.where("lft>=:left AND rgt<=:right AND menu_id=:menu",{
83
+ :left => self.lft,:right => self.rgt, :menu=>self.menu_id
84
+ }).order("lft asc")
85
+ @self_and_all_children
86
+ end
87
+
56
88
  def root
57
89
  if self.parent_id.nil?
58
90
  self
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{lolita-menu}
8
- s.version = "0.0.8"
8
+ s.version = "0.0.9"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["ITHouse", "Arturs Meisters"]
12
- s.date = %q{2011-06-09}
12
+ s.date = %q{2011-06-10}
13
13
  s.description = %q{Manage public menus for each project inside Lolita.}
14
14
  s.email = %q{support@ithouse.lv}
15
15
  s.extra_rdoc_files = [
@@ -64,7 +64,7 @@ Gem::Specification.new do |s|
64
64
  s.homepage = %q{http://github.com/ithouse/lolita-menu}
65
65
  s.licenses = ["MIT"]
66
66
  s.require_paths = ["lib"]
67
- s.rubygems_version = %q{1.6.1}
67
+ s.rubygems_version = %q{1.6.2}
68
68
  s.summary = %q{Menu managing plugin for Lolita.}
69
69
  s.test_files = [
70
70
  "spec/controllers/menu_items_controller_spec.rb",
@@ -57,7 +57,7 @@ $(document).ready(function(){
57
57
  })
58
58
  })
59
59
 
60
- $(".delete-menu-item").click(function(){
60
+ $(".delete-menu-item").live("click",function(){
61
61
  var self = this;
62
62
  $.ajax({
63
63
  url:$(this).attr("data-url"),
@@ -6,6 +6,36 @@ describe MenuItem do
6
6
  MenuItem.create!(:name=>"item",:url=>"/")
7
7
  end
8
8
 
9
+ describe "recognize active item" do
10
+
11
+ let(:menu){Menu.create!(:name=>"new menu")}
12
+
13
+ let(:request){
14
+ mock_obj = mock(Object)
15
+ mock_obj.stub!(:params).and_return({})
16
+ mock_obj
17
+ }
18
+
19
+ it "should recognize full paths" do
20
+ item = menu.append(MenuItem.create!(:name => "Name", :url => "http://google.lv"))
21
+ request.stub!(:url).and_return("http://google.lv")
22
+ item.active?(request).should be_true
23
+ end
24
+
25
+ it "should recognize relative paths" do
26
+ item = menu.append(MenuItem.create!(:name => "Name", :url => "/posts"))
27
+ request.stub!(:path).and_return("/posts?page=1")
28
+ item.active?(request).should be_true
29
+ end
30
+
31
+ it "should recognize relative paths with arguments" do
32
+ item = menu.append(MenuItem.create!(:name => "Name", :url => "/:whoes/posts"))
33
+ request.stub!(:path).and_return("/my/posts?page=1")
34
+ request.stub!(:params).and_return({:whoes => "my"})
35
+ item.active?(request).should be_true
36
+ end
37
+ end
38
+
9
39
  describe "positioning items" do
10
40
 
11
41
  let(:menu){Menu.create!(:name=>"new menu")}
metadata CHANGED
@@ -1,139 +1,136 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: lolita-menu
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.9
4
5
  prerelease:
5
- version: 0.0.8
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - ITHouse
9
9
  - Arturs Meisters
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
-
14
- date: 2011-06-09 00:00:00 +03:00
13
+ date: 2011-06-10 00:00:00.000000000 +03:00
15
14
  default_executable:
16
- dependencies:
17
- - !ruby/object:Gem::Dependency
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
18
17
  name: lolita
19
- requirement: &id001 !ruby/object:Gem::Requirement
18
+ requirement: &70928720 !ruby/object:Gem::Requirement
20
19
  none: false
21
- requirements:
20
+ requirements:
22
21
  - - ~>
23
- - !ruby/object:Gem::Version
22
+ - !ruby/object:Gem::Version
24
23
  version: 3.1.6
25
24
  type: :runtime
26
25
  prerelease: false
27
- version_requirements: *id001
28
- - !ruby/object:Gem::Dependency
26
+ version_requirements: *70928720
27
+ - !ruby/object:Gem::Dependency
29
28
  name: haml
30
- requirement: &id002 !ruby/object:Gem::Requirement
29
+ requirement: &70928030 !ruby/object:Gem::Requirement
31
30
  none: false
32
- requirements:
33
- - - ">="
34
- - !ruby/object:Gem::Version
35
- version: "0"
31
+ requirements:
32
+ - - ! '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
36
35
  type: :runtime
37
36
  prerelease: false
38
- version_requirements: *id002
39
- - !ruby/object:Gem::Dependency
37
+ version_requirements: *70928030
38
+ - !ruby/object:Gem::Dependency
40
39
  name: rspec
41
- requirement: &id003 !ruby/object:Gem::Requirement
40
+ requirement: &70927320 !ruby/object:Gem::Requirement
42
41
  none: false
43
- requirements:
42
+ requirements:
44
43
  - - ~>
45
- - !ruby/object:Gem::Version
44
+ - !ruby/object:Gem::Version
46
45
  version: 2.6.0
47
46
  type: :development
48
47
  prerelease: false
49
- version_requirements: *id003
50
- - !ruby/object:Gem::Dependency
48
+ version_requirements: *70927320
49
+ - !ruby/object:Gem::Dependency
51
50
  name: sqlite3
52
- requirement: &id004 !ruby/object:Gem::Requirement
51
+ requirement: &70926540 !ruby/object:Gem::Requirement
53
52
  none: false
54
- requirements:
55
- - - ">="
56
- - !ruby/object:Gem::Version
57
- version: "0"
53
+ requirements:
54
+ - - ! '>='
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
58
57
  type: :development
59
58
  prerelease: false
60
- version_requirements: *id004
61
- - !ruby/object:Gem::Dependency
59
+ version_requirements: *70926540
60
+ - !ruby/object:Gem::Dependency
62
61
  name: rspec-rails
63
- requirement: &id005 !ruby/object:Gem::Requirement
62
+ requirement: &70925910 !ruby/object:Gem::Requirement
64
63
  none: false
65
- requirements:
64
+ requirements:
66
65
  - - ~>
67
- - !ruby/object:Gem::Version
66
+ - !ruby/object:Gem::Version
68
67
  version: 2.6.0
69
68
  type: :development
70
69
  prerelease: false
71
- version_requirements: *id005
72
- - !ruby/object:Gem::Dependency
70
+ version_requirements: *70925910
71
+ - !ruby/object:Gem::Dependency
73
72
  name: haml-rails
74
- requirement: &id006 !ruby/object:Gem::Requirement
73
+ requirement: &70925310 !ruby/object:Gem::Requirement
75
74
  none: false
76
- requirements:
77
- - - ">="
78
- - !ruby/object:Gem::Version
79
- version: "0"
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
80
79
  type: :development
81
80
  prerelease: false
82
- version_requirements: *id006
83
- - !ruby/object:Gem::Dependency
81
+ version_requirements: *70925310
82
+ - !ruby/object:Gem::Dependency
84
83
  name: shoulda
85
- requirement: &id007 !ruby/object:Gem::Requirement
84
+ requirement: &70924540 !ruby/object:Gem::Requirement
86
85
  none: false
87
- requirements:
88
- - - ">="
89
- - !ruby/object:Gem::Version
90
- version: "0"
86
+ requirements:
87
+ - - ! '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
91
90
  type: :development
92
91
  prerelease: false
93
- version_requirements: *id007
94
- - !ruby/object:Gem::Dependency
92
+ version_requirements: *70924540
93
+ - !ruby/object:Gem::Dependency
95
94
  name: bundler
96
- requirement: &id008 !ruby/object:Gem::Requirement
95
+ requirement: &70923830 !ruby/object:Gem::Requirement
97
96
  none: false
98
- requirements:
97
+ requirements:
99
98
  - - ~>
100
- - !ruby/object:Gem::Version
99
+ - !ruby/object:Gem::Version
101
100
  version: 1.0.0
102
101
  type: :development
103
102
  prerelease: false
104
- version_requirements: *id008
105
- - !ruby/object:Gem::Dependency
103
+ version_requirements: *70923830
104
+ - !ruby/object:Gem::Dependency
106
105
  name: jeweler
107
- requirement: &id009 !ruby/object:Gem::Requirement
106
+ requirement: &70922920 !ruby/object:Gem::Requirement
108
107
  none: false
109
- requirements:
108
+ requirements:
110
109
  - - ~>
111
- - !ruby/object:Gem::Version
110
+ - !ruby/object:Gem::Version
112
111
  version: 1.5.2
113
112
  type: :development
114
113
  prerelease: false
115
- version_requirements: *id009
116
- - !ruby/object:Gem::Dependency
114
+ version_requirements: *70922920
115
+ - !ruby/object:Gem::Dependency
117
116
  name: rcov
118
- requirement: &id010 !ruby/object:Gem::Requirement
117
+ requirement: &70916600 !ruby/object:Gem::Requirement
119
118
  none: false
120
- requirements:
121
- - - ">="
122
- - !ruby/object:Gem::Version
123
- version: "0"
119
+ requirements:
120
+ - - ! '>='
121
+ - !ruby/object:Gem::Version
122
+ version: '0'
124
123
  type: :development
125
124
  prerelease: false
126
- version_requirements: *id010
125
+ version_requirements: *70916600
127
126
  description: Manage public menus for each project inside Lolita.
128
127
  email: support@ithouse.lv
129
128
  executables: []
130
-
131
129
  extensions: []
132
-
133
- extra_rdoc_files:
130
+ extra_rdoc_files:
134
131
  - LICENSE.txt
135
132
  - README.rdoc
136
- files:
133
+ files:
137
134
  - .document
138
135
  - Gemfile
139
136
  - History.rdoc
@@ -179,36 +176,34 @@ files:
179
176
  - test_orm/rails/config/enviroment.rb
180
177
  has_rdoc: true
181
178
  homepage: http://github.com/ithouse/lolita-menu
182
- licenses:
179
+ licenses:
183
180
  - MIT
184
181
  post_install_message:
185
182
  rdoc_options: []
186
-
187
- require_paths:
183
+ require_paths:
188
184
  - lib
189
- required_ruby_version: !ruby/object:Gem::Requirement
185
+ required_ruby_version: !ruby/object:Gem::Requirement
190
186
  none: false
191
- requirements:
192
- - - ">="
193
- - !ruby/object:Gem::Version
194
- hash: 336753427
195
- segments:
187
+ requirements:
188
+ - - ! '>='
189
+ - !ruby/object:Gem::Version
190
+ version: '0'
191
+ segments:
196
192
  - 0
197
- version: "0"
198
- required_rubygems_version: !ruby/object:Gem::Requirement
193
+ hash: 276747599
194
+ required_rubygems_version: !ruby/object:Gem::Requirement
199
195
  none: false
200
- requirements:
201
- - - ">="
202
- - !ruby/object:Gem::Version
203
- version: "0"
196
+ requirements:
197
+ - - ! '>='
198
+ - !ruby/object:Gem::Version
199
+ version: '0'
204
200
  requirements: []
205
-
206
201
  rubyforge_project:
207
- rubygems_version: 1.6.1
202
+ rubygems_version: 1.6.2
208
203
  signing_key:
209
204
  specification_version: 3
210
205
  summary: Menu managing plugin for Lolita.
211
- test_files:
206
+ test_files:
212
207
  - spec/controllers/menu_items_controller_spec.rb
213
208
  - spec/models/menu_item_spec.rb
214
209
  - spec/models/menu_spec.rb