Sha256: ff98e73108cba806806df35873d913334446d058414c27539e8d90b70d441732

Contents?: true

Size: 1.02 KB

Versions: 1

Compression:

Stored size: 1.02 KB

Contents

module ObjectAttorney

  module ExposedData

    def exposed_data
      self.class.exposed_getters.reduce({}) do |data, getter|
        data[getter] = send(getter)
        data
      end
    end

    def to_json(options = {})
      exposed_data.to_json
    end

    def self.included(base)
      base.extend(ClassMethods)
    end

    module ClassMethods
      
      def exposed_getters
        return @exposed_getters if defined?(@exposed_getters)

        @exposed_getters = zuper_method(:exposed_getters)
        
        @exposed_getters ||= represented_object_class.present? && represented_object_class.method_defined?(:id) ? [:id] : []
      end

      def add_exposed_getters(*getters)
        exposed_getters.push(*getters) unless exposed_getters.include?(getters)
      end

      def exposed_setters
        @exposed_setters ||= (zuper_method(:exposed_setters) || [])
      end

      def add_exposed_setters(*setters)
        exposed_setters.push(*setters) unless exposed_setters.include?(setters)
      end

    end

  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
object_attorney-2.8.1 lib/object_attorney/exposed_data.rb