resu 0.0.1
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.
- data/README +13 -0
- data/app/controllers/resu/user_sessions_controller.rb +26 -0
- data/app/models/user.rb +3 -0
- data/app/models/user_session.rb +3 -0
- data/app/views/resu/user_sessions/new.html.erb +11 -0
- data/config/routes.rb +5 -0
- data/lib/generators/resu/resu_generator.rb +24 -0
- data/lib/generators/resu/templates/migration.rb +22 -0
- data/lib/resu/application_controller.rb +52 -0
- data/lib/resu/engine.rb +7 -0
- data/lib/resu.rb +1 -0
- data/test/resu_test.rb +12 -0
- data/test/schema.rb +15 -0
- data/test/test_helper.rb +36 -0
- data/test/user_test.rb +9 -0
- metadata +99 -0
data/README
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
module Resu
|
2
|
+
class UserSessionsController < ApplicationController
|
3
|
+
before_filter :require_no_user, :only => [:new, :create]
|
4
|
+
before_filter :require_user, :only => :destroy
|
5
|
+
unloadable
|
6
|
+
def new
|
7
|
+
@user_session = UserSession.new
|
8
|
+
end
|
9
|
+
|
10
|
+
def create
|
11
|
+
@user_session = UserSession.new(params[:user_session])
|
12
|
+
if @user_session.save
|
13
|
+
flash[:notice] = "Login successful!"
|
14
|
+
redirect_back_or_default root_url
|
15
|
+
else
|
16
|
+
render :action => :new
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def destroy
|
21
|
+
current_user_session.destroy
|
22
|
+
flash[:notice] = "Logout successful!"
|
23
|
+
redirect_back_or_default new_user_session_url
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/app/models/user.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
<h1>Login</h1>
|
2
|
+
|
3
|
+
<%= form_for @user_session, :url => user_session_path do |f| %>
|
4
|
+
<%= f.label :login %><br />
|
5
|
+
<%= f.text_field :login %><br />
|
6
|
+
<br />
|
7
|
+
<%= f.label :password %><br />
|
8
|
+
<%= f.password_field :password %><br />
|
9
|
+
<br />
|
10
|
+
<%= f.submit "Login" %>
|
11
|
+
<% end %>
|
data/config/routes.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
require 'rails/generators/migration'
|
3
|
+
|
4
|
+
class ResuGenerator < Rails::Generators::Base
|
5
|
+
include Rails::Generators::Migration
|
6
|
+
|
7
|
+
# Implement the required interface for Rails::Generators::Migration.
|
8
|
+
# taken from http://github.com/rails/rails/blob/master/activerecord/lib/generators/active_record.rb
|
9
|
+
def self.next_migration_number(dirname)
|
10
|
+
if ActiveRecord::Base.timestamped_migrations
|
11
|
+
Time.now.utc.strftime("%Y%m%d%H%M%S")
|
12
|
+
else
|
13
|
+
"%.3d" % (current_migration_number(dirname) + 1)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def create_migration_file
|
18
|
+
migration_template 'migration.rb', 'db/migrate/create_users_table.rb'
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.source_root
|
22
|
+
@source_root ||= File.join(File.dirname(__FILE__), 'templates')
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class CreateUsersTable < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :users, :force => true do |t|
|
4
|
+
t.timestamps
|
5
|
+
t.string :login, :null => false
|
6
|
+
t.string :email, :null => false
|
7
|
+
t.string :crypted_password, :null => false
|
8
|
+
t.string :password_salt, :null => false
|
9
|
+
t.string :persistence_token, :null => false
|
10
|
+
t.integer :login_count, :default => 0, :null => false
|
11
|
+
t.datetime :last_request_at
|
12
|
+
t.datetime :last_login_at
|
13
|
+
t.datetime :current_login_at
|
14
|
+
t.string :last_login_ip
|
15
|
+
t.string :current_login_ip
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.down
|
20
|
+
drop_table :users
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Resu
|
2
|
+
def self.included(base)
|
3
|
+
base.send :include, InstanceMethods
|
4
|
+
base.send :helper_method, :current_user_session, :current_user
|
5
|
+
end
|
6
|
+
|
7
|
+
module ClassMethods
|
8
|
+
def acts_as_yaffle(options = {})
|
9
|
+
send :include, InstanceMethods
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
module InstanceMethods
|
14
|
+
def current_user_session
|
15
|
+
return @current_user_session if defined?(@current_user_session)
|
16
|
+
@current_user_session = UserSession.find
|
17
|
+
end
|
18
|
+
|
19
|
+
def current_user
|
20
|
+
return @current_user if defined?(@current_user)
|
21
|
+
@current_user = current_user_session && current_user_session.user
|
22
|
+
end
|
23
|
+
def require_user
|
24
|
+
unless current_user
|
25
|
+
store_location
|
26
|
+
flash[:notice] = "You must be logged in to access this page"
|
27
|
+
redirect_to new_user_session_url
|
28
|
+
return false
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def require_no_user
|
33
|
+
if current_user
|
34
|
+
store_location
|
35
|
+
flash[:notice] = "You must be logged out to access this page"
|
36
|
+
redirect_to root_url
|
37
|
+
return false
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def store_location
|
42
|
+
session[:return_to] = request.fullpath
|
43
|
+
end
|
44
|
+
|
45
|
+
def redirect_back_or_default(default)
|
46
|
+
redirect_to(session[:return_to] || default)
|
47
|
+
session[:return_to] = nil
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
ActionController::Base.send :include, Resu
|
data/lib/resu/engine.rb
ADDED
data/lib/resu.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'resu/engine' if defined?(Rails) && Rails::VERSION::MAJOR == 3
|
data/test/resu_test.rb
ADDED
data/test/schema.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
ActiveRecord::Schema.define(:version => 0) do
|
2
|
+
create_table :users, :force => true do |t|
|
3
|
+
t.timestamps
|
4
|
+
t.string :login, :null => false
|
5
|
+
t.string :crypted_password, :null => false
|
6
|
+
t.string :password_salt, :null => false
|
7
|
+
t.string :persistence_token, :null => false
|
8
|
+
t.integer :login_count, :default => 0, :null => false
|
9
|
+
t.datetime :last_request_at
|
10
|
+
t.datetime :last_login_at
|
11
|
+
t.datetime :current_login_at
|
12
|
+
t.string :last_login_ip
|
13
|
+
t.string :current_login_ip
|
14
|
+
end
|
15
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
ENV['RAILS_ENV'] = 'test'
|
2
|
+
ENV['RAILS_ROOT'] ||= File.dirname(__FILE__) + '/../../../..'
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
require 'test/unit'
|
6
|
+
require 'active_support'
|
7
|
+
require File.expand_path(File.join(ENV['RAILS_ROOT'], 'config/environment.rb'))
|
8
|
+
|
9
|
+
def load_schema
|
10
|
+
config = YAML::load(IO.read(File.dirname(__FILE__) + '/database.yml'))
|
11
|
+
ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__) + "/debug.log")
|
12
|
+
|
13
|
+
db_adapter = ENV['DB']
|
14
|
+
|
15
|
+
# no db passed, try one of these fine config-free DBs before bombing.
|
16
|
+
db_adapter ||=
|
17
|
+
begin
|
18
|
+
require 'rubygems'
|
19
|
+
require 'sqlite3'
|
20
|
+
'sqlite3'
|
21
|
+
rescue MissingSourceFile
|
22
|
+
begin
|
23
|
+
require 'sqlite'
|
24
|
+
'sqlite'
|
25
|
+
rescue MissingSourceFile
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
if db_adapter.nil?
|
30
|
+
raise "No DB Adapter selected. Pass the DB= option to pick one, or install Sqlite or Sqlite3."
|
31
|
+
end
|
32
|
+
|
33
|
+
ActiveRecord::Base.establish_connection(config[db_adapter])
|
34
|
+
load(File.dirname(__FILE__) + "/schema.rb")
|
35
|
+
require File.dirname(__FILE__) + '/../init'
|
36
|
+
end
|
data/test/user_test.rb
ADDED
metadata
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: resu
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Port80Labs
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2010-10-19 00:00:00 -04:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: authlogic
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 13
|
30
|
+
segments:
|
31
|
+
- 2
|
32
|
+
- 1
|
33
|
+
- 3
|
34
|
+
version: 2.1.3
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
37
|
+
description:
|
38
|
+
email: info@port80labs.com
|
39
|
+
executables: []
|
40
|
+
|
41
|
+
extensions: []
|
42
|
+
|
43
|
+
extra_rdoc_files:
|
44
|
+
- README
|
45
|
+
files:
|
46
|
+
- app/controllers/resu/user_sessions_controller.rb
|
47
|
+
- app/models/user.rb
|
48
|
+
- app/models/user_session.rb
|
49
|
+
- app/views/resu/user_sessions/new.html.erb
|
50
|
+
- config/routes.rb
|
51
|
+
- lib/generators/resu/resu_generator.rb
|
52
|
+
- lib/generators/resu/templates/migration.rb
|
53
|
+
- lib/resu.rb
|
54
|
+
- lib/resu/application_controller.rb
|
55
|
+
- lib/resu/engine.rb
|
56
|
+
- README
|
57
|
+
- test/resu_test.rb
|
58
|
+
- test/schema.rb
|
59
|
+
- test/test_helper.rb
|
60
|
+
- test/user_test.rb
|
61
|
+
has_rdoc: true
|
62
|
+
homepage: http://port80labs.com/
|
63
|
+
licenses: []
|
64
|
+
|
65
|
+
post_install_message:
|
66
|
+
rdoc_options:
|
67
|
+
- --charset=UTF-8
|
68
|
+
require_paths:
|
69
|
+
- lib
|
70
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
71
|
+
none: false
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
hash: 3
|
76
|
+
segments:
|
77
|
+
- 0
|
78
|
+
version: "0"
|
79
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
80
|
+
none: false
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
hash: 3
|
85
|
+
segments:
|
86
|
+
- 0
|
87
|
+
version: "0"
|
88
|
+
requirements: []
|
89
|
+
|
90
|
+
rubyforge_project:
|
91
|
+
rubygems_version: 1.3.7
|
92
|
+
signing_key:
|
93
|
+
specification_version: 3
|
94
|
+
summary: User engine based on authlogic
|
95
|
+
test_files:
|
96
|
+
- test/resu_test.rb
|
97
|
+
- test/schema.rb
|
98
|
+
- test/test_helper.rb
|
99
|
+
- test/user_test.rb
|