app/models/menu_item.rb in lolita-menu-0.0.10 vs app/models/menu_item.rb in lolita-menu-0.0.11

- old
+ new

@@ -7,10 +7,11 @@ validates :name,:presence => true validates :url, :format => {:with => /^(\/)|(http).*/}, :unless=>:root? before_create :set_default_positions + before_save :normalize_url after_create :put_in_place before_validation :set_default_values, :if=>:new_record? class << self def create_root!(menu) @@ -28,29 +29,28 @@ end end # instance methods def active?(request,options={}) - active_item = self_and_all_children.detect{|item| + active_item = self_and_descendants.detect{|item| item.url_match?(request,options[:fullpath]) } !!active_item end def url_match?(request,fullpath=false) - - if self.url.match(/^http/) - self.url==request.url + if self.url.strip.match(/^http/) + self.url.strip==request.url else only_path = (fullpath ? request.fullpath : request.path).gsub(/\?.*/,"") self.real_url(request.params) == only_path end end def real_url(params) - self.url.gsub(/(:\w+)\/?/) do |m| + self.url.strip.gsub(/(:\w+)\/?/) do |m| params_key = $1.gsub(":","").to_sym params.has_key?(params_key) ? "#{params[params_key]}#{m[m.size-1]=="/" ? "/" : ""}" : "" end end @@ -76,15 +76,15 @@ :left => self.lft,:right => self.rgt,:depth => self.depth+1, :menu=>self.menu_id }).order("lft asc") @children end - def self_and_all_children - @self_and_all_children||=self.class.where("lft>=:left AND rgt<=:right AND menu_id=:menu",{ + def self_and_descendants + @self_and_descendants||=self.class.where("lft>=:left AND rgt<=:right AND menu_id=:menu",{ :left => self.lft,:right => self.rgt, :menu=>self.menu_id }).order("lft asc") - @self_and_all_children + @self_and_descendants end def root if self.parent_id.nil? self @@ -155,8 +155,12 @@ end def set_default_values self.name||="root" self.url||="/" + end + + def normalize_url + self.url = self.url.to_s.strip end end