From 710e2bba29fcc240ca6277dc7befd31280e139ff Mon Sep 17 00:00:00 2001 From: dinedine Date: Tue, 13 Apr 2010 16:26:40 +0200 Subject: [PATCH] customizing devise --- Gemfile | 4 +- README | 248 +----------------- app/models/account.rb | 2 +- config/application.rb | 2 + .../cookie_verification_secret.rb | 2 +- config/initializers/devise.rb | 4 +- config/routes.rb | 15 +- db/seeds.rb | 9 - 8 files changed, 34 insertions(+), 252 deletions(-) diff --git a/Gemfile b/Gemfile index 14c20546..763b431e 100644 --- a/Gemfile +++ b/Gemfile @@ -24,6 +24,6 @@ end group :test do gem 'rspec-rails', '>= 2.0.0.beta.5' gem 'factory_girl', :git => 'git://github.com/thoughtbot/factory_girl.git', :branch => 'rails3' - gem 'capybara', :git => 'git://github.com/jnicklas/capybara.git' - gem 'cucumber-rails', :git => 'git://github.com/aslakhellesoy/cucumber-rails.git' + gem 'capybara', :git => 'git://github.com/jnicklas/capybara.git' + gem 'cucumber-rails', :git => 'git://github.com/aslakhellesoy/cucumber-rails.git' end \ No newline at end of file diff --git a/README b/README index 37ec8ea2..a6250ade 100644 --- a/README +++ b/README @@ -1,243 +1,19 @@ -== Welcome to Rails +h1. Locomotive CMS -Rails is a web-application framework that includes everything needed to create -database-backed web applications according to the Model-View-Control pattern. +Locomotive is a simple but powerful CMS based on liquid templates and mongodb database. If we had to give only 4 main features to describe your application, there should be: -This pattern splits the view (also called the presentation) into "dumb" templates -that are primarily responsible for inserting pre-built data in between HTML tags. -The model contains the "smart" domain objects (such as Account, Product, Person, -Post) that holds all the business logic and knows how to persist themselves to -a database. The controller handles the incoming requests (such as Save New Account, -Update Product, Show Post) by manipulating the model and directing data to the view. +* managing as many websites as you want with one application instance +* nice looking UI (see http://www.locomotiveapp.org for some screenshots) +* flexible content types +* inline editing -In Rails, the model is handled by what's called an object-relational mapping -layer entitled Active Record. This layer allows you to present the data from -database rows as objects and embellish these data objects with business logic -methods. You can read more about Active Record in -link:files/vendor/rails/activerecord/README.html. +h2. Strategy / Development status -The controller and view are handled by the Action Pack, which handles both -layers by its two parts: Action View and Action Controller. These two layers -are bundled in a single package due to their heavy interdependence. This is -unlike the relationship between the Active Record and Action Pack that is much -more separate. Each of these packages can be used independently outside of -Rails. You can read more about Action Pack in -link:files/vendor/rails/actionpack/README.html. +We already developed a fully functional prototype in Rails 2.3.2 with active record / mongomapper and it worked quite well. We are using it for some client websites. +Now, our goal is to port our prototype to Rails 3 and migrate from mongomapper to mongoid. Besides, we put a lot of efforts to make it as robust as we can by writing better specs than we wrote for the prototype at first. +h2. Contact -== Getting Started +Feel free to contact me at didier at nocoffee dot fr. -1. At the command prompt, start a new Rails application using the rails command - and your application name. Ex: rails myapp -2. Change directory into myapp and start the web server: script/server (run with --help for options) -3. Go to http://localhost:3000/ and get "Welcome aboard: You're riding the Rails!" -4. Follow the guidelines to start developing your application - - -== Web Servers - -By default, Rails will try to use Mongrel if it's are installed when started with script/server, otherwise Rails will use WEBrick, the webserver that ships with Ruby. But you can also use Rails -with a variety of other web servers. - -Mongrel is a Ruby-based webserver with a C component (which requires compilation) that is -suitable for development and deployment of Rails applications. If you have Ruby Gems installed, -getting up and running with mongrel is as easy as: gem install mongrel. -More info at: http://mongrel.rubyforge.org - -Say other Ruby web servers like Thin and Ebb or regular web servers like Apache or LiteSpeed or -Lighttpd or IIS. The Ruby web servers are run through Rack and the latter can either be setup to use -FCGI or proxy to a pack of Mongrels/Thin/Ebb servers. - -== Apache .htaccess example for FCGI/CGI - -# General Apache options -AddHandler fastcgi-script .fcgi -AddHandler cgi-script .cgi -Options +FollowSymLinks +ExecCGI - -# If you don't want Rails to look in certain directories, -# use the following rewrite rules so that Apache won't rewrite certain requests -# -# Example: -# RewriteCond %{REQUEST_URI} ^/notrails.* -# RewriteRule .* - [L] - -# Redirect all requests not available on the filesystem to Rails -# By default the cgi dispatcher is used which is very slow -# -# For better performance replace the dispatcher with the fastcgi one -# -# Example: -# RewriteRule ^(.*)$ dispatch.fcgi [QSA,L] -RewriteEngine On - -# If your Rails application is accessed via an Alias directive, -# then you MUST also set the RewriteBase in this htaccess file. -# -# Example: -# Alias /myrailsapp /path/to/myrailsapp/public -# RewriteBase /myrailsapp - -RewriteRule ^$ index.html [QSA] -RewriteRule ^([^.]+)$ $1.html [QSA] -RewriteCond %{REQUEST_FILENAME} !-f -RewriteRule ^(.*)$ dispatch.cgi [QSA,L] - -# In case Rails experiences terminal errors -# Instead of displaying this message you can supply a file here which will be rendered instead -# -# Example: -# ErrorDocument 500 /500.html - -ErrorDocument 500 "

Application error

Rails application failed to start properly" - - -== Debugging Rails - -Sometimes your application goes wrong. Fortunately there are a lot of tools that -will help you debug it and get it back on the rails. - -First area to check is the application log files. Have "tail -f" commands running -on the server.log and development.log. Rails will automatically display debugging -and runtime information to these files. Debugging info will also be shown in the -browser on requests from 127.0.0.1. - -You can also log your own messages directly into the log file from your code using -the Ruby logger class from inside your controllers. Example: - - class WeblogController < ActionController::Base - def destroy - @weblog = Weblog.find(params[:id]) - @weblog.destroy - logger.info("#{Time.now} Destroyed Weblog ID ##{@weblog.id}!") - end - end - -The result will be a message in your log file along the lines of: - - Mon Oct 08 14:22:29 +1000 2007 Destroyed Weblog ID #1 - -More information on how to use the logger is at http://www.ruby-doc.org/core/ - -Also, Ruby documentation can be found at http://www.ruby-lang.org/ including: - -* The Learning Ruby (Pickaxe) Book: http://www.ruby-doc.org/docs/ProgrammingRuby/ -* Learn to Program: http://pine.fm/LearnToProgram/ (a beginners guide) - -These two online (and free) books will bring you up to speed on the Ruby language -and also on programming in general. - - -== Debugger - -Debugger support is available through the debugger command when you start your Mongrel or -Webrick server with --debugger. This means that you can break out of execution at any point -in the code, investigate and change the model, AND then resume execution! -You need to install ruby-debug to run the server in debugging mode. With gems, use 'gem install ruby-debug' -Example: - - class WeblogController < ActionController::Base - def index - @posts = Post.find(:all) - debugger - end - end - -So the controller will accept the action, run the first line, then present you -with a IRB prompt in the server window. Here you can do things like: - - >> @posts.inspect - => "[#nil, \"body\"=>nil, \"id\"=>\"1\"}>, - #\"Rails you know!\", \"body\"=>\"Only ten..\", \"id\"=>\"2\"}>]" - >> @posts.first.title = "hello from a debugger" - => "hello from a debugger" - -...and even better is that you can examine how your runtime objects actually work: - - >> f = @posts.first - => #nil, "body"=>nil, "id"=>"1"}> - >> f. - Display all 152 possibilities? (y or n) - -Finally, when you're ready to resume execution, you enter "cont" - - -== Console - -You can interact with the domain model by starting the console through script/console. -Here you'll have all parts of the application configured, just like it is when the -application is running. You can inspect domain models, change values, and save to the -database. Starting the script without arguments will launch it in the development environment. -Passing an argument will specify a different environment, like script/console production. - -To reload your controllers and models after launching the console run reload! - -== dbconsole - -You can go to the command line of your database directly through script/dbconsole. -You would be connected to the database with the credentials defined in database.yml. -Starting the script without arguments will connect you to the development database. Passing an -argument will connect you to a different database, like script/dbconsole production. -Currently works for mysql, postgresql and sqlite. - -== Description of Contents - -app - Holds all the code that's specific to this particular application. - -app/controllers - Holds controllers that should be named like weblogs_controller.rb for - automated URL mapping. All controllers should descend from ApplicationController - which itself descends from ActionController::Base. - -app/models - Holds models that should be named like post.rb. - Most models will descend from ActiveRecord::Base. - -app/views - Holds the template files for the view that should be named like - weblogs/index.html.erb for the WeblogsController#index action. All views use eRuby - syntax. - -app/views/layouts - Holds the template files for layouts to be used with views. This models the common - header/footer method of wrapping views. In your views, define a layout using the - layout :default and create a file named default.html.erb. Inside default.html.erb, - call <% yield %> to render the view using this layout. - -app/helpers - Holds view helpers that should be named like weblogs_helper.rb. These are generated - for you automatically when using script/generate for controllers. Helpers can be used to - wrap functionality for your views into methods. - -config - Configuration files for the Rails environment, the routing map, the database, and other dependencies. - -db - Contains the database schema in schema.rb. db/migrate contains all - the sequence of Migrations for your schema. - -doc - This directory is where your application documentation will be stored when generated - using rake doc:app - -lib - Application specific libraries. Basically, any kind of custom code that doesn't - belong under controllers, models, or helpers. This directory is in the load path. - -public - The directory available for the web server. Contains subdirectories for images, stylesheets, - and javascripts. Also contains the dispatchers and the default HTML files. This should be - set as the DOCUMENT_ROOT of your web server. - -script - Helper scripts for automation and generation. - -test - Unit and functional tests along with fixtures. When using the script/generate scripts, template - test files will be generated for you and placed in this directory. - -vendor - External libraries that the application depends on. Also includes the plugins subdirectory. - If the app has frozen rails, those gems also go here, under vendor/rails/. - This directory is in the load path. +Copyright (c) 2010 NoCoffee, released under the MIT license diff --git a/app/models/account.rb b/app/models/account.rb index a9976463..04b2477b 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -3,7 +3,7 @@ class Account include Mongoid::Timestamps # devise modules - devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable + devise :database_authenticatable, :recoverable, :rememberable, :trackable, :validatable #:registerable, # attr_accessible :email, :password, :password_confirmation # TODO diff --git a/config/application.rb b/config/application.rb index 2ba00e02..5222a57b 100644 --- a/config/application.rb +++ b/config/application.rb @@ -42,5 +42,7 @@ module Locomotive # Configure sensitive parameters which will be filtered from the log file. config.filter_parameters << :password + + config.cookie_secret = '968a457262807c64e3ed5609882e17a774b917f5bcf2d308bd37eac4ba4d416d5692e6b13d77523fddb94c1dd603f160db8492b86b5e0203240bf339fe2aeae4' end end diff --git a/config/initializers/cookie_verification_secret.rb b/config/initializers/cookie_verification_secret.rb index c4424197..f710de0f 100644 --- a/config/initializers/cookie_verification_secret.rb +++ b/config/initializers/cookie_verification_secret.rb @@ -1 +1 @@ -Rails.application.config.cookie_secret = '968a457262807c64e3ed5609882e17a774b917f5bcf2d308bd37eac4ba4d416d5692e6b13d77523fddb94c1dd603f160db8492b86b5e0203240bf339fe2aeae4' \ No newline at end of file +# Rails.application.config.cookie_secret = '968a457262807c64e3ed5609882e17a774b917f5bcf2d308bd37eac4ba4d416d5692e6b13d77523fddb94c1dd603f160db8492b86b5e0203240bf339fe2aeae4' \ No newline at end of file diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb index f316c5b0..28d475fd 100644 --- a/config/initializers/devise.rb +++ b/config/initializers/devise.rb @@ -95,11 +95,11 @@ Devise.setup do |config| # accessing "/users/sign_in", it knows you are accessing an User. This makes # routes as "/sign_in" not possible, unless you tell Devise to use the default # scope, setting true below. - # config.use_default_scope = true + config.use_default_scope = true # Configure the default scope used by Devise. By default it's the first devise # role declared in your routes. - # config.default_scope = :user + config.default_scope = :account # If you want to use other strategies, that are not (yet) supported by Devise, # you can configure them inside the config.warden block. The example below diff --git a/config/routes.rb b/config/routes.rb index 1b4f85ed..e4698ab9 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -2,7 +2,20 @@ Locomotive::Application.routes.draw do |map| constraints(Locomotive::Routing::DefaultConstraint) do root :to => 'home#show' - devise_for :accounts + end + + # admin authentication + Devise.register(:accounts, {}) # bypass the devise_for :accounts + scope '/admin' do + get 'login' => 'devise/sessions#new', :as => :new_account_session + post 'login' => 'devise/sessions#create', :as => :account_session + get 'logout' => 'devise/sessions#destroy', :as => :destroy_account_session + resource :password, :only => [:new, :create, :edit, :update], :controller => 'devise/passwords' + end + + # admin interface for each website + namespace 'admin' do + # TODO end match '/' => 'pages#show' diff --git a/db/seeds.rb b/db/seeds.rb index eaf4226d..471b5ce5 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -1,11 +1,2 @@ -# This file should contain all the record creation needed to seed the database with its default values. -# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). -# -# Examples: -# -# cities = City.create([{ :name => 'Chicago' }, { :name => 'Copenhagen' }]) -# Mayor.create(:name => 'Daley', :city => cities.first) - - Site.create! :name => 'Locomotive test website', :subdomain => 'test' Account.create :name => 'Admin', :email => 'admin@locomotiveapp.org', :password => 'locomotive', :password_confirmation => 'locomotive'