Sha256: 127eb812dec850be181f415c7f611bcff13c7a33482f701bfc9adcfdaac14d66

Contents?: true

Size: 1.09 KB

Versions: 5

Compression:

Stored size: 1.09 KB

Contents

module HyperResource::Modules
  module Utils

    def self.included(base)
      base.extend(ClassMethods)
    end

    module ClassMethods

      ## Inheritable class attribute, kinda like in Rails.
      def class_attribute(*names)
        names.map(&:to_sym).each do |name|
          instance_eval <<-EOT
            def #{name}=(val)
              @#{name} = val
            end
            def #{name}
              return @#{name} if defined?(@#{name})
              return superclass.#{name} if superclass.respond_to?(:#{name})
              nil
            end
          EOT
        end
      end

      ## Instance attributes which fall back to class attributes.
      def fallback_attribute(*names)
        names.map(&:to_sym).each do |name|
          class_eval <<-EOT
            def #{name}=(val)
              @#{name} = val
            end
            def #{name}
              return @#{name} if defined?(@#{name})
              return self.class.#{name} if self.class.respond_to?(:#{name})
              nil
            end
          EOT
        end
      end

    end # module ClassMethods

  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
hyperresource-0.1.9.5 lib/hyper_resource/modules/utils.rb
hyperresource-0.1.9.4 lib/hyper_resource/modules/utils.rb
hyperresource-0.1.9.3 lib/hyper_resource/modules/utils.rb
hyperresource-0.1.9.2 lib/hyper_resource/modules/utils.rb
hyperresource-0.1.9 lib/hyper_resource/modules/utils.rb