moviepilot/lacerda

View on GitHub
lib/lacerda/specification.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'active_support/core_ext/hash/indifferent_access'
require 'lacerda/published_object'
require 'lacerda/consumed_object'

module Lacerda
  class Specification
    attr_reader :service, :schema

    def initialize(service, schema_or_file)
      @service = service
      load_schema(schema_or_file)
    end

    def objects
      return [] unless @schema[:definitions]
      @schema[:definitions].map do |scoped_name, schema|
        next if !scoped_name.index(SCOPE_SEPARATOR)
        object_description_class.new(service, scoped_name, schema)
      end.compact
    end

    private

    def load_schema(schema_or_file)
      if schema_or_file.is_a?(Hash)
        @schema = schema_or_file
      elsif File.readable?(schema_or_file)
        @schema = JSON.parse(open(schema_or_file).read)
      else
        @schema = {}
      end
      @schema = @schema.with_indifferent_access
      @schema[:definitions] ||= {}
      @schema
    end
  end
end