Sha256: d864507314c520997152577005379cc88309f064d3225e8ce317494898149b55

Contents?: true

Size: 1.41 KB

Versions: 1

Compression:

Stored size: 1.41 KB

Contents

module Yaks
  class DefaultPolicy
    include Util

    DEFAULTS = {
      rel_template: "rel:src={src}&dest={dest}",
      namespace: Kernel
    }

    attr_reader :options

    def initialize(options = {})
      @options = DEFAULTS.merge(options)
    end

    def derive_mapper_from_object(model)
      if model.respond_to? :to_ary
        if m = model.first
          name = m.class.name.split('::').last + 'CollectionMapper'
          begin
            return @options[:namespace].const_get(name)
          rescue NameError
          end
        end
        begin
          return @options[:namespace].const_get(:CollectionMapper)
        rescue NameError
        end
        Yaks::CollectionMapper
      else
        name = model.class.name.split('::').last
        @options[:namespace].const_get(name + 'Mapper')
      end
    end

    def derive_type_from_mapper_class(mapper_class)
      underscore(mapper_class.name.split('::').last.sub(/Mapper$/, ''))
    end

    def derive_mapper_from_association(association)
      @options[:namespace].const_get("#{camelize(singularize(association.name.to_s))}Mapper")
    end

    def derive_rel_from_association(mapper, association)
      expand_rel( derive_type_from_mapper_class(mapper.class), association.name )
    end

    def expand_rel(src_name, dest_name)
      URITemplate.new(@options[:rel_template]).expand(
        src: src_name,
        dest: dest_name
      )
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
yaks-0.4.0 lib/yaks/default_policy.rb