shakespeare 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +88 -84
- data/Rakefile +42 -42
- data/app/controllers/admin/pages_controller.rb +46 -46
- data/app/controllers/pages_controller.rb +4 -4
- data/app/models/page.rb +9 -9
- data/app/views/admin/pages/_form.html.erb +37 -37
- data/app/views/admin/pages/edit.html.erb +2 -2
- data/app/views/admin/pages/index.html.erb +23 -23
- data/app/views/admin/pages/new.html.erb +2 -2
- data/app/views/layouts/admin.html.erb +8 -8
- data/app/views/pages/show.html.erb +2 -2
- data/config/cucumber.yml +7 -7
- data/config/routes.rb +7 -7
- data/features/admin_pages.feature +37 -37
- data/features/public_pages.feature +11 -11
- data/features/step_definitions/page_steps.rb +6 -6
- data/features/step_definitions/web_steps.rb +258 -258
- data/features/support/env.rb +55 -55
- data/features/support/paths.rb +32 -32
- data/features/support/shakespeare_env.rb +2 -2
- data/generators/shakespeare/USAGE +4 -4
- data/generators/shakespeare/shakespeare_generator.rb +7 -7
- data/generators/shakespeare/templates/20091230095600_create_pages.rb +25 -25
- data/lib/shakespeare.rb +6 -6
- data/lib/shakespeare/helpers.rb +15 -15
- data/lib/shakespeare/settings.rb +29 -29
- data/lib/shakespeare/shakespeare.rb +7 -7
- data/lib/shakespeare/view_helpers.rb +28 -28
- data/rerun.txt +1 -1
- data/shakespeare.gemspec +89 -0
- data/spec/blueprints.rb +8 -8
- data/spec/controllers/admin/pages_controller_spec.rb +34 -34
- data/spec/database.yml +20 -20
- data/spec/helpers_spec.rb +19 -19
- data/spec/models/page_spec.rb +27 -27
- data/spec/schema.rb +15 -15
- data/spec/shakespeare_generator_spec.rb +35 -35
- data/spec/shakespeare_spec.rb +2 -2
- data/spec/spec_helper.rb +40 -40
- data/spec/view_helpers_spec.rb +102 -102
- metadata +2 -1
data/features/support/env.rb
CHANGED
@@ -1,55 +1,55 @@
|
|
1
|
-
# IMPORTANT: This file is generated by cucumber-rails - edit at your own peril.
|
2
|
-
# It is recommended to regenerate this file in the future when you upgrade to a
|
3
|
-
# newer version of cucumber-rails. Consider adding your own code to a new file
|
4
|
-
# instead of editing this one. Cucumber will automatically load all features/**/*.rb
|
5
|
-
# files.
|
6
|
-
|
7
|
-
ENV["RAILS_ENV"] ||= "cucumber"
|
8
|
-
require File.expand_path(File.dirname(__FILE__) + '/../../../../../config/environment')
|
9
|
-
|
10
|
-
require 'cucumber/formatter/unicode' # Remove this line if you don't want Cucumber Unicode support
|
11
|
-
require 'cucumber/rails/rspec'
|
12
|
-
require 'cucumber/rails/world'
|
13
|
-
require 'cucumber/rails/active_record'
|
14
|
-
require 'cucumber/web/tableish'
|
15
|
-
|
16
|
-
require 'webrat'
|
17
|
-
require 'webrat/core/matchers'
|
18
|
-
require 'cucumber/webrat/element_locator' # Deprecated in favor of #tableish - remove this line if you don't use #element_at or #table_at
|
19
|
-
|
20
|
-
Webrat.configure do |config|
|
21
|
-
config.mode = :rails
|
22
|
-
config.open_error_files = false # Set to true if you want error pages to pop up in the browser
|
23
|
-
end
|
24
|
-
|
25
|
-
|
26
|
-
# If you set this to false, any error raised from within your app will bubble
|
27
|
-
# up to your step definition and out to cucumber unless you catch it somewhere
|
28
|
-
# on the way. You can make Rails rescue errors and render error pages on a
|
29
|
-
# per-scenario basis by tagging a scenario or feature with the @allow-rescue tag.
|
30
|
-
#
|
31
|
-
# If you set this to true, Rails will rescue all errors and render error
|
32
|
-
# pages, more or less in the same way your application would behave in the
|
33
|
-
# default production environment. It's not recommended to do this for all
|
34
|
-
# of your scenarios, as this makes it hard to discover errors in your application.
|
35
|
-
ActionController::Base.allow_rescue = false
|
36
|
-
|
37
|
-
# If you set this to true, each scenario will run in a database transaction.
|
38
|
-
# You can still turn off transactions on a per-scenario basis, simply tagging
|
39
|
-
# a feature or scenario with the @no-txn tag. If you are using Capybara,
|
40
|
-
# tagging with @culerity or @javascript will also turn transactions off.
|
41
|
-
#
|
42
|
-
# If you set this to false, transactions will be off for all scenarios,
|
43
|
-
# regardless of whether you use @no-txn or not.
|
44
|
-
#
|
45
|
-
# Beware that turning transactions off will leave data in your database
|
46
|
-
# after each scenario, which can lead to hard-to-debug failures in
|
47
|
-
# subsequent scenarios. If you do this, we recommend you create a Before
|
48
|
-
# block that will explicitly put your database in a known state.
|
49
|
-
Cucumber::Rails::World.use_transactional_fixtures = true
|
50
|
-
|
51
|
-
# How to clean your database when transactions are turned off. See
|
52
|
-
# http://github.com/bmabey/database_cleaner for more info.
|
53
|
-
require 'database_cleaner'
|
54
|
-
DatabaseCleaner.strategy = :truncation
|
55
|
-
|
1
|
+
# IMPORTANT: This file is generated by cucumber-rails - edit at your own peril.
|
2
|
+
# It is recommended to regenerate this file in the future when you upgrade to a
|
3
|
+
# newer version of cucumber-rails. Consider adding your own code to a new file
|
4
|
+
# instead of editing this one. Cucumber will automatically load all features/**/*.rb
|
5
|
+
# files.
|
6
|
+
|
7
|
+
ENV["RAILS_ENV"] ||= "cucumber"
|
8
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../../../../config/environment')
|
9
|
+
|
10
|
+
require 'cucumber/formatter/unicode' # Remove this line if you don't want Cucumber Unicode support
|
11
|
+
require 'cucumber/rails/rspec'
|
12
|
+
require 'cucumber/rails/world'
|
13
|
+
require 'cucumber/rails/active_record'
|
14
|
+
require 'cucumber/web/tableish'
|
15
|
+
|
16
|
+
require 'webrat'
|
17
|
+
require 'webrat/core/matchers'
|
18
|
+
require 'cucumber/webrat/element_locator' # Deprecated in favor of #tableish - remove this line if you don't use #element_at or #table_at
|
19
|
+
|
20
|
+
Webrat.configure do |config|
|
21
|
+
config.mode = :rails
|
22
|
+
config.open_error_files = false # Set to true if you want error pages to pop up in the browser
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
# If you set this to false, any error raised from within your app will bubble
|
27
|
+
# up to your step definition and out to cucumber unless you catch it somewhere
|
28
|
+
# on the way. You can make Rails rescue errors and render error pages on a
|
29
|
+
# per-scenario basis by tagging a scenario or feature with the @allow-rescue tag.
|
30
|
+
#
|
31
|
+
# If you set this to true, Rails will rescue all errors and render error
|
32
|
+
# pages, more or less in the same way your application would behave in the
|
33
|
+
# default production environment. It's not recommended to do this for all
|
34
|
+
# of your scenarios, as this makes it hard to discover errors in your application.
|
35
|
+
ActionController::Base.allow_rescue = false
|
36
|
+
|
37
|
+
# If you set this to true, each scenario will run in a database transaction.
|
38
|
+
# You can still turn off transactions on a per-scenario basis, simply tagging
|
39
|
+
# a feature or scenario with the @no-txn tag. If you are using Capybara,
|
40
|
+
# tagging with @culerity or @javascript will also turn transactions off.
|
41
|
+
#
|
42
|
+
# If you set this to false, transactions will be off for all scenarios,
|
43
|
+
# regardless of whether you use @no-txn or not.
|
44
|
+
#
|
45
|
+
# Beware that turning transactions off will leave data in your database
|
46
|
+
# after each scenario, which can lead to hard-to-debug failures in
|
47
|
+
# subsequent scenarios. If you do this, we recommend you create a Before
|
48
|
+
# block that will explicitly put your database in a known state.
|
49
|
+
Cucumber::Rails::World.use_transactional_fixtures = true
|
50
|
+
|
51
|
+
# How to clean your database when transactions are turned off. See
|
52
|
+
# http://github.com/bmabey/database_cleaner for more info.
|
53
|
+
require 'database_cleaner'
|
54
|
+
DatabaseCleaner.strategy = :truncation
|
55
|
+
|
data/features/support/paths.rb
CHANGED
@@ -1,32 +1,32 @@
|
|
1
|
-
module NavigationHelpers
|
2
|
-
# Maps a name to a path. Used by the
|
3
|
-
#
|
4
|
-
# When /^I go to (.+)$/ do |page_name|
|
5
|
-
#
|
6
|
-
# step definition in web_steps.rb
|
7
|
-
#
|
8
|
-
def path_to(page_name)
|
9
|
-
case page_name
|
10
|
-
|
11
|
-
when /the home\s?page/
|
12
|
-
'/'
|
13
|
-
when /the pages admin page/
|
14
|
-
admin_pages_path
|
15
|
-
when /the page for "([^"]*)"/
|
16
|
-
page = Page.find_by_title($1)
|
17
|
-
page_path(page)
|
18
|
-
|
19
|
-
# Add more mappings here.
|
20
|
-
# Here is an example that pulls values out of the Regexp:
|
21
|
-
#
|
22
|
-
# when /^(.*)'s profile page$/i
|
23
|
-
# user_profile_path(User.find_by_login($1))
|
24
|
-
|
25
|
-
else
|
26
|
-
raise "Can't find mapping from \"#{page_name}\" to a path.\n" +
|
27
|
-
"Now, go and add a mapping in #{__FILE__}"
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
World(NavigationHelpers)
|
1
|
+
module NavigationHelpers
|
2
|
+
# Maps a name to a path. Used by the
|
3
|
+
#
|
4
|
+
# When /^I go to (.+)$/ do |page_name|
|
5
|
+
#
|
6
|
+
# step definition in web_steps.rb
|
7
|
+
#
|
8
|
+
def path_to(page_name)
|
9
|
+
case page_name
|
10
|
+
|
11
|
+
when /the home\s?page/
|
12
|
+
'/'
|
13
|
+
when /the pages admin page/
|
14
|
+
admin_pages_path
|
15
|
+
when /the page for "([^"]*)"/
|
16
|
+
page = Page.find_by_title($1)
|
17
|
+
page_path(page)
|
18
|
+
|
19
|
+
# Add more mappings here.
|
20
|
+
# Here is an example that pulls values out of the Regexp:
|
21
|
+
#
|
22
|
+
# when /^(.*)'s profile page$/i
|
23
|
+
# user_profile_path(User.find_by_login($1))
|
24
|
+
|
25
|
+
else
|
26
|
+
raise "Can't find mapping from \"#{page_name}\" to a path.\n" +
|
27
|
+
"Now, go and add a mapping in #{__FILE__}"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
World(NavigationHelpers)
|
@@ -1,3 +1,3 @@
|
|
1
|
-
require 'spec/spec_helper'
|
2
|
-
require 'spec/blueprints'
|
1
|
+
require 'spec/spec_helper'
|
2
|
+
require 'spec/blueprints'
|
3
3
|
load_schema
|
@@ -1,5 +1,5 @@
|
|
1
|
-
Description:
|
2
|
-
Creates a migration to create a table to store pages called "pages"
|
3
|
-
|
4
|
-
Examples:
|
1
|
+
Description:
|
2
|
+
Creates a migration to create a table to store pages called "pages"
|
3
|
+
|
4
|
+
Examples:
|
5
5
|
`./script/generate shakespeare`
|
@@ -1,8 +1,8 @@
|
|
1
|
-
class ShakespeareGenerator < Rails::Generator::Base
|
2
|
-
def manifest
|
3
|
-
record do |m|
|
4
|
-
m.directory 'db/migrate'
|
5
|
-
m.file "20091230095600_create_pages.rb", "db/migrate/20091230095600_create_pages.rb"
|
6
|
-
end
|
7
|
-
end
|
1
|
+
class ShakespeareGenerator < Rails::Generator::Base
|
2
|
+
def manifest
|
3
|
+
record do |m|
|
4
|
+
m.directory 'db/migrate'
|
5
|
+
m.file "20091230095600_create_pages.rb", "db/migrate/20091230095600_create_pages.rb"
|
6
|
+
end
|
7
|
+
end
|
8
8
|
end
|
@@ -1,25 +1,25 @@
|
|
1
|
-
class CreatePages < ActiveRecord::Migration
|
2
|
-
def self.up
|
3
|
-
create_table "pages", :force => true do |t|
|
4
|
-
t.string "title"
|
5
|
-
t.string "url"
|
6
|
-
t.text "keywords"
|
7
|
-
t.text "description"
|
8
|
-
t.text "content"
|
9
|
-
t.datetime "created_at"
|
10
|
-
t.datetime "updated_at"
|
11
|
-
t.boolean "noindex"
|
12
|
-
t.boolean "nofollow"
|
13
|
-
t.string "canonical"
|
14
|
-
t.boolean "enable_canonical"
|
15
|
-
t.boolean "enable_keywords"
|
16
|
-
end
|
17
|
-
|
18
|
-
add_index :pages, :url
|
19
|
-
end
|
20
|
-
|
21
|
-
def self.down
|
22
|
-
remove_index :pages, :url
|
23
|
-
drop_table :pages
|
24
|
-
end
|
25
|
-
end
|
1
|
+
class CreatePages < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table "pages", :force => true do |t|
|
4
|
+
t.string "title"
|
5
|
+
t.string "url"
|
6
|
+
t.text "keywords"
|
7
|
+
t.text "description"
|
8
|
+
t.text "content"
|
9
|
+
t.datetime "created_at"
|
10
|
+
t.datetime "updated_at"
|
11
|
+
t.boolean "noindex"
|
12
|
+
t.boolean "nofollow"
|
13
|
+
t.string "canonical"
|
14
|
+
t.boolean "enable_canonical"
|
15
|
+
t.boolean "enable_keywords"
|
16
|
+
end
|
17
|
+
|
18
|
+
add_index :pages, :url
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.down
|
22
|
+
remove_index :pages, :url
|
23
|
+
drop_table :pages
|
24
|
+
end
|
25
|
+
end
|
data/lib/shakespeare.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
require 'shakespeare/settings'
|
2
|
-
require 'shakespeare/shakespeare'
|
3
|
-
require 'shakespeare/helpers'
|
4
|
-
require 'shakespeare/view_helpers'
|
5
|
-
|
6
|
-
ApplicationController.send(:include, Shakespeare::Helpers)
|
1
|
+
require 'shakespeare/settings'
|
2
|
+
require 'shakespeare/shakespeare'
|
3
|
+
require 'shakespeare/helpers'
|
4
|
+
require 'shakespeare/view_helpers'
|
5
|
+
|
6
|
+
ApplicationController.send(:include, Shakespeare::Helpers)
|
7
7
|
ActionView::Base.send(:include, Shakespeare::ViewHelpers)
|
data/lib/shakespeare/helpers.rb
CHANGED
@@ -1,16 +1,16 @@
|
|
1
|
-
module Shakespeare
|
2
|
-
module Helpers
|
3
|
-
def self.included(base)
|
4
|
-
base.send(:helper_method, :page_content) if base.respond_to?(:helper_method)
|
5
|
-
end
|
6
|
-
|
7
|
-
def page_content
|
8
|
-
@page_content = Page.find_by_url("#{controller_name}/#{action_name}")
|
9
|
-
end
|
10
|
-
|
11
|
-
def protect_in_production
|
12
|
-
return true unless Shakespeare.env == 'production'
|
13
|
-
render :text => 'Unauthorized' unless Shakespeare::Settings.allow_anonymous
|
14
|
-
end
|
15
|
-
end
|
1
|
+
module Shakespeare
|
2
|
+
module Helpers
|
3
|
+
def self.included(base)
|
4
|
+
base.send(:helper_method, :page_content) if base.respond_to?(:helper_method)
|
5
|
+
end
|
6
|
+
|
7
|
+
def page_content
|
8
|
+
@page_content = Page.find_by_url("#{controller_name}/#{action_name}")
|
9
|
+
end
|
10
|
+
|
11
|
+
def protect_in_production
|
12
|
+
return true unless Shakespeare.env == 'production'
|
13
|
+
render :text => 'Unauthorized' unless Shakespeare::Settings.allow_anonymous
|
14
|
+
end
|
15
|
+
end
|
16
16
|
end
|
data/lib/shakespeare/settings.rb
CHANGED
@@ -1,30 +1,30 @@
|
|
1
|
-
module Shakespeare
|
2
|
-
class Settings
|
3
|
-
class << self
|
4
|
-
def layout
|
5
|
-
@layout ||= 'admin'
|
6
|
-
end
|
7
|
-
|
8
|
-
def layout=(layout_choice)
|
9
|
-
@layout = layout_choice
|
10
|
-
end
|
11
|
-
|
12
|
-
def before_filters
|
13
|
-
@before_filters ||= []
|
14
|
-
end
|
15
|
-
|
16
|
-
def before_filters=(filters)
|
17
|
-
@before_filters ||= filters
|
18
|
-
end
|
19
|
-
|
20
|
-
def allow_anonymous
|
21
|
-
@allow_anonymous ||= false
|
22
|
-
end
|
23
|
-
|
24
|
-
def allow_anonymous=(boolean)
|
25
|
-
@allow_anonymous = boolean
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
1
|
+
module Shakespeare
|
2
|
+
class Settings
|
3
|
+
class << self
|
4
|
+
def layout
|
5
|
+
@layout ||= 'admin'
|
6
|
+
end
|
7
|
+
|
8
|
+
def layout=(layout_choice)
|
9
|
+
@layout = layout_choice
|
10
|
+
end
|
11
|
+
|
12
|
+
def before_filters
|
13
|
+
@before_filters ||= []
|
14
|
+
end
|
15
|
+
|
16
|
+
def before_filters=(filters)
|
17
|
+
@before_filters ||= filters
|
18
|
+
end
|
19
|
+
|
20
|
+
def allow_anonymous
|
21
|
+
@allow_anonymous ||= false
|
22
|
+
end
|
23
|
+
|
24
|
+
def allow_anonymous=(boolean)
|
25
|
+
@allow_anonymous = boolean
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
30
|
end
|
@@ -1,8 +1,8 @@
|
|
1
|
-
module Shakespeare
|
2
|
-
|
3
|
-
class << self
|
4
|
-
def env
|
5
|
-
Rails.env
|
6
|
-
end
|
7
|
-
end
|
1
|
+
module Shakespeare
|
2
|
+
|
3
|
+
class << self
|
4
|
+
def env
|
5
|
+
Rails.env
|
6
|
+
end
|
7
|
+
end
|
8
8
|
end
|
@@ -1,29 +1,29 @@
|
|
1
|
-
module Shakespeare
|
2
|
-
module ViewHelpers
|
3
|
-
def page_title
|
4
|
-
return if page_content.nil? or page_content.title.blank?
|
5
|
-
page_content.title
|
6
|
-
end
|
7
|
-
|
8
|
-
def description_meta_tag
|
9
|
-
return if page_content.nil? or page_content.description.blank?
|
10
|
-
%Q[<meta name="description" content="#{page_content.description}">]
|
11
|
-
end
|
12
|
-
|
13
|
-
def keywords_meta_tag
|
14
|
-
return if page_content.nil? or page_content.keywords.blank?
|
15
|
-
%Q[<meta name="keywords" content="#{page_content.keywords}">]
|
16
|
-
end
|
17
|
-
|
18
|
-
def robots_meta_tag
|
19
|
-
return if page_content.nil? or page_content.robots.blank?
|
20
|
-
%Q[<meta name="robots" content="#{page_content.robots}">]
|
21
|
-
end
|
22
|
-
|
23
|
-
def canonical_link_tag
|
24
|
-
return if page_content.nil? or page_content.canonical.blank?
|
25
|
-
return unless page_content.enable_canonical?
|
26
|
-
%Q[<link href="#{page_content.canonical}" rel="canonical" />]
|
27
|
-
end
|
28
|
-
end
|
1
|
+
module Shakespeare
|
2
|
+
module ViewHelpers
|
3
|
+
def page_title
|
4
|
+
return if page_content.nil? or page_content.title.blank?
|
5
|
+
page_content.title
|
6
|
+
end
|
7
|
+
|
8
|
+
def description_meta_tag
|
9
|
+
return if page_content.nil? or page_content.description.blank?
|
10
|
+
%Q[<meta name="description" content="#{page_content.description}">]
|
11
|
+
end
|
12
|
+
|
13
|
+
def keywords_meta_tag
|
14
|
+
return if page_content.nil? or page_content.keywords.blank?
|
15
|
+
%Q[<meta name="keywords" content="#{page_content.keywords}">]
|
16
|
+
end
|
17
|
+
|
18
|
+
def robots_meta_tag
|
19
|
+
return if page_content.nil? or page_content.robots.blank?
|
20
|
+
%Q[<meta name="robots" content="#{page_content.robots}">]
|
21
|
+
end
|
22
|
+
|
23
|
+
def canonical_link_tag
|
24
|
+
return if page_content.nil? or page_content.canonical.blank?
|
25
|
+
return unless page_content.enable_canonical?
|
26
|
+
%Q[<link href="#{page_content.canonical}" rel="canonical" />]
|
27
|
+
end
|
28
|
+
end
|
29
29
|
end
|