Sha256: 7df6a7b339b17cf8522637fda56dc30bb7bebc168481e60809672e5756f678e4

Contents?: true

Size: 870 Bytes

Versions: 7

Compression:

Stored size: 870 Bytes

Contents

require 'action_controller'
require 'betterdocs/responding'

module Betterdocs::Representer
  extend ActiveSupport::Concern

  def as_json(*)
    singleton_class.ancestors.find do |c|
      c != singleton_class && c < Betterdocs::Representer
    end.hashify(self)
  end

  alias to_hash as_json

  def to_json(*a)
    JSON::generate(as_json, *a)
  end

  module ClassMethods
    def apply(object)
      object.extend self
    end

    def build_result_object
      {}
    end

    def hashify(object, &block)
      apply(object)
      result = build_result_object
      instance_exec(result, &block)
      result
    end

    def doc(type, name, **options, &block)
      docs.add_element(self, type, name, **options, &block)
    end

    def object_name(*) end

    def docs
      raise NotImplementedError, 'has to be implemented in including module'
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
betterdocs-0.14.0 lib/betterdocs/representer.rb
betterdocs-0.13.0 lib/betterdocs/representer.rb
betterdocs-0.12.5 lib/betterdocs/representer.rb
betterdocs-0.12.4 lib/betterdocs/representer.rb
betterdocs-0.12.3 lib/betterdocs/representer.rb
betterdocs-0.12.2 lib/betterdocs/representer.rb
betterdocs-0.12.1 lib/betterdocs/representer.rb