Sha256: 3fb141d198ab4147be17992afa40ab3c44b59b28faf8d2bf4c27c9916a6566c4

Contents?: true

Size: 1.02 KB

Versions: 16

Compression:

Stored size: 1.02 KB

Contents

require 'routemaster/api_client'
require_relative './errors'

module Materialist
  module MaterializedRecord

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

    module ClassMethods
      def source_link_reader(*keys, via: nil, allow_nil: false)
        keys.each do |key|
          define_method(key) do
            (via ? [via, key] : [key])
              .inject(source_raw) do |res, path|
                begin
                  (res && res.body._links.include?(path)) ?
                    res.send(path).show :
                    (allow_nil ? nil : raise(ResourceNotFound))
                rescue Routemaster::Errors::ResourceNotFound
                  (allow_nil ? nil : raise(ResourceNotFound))
                end
              end
              &.body
          end
        end
      end
    end

    def source
      source_raw.body
    end

    private

    def source_raw
      Routemaster::APIClient.new(
        response_class: Routemaster::Responses::HateoasResponse
      ).get(source_url)
    end
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
materialist-3.4.0 lib/materialist/materialized_record.rb
materialist-3.3.0 lib/materialist/materialized_record.rb
materialist-3.2.0 lib/materialist/materialized_record.rb
materialist-3.1.0 lib/materialist/materialized_record.rb
materialist-3.0.0 lib/materialist/materialized_record.rb
materialist-2.3.1 lib/materialist/materialized_record.rb
materialist-2.3.0 lib/materialist/materialized_record.rb
materialist-2.2.0 lib/materialist/materialized_record.rb
materialist-2.1.0 lib/materialist/materialized_record.rb
materialist-2.0.0 lib/materialist/materialized_record.rb
materialist-1.0.0 lib/materialist/materialized_record.rb
materialist-0.1.0 lib/materialist/materialized_record.rb
materialist-0.0.6 lib/materialist/materialized_record.rb
materialist-0.0.5 lib/materialist/materialized_record.rb
materialist-0.0.4 lib/materialist/materialized_record.rb
materialist-0.0.3 lib/materialist/materialized_record.rb