lib/munson.rb in munson-0.2.0 vs lib/munson.rb in munson-0.3.0
- old
+ new
@@ -1,28 +1,49 @@
require 'json'
require 'cgi'
require 'faraday'
require 'faraday_middleware'
+require 'bigdecimal'
require "munson/version"
-
-require "munson/middleware/encode_json_api"
-require "munson/middleware/json_parser"
-
+require 'munson/agent'
+require 'munson/attribute'
+require "munson/client"
require 'munson/collection'
-require 'munson/paginator'
-require 'munson/response_mapper'
-require 'munson/query_builder'
require 'munson/connection'
-require 'munson/agent'
+require 'munson/document'
+require 'munson/key_formatter'
+require "munson/middleware/encode_json_api"
+require "munson/middleware/json_parser"
require 'munson/resource'
+require 'munson/response_mapper'
+require 'munson/query'
module Munson
+ class Error < StandardError; end;
+ class UnsupportedSortDirectionError < Munson::Error; end;
+ class UnrecognizedKeyFormatter < Munson::Error; end;
+ class RelationshipNotIncludedError < Munson::Error; end;
+ class RelationshipNotFound < Munson::Error; end;
+ class ClientNotSet < Munson::Error; end;
@registered_types = {}
- @registered_paginators = {}
class << self
+ # Transforms a JSONAPI hash into a Munson::Document, Munson::Resource, or arbitrary class
+ # @param [Munson::Document,Hash] document to transform
+ # @return [Munson::Document,~Munson::Resource]
+ def factory(document)
+ document = Munson::Document.new(document) if document.is_a?(Hash)
+ klass = Munson.lookup_type(document.type)
+
+ if klass && klass.respond_to?(:munson_initializer)
+ klass.munson_initializer(document)
+ else
+ document
+ end
+ end
+
# Configure the default connection.
#
# @param [Hash] opts {Munson::Connection} configuration options
# @param [Proc] block to yield to Faraday::Connection
# @return [Munson::Connection] the default connection
@@ -50,27 +71,14 @@
# @param [Class] klass to map to
def register_type(type, klass)
@registered_types[type.to_sym] = klass
end
- def register_paginator(name, klass)
- @registered_paginators[name.to_sym] = klass
- end
-
- def lookup_paginator(name)
- @registered_paginators[name.to_sym]
- end
-
# Lookup a class by JSON Spec type name
#
# @param [#to_sym] type JSON Spec type
# @return [Class] domain model
def lookup_type(type)
@registered_types[type.to_sym]
- end
-
- # @private
- def flush_types!
- @registered_types = {}
end
end
end