Skip to content
This repository has been archived by the owner on Feb 23, 2020. It is now read-only.

Commit

Permalink
consider Primitive Obsession problems!
Browse files Browse the repository at this point in the history
  • Loading branch information
iwamot committed Aug 2, 2008
1 parent 6ec1a25 commit cde42f9
Show file tree
Hide file tree
Showing 42 changed files with 718 additions and 114 deletions.
4 changes: 2 additions & 2 deletions TODO
@@ -1,4 +1,4 @@
ユーザー登録処理を実装する
テストツールを検討する→RSpec
ユーザー登録処理をBDDで実装する
autoloadを書かなくても良いようにする
・ビューのLayout対応
・開発中/運用中フラグの導入
19 changes: 18 additions & 1 deletion lib/pinto.rb
Expand Up @@ -31,7 +31,7 @@ module Pinto
autoload :Config, 'pinto/config'
autoload :Dispatcher, 'pinto/dispatcher'
autoload :Language, 'pinto/language'
autoload :OpenID, 'pinto/openid'
autoload :OpenID, 'pinto/open_id'
autoload :Request, 'pinto/request'
autoload :Translate, 'pinto/translate'
autoload :View, 'pinto/view'
Expand Down Expand Up @@ -66,6 +66,23 @@ module Model
autoload :User, 'pinto/model/user'
end

module Type
autoload :ClaimedID, 'pinto/type/claimed_id'
autoload :ConfigKey, 'pinto/type/config_key'
autoload :ControllerName, 'pinto/type/controller_name'
autoload :EscapeChars, 'pinto/type/escape_chars'
autoload :ErrorMessage, 'pinto/type/error_message'
autoload :HttpStatusCode, 'pinto/type/http_status_code'
autoload :Language, 'pinto/type/language'
autoload :QueryStrings, 'pinto/type/query_strings'
autoload :URI, 'pinto/type/uri'
autoload :UriMap, 'pinto/type/uri_map'
autoload :UserName, 'pinto/type/user_name'
autoload :UserSuppliedID, 'pinto/type/user_supplied_id'
autoload :ViewName, 'pinto/type/view_name'
autoload :ViewParam, 'pinto/type/view_param'
end

module URI
autoload :ExpandProcessor, 'pinto/uri/expand_processor'
autoload :ExtractProcessor, 'pinto/uri/extract_processor'
Expand Down
9 changes: 6 additions & 3 deletions lib/pinto/config.rb
Expand Up @@ -2,10 +2,13 @@

module Pinto
class Config
def self.load(key = nil)
def self.load(key)
unless key.is_a? Pinto::Type::ConfigKey
raise ArgumentError.new('key must be Pinto::Type::ConfigKey')
end

config = YAML.load_file('config/main.yml')
return config[key] unless key.nil?
return config
return config[key.to_s]
end

def self.db
Expand Down
13 changes: 10 additions & 3 deletions lib/pinto/controller/index.rb
Expand Up @@ -6,18 +6,25 @@ class Index
include Pinto::Controller::Private::Base

def get_action(request)
request_lang = request.uri_map['lang']
unless request.is_a? Pinto::Request
raise ArgumentError.new('request must be Pinto::Request')
end

request_lang = request.get_uri_map.to_hash['lang']
if request_lang.empty?
return Pinto::Controller::Private::Multiple.run(request)
end

other_languages = Pinto::Language.get_other(request_lang)
base_lang = Pinto::Type::Language.new(request_lang)
other_languages = Pinto::Language.get_other(base_lang)
param = {
:lang => request_lang,
:other_langs => other_languages
}

response_body = Pinto::View.render('index', param)
view_name = Pinto::Type::ViewName.new('index')
view_param = Pinto::Type::ViewParam.new(param)
response_body = Pinto::View.render(view_name, view_param)

platonic_uri = Pinto::Helper::URI.uri('index')

Expand Down
16 changes: 14 additions & 2 deletions lib/pinto/controller/private/base.rb
Expand Up @@ -5,6 +5,10 @@ module Controller
module Private
module Base
def run(request)
unless request.is_a? Pinto::Request
raise ArgumentError.new('request must be Pinto::Request')
end

if request.get? || request.head?
method = 'get_action'
elsif request.post?
Expand All @@ -21,14 +25,22 @@ def run(request)
return self.method(method).call(request)
end

translator = Pinto::Translate.new(request.uri_map['lang'])
http_status_code = Pinto::Type::HttpStatusCode.new(405)
translator = Pinto::Translate.new(request.get_uri_map['lang'])
message = translator._(
'Requested HTTP method is invalid for this resource'
)
return Pinto::Controller::Private::Error.run(request, 405, message)
message = Pinto::Type::ErrorMessage.new(message)
return Pinto::Controller::Private::Error.run(
request, http_status_code, message
)
end

def options_action(request)
unless request.is_a? Pinto::Request
raise ArgumentError.new('request must be Pinto::Request')
end

allowed_methods = []
if self.methods.include? 'get_action'
allowed_methods.push('GET')
Expand Down
16 changes: 13 additions & 3 deletions lib/pinto/controller/private/error.rb
Expand Up @@ -4,11 +4,21 @@ module Pinto
module Controller
module Private
class Error
def self.run(request, code, message = '')
def self.run(request, code, message = Pinto::Type::ErrorMessage.new(''))
unless request.is_a? Pinto::Request
raise ArgumentError.new('request must be Pinto::Request')
end
unless code.is_a? Pinto::Type::HttpStatusCode
raise ArgumentError.new('code must be Pinto::Type::HttpStatusCode')
end
unless message.is_a? Pinto::Type::ErrorMessage
raise ArgumentError.new('message must be Pinto::Type::ErrorMessage')
end

return [
code,
code.to_i,
{'Content-Type' => 'text/plain'},
[message]
[message.to_s]
]
end
end
Expand Down
12 changes: 9 additions & 3 deletions lib/pinto/controller/private/multiple.rb
Expand Up @@ -5,17 +5,23 @@ module Controller
module Private
class Multiple
def self.run(request)
unless request.is_a? Pinto::Request
raise ArgumentError.new('request must be Pinto::Request')
end

languages = Pinto::Language.list
uri_map = request.uri_map
uri_map = request.get_uri_map.to_hash
uri_map.delete('lang')

param = {
:controller => request.controller,
:controller => request.get_controller_name.to_s,
:languages => languages,
:uri_map => uri_map
}

response_body = Pinto::View.render('multiple', param)
view_name = Pinto::Type::ViewName.new('multiple')
view_param = Pinto::Type::ViewParam.new(param)
response_body = Pinto::View.render(view_name, view_param)

return [
300,
Expand Down
44 changes: 34 additions & 10 deletions lib/pinto/controller/signup_account.rb
Expand Up @@ -6,29 +6,53 @@ class SignupAccount
include Pinto::Controller::Private::Base

def get_action(request)
request_lang = request.uri_map['lang']
unless request.is_a? Pinto::Request
raise ArgumentError.new('request must be Pinto::Request')
end

request_lang = request.get_uri_map.to_hash['lang']
if request_lang.empty?
translator = Pinto::Translate.new(request_lang)
http_status_code = Pinto::Type::HttpStatusCode.new(400)
translator = Pinto::Translate.new(
Pinto::Type::Language.new(request_lang)
)
message = translator._('URI contains no valid language')
return Pinto::Controller::Private::Error.run(request, 400, message)
message = Pinto::Type::ErrorMessage.new(message)
return Pinto::Controller::Private::Error.run(
request, http_status_code, message
)
end

claimed_id = Pinto::OpenID.complete(request.GET, request.url)
query_strings = Pinto::Type::QueryStrings.new(request.GET)
current_uri = Pinto::Type::URI.new(request.url)
claimed_id = Pinto::OpenID.complete(query_strings, current_uri)
if claimed_id.nil?
translator = Pinto::Translate.new(request_lang)
http_status_code = Pinto::Type::HttpStatusCode.new(400)
translator = Pinto::Translate.new(
Pinto::Type::Language.new(request_lang)
)
message = translator._('OpenID authentication failed')
return Pinto::Controller::Private::Error.run(request, 400, message)
message = Pinto::Type::ErrorMessage.new(message)
return Pinto::Controller::Private::Error.run(
request, http_status_code, message
)
end

Pinto::Model::SignupReservation.add(claimed_id)
Pinto::Model::SignupReservation.add(
Pinto::Type::ClaimedID.new(claimed_id)
)

other_languages = Pinto::Language.get_other(request_lang)
base_lang = Pinto::Type::Language.new(request_lang)
other_languages = Pinto::Language.get_other(base_lang)
param = {
:lang => request_lang,
:claimed_id => claimed_id
:claimed_id => claimed_id,
:user_name => ''
}

response_body = Pinto::View.render('signup_account', param)
view_name = Pinto::Type::ViewName.new('signup_account')
view_param = Pinto::Type::ViewParam.new(param)
response_body = Pinto::View.render(view_name, view_param)

return [
200,
Expand Down
25 changes: 20 additions & 5 deletions lib/pinto/controller/signup_auth.rb
Expand Up @@ -6,23 +6,38 @@ class SignupAuth
include Pinto::Controller::Private::Base

def get_action(request)
request_lang = request.uri_map['lang']
unless request.is_a? Pinto::Request
raise ArgumentError.new('request must be Pinto::Request')
end

request_lang = request.get_uri_map.to_hash['lang']
openid = request.GET['openid']

providers = Pinto::Config.load('openid_providers')
config_key = Pinto::Type::ConfigKey.new('openid_providers')
providers = Pinto::Config.load(config_key)
unless providers.include? openid
http_status_code = Pinto::Type::HttpStatusCode.new(400)
translator = Pinto::Translate.new(request_lang)
message = translator._('Requested OpenID provider is not permitted')
return Pinto::Controller::Private::Error.run(request, 400, message)
message = Pinto::Type::ErrorMessage.new(message)
return Pinto::Controller::Private::Error.run(
request, http_status_code, message
)
end

if request_lang.empty?
http_status_code = Pinto::Type::HttpStatusCode.new(400)
translator = Pinto::Translate.new(request_lang)
message = translator._('URI contains no valid language')
return Pinto::Controller::Private::Error.run(request, 400, message)
message = Pinto::Type::ErrorMessage.new(message)
return Pinto::Controller::Private::Error.run(
request, http_status_code, message
)
end

redirect_uri = Pinto::OpenID::begin(openid, request_lang)
user_supplied_id = Pinto::Type::UserSuppliedID.new(openid)
lang = Pinto::Type::Language.new(request_lang)
redirect_uri = Pinto::OpenID.begin(user_supplied_id, lang)

return [
303,
Expand Down
17 changes: 13 additions & 4 deletions lib/pinto/controller/signup_openid.rb
Expand Up @@ -6,21 +6,30 @@ class SignupOpenid
include Pinto::Controller::Private::Base

def get_action(request)
request_lang = request.uri_map['lang']
unless request.is_a? Pinto::Request
raise ArgumentError.new('request must be Pinto::Request')
end

request_lang = request.get_uri_map.to_hash['lang']
if request_lang.empty?
return Pinto::Controller::Private::Multiple.run(request)
end

other_languages = Pinto::Language.get_other(request_lang)
providers = Pinto::Config.load('openid_providers')
base_lang = Pinto::Type::Language.new(request_lang)
other_languages = Pinto::Language.get_other(base_lang)

config_key = Pinto::Type::ConfigKey.new('openid_providers')
providers = Pinto::Config.load(config_key)

param = {
:lang => request_lang,
:other_langs => other_languages,
:providers => providers
}

response_body = Pinto::View.render('signup_openid', param)
view_name = Pinto::Type::ViewName.new('signup_openid')
view_param = Pinto::Type::ViewParam.new(param)
response_body = Pinto::View.render(view_name, view_param)

platonic_uri = Pinto::Helper::URI.uri('signup_openid')

Expand Down
18 changes: 14 additions & 4 deletions lib/pinto/controller/users.rb
Expand Up @@ -6,28 +6,38 @@ class Users
include Pinto::Controller::Private::Base

def post_action(request)
request_lang = request.uri_map['lang']
unless request.is_a? Pinto::Request
raise ArgumentError.new('request must be Pinto::Request')
end

request_lang = request.get_uri_map.to_hash['lang']
user_name = request.POST['user_name']
claimed_id = request.POST['claimed_id']

=begin
begin
Pinto::Model::User.add(user_name, claimed_id, request_lang)
Pinto::Model::User.add(user_name, claimed_id)
rescue => e
other_languages = Pinto::Language.get_other(request_lang)
base_lang = Pinto::Type::Language.new(request_lang)
other_languages = Pinto::Language.get_other(base_lang)
param = {
:lang => request_lang,
:user_name => user_name,
:claimed_id => claimed_id,
:error_message => e.message
}
response_body = Pinto::View.render('signup_account', param)
view_name = Pinto::Type::ViewName.new('signup_account')
view_param = Pinto::Type::ViewParam.new(param)
response_body = Pinto::View.render(view_name, view_param)
return [
400,
{'Content-Type' => 'application/xhtml+xml; charset=UTF-8'},
[response_body]
]
end
=end

param = {
'lang' => request_lang,
Expand Down

0 comments on commit cde42f9

Please sign in to comment.