Module: AsJsonRepresentations

Defined in:
lib/as_json_representations.rb,
lib/as_json_representations/version.rb,
lib/as_json_representations/collection.rb

Defined Under Namespace

Modules: ClassMethods, Collection

Constant Summary collapse

QUERY_METHODS =
%i[includes eager_load preload].freeze
VERSION =
'0.6.0'

Class Method Summary collapse

Class Method Details

.included(base) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/as_json_representations.rb', line 57

def self.included(base)
  base.extend ClassMethods

  base.class_eval do
    eval %{
      def as_json(options={})
        if !options[:representation] && defined?(super)
          super(options)
        else
          #{base}.render_representation(self, options.dup)
        end
      end
    }

    def representation(name, options={})
      as_json(options.merge(representation: name))
    end

    def self.included(base)
      if base.class == Module
        AsJsonRepresentations.send(:included, base)
        base.instance_variable_set :@parent_entity, self
      else
        context = self
        base.define_singleton_method(:representations) { context.representations }
      end
    end
  end
end