cat_router 0.1.7 → 0.1.8

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.
data/README.rdoc CHANGED
@@ -8,6 +8,8 @@ Copyright (c) 2011 [Kristijan Sedlak], released under the MIT license
8
8
 
9
9
  == Installation (Rails 3 ready)
10
10
 
11
+ NOTE: If you are upgrading please recreate the database table!
12
+
11
13
  Add this line to your Gemfile (and run bundle install):
12
14
 
13
15
  gem 'cat_router'
@@ -45,35 +47,38 @@ app/models/cat_route.rb file with content
45
47
 
46
48
  -------
47
49
 
48
- You create a route by creating a CatRoute model record:
50
+ First you create a root button. By default :locale is set to value of I18n.locale and :domain is not set
51
+ (which means the route is defined for all domains).
49
52
 
50
- myRoute = CatRoute.create(:title => 'Welcome', :html => '<b>welcome</b>')
53
+ rootRoute = CatRoute.create(:slug => ':root', :title => 'Home', :html => 'This is my home content.')
54
+ rootRoute = CatRoute.create(:slug => ':root', :title => 'Home', :html => 'This is my home content.', :locale => 'en')
55
+ rootRoute = CatRoute.create(:slug => ':root', :title => 'Home', :html => 'This is my home content.', :locale => 'en', :domain => 'mydomain.com')
51
56
 
52
- Note that :locale column is set to I18n.locale value by default but you can set it manually:
57
+ You can then create a route for the main menu.
53
58
 
54
- myRoute = CatRoute.create(:title => 'Welcome', :html => '<b>welcome</b>', :locale => 'en')
59
+ myRoute = CatRoute.create(:title => 'About us', :html => '<b>This is the about page.</b>')
55
60
 
56
- The plugin will auto generate the :slug value but you can set it manually:
61
+ The plugin will automatically generate the :slug value but you can set it manually.
57
62
 
58
- myRoute = CatRoute.create(:title => 'Welcome', :html => '<b>welcome</b>', :slug => 'home/first_page', :domain => 'mydomain.com')
63
+ myRoute = CatRoute.create(:title => 'Welcome', :html => '<b>welcome</b>', :slug => 'home/first_page')
59
64
 
60
- If you would like to create a subroute (a sub button of myRoute) you would do it like this
65
+ You can also create a subroute (a sub button of myRoute).
61
66
 
62
67
  mySubRoute = myRoute.cat_routes.create(:title => 'About', :html => 'about us html')
63
68
 
64
- Records that has slug == '' are root buttons
69
+ You can also create a button that redirects to some external website.
65
70
 
66
- rootRoute = CatRoute.create(:title => 'Home', :html => 'home html', :slug => '')
71
+ myRoute = CatRoute.create(:slug => ':redirect_to', :html => 'http://lotterade.com', :title => 'Home')
67
72
 
68
73
  -------
69
74
 
70
- You can get a list of subbuttons like this
75
+ You can get a list of subbuttons
71
76
 
72
77
  mySubRoutes = CatRoute.find(13).cat_routes
73
78
 
74
79
  To get the list of main buttons for your main menu, you will use
75
80
 
76
- mainButtons = CatRoute.base_routes.with_locale('en').with_domain('mydomain.com')
81
+ mainButtons = CatRoute.base_routes.with_locale('en').with_or_no_domain('mydomain.com')
77
82
 
78
83
  You get a root button like this
79
84
 
@@ -85,17 +90,23 @@ You get a button by slug like this
85
90
 
86
91
  -------
87
92
 
93
+ You can reorder the default order of buttons by setting the order column
94
+
95
+ button = CatRoute.with_slug('about/our_business').first
96
+
97
+ -------
98
+
88
99
  The @cat_route variable is also available (defined inside CatRoutesController) which holds the current route record.
89
100
 
90
101
  Using HAML you will define a main-menu like this
91
102
 
92
103
  .mainmenu
93
- - CatRoute.base_routes.with_locale(I18n.locale).with_domain(request.host).each do |b|
104
+ - CatRoute.base_routes.with_locale(I18n.locale).with_or_no_domain(request.host).ordered.each do |b|
94
105
  = link_to b.title, b.url, :class => b.slug == @cat_route.slug || b.id == @cat_route.parent_id ? 'selected' : ''
95
106
 
96
107
  and a sub-menu like this
97
108
 
98
109
  .submenu
99
- - @cat_route.cat_routes_or_neighbours.each do |b|
110
+ - @cat_route.cat_routes_or_neighbours.ordered.each do |b|
100
111
  = link_to b.title, b.url, :class => b.slug == @cat_route.slug || b.id == @cat_route.parent_id ? 'selected' : ''
101
112
 
@@ -4,9 +4,11 @@ class CatRoute < ActiveRecord::Base
4
4
 
5
5
  scope :with_locale, lambda{|locale| where('locale=?', locale) }
6
6
  scope :with_domain, lambda{|domain| where('domain=?', domain) }
7
- scope :base_routes, where('parent_id IS NULL')
8
- scope :root_routes, where('slug=""')
7
+ scope :with_or_no_domain, lambda{|domain| where('domain=? OR domain=""', domain) }
8
+ scope :base_routes, where('parent_id=0')
9
+ scope :root_routes, where('slug=":root"')
9
10
  scope :with_slug, lambda{|slug| where('slug=?', slug) }
11
+ scope :ordered, order('`order`')
10
12
 
11
13
  before_validation :set_locale
12
14
  before_validation :set_slug
@@ -16,7 +18,10 @@ class CatRoute < ActiveRecord::Base
16
18
  validates :locale,
17
19
  :presence => true
18
20
  validates :slug,
19
- :uniqueness => { :scope => [:domain, :locale] }
21
+ :uniqueness => { :scope => [:locale] }
22
+ validates :parent_id,
23
+ :presence => true,
24
+ :numericality => true
20
25
 
21
26
  def url
22
27
  if self.slug == ':redirect_to'
@@ -43,9 +48,9 @@ class CatRoute < ActiveRecord::Base
43
48
  end
44
49
 
45
50
  def set_slug
46
- if self.slug.nil?
51
+ if self.slug.blank?
47
52
  self.slug = ''
48
- if self.parent_id.present?
53
+ if self.parent_id > 0
49
54
  parent_route = CatRoute.find(self.parent_id)
50
55
  self.slug = CatRoute.slug_string(parent_route.title)+'/' if parent_route.present?
51
56
  end
@@ -54,7 +59,7 @@ class CatRoute < ActiveRecord::Base
54
59
  end
55
60
 
56
61
  def self.slug_string(string)
57
- string.downcase.gsub(' ', '_')
62
+ string.downcase.gsub(' ', '_').gsub(',', '_').gsub('.', '_').gsub('-', '_')
58
63
  end
59
64
 
60
65
  end
@@ -1,12 +1,12 @@
1
1
  module CatRouter::InstanceMethods
2
2
 
3
3
  def set_locale
4
- I18n.locale = :sl
4
+ I18n.locale = :en
5
5
  I18n.locale = params[:locale] if params[:locale]
6
6
  end
7
7
 
8
8
  def load_cat_route
9
- @cat_route = CatRoute.with_slug(params[:slug] ? params[:slug] : '').with_domain(request.host).first
9
+ @cat_route = CatRoute.with_slug(params[:slug] ? params[:slug] : ':root').with_or_no_domain(request.host).first
10
10
  end
11
11
 
12
12
  def handle_cat_routes
@@ -2,7 +2,7 @@ module CatRouter
2
2
  module Version
3
3
  MAJOR = 0
4
4
  MINOR = 1
5
- TINY = 7
5
+ TINY = 8
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -1,20 +1,23 @@
1
1
  class CatRouterMigration < ActiveRecord::Migration
2
2
  def self.up
3
3
  create_table :cat_routes do |t|
4
- t.string :locale
5
- t.string :domain
6
- t.string :title
7
- t.string :slug
8
- t.text :html
9
- t.integer :parent_id
4
+ t.string :locale, :null => false, :default => 'en'
5
+ t.string :domain, :null => false, :default => ''
6
+ t.string :title, :null => false, :default => ''
7
+ t.string :slug, :null => false, :default => ''
8
+ t.text :html, :null => false, :default => ''
9
+ t.integer :parent_id, :null => false, :default => 0
10
+ t.integer :order, :null => false, :default => 1
10
11
  t.timestamps
11
12
  end
12
13
 
13
14
  add_index :cat_routes, :domain
14
15
  add_index :cat_routes, :locale
15
16
  add_index :cat_routes, :slug
17
+ add_index :cat_routes, :order
16
18
  add_index :cat_routes, [:domain, :locale]
17
19
  add_index :cat_routes, [:domain, :locale, :slug]
20
+ add_index :cat_routes, [:domain, :locale, :slug, :order]
18
21
  end
19
22
 
20
23
  def self.down
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cat_router
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 11
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 7
10
- version: 0.1.7
9
+ - 8
10
+ version: 0.1.8
11
11
  platform: ruby
12
12
  authors:
13
13
  - Kristijan Sedlak