cms-lite 0.4.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -15,7 +15,6 @@ and you're ready to go.
15
15
  === Add the gem to environment.rb
16
16
  config.gem 'cms-lite', :lib => 'cms_lite'
17
17
 
18
-
19
18
  === Handy Rake Tasks
20
19
  CMS Lite comes with rake tasks that can help you manage your project. These include the ability to send all files from one language
21
20
  to google for translation into 24 other languages. To gain access to these tasks simple add the following lines to Rakefile:
@@ -32,8 +31,18 @@ then visit:
32
31
  or
33
32
  http://localhost:3000/cmslite-protected/hello-world
34
33
 
34
+ == Usage
35
+ To have a page with the url 'http://www.example.com/blue/home' create a page '/content/pages/en/blue/home.html.erb
36
+ To create a page that requires a login at the url 'http://www.example.com/red/protected' create a page '/content/protected-page/en/red/protected.html.erb'
37
+
38
+ If you want a page mapped directly off the root ie http://www.example.com/wow create a directory called default and put the file there.
39
+ ie 'content/pages/en/default/wow.html.erb'
40
+
41
+ You can add new 'content' paths by calling append_content_path:
42
+ CmsLite.append_content_path("somewhere/else/content")
43
+ This let's you add pages like 'somewhere/else/content/en/green/home.html.erb' and find them at http://www.example.com/green/home
35
44
 
36
- === Translate your content with Google
45
+ == Translate your content with Google
37
46
  rake cms_lite:translate
38
47
 
39
48
  Will translate all files in the 'en' directory into the following languages (codes):
data/Rakefile CHANGED
@@ -71,7 +71,7 @@ begin
71
71
  )
72
72
 
73
73
  host = "#{config['username']}@rubyforge.org"
74
- remote_dir = "/var/www/gforge-projects/the-perfect-gem/"
74
+ remote_dir = "/var/www/gforge-projects/cms-lite/"
75
75
  local_dir = 'rdoc'
76
76
 
77
77
  Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.1
1
+ 0.5.0
@@ -14,7 +14,8 @@ class CmsLiteController < ApplicationController
14
14
  def render_content_page(cms_lite_path, request_layout = '')
15
15
  content_page = nil
16
16
  CmsLite.content_paths.each do |content_path|
17
- path = File.join(RAILS_ROOT, content_path, cms_lite_path, I18n.locale.to_s, params[:content_key], params[:content_page].join('/'))
17
+ content_page_key = params[:content_page].is_a?(Array) ? params[:content_page].join('/') : params[:content_page]
18
+ path = File.join(RAILS_ROOT, content_path, cms_lite_path, I18n.locale.to_s, params[:content_key], content_page_key)
18
19
  format = params[:format] || 'htm'
19
20
  content_page = Dir.glob("#{path}.#{format}").first
20
21
  content_page = Dir.glob("#{path}").first if content_page.nil?
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{cms-lite}
5
- s.version = "0.4.1"
5
+ s.version = "0.5.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Justin Ball"]
9
- s.date = %q{2009-07-21}
9
+ s.date = %q{2009-07-22}
10
10
  s.description = %q{CMS gem that makes it simple to interact with your content developers by serving pages from '/content'.}
11
11
  s.email = %q{justinball@gmail.com}
12
12
  s.extra_rdoc_files = [
@@ -58,6 +58,7 @@ Gem::Specification.new do |s|
58
58
  "test/rails_root/config/initializers/requires.rb",
59
59
  "test/rails_root/config/initializers/session_store.rb",
60
60
  "test/rails_root/config/routes.rb",
61
+ "test/rails_root/content/pages/en/default/root.html.erb",
61
62
  "test/rails_root/content/pages/en/demo/hi.html.erb",
62
63
  "test/rails_root/content/pages/en/open/hello.html.erb",
63
64
  "test/rails_root/content/protected-pages/en/demo/hi.html.erb",
@@ -265,6 +266,7 @@ Gem::Specification.new do |s|
265
266
  "test/rails_root/test/unit/.keep",
266
267
  "test/rails_root/test/unit/cms_lite_test.rb",
267
268
  "test/rails_root/themes/blue/content/pages/en/blue/blue.html.erb",
269
+ "test/rails_root/themes/blue/content/pages/en/default/blue_root.html.erb",
268
270
  "test/rails_root/themes/blue/content/pages/en/open/blue.html.erb",
269
271
  "test/rails_root/themes/blue/description.txt",
270
272
  "test/rails_root/themes/blue/locales/en.yml",
@@ -1,11 +1,11 @@
1
1
  ActionController::Routing::Routes.draw do |map|
2
2
 
3
3
  CmsLite.cms_routes.each do |cms_route|
4
- map.connect cms_route[:uri], :controller => 'cms_lite', :action => 'show_page', :content_key => cms_route[:content_key]
4
+ map.connect cms_route[:uri], CmsLite.build_route_options('show_page', cms_route)
5
5
  end
6
6
 
7
7
  CmsLite.protected_cms_routes.each do |cms_route|
8
- map.connect cms_route[:uri], :controller => 'cms_lite', :action => 'show_protected_page', :content_key => cms_route[:content_key]
8
+ map.connect cms_route[:uri], CmsLite.build_route_options('show_protected_page', cms_route)
9
9
  end
10
-
10
+
11
11
  end
@@ -7,6 +7,7 @@ class CmsLite
7
7
  CONTENT_PATH = 'content'
8
8
  PAGES_PATH = 'pages'
9
9
  PROTECTED_PAGES_PATH = 'protected-pages'
10
+ ROOT_PATH = 'default' # pages located in this directory will be served off the root of the website. ie http://www.example.com/my-page
10
11
 
11
12
  class << self
12
13
 
@@ -43,10 +44,23 @@ class CmsLite
43
44
  path = File.basename(content_item)
44
45
  content_key = content_item.gsub(localization_directory, '')
45
46
  if !content_key.blank?
46
- cms_route = { :uri => "/#{path}/*content_page",
47
- :content_key => content_key }
48
- if !cms_routes.include?(cms_route)
49
- cms_routes << cms_route
47
+ # pages found in the root path get root mapping
48
+ if path == ROOT_PATH
49
+ Dir.glob("#{content_item}/*").each do |root_page|
50
+ root_page_key = File.basename(File.basename(root_page, ".*"), ".*") # for files that look like root.html.erb
51
+ cms_route = { :uri => "/#{root_page_key}",
52
+ :content_page => "#{root_page_key}",
53
+ :content_key => content_key }
54
+ if !cms_routes.include?(cms_route)
55
+ cms_routes << cms_route
56
+ end
57
+ end
58
+ else
59
+ cms_route = { :uri => "/#{path}/*content_page",
60
+ :content_key => content_key }
61
+ if !cms_routes.include?(cms_route)
62
+ cms_routes << cms_route
63
+ end
50
64
  end
51
65
  end
52
66
  end
@@ -55,6 +69,12 @@ class CmsLite
55
69
  cms_routes
56
70
  end
57
71
 
72
+ def build_route_options(action, cms_route)
73
+ options = { :controller => 'cms_lite', :action => action, :content_key => cms_route[:content_key] }
74
+ options = options.merge(:content_page => cms_route[:content_page]) if cms_route[:content_page]
75
+ options
76
+ end
77
+
58
78
  def content_paths
59
79
  @@content_paths ||= [CONTENT_PATH]
60
80
  end
@@ -0,0 +1 @@
1
+ hello from the root
@@ -9,26 +9,37 @@ Scenario: Anonymous user visits public cms lite page
9
9
  When I go to "/open/hello"
10
10
  Then I should see "hello world"
11
11
 
12
+ Scenario: Anonymous user visits root public page
13
+ Given cms lite file "content/pages/en/default/root.html.erb" contains "hello from the root"
14
+ And I am not logged in
15
+ When I go to "/root"
16
+ Then I should see "hello from the root"
17
+
12
18
  Scenario: Anonymous user visits public cms lite page in blue theme
13
19
  Given cms lite file "themes/blue/content/pages/en/open/blue.html.erb" contains "blue world"
14
20
  And I am not logged in
15
21
  When I go to "/open/blue"
16
22
  Then I should see "blue world"
17
-
23
+
24
+ Scenario: Anonymous user visits public root page in blue theme
25
+ Given cms lite file "themes/blue/content/pages/en/default/blue_root.html.erb" contains "blue root"
26
+ And I am not logged in
27
+ When I go to "/blue_root"
28
+ Then I should see "blue root"
29
+
18
30
  Scenario: Anonymous user visits protected cms lite page
19
31
  Given protected cms lite file "content/protected-pages/en/protected/safe-hello.html.erb" contains "protect hello world"
20
32
  And I am not logged in
21
33
  When I go to "/protected/safe-hello"
22
34
  Then I should see the login
23
35
  And I should see a "notice" flash message
24
-
36
+
25
37
  Scenario: Logged in user visits protected cms lite page
26
38
  Given protected cms lite file "content/protected-pages/en/protected/safe-hello.html.erb" contains "protect hello world"
27
39
  And I log in as new user
28
40
  When I go to "/protected/safe-hello"
29
41
  Then I should see "protect hello world"
30
-
31
-
42
+
32
43
  Scenario: Logged in user visits protected cms lite page in red theme
33
44
  Given protected cms lite file "themes/red/content/protected-pages/en/red/red.html.erb" contains "protect red world"
34
45
  And I log in as new user
@@ -12,6 +12,13 @@ class CmsLiteControllerTest < ActionController::TestCase
12
12
  should_respond_with :success
13
13
  end
14
14
 
15
+ context "unprotected root pages" do
16
+ setup do
17
+ get :show_page, :content_key => '/default', :content_page => 'root'
18
+ end
19
+ should_respond_with :success
20
+ end
21
+
15
22
  context "protected pages"do
16
23
  context "not logged in" do
17
24
  setup do
@@ -2,6 +2,7 @@ $:.reject! { |e| e.include? 'TextMate' }
2
2
  ENV["RAILS_ENV"] = "test"
3
3
  require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
4
4
  require 'test_help'
5
+ require 'ruby-debug'
5
6
  gem 'thoughtbot-factory_girl' # from github
6
7
  require 'factory_girl'
7
8
  require 'mocha'
@@ -35,4 +36,10 @@ class ActiveSupport::TestCase
35
36
  def ensure_flash(val)
36
37
  assert_contains flash.values, val, ", Flash: #{flash.inspect}"
37
38
  end
39
+
40
+ # For Selenium
41
+ # setup do |session|
42
+ # session.host! "localhost:3001"
43
+ # end
44
+
38
45
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cms-lite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Ball
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-07-21 00:00:00 -06:00
12
+ date: 2009-07-22 00:00:00 -06:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -71,6 +71,7 @@ files:
71
71
  - test/rails_root/config/initializers/requires.rb
72
72
  - test/rails_root/config/initializers/session_store.rb
73
73
  - test/rails_root/config/routes.rb
74
+ - test/rails_root/content/pages/en/default/root.html.erb
74
75
  - test/rails_root/content/pages/en/demo/hi.html.erb
75
76
  - test/rails_root/content/pages/en/open/hello.html.erb
76
77
  - test/rails_root/content/protected-pages/en/demo/hi.html.erb
@@ -278,6 +279,7 @@ files:
278
279
  - test/rails_root/test/unit/.keep
279
280
  - test/rails_root/test/unit/cms_lite_test.rb
280
281
  - test/rails_root/themes/blue/content/pages/en/blue/blue.html.erb
282
+ - test/rails_root/themes/blue/content/pages/en/default/blue_root.html.erb
281
283
  - test/rails_root/themes/blue/content/pages/en/open/blue.html.erb
282
284
  - test/rails_root/themes/blue/description.txt
283
285
  - test/rails_root/themes/blue/locales/en.yml