Module: SerializeWithOptions

Defined in:
lib/serialize_with_options.rb,
lib/serialize_with_options/railtie.rb,
lib/serialize_with_options/version.rb

Defined Under Namespace

Modules: InstanceMethods Classes: Config, Railtie

Constant Summary collapse

VERSION =
"0.3.0"

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.extended(base) ⇒ Object



4
5
6
7
# File 'lib/serialize_with_options.rb', line 4

def self.extended(base)
  base.class_attribute :serialization_conf
  base.class_attribute :serialization_opts
end

Instance Method Details

#serialization_configuration(set) ⇒ Object



21
22
23
24
25
# File 'lib/serialize_with_options.rb', line 21

def serialization_configuration(set)
  conf = self.serialization_conf
  conf &&= conf[set] || conf[:default]
  conf.try(:dup) || { :methods => nil, :only => nil, :except => nil }
end

#serialization_options(set) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/serialize_with_options.rb', line 27

def serialization_options(set)
  options = self.serialization_opts

  options[set] ||= serialization_configuration(set).tap do |opts|
    includes = opts.delete(:includes)

    if includes
      opts[:include] = includes.inject({}) do |hash, class_name|
        if class_name.is_a? Hash
          hash.merge(class_name)
        else
          begin
            klass = class_name.to_s.classify.constantize
            hash[class_name] = klass.serialization_configuration(set)
            hash[class_name][:include] = nil if hash[class_name].delete(:includes)
            hash
          rescue NameError
            hash.merge(class_name => { :include => nil })
          end
        end
      end
    end
  end

  self.serialization_opts = options
  options[set]
end

#serialize_with_options(set = :default, &block) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
# File 'lib/serialize_with_options.rb', line 9

def serialize_with_options(set = :default, &block)
  conf = self.serialization_conf || {}
  opts = self.serialization_opts || {}

  conf[set] = Config.new.instance_eval(&block)

  self.serialization_conf = conf
  self.serialization_opts = opts

  include InstanceMethods
end