Sha256: 5f34de175ae6f79b7df58fb804e3963e382a95bd9e3d46d228fb7bab333fe83e

Contents?: true

Size: 852 Bytes

Versions: 2

Compression:

Stored size: 852 Bytes

Contents

require 'oj'

module JSONAPIonify::Types
  extend JSONAPIonify::Autoload
  autoload_all

  def types
    DefinitionFinder
  end

  module DefinitionFinder
    def self.method_missing(m, *args)
      JSONAPIonify::Types.const_get("#{m}Type", false).new(*args)
    rescue NameError
      raise TypeError, "#{m} is not a valid JSON type."
    end
  end

  class BaseType
    include JSONAPIonify::Callbacks
    define_callbacks :initialize

    def name
      self.class.name.split('::').last.chomp('Type')
    end

    attr_reader :options

    def initialize(**options)
      run_callbacks :initialize do
        @options = options
      end
      freeze
    end

    def load(non_ruby)
      non_ruby
    end

    def dump(ruby)
      JSON.load JSON.dump ruby
    end

    def verify(non_ruby)
      dump(load(non_ruby)) == non_ruby
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
jsonapionify-0.9.0 lib/jsonapionify/types.rb
jsonapionify-0.0.1.pre lib/jsonapionify/types.rb