content_engine 0.1.0

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.
Files changed (91) hide show
  1. data/.gitignore +4 -0
  2. data/Gemfile +40 -0
  3. data/README.md +43 -0
  4. data/Rakefile +86 -0
  5. data/VERSION +1 -0
  6. data/app/controllers/content_engine/articles_controller.rb +54 -0
  7. data/app/controllers/content_engine/pages_controller.rb +76 -0
  8. data/app/controllers/content_engine_controller.rb +14 -0
  9. data/app/helpers/application_helper.rb +2 -0
  10. data/app/models/article.rb +29 -0
  11. data/app/models/content.rb +64 -0
  12. data/app/models/page.rb +40 -0
  13. data/app/models/site.rb +26 -0
  14. data/app/models/tag.rb +53 -0
  15. data/app/models/user.rb +5 -0
  16. data/app/views/content_engine/articles/_form.erb +8 -0
  17. data/app/views/content_engine/articles/edit.html.erb +7 -0
  18. data/app/views/content_engine/articles/index.html.erb +10 -0
  19. data/app/views/content_engine/articles/new.html.erb +6 -0
  20. data/app/views/content_engine/articles/show.html.erb +9 -0
  21. data/app/views/content_engine/pages/_form.erb +8 -0
  22. data/app/views/content_engine/pages/edit.html.erb +7 -0
  23. data/app/views/content_engine/pages/index.html.erb +10 -0
  24. data/app/views/content_engine/pages/new.html.erb +6 -0
  25. data/app/views/content_engine/pages/show.html.erb +9 -0
  26. data/app/views/layouts/application.html.erb +16 -0
  27. data/config/application.rb +1 -0
  28. data/config/locales/en.yml +5 -0
  29. data/config/routes.rb +25 -0
  30. data/content_engine.gemspec +167 -0
  31. data/db/migrate/20100225105011_create_contents.rb +22 -0
  32. data/db/migrate/20100225105903_create_users.rb +8 -0
  33. data/db/migrate/20100225110024_create_sites.rb +15 -0
  34. data/db/migrate/20100225110037_create_memberships.rb +12 -0
  35. data/db/migrate/20100225112236_acts_as_taggable_on.rb +26 -0
  36. data/db/schema.rb +58 -0
  37. data/lib/content_engine.rb +24 -0
  38. data/lib/tasks/content_engine.rake +24 -0
  39. data/spec/blueprint.rb +41 -0
  40. data/spec/models/article_spec.rb +56 -0
  41. data/spec/models/page_spec.rb +158 -0
  42. data/spec/models/site_spec.rb +32 -0
  43. data/spec/rails_app/.gitignore +4 -0
  44. data/spec/rails_app/Rakefile +10 -0
  45. data/spec/rails_app/app/controllers/admins_controller.rb +6 -0
  46. data/spec/rails_app/app/controllers/application_controller.rb +6 -0
  47. data/spec/rails_app/app/controllers/home_controller.rb +4 -0
  48. data/spec/rails_app/app/controllers/sessions_controller.rb +6 -0
  49. data/spec/rails_app/app/controllers/users_controller.rb +12 -0
  50. data/spec/rails_app/app/helpers/application_helper.rb +3 -0
  51. data/spec/rails_app/app/views/home/index.html.erb +1 -0
  52. data/spec/rails_app/app/views/layouts/application.html.erb +19 -0
  53. data/spec/rails_app/config/application.rb +30 -0
  54. data/spec/rails_app/config/boot.rb +9 -0
  55. data/spec/rails_app/config/database.yml +16 -0
  56. data/spec/rails_app/config/environment.rb +5 -0
  57. data/spec/rails_app/config/environments/development.rb +19 -0
  58. data/spec/rails_app/config/environments/production.rb +33 -0
  59. data/spec/rails_app/config/environments/test.rb +29 -0
  60. data/spec/rails_app/config/initializers/backtrace_silencers.rb +7 -0
  61. data/spec/rails_app/config/initializers/cookie_verification_secret.rb +7 -0
  62. data/spec/rails_app/config/initializers/inflections.rb +2 -0
  63. data/spec/rails_app/config/initializers/session_store.rb +15 -0
  64. data/spec/rails_app/config/routes.rb +21 -0
  65. data/spec/rails_app/config.ru +4 -0
  66. data/spec/rails_app/db/migrate/20100225105011_create_contents.rb +22 -0
  67. data/spec/rails_app/db/migrate/20100225105903_create_users.rb +8 -0
  68. data/spec/rails_app/db/migrate/20100225110024_create_sites.rb +15 -0
  69. data/spec/rails_app/db/migrate/20100225110037_create_memberships.rb +12 -0
  70. data/spec/rails_app/db/migrate/20100225112236_acts_as_taggable_on.rb +26 -0
  71. data/spec/rails_app/db/schema.rb +59 -0
  72. data/spec/rails_app/public/404.html +26 -0
  73. data/spec/rails_app/public/422.html +26 -0
  74. data/spec/rails_app/public/500.html +26 -0
  75. data/spec/rails_app/public/favicon.ico +0 -0
  76. data/spec/rails_app/public/images/rails.png +0 -0
  77. data/spec/rails_app/public/javascripts/application.js +2 -0
  78. data/spec/rails_app/public/javascripts/controls.js +963 -0
  79. data/spec/rails_app/public/javascripts/dragdrop.js +973 -0
  80. data/spec/rails_app/public/javascripts/effects.js +1128 -0
  81. data/spec/rails_app/public/javascripts/prototype.js +4320 -0
  82. data/spec/rails_app/public/javascripts/rails.js +110 -0
  83. data/spec/rails_app/public/robots.txt +5 -0
  84. data/spec/rails_app/public/stylesheets/.gitkeep +0 -0
  85. data/spec/rails_app/script/rails +10 -0
  86. data/spec/requests/user_manage_articles_spec.rb +85 -0
  87. data/spec/requests/user_manage_pages_spec.rb +92 -0
  88. data/spec/requests/webrat.log +17 -0
  89. data/spec/spec.opts +2 -0
  90. data/spec/spec_helper.rb +36 -0
  91. metadata +226 -0
data/config/routes.rb ADDED
@@ -0,0 +1,25 @@
1
+ Rails::Application.routes.draw do
2
+ # resources :users, :only => [:index] do
3
+ # get :expire, :on => :member
4
+ # end
5
+ #
6
+ # resources :admins, :only => [:index]
7
+ #
8
+ # devise_for :users
9
+ # devise_for :admin, :as => "admin_area", :controllers => { :sessions => "sessions" }
10
+ # devise_for :accounts, :scope => "manager", :path_prefix => ":locale",
11
+ # :class_name => "User", :path_names => {
12
+ # :sign_in => "login", :sign_out => "logout",
13
+ # :password => "secret", :confirmation => "verification",
14
+ # :unlock => "unblock", :sign_up => "register"
15
+ # }
16
+ #
17
+ # match "/admin_area/home", :to => "admins#index", :as => :admin_root
18
+ # match "/sign_in", :to => "devise/sessions#new"
19
+
20
+ resources :pages, :controller => 'content_engine/pages'
21
+ resources :articles, :controller => 'content_engine/articles'
22
+
23
+ match "/:year/:month/:id", :to => "content_engine/articles#show", :requirements => {:year => /\d{4}/, :month => /\d{2}/}
24
+ match "/*url", :to => 'content_engine/pages#lookup'
25
+ end
@@ -0,0 +1,167 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{content_engine}
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Taylor Luk"]
12
+ s.date = %q{2010-02-28}
13
+ s.description = %q{Extracted from shop2, site-rest}
14
+ s.email = %q{taylor.luk@idealian.net}
15
+ s.extra_rdoc_files = [
16
+ "README.md"
17
+ ]
18
+ s.files = [
19
+ ".gitignore",
20
+ "Gemfile",
21
+ "README.md",
22
+ "Rakefile",
23
+ "VERSION",
24
+ "app/controllers/content_engine/articles_controller.rb",
25
+ "app/controllers/content_engine/pages_controller.rb",
26
+ "app/controllers/content_engine_controller.rb",
27
+ "app/helpers/application_helper.rb",
28
+ "app/models/article.rb",
29
+ "app/models/content.rb",
30
+ "app/models/page.rb",
31
+ "app/models/site.rb",
32
+ "app/models/tag.rb",
33
+ "app/models/user.rb",
34
+ "app/views/content_engine/articles/_form.erb",
35
+ "app/views/content_engine/articles/edit.html.erb",
36
+ "app/views/content_engine/articles/index.html.erb",
37
+ "app/views/content_engine/articles/new.html.erb",
38
+ "app/views/content_engine/articles/show.html.erb",
39
+ "app/views/content_engine/pages/_form.erb",
40
+ "app/views/content_engine/pages/edit.html.erb",
41
+ "app/views/content_engine/pages/index.html.erb",
42
+ "app/views/content_engine/pages/new.html.erb",
43
+ "app/views/content_engine/pages/show.html.erb",
44
+ "app/views/layouts/application.html.erb",
45
+ "config/application.rb",
46
+ "config/locales/en.yml",
47
+ "config/routes.rb",
48
+ "content_engine.gemspec",
49
+ "db/migrate/20100225105011_create_contents.rb",
50
+ "db/migrate/20100225105903_create_users.rb",
51
+ "db/migrate/20100225110024_create_sites.rb",
52
+ "db/migrate/20100225110037_create_memberships.rb",
53
+ "db/migrate/20100225112236_acts_as_taggable_on.rb",
54
+ "db/schema.rb",
55
+ "lib/content_engine.rb",
56
+ "lib/tasks/content_engine.rake",
57
+ "spec/blueprint.rb",
58
+ "spec/models/article_spec.rb",
59
+ "spec/models/page_spec.rb",
60
+ "spec/models/site_spec.rb",
61
+ "spec/rails_app/.gitignore",
62
+ "spec/rails_app/Rakefile",
63
+ "spec/rails_app/app/controllers/application_controller.rb",
64
+ "spec/rails_app/app/controllers/home_controller.rb",
65
+ "spec/rails_app/app/helpers/application_helper.rb",
66
+ "spec/rails_app/app/views/home/index.html.erb",
67
+ "spec/rails_app/app/views/layouts/application.html.erb",
68
+ "spec/rails_app/config.ru",
69
+ "spec/rails_app/config/application.rb",
70
+ "spec/rails_app/config/boot.rb",
71
+ "spec/rails_app/config/database.yml",
72
+ "spec/rails_app/config/environment.rb",
73
+ "spec/rails_app/config/environments/development.rb",
74
+ "spec/rails_app/config/environments/production.rb",
75
+ "spec/rails_app/config/environments/test.rb",
76
+ "spec/rails_app/config/initializers/backtrace_silencers.rb",
77
+ "spec/rails_app/config/initializers/cookie_verification_secret.rb",
78
+ "spec/rails_app/config/initializers/inflections.rb",
79
+ "spec/rails_app/config/initializers/session_store.rb",
80
+ "spec/rails_app/config/routes.rb",
81
+ "spec/rails_app/db/migrate/20100225105011_create_contents.rb",
82
+ "spec/rails_app/db/migrate/20100225105903_create_users.rb",
83
+ "spec/rails_app/db/migrate/20100225110024_create_sites.rb",
84
+ "spec/rails_app/db/migrate/20100225110037_create_memberships.rb",
85
+ "spec/rails_app/db/migrate/20100225112236_acts_as_taggable_on.rb",
86
+ "spec/rails_app/db/schema.rb",
87
+ "spec/rails_app/public/404.html",
88
+ "spec/rails_app/public/422.html",
89
+ "spec/rails_app/public/500.html",
90
+ "spec/rails_app/public/favicon.ico",
91
+ "spec/rails_app/public/images/rails.png",
92
+ "spec/rails_app/public/javascripts/application.js",
93
+ "spec/rails_app/public/javascripts/controls.js",
94
+ "spec/rails_app/public/javascripts/dragdrop.js",
95
+ "spec/rails_app/public/javascripts/effects.js",
96
+ "spec/rails_app/public/javascripts/prototype.js",
97
+ "spec/rails_app/public/javascripts/rails.js",
98
+ "spec/rails_app/public/robots.txt",
99
+ "spec/rails_app/public/stylesheets/.gitkeep",
100
+ "spec/rails_app/script/rails",
101
+ "spec/requests/user_manage_articles_spec.rb",
102
+ "spec/requests/user_manage_pages_spec.rb",
103
+ "spec/requests/webrat.log",
104
+ "spec/spec.opts",
105
+ "spec/spec_helper.rb"
106
+ ]
107
+ s.homepage = %q{http://github.com/idealian/content_engine}
108
+ s.rdoc_options = ["--charset=UTF-8"]
109
+ s.require_paths = ["lib"]
110
+ s.rubygems_version = %q{1.3.6}
111
+ s.summary = %q{A Rails 3 Engine for sexier site and content management}
112
+ s.test_files = [
113
+ "spec/blueprint.rb",
114
+ "spec/models/article_spec.rb",
115
+ "spec/models/page_spec.rb",
116
+ "spec/models/site_spec.rb",
117
+ "spec/rails_app/app/controllers/admins_controller.rb",
118
+ "spec/rails_app/app/controllers/application_controller.rb",
119
+ "spec/rails_app/app/controllers/home_controller.rb",
120
+ "spec/rails_app/app/controllers/sessions_controller.rb",
121
+ "spec/rails_app/app/controllers/users_controller.rb",
122
+ "spec/rails_app/app/helpers/application_helper.rb",
123
+ "spec/rails_app/config/application.rb",
124
+ "spec/rails_app/config/boot.rb",
125
+ "spec/rails_app/config/environment.rb",
126
+ "spec/rails_app/config/environments/development.rb",
127
+ "spec/rails_app/config/environments/production.rb",
128
+ "spec/rails_app/config/environments/test.rb",
129
+ "spec/rails_app/config/initializers/backtrace_silencers.rb",
130
+ "spec/rails_app/config/initializers/cookie_verification_secret.rb",
131
+ "spec/rails_app/config/initializers/inflections.rb",
132
+ "spec/rails_app/config/initializers/session_store.rb",
133
+ "spec/rails_app/config/routes.rb",
134
+ "spec/rails_app/db/migrate/20100225105011_create_contents.rb",
135
+ "spec/rails_app/db/migrate/20100225105903_create_users.rb",
136
+ "spec/rails_app/db/migrate/20100225110024_create_sites.rb",
137
+ "spec/rails_app/db/migrate/20100225110037_create_memberships.rb",
138
+ "spec/rails_app/db/migrate/20100225112236_acts_as_taggable_on.rb",
139
+ "spec/rails_app/db/schema.rb",
140
+ "spec/requests/user_manage_articles_spec.rb",
141
+ "spec/requests/user_manage_pages_spec.rb",
142
+ "spec/spec_helper.rb"
143
+ ]
144
+
145
+ if s.respond_to? :specification_version then
146
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
147
+ s.specification_version = 3
148
+
149
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
150
+ s.add_runtime_dependency(%q<will_paginate>, [">= 0"])
151
+ s.add_runtime_dependency(%q<rdiscount>, [">= 0"])
152
+ s.add_runtime_dependency(%q<formtastic>, [">= 0"])
153
+ s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
154
+ else
155
+ s.add_dependency(%q<will_paginate>, [">= 0"])
156
+ s.add_dependency(%q<rdiscount>, [">= 0"])
157
+ s.add_dependency(%q<formtastic>, [">= 0"])
158
+ s.add_dependency(%q<rspec>, [">= 1.2.9"])
159
+ end
160
+ else
161
+ s.add_dependency(%q<will_paginate>, [">= 0"])
162
+ s.add_dependency(%q<rdiscount>, [">= 0"])
163
+ s.add_dependency(%q<formtastic>, [">= 0"])
164
+ s.add_dependency(%q<rspec>, [">= 1.2.9"])
165
+ end
166
+ end
167
+
@@ -0,0 +1,22 @@
1
+ class CreateContents < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :contents do |t|
4
+ t.string :title
5
+ t.string :permalink
6
+ t.text :description
7
+ t.text :body
8
+ t.string :type, :default => 'Page'
9
+ t.integer :parent_id
10
+ t.integer :site_id
11
+ t.integer :user_id
12
+ t.integer :lft
13
+ t.integer :rgt
14
+ t.datetime :published_at
15
+ t.timestamps
16
+ end
17
+ end
18
+
19
+ def self.down
20
+ drop_table :contents
21
+ end
22
+ end
@@ -0,0 +1,8 @@
1
+ class CreateUsers < ActiveRecord::Migration
2
+ def self.up
3
+
4
+ end
5
+
6
+ def self.down
7
+ end
8
+ end
@@ -0,0 +1,15 @@
1
+ class CreateSites < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :sites do |t|
4
+ t.string :title
5
+ t.text :description
6
+ t.string :time_zone
7
+ t.integer :owner_id
8
+ t.string :host
9
+ end
10
+ end
11
+
12
+ def self.down
13
+ drop_table :sites
14
+ end
15
+ end
@@ -0,0 +1,12 @@
1
+ class CreateMemberships < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :memberships do |t|
4
+ t.integer :site_id
5
+ t.integer :user_id
6
+ end
7
+ end
8
+
9
+ def self.down
10
+ drop_table :memberships
11
+ end
12
+ end
@@ -0,0 +1,26 @@
1
+ class ActsAsTaggableOn < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :tags do |t|
4
+ t.column :name, :string
5
+ end
6
+
7
+ create_table :taggings do |t|
8
+ t.column :tag_id, :integer
9
+ t.column :taggable_id, :integer
10
+ t.column :tagger_id, :integer
11
+ t.column :tagger_type, :string
12
+
13
+ # You should make sure that the column created is
14
+ # long enough to store the required class names.
15
+ t.column :taggable_type, :string
16
+ t.column :context, :string
17
+
18
+ t.column :created_at, :datetime
19
+ end
20
+
21
+ add_index :taggings, :tag_id
22
+ end
23
+
24
+ def self.down
25
+ end
26
+ end
data/db/schema.rb ADDED
@@ -0,0 +1,58 @@
1
+ # This file is auto-generated from the current state of the database. Instead of editing this file,
2
+ # please use the migrations feature of Active Record to incrementally modify your database, and
3
+ # then regenerate this schema definition.
4
+ #
5
+ # Note that this schema.rb definition is the authoritative source for your database schema. If you need
6
+ # to create the application database on another system, you should be using db:schema:load, not running
7
+ # all the migrations from scratch. The latter is a flawed and unsustainable approach (the more migrations
8
+ # you'll amass, the slower it'll run and the greater likelihood for issues).
9
+ #
10
+ # It's strongly recommended to check this file into your version control system.
11
+ ActiveRecord::Schema.define(:version => 20100225112236) do
12
+
13
+ create_table "contents", :force => true do |t|
14
+ t.string "title"
15
+ t.string "permalink"
16
+ t.text "description"
17
+ t.text "body"
18
+ t.string "type", :default => "Page"
19
+ t.integer "parent_id"
20
+ t.integer "site_id"
21
+ t.integer "user_id"
22
+ t.integer "lft"
23
+ t.integer "rgt"
24
+ t.datetime "published_at"
25
+ t.datetime "created_at"
26
+ t.datetime "updated_at"
27
+ end
28
+
29
+ create_table "memberships", :force => true do |t|
30
+ t.integer "site_id"
31
+ t.integer "user_id"
32
+ end
33
+
34
+ create_table "sites", :force => true do |t|
35
+ t.string "title"
36
+ t.text "description"
37
+ t.string "time_zone"
38
+ t.integer "owner_id"
39
+ t.string "host"
40
+ end
41
+
42
+ create_table "taggings", :force => true do |t|
43
+ t.integer "tag_id"
44
+ t.integer "taggable_id"
45
+ t.integer "tagger_id"
46
+ t.string "tagger_type"
47
+ t.string "taggable_type"
48
+ t.string "context"
49
+ t.datetime "created_at"
50
+ end
51
+
52
+ add_index "taggings", ["tag_id"], :name => "index_taggings_on_tag_id"
53
+
54
+ create_table "tags", :force => true do |t|
55
+ t.string "name"
56
+ end
57
+
58
+ end
@@ -0,0 +1,24 @@
1
+ require 'rdiscount'
2
+ require 'will_paginate'
3
+ require 'formtastic'
4
+
5
+ module ContentEngine
6
+ class Engine < ::Rails::Engine
7
+ engine_name :content_engine
8
+ end
9
+ end
10
+
11
+
12
+ # Mixing in plugin methods
13
+
14
+ # Permalink Fu
15
+ ActiveRecord::Base.send(:extend, PermalinkFu::PluginMethods)
16
+
17
+ # ActsAsTaggableOn
18
+ ActiveRecord::Base.send :include, ActiveRecord::Acts::TaggableOn
19
+ ActiveRecord::Base.send :include, ActiveRecord::Acts::Tagger
20
+ ActionView::Base.send :include, TagsHelper if defined?(ActionView::Base)
21
+
22
+ # require 'formtastic/layout_helper'
23
+ ActionView::Base.send :include, Formtastic::SemanticFormHelper
24
+ # ActionView::Base.send :include, Formtastic::LayoutHelper
@@ -0,0 +1,24 @@
1
+ namespace :content_engine do
2
+
3
+ desc "Generate content engine migration files"
4
+ task :migrate do
5
+ puts "Generating migration files"
6
+
7
+ system "rsync -ruv #{File.expand_path('../../../db/migrate', __FILE__)} db"
8
+
9
+ puts "========================="
10
+ puts " Please run db:migrate"
11
+ puts "========================="
12
+ end
13
+
14
+ desc "Execute pending migration and create default site"
15
+ task :install => :environment do
16
+ unless ENV.include?("site")
17
+ raise 'usage: rake content_engine:install site="My site name"'
18
+ end
19
+
20
+ Rake::Task["db:migrate"].invoke
21
+
22
+ Site.create(:name => ENV["site"])
23
+ end
24
+ end
data/spec/blueprint.rb ADDED
@@ -0,0 +1,41 @@
1
+ require 'machinist/active_record'
2
+ require 'sham'
3
+ require 'faker'
4
+
5
+ Sham.name { Faker::Name.name }
6
+ Sham.email { Faker::Internet.email }
7
+ Sham.login { Faker::Internet.user_name }
8
+ Sham.title { Faker::Lorem.sentence }
9
+ Sham.host{|n| "something-else-#{n}"}
10
+ Sham.body { Faker::Company.bs }
11
+
12
+
13
+ Site.blueprint do
14
+ title "Article title"
15
+ host
16
+ end
17
+ #
18
+ Article.blueprint do
19
+ title
20
+ body
21
+ # site { Site.current }
22
+ end
23
+
24
+ Page.blueprint do
25
+ title
26
+ body
27
+ published_at {Time.now.utc}
28
+ # site { Site.current }
29
+ end
30
+
31
+ User.blueprint do
32
+ login
33
+ email
34
+ # password "test password"
35
+ # password_confirmation "test password"
36
+ end
37
+ #
38
+ # Tag.blueprint do
39
+ # title { Sham.title }
40
+ # body "Page body <br />......</br/> The end"
41
+ # end
@@ -0,0 +1,56 @@
1
+ require 'spec_helper'
2
+
3
+ describe Article do
4
+ # context "Validation" do
5
+ # should_validate_presence_of :title, :body
6
+ # should_belong_to :site
7
+ # should_belong_to :user
8
+ # end
9
+
10
+ before do
11
+ @site = Site.make
12
+ @post_1 = @site.articles.make(:title => "first post")
13
+ @post_2 = @site.articles.make(:title => "second post")
14
+ end
15
+
16
+ it "should set published_at when publish" do
17
+ article = @site.articles.make
18
+ article.published?.should == false
19
+
20
+ article.publish!
21
+
22
+ article.published?.should == true
23
+ article.published_at.should be_a(Time)
24
+ end
25
+
26
+ it "has link to prev article" do
27
+ @post_1.publish!
28
+ @post_2.publish!
29
+
30
+ @post_1.prev.should == nil
31
+ @post_2.prev.should == @post_1
32
+ end
33
+
34
+ it "has link to next article" do
35
+ @post_1.publish!
36
+ @post_2.publish!
37
+
38
+ @post_1.next.should == @post_2
39
+ @post_2.next.should == nil
40
+ end
41
+
42
+ it "has a article style url (/:year/:month/:permalink)" do
43
+ pattern = /^\/articles\/[0-9]{4}\/[0-9]{2}\/[0-9]{2}\/([a-z0-9-]+)$/
44
+ Article.make.url.should =~ pattern
45
+ end
46
+
47
+ context "Tagging" do
48
+ it "tag list for multiple tagging" do
49
+ @post_1.tag_list = 'ruby, rails'
50
+
51
+ @post_1.save
52
+
53
+ @post_1.should have(2).tags
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,158 @@
1
+ require 'spec_helper'
2
+
3
+ describe Page do
4
+ before do
5
+ @site = Site.make
6
+ end
7
+ #
8
+ # context "Validations" do
9
+ # it { should validate_presence_of :title, :body, :site_id }
10
+ # it { should belong_to :site }
11
+ # it { should belong_to :user }
12
+ # end
13
+
14
+ context "Page content" do
15
+ before do
16
+ @page = @site.pages.make(:body => '# hello world')
17
+ end
18
+
19
+ it "should make markdown into html" do
20
+ @page.body.should =~ /<h1>hello world<\/h1>/
21
+
22
+ p2 = @site.pages.make(:body => "testing content body")
23
+ p2.body.should =~ /<p>testing content body<\/p>/
24
+ end
25
+
26
+ it "should have access of original source" do
27
+ @page.body_source.should == '# hello world'
28
+ end
29
+ end
30
+
31
+ context "Page hierachy" do
32
+ before do
33
+ @site.pages.count.should == 0
34
+
35
+ @page = @site.pages.make(:body => 'home page content')
36
+ end
37
+
38
+ it "should mark the first page of a site as homepage" do
39
+ @page.root?.should == true
40
+
41
+ @page.children.make(:body => 'second page').root?.should == false
42
+ end
43
+
44
+ it "all pages without a parent becomes direct children of home page" do
45
+ page = @site.pages.make(:title => 'standard page')
46
+ page2 = @site.pages.make(:title => 'standard page 2')
47
+
48
+ @page.children.first.should == page
49
+ @page.children.second.should == page2
50
+
51
+ page.root?.should == false
52
+ page2.root?.should == false
53
+ end
54
+
55
+ it "should have child pages" do
56
+ 3.times { @page.children.make }
57
+ @page.children.count.should == 3
58
+ end
59
+ end
60
+
61
+ context "Page url" do
62
+ before do
63
+ @site.pages.count.should == 0
64
+ @page = @site.pages.make(:title => 'home page content')
65
+ end
66
+
67
+ it "should permalink should be valid" do
68
+ page = @site.pages.make(:title => 'Some of the most complecated page title !@#!123123')
69
+ page.permalink.should =~ /[a-z0-9-]+/
70
+ end
71
+
72
+ it "should make / as root url" do
73
+ @page.url.should == '/'
74
+ end
75
+
76
+ it "should make subpage url" do
77
+ @page.children.make(:title => 'sub page').url.should == '/sub-page'
78
+ end
79
+
80
+ it "should make url based on all ancestors" do
81
+ page2 = @page.children.make(:title => 'sub page 2')
82
+ page2.url.should == '/sub-page-2'
83
+
84
+ page3 = page2.children.make(:title => 'sub sub page')
85
+ page3.url.should == '/sub-page-2/sub-sub-page'
86
+ end
87
+
88
+ it "should be able to find by page url" do
89
+ @site.pages.destroy_all
90
+
91
+ p1 = @site.pages.make(:title => 'home page yo')
92
+ p2 = p1.children.make(:title => 'about')
93
+ p3 = p2.children.make(:title => 'about taylor')
94
+
95
+ @site.pages.root.should == p1
96
+ @site.pages.find_by_url('/about').should == p2
97
+ @site.pages.find_by_url('/about/about-taylor').should == p3
98
+ @site.pages.find_by_url('/about/about-taylor/not-exists').should == nil
99
+
100
+ p4 = @site.pages.make(:title => 'sections')
101
+ p5 = @site.pages.make(:title => 'customer support', :parent => p4)
102
+ p6 = @site.pages.make(:title => 'Return and Refund', :parent => p5)
103
+
104
+ @site.pages.find_by_url('/sections/customer-support/return-and-refund').should == p6
105
+ end
106
+ end
107
+
108
+ context "Permalink scoping" do
109
+ it "should be unique permalink within a site" do
110
+ # Site one
111
+ @site.pages.make(:title => 'home')
112
+ @site.pages.make(:title => 'about')
113
+ @site.pages.make(:title => 'profile')
114
+
115
+ # Site two
116
+ @site2 = Site.make(:title => 'different site')
117
+ @site2.pages.make :title => 'home' do |page|
118
+ page.children.make(:title => 'about', :site => @site2)
119
+ page.children.make(:title => 'profile', :site => @site2)
120
+ end
121
+
122
+ @site.pages.find_by_url('about').site.should == @site
123
+ @site2.pages.find_by_url('about').site.should == @site2
124
+ end
125
+
126
+ it "should scoped to a parent_id" do
127
+ p1 = @site.pages.make(:title => 'home')
128
+ p2 = @site.pages.make(:title => 'about')
129
+
130
+ p3 = @site.pages.make(:title => 'company')
131
+ p4 = p3.children.make(:title => 'about')
132
+
133
+
134
+ p2.permalink.should == 'about'
135
+ p4.permalink.should == 'about'
136
+
137
+ @site.pages.find_by_url('about').should == p2
138
+ @site.pages.find_by_url('company/about').should == p4
139
+ end
140
+ end
141
+
142
+ context "Tagging" do
143
+ it "tag list for multiple tagging" do
144
+ @page = @site.pages.make(:body => 'home page content')
145
+
146
+ @page.tag_list = 'ruby, rails'
147
+
148
+ @page.save
149
+
150
+ @page.should have(2).tags
151
+ end
152
+ end
153
+
154
+ #
155
+ # after do
156
+ # @site.destroy
157
+ # end
158
+ end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe Site do
4
+ before do
5
+ @site = Site.make
6
+ @first_page = @site.pages.make(:title => 'home')
7
+ @second_page = @site.pages.make(:title => 'about us')
8
+ end
9
+
10
+ it "has a homepage" do
11
+ @site.homepage.should be_a(Page)
12
+ end
13
+
14
+ it "marks the first page as homepage" do
15
+ @site.homepage.should == @first_page
16
+ end
17
+
18
+ it "has many pages" do
19
+ @site.pages.count.should == 2
20
+ end
21
+
22
+ it "has many articles" do
23
+ @post_1 = @site.articles.make(:title => "first post")
24
+ @post_2 = @site.articles.make(:title => "second post")
25
+
26
+ @site.should have(2).articles
27
+ end
28
+
29
+ it "finds pages by url" do
30
+ @site.pages.find_by_url("")
31
+ end
32
+ end