Sha256: cd6c1ee228f8e63f78fe2b40f937df910b5a56d13755ac94df89b0d3be9512d8

Contents?: true

Size: 1.84 KB

Versions: 4

Compression:

Stored size: 1.84 KB

Contents

#
# Copyright (C) 2012 Christian Meier
#
# Permission is hereby granted, free of charge, to any person obtaining a copy of
# this software and associated documentation files (the "Software"), to deal in
# the Software without restriction, including without limitation the rights to
# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
# the Software, and to permit persons to whom the Software is furnished to do so,
# subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# -*- Coding: utf-8 -*-

module CubaApi
  module WriteAspect

    module ClassMethods
      def append_aspect( arg )
        aspects << arg
        warn "[CubaAPI] Appended aspect #{arg}"
      end

      def prepend_aspect( arg )
        aspects.insert( 0, arg )
        warn "[CubaAPI] Prepended aspect #{arg}"
      end

      def aspects
        self[ :aspects ] ||= []
      end
    end

    def write( obj, options = {} )
      self.res.status = options[:status] || 200
      # make sure we inherit aspects and repsect the order
      aspects = self.class[ :aspects ] # == CubaAPI ? [] : self.class.superclass[ :aspects ]
      (aspects + self.class[ :aspects ]).uniq.each do |w|
        obj = send( w, obj, options ) if obj
      end
      res.write obj.to_s
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
cuba-api-0.6.3 lib/cuba_api/aspects.rb~
cuba-api-0.6.2 lib/cuba_api/aspects.rb~
cuba-api-0.6.1 lib/cuba_api/write_aspect.rb
cuba-api-0.6.0 lib/cuba_api/write_aspect.rb