login を盛り込むか event 編集 by ajax を盛り込むか

うーむ。とりあえず LoginEngine をいぢってみようか。とりあえず、webcalendar にマージする前に単品でアレしてみる、とゆー事で。
ちなみに相当にハマっています。続きは見ない方が良いと思います。
以前も参考にしたLoginEngineを使ってみるを見つつ作業を。

プロジェクト作成、DB の設定

LoginEngine 単品でナニなんでプロジェクトを作成

$ ruby rails/railties/bin/rails loginTest

DB も単体で。(以下は DB サーバ、とは言え環境は chroot)

$ mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 19 to server version: 5.0.20-Debian_1-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> create database logintest default character set utf8 ;
Query OK, 1 row affected (0.81 sec)

mysql> grant all privileges on logintest.* to yama@192.168.0.1 identified by 'yama' ;
Query OK, 0 rows affected (0.74 sec)

mysql> \q
Bye
$

config/database.yml も修正。以下に一部を。

development:
  adapter: mysql
 # database: loginTest_development
  database: logintest
  username: yama
  password: yama
  host: 192.168.0.1

login_generator は DB を SQL でナニしていたが LoginEngine は migrate なナニが用意されている、とゆー意味では (以下略
とりあえず、先に plugin を install しないと。

plugin を install

まず、download 元を決める。

$ ./script/plugin discover
Cannot find gem for Rails =1.1.2:
    Install the missing gem with 'gem install -v=1.1.2 rails', or
    change environment.rb to define RAILS_GEM_VERSION with your desired version.
  
$

げ。ナンデスカコレハ。
とりあえず確認。

$ gem -v
0.9.0
$

gem ってどうやってインストールしたんだっけ ...
# download して setup してました。

# gem install -v=1.1.2 rails
Bulk updating Gem source index for: http://gems.rubyforge.org
ERROR:  Interrupted
#

うーむ。困った。仕方が無いので gem には頼らない方法を模索してみるか。で、svn で co してみたんですが、README には探しまくった情報と同じナニが

= Installation

Installing the Login Engine is fairly simple.

Your options are:
1. Install as a rails plugin:
$ script/plugin install login_engine
2. Use svn:externals
$ svn propedit svn:externals vendor/plugins

You can choose to use the latest stable release:
login_engine http://svn.rails-engines.org/plugins/login_engine

Or a tagged release (recommended for releases of your code):
login_engine http://svn.rails-engines.org/logine_engine/tags/

There are a few configuration steps that you'll need to take to get everything r
unning smoothly. Listed below are the changes to your application you will need
to make.

うーむ。

rake rails:freeze:gems
も駄目

$ rake rails:freeze:gems
(in /home/rms/loginTest)
Cannot find gem for Rails =1.1.2:
    Install the missing gem with 'gem install -v=1.1.2 rails', or
    change environment.rb to define RAILS_GEM_VERSION with your desired version.
  
rake aborted!
exit
/home/rms/loginTest/Rakefile:4
(See full trace by running task with --trace)
$

うーむ。とりあえずバージョンとかの状態を確認

まず、svn に co したナニ

$ ruby ~/rails/railties/bin/rails -v
1.1.2
$

gem でインストールしたやつ

$which rails
/usr/bin/rails
$ rails -v
1.1.4
$

げ。gem のを入れなおしてみよう。
# ちなみに svn co しても 1.1.2 がオチてきました。何故だ。

# gem install rails --remote --include-dependencies
Bulk updating Gem source index for: http://gems.rubyforge.org
Successfully installed rails-1.1.6
Successfully installed activerecord-1.14.4
Successfully installed actionpack-1.12.5
Successfully installed actionmailer-1.2.5
Successfully installed actionwebservice-1.1.6
Installing ri documentation for activerecord-1.14.4...
Installing ri documentation for actionpack-1.12.5...
Installing ri documentation for actionmailer-1.2.5...
Installing ri documentation for actionwebservice-1.1.6...
Installing RDoc documentation for activerecord-1.14.4...
Installing RDoc documentation for actionpack-1.12.5...
Installing RDoc documentation for actionmailer-1.2.5...
Installing RDoc documentation for actionwebservice-1.1.6...
#

で、バージョン見るとウワサの 1.1.6 だな。これで再度プロジェクト作りなおしてみる。

$ rails -v
1.1.6
$ mv loginTest loginTest_1.1.2
$ rails loginTest
$ mv config/database.yml config/database.yml.ORG
$ cp ../loginTest_1.1.2/config/database.yml config/.
$ ./script/plugin discover
Add http://svn.techno-weenie.net/projects/plugins/? [Y/n]

を。動いた。
ってか、svn で co したのより gem で install した方が新しいって知らんかった。(を

で、http://svn.rails-engines.org/plugins/ を選択後、

$ ./script/plugin install engines
+ ./engines/CHANGELOG
+ ./engines/MIT-LICENSE
+ ./engines/README
+ ./engines/generators/engine/USAGE
+ ./engines/generators/engine/engine_generator.rb
+ ./engines/generators/engine/templates/README
+ ./engines/generators/engine/templates/init_engine.erb
+ ./engines/generators/engine/templates/install.erb
+ ./engines/generators/engine/templates/lib/engine.erb
+ ./engines/generators/engine/templates/licenses/GPL
+ ./engines/generators/engine/templates/licenses/LGPL
+ ./engines/generators/engine/templates/licenses/MIT
+ ./engines/generators/engine/templates/licenses/None
+ ./engines/generators/engine/templates/public/javascripts/engine.js
+ ./engines/generators/engine/templates/public/stylesheets/engine.css
+ ./engines/generators/engine/templates/tasks/engine.rake
+ ./engines/generators/engine/templates/test/test_helper.erb
+ ./engines/init.rb
+ ./engines/lib/bundles/require_resource.rb
+ ./engines/lib/bundles.rb
+ ./engines/lib/engines/action_mailer_extensions.rb
+ ./engines/lib/engines/action_view_extensions.rb
+ ./engines/lib/engines/active_record_extensions.rb
+ ./engines/lib/engines/dependencies_extensions.rb
+ ./engines/lib/engines/migration_extensions.rb
+ ./engines/lib/engines/ruby_extensions.rb
+ ./engines/lib/engines/testing_extensions.rb
+ ./engines/lib/engines.rb
+ ./engines/tasks/deprecated_engines.rake
+ ./engines/tasks/engines.rake
+ ./engines/test/action_view_extensions_test.rb
+ ./engines/test/ruby_extensions_test.rb
$ ./script/plugin install login_engine
+ ./login_engine/CHANGELOG
+ ./login_engine/README
+ ./login_engine/app/controllers/user_controller.rb
+ ./login_engine/app/helpers/user_helper.rb
+ ./login_engine/app/models/user.rb
+ ./login_engine/app/models/user_notify.rb
+ ./login_engine/app/views/user/_edit.rhtml
+ ./login_engine/app/views/user/_password.rhtml
+ ./login_engine/app/views/user/change_password.rhtml
+ ./login_engine/app/views/user/edit.rhtml
+ ./login_engine/app/views/user/forgot_password.rhtml
+ ./login_engine/app/views/user/home.rhtml
+ ./login_engine/app/views/user/login.rhtml
+ ./login_engine/app/views/user/logout.rhtml
+ ./login_engine/app/views/user/signup.rhtml
+ ./login_engine/app/views/user_notify/change_password.rhtml
+ ./login_engine/app/views/user_notify/delete.rhtml
+ ./login_engine/app/views/user_notify/forgot_password.rhtml
+ ./login_engine/app/views/user_notify/pending_delete.rhtml
+ ./login_engine/app/views/user_notify/signup.rhtml
+ ./login_engine/db/migrate/001_initial_schema.rb
+ ./login_engine/init_engine.rb
+ ./login_engine/install.rb
+ ./login_engine/lib/login_engine/authenticated_system.rb
+ ./login_engine/lib/login_engine/authenticated_user.rb
+ ./login_engine/lib/login_engine.rb
+ ./login_engine/public/stylesheets/login_engine.css
+ ./login_engine/test/fixtures/users.yml
+ ./login_engine/test/functional/user_controller_test.rb
+ ./login_engine/test/mocks/mail.rb
+ ./login_engine/test/mocks/time.rb
+ ./login_engine/test/test_helper.rb
+ ./login_engine/test/unit/user_test.rb
$ ls vendor/plugins/
engines  login_engine
$

試験するには smtp なサービスが必要という事で適当に exim4 を設定。

# dpkg-reconrigure exim4-config

準備

まず、以下を追加、とありますので修正。

config/environment.rb

# Include your application configuration below
module LoginEngine
  config :salt, "my-salt"
  config :email_from, "webmaster@localhost"
  config :admin_email, "root@localhost"
  config :app_name, "loginTest"
end

Engines.start :login

vendor/plugin/login_engine/lib/login_engine.rb を参照、ともある。別途確認。
次は app/controllers/application.rb だそうな。アプリ全体に認証をかけるとの事にてここに before_filter 使ってナニしてますな。

app/controllers/application.rb

# Likewise, all the methods added will be available for all controllers.

require 'login_engine'

class ApplicationController < ActionController::Base
  include LoginEngine
  helper :user
  model :user

  before_filter :login_required
end

ここも色々と変化球な設定が可能なようだが、確認は別途。
app/helpers/application_helper.rb にも修正が必要との事。

app/helpers/application_helper.rb

# Methods added to this helper will be available to all templates in the application.
module ApplicationHelper
  include LoginEngine
end

次は ActionMailer との事。とりあえず、config/environments/development.rb の末端に以下を追加。

config/environments/development.rb (一部のみ)

ActionMailer::Base.server_settings = {
  :address => "localhost",
  :domain => "localhost",
  :port => 25
}

で、migrate によるテーブル作成。テーブルの名前も変更は可能との事。

$ rake engine_migrate ENGINE=login
(in /home/rms/loginTest)
Migrating engine 'login_engine'
== InitialSchema: migrating ===================================================
-- create_table("users", {:force=>true})
   -> 0.6679s
== InitialSchema: migrated (0.6684s) ==========================================

$

DB に接続して確認。こんなテーブルができていた。

mysql> desc users ;
+-----------------+-------------+------+-----+---------+----------------+
| Field           | Type        | Null | Key | Default | Extra          |
+-----------------+-------------+------+-----+---------+----------------+
| id              | int(11)     | NO   | PRI | NULL    | auto_increment | 
| login           | varchar(80) | NO   |     | NULL    |                | 
| salted_password | varchar(40) | NO   |     | NULL    |                | 
| email           | varchar(60) | NO   |     | NULL    |                | 
| firstname       | varchar(40) | YES  |     | NULL    |                | 
| lastname        | varchar(40) | YES  |     | NULL    |                | 
| salt            | varchar(40) | NO   |     | NULL    |                | 
| verified        | int(11)     | YES  |     | 0       |                | 
| role            | varchar(40) | YES  |     | NULL    |                | 
| security_token  | varchar(40) | YES  |     | NULL    |                | 
| token_expiry    | datetime    | YES  |     | NULL    |                | 
| created_at      | datetime    | YES  |     | NULL    |                | 
| updated_at      | datetime    | YES  |     | NULL    |                | 
| logged_in_at    | datetime    | YES  |     | NULL    |                | 
| deleted         | int(11)     | YES  |     | 0       |                | 
| delete_after    | datetime    | YES  |     | NULL    |                | 
+-----------------+-------------+------+-----+---------+----------------+
16 rows in set (0.01 sec)

mysql> 

なんかバタバタしてるなぁ。webcalendar にマージは次で。