jasagiri @ ウィキ
rubywaves動作(request)
最終更新:
jasagiri
-
view
<app-root>/resources/map.rb
class Map < Waves::Resources::Base on( method, path ) { to(...) }
<waves-root>/resources/mixin.rb (onのところ)
module ClassMethods def on( method, path = true, options = nil, &block ) matcher = Waves::Matchers::Resource.new( options ) def self.included( resource ) resource.module_eval do include ResponseMixin, Functor::Method ; extend ClassMethods class Base ; include Mixin ; end
<waves-root>/machers/resource.rb
@matcher = Waves::Matchers::Request.new( options ) def call( resource ) ; @matcher.call( resource.request ) ; end
<waves-root>/machers/request.rb
class Request < Base def call( request ) <waves-root>/machers/uri.rb class URI < Base @path = Waves::Matchers::Path.new( options[ :path ] ) def call( request ) <waves-root>/machers/path.rb class Path < Base def call( request ) <waves-root>/machers/content_type.rb class ContentType < Base def call( request ) <waves-root>/machers/accept.rb class Accept < Base def call( request ) <waves-root>/machers/query.rb class Query < Base def call( request ) <waves-root>/machers/traits.rb class Traits < Base def call( request )
再び<waves-root>/resources/mixin.rb (onの続き method/pathのところ)
module ClassMethods def on( method, path = true, options = nil, &block ) methods = case method methods.each do | method | functor_with_self( method, matcher, &block )
3度<waves-root>/resources/mixin.rb (toのところ body返す)
module ClassMethods def self.included( resource ) resource.module_eval do def to( resource ) Waves.main::Resources[ resource ] r = traits.waves.resource = resource.new( request ) r.process def process before ; body = send( request.method ) ; after return body