Sha256: dc078d47289be45b9b8fbb8f3123b294f510786a91d5c48860a27aa62e980f88

Contents?: true

Size: 1.41 KB

Versions: 8

Compression:

Stored size: 1.41 KB

Contents

module JsonapiSpecHelpers
  class Payload
    class << self
      attr_accessor :registry
    end
    self.registry = {}

    attr_accessor :name, :type, :keys, :no_keys

    def self.register(name, &blk)
      instance = new
      instance.instance_eval(&blk)
      instance.name = name
      registry[name] = instance
    end

    def self.by_type(type)
      found = nil
      registry.each_pair do |name, payload|
        found = payload if payload.type == type
      end
      raise "Could not find payload for type #{type}" unless found
      found
    end

    def fork
      instance = self.class.new
      instance.keys = keys.dup
      instance.no_keys = no_keys.dup
      instance
    end

    def initialize
      @keys = {}
      @no_keys = []
    end

    def no_key(name)
      @keys.delete(name)
      @no_keys << name
    end

    def type(val = nil)
      if val
        @type = val
      else
        @type || name.to_s.pluralize.to_sym
      end
    end

    def key(name, *args, &blk)
      options = args.last.is_a?(Hash) ? args.pop : {}
      options[:type] = args.first
      options[:allow_nil] ||= false
      @no_keys.reject! { |k| k == name }
      prc = blk
      prc = ->(record) { record.send(name) } if prc.nil?
      @keys[name] = options.merge(proc: prc)
    end

    def timestamps!
      @keys[:created_at] = key(:created_at, String)
      @keys[:updated_at] = key(:updated_at, String)
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
jsonapi_spec_helpers-0.4.10 lib/jsonapi_spec_helpers/payload.rb
jsonapi_spec_helpers-0.4.9 lib/jsonapi_spec_helpers/payload.rb
jsonapi_spec_helpers-0.4.8 lib/jsonapi_spec_helpers/payload.rb
jsonapi_spec_helpers-0.4.7 lib/jsonapi_spec_helpers/payload.rb
jsonapi_spec_helpers-0.4.6 lib/jsonapi_spec_helpers/payload.rb
jsonapi_spec_helpers-0.4.5 lib/jsonapi_spec_helpers/payload.rb
jsonapi_spec_helpers-0.4.4 lib/jsonapi_spec_helpers/payload.rb
jsonapi_spec_helpers-0.4.3 lib/jsonapi_spec_helpers/payload.rb