diff options
author | Joshua Peek <josh@joshpeek.com> | 2009-08-13 22:27:09 -0500 |
---|---|---|
committer | Joshua Peek <josh@joshpeek.com> | 2009-08-13 22:27:36 -0500 |
commit | c6bc8e662614be711f45a8d4b231d5f993b024a7 (patch) | |
tree | bf6edc7e5bc2108f6cc4e4dd5c141bcd1d576aa3 /activemodel/lib/active_model/serializer.rb | |
parent | 7a26c21d8e853ed648e4668843a3958de4ac5791 (diff) | |
download | rails-c6bc8e662614be711f45a8d4b231d5f993b024a7.tar.gz rails-c6bc8e662614be711f45a8d4b231d5f993b024a7.tar.bz2 rails-c6bc8e662614be711f45a8d4b231d5f993b024a7.zip |
Break up concerns for choosing what attributes should be serialized and the actual serializer
Diffstat (limited to 'activemodel/lib/active_model/serializer.rb')
-rw-r--r-- | activemodel/lib/active_model/serializer.rb | 60 |
1 files changed, 0 insertions, 60 deletions
diff --git a/activemodel/lib/active_model/serializer.rb b/activemodel/lib/active_model/serializer.rb deleted file mode 100644 index 5b603bdbd7..0000000000 --- a/activemodel/lib/active_model/serializer.rb +++ /dev/null @@ -1,60 +0,0 @@ -require 'active_support/core_ext/hash/except' -require 'active_support/core_ext/hash/slice' - -module ActiveModel - class Serializer - attr_reader :options - - def initialize(serializable, options = nil) - @serializable = serializable - @options = options ? options.dup : {} - - @options[:only] = Array.wrap(@options[:only]).map { |n| n.to_s } - @options[:except] = Array.wrap(@options[:except]).map { |n| n.to_s } - end - - def serialize - raise NotImplemented - end - - def to_s(&block) - serialize(&block) - end - - # To replicate the behavior in ActiveRecord#attributes, - # <tt>:except</tt> takes precedence over <tt>:only</tt>. If <tt>:only</tt> is not set - # for a N level model but is set for the N+1 level models, - # then because <tt>:except</tt> is set to a default value, the second - # level model can have both <tt>:except</tt> and <tt>:only</tt> set. So if - # <tt>:only</tt> is set, always delete <tt>:except</tt>. - def serializable_attribute_names - attribute_names = @serializable.attributes.keys.sort - - if options[:only].any? - attribute_names &= options[:only] - elsif options[:except].any? - attribute_names -= options[:except] - end - - attribute_names - end - - def serializable_method_names - Array.wrap(options[:methods]).inject([]) do |methods, name| - methods << name if @serializable.respond_to?(name.to_s) - methods - end - end - - def serializable_names - serializable_attribute_names + serializable_method_names - end - - def serializable_hash - serializable_names.inject({}) { |hash, name| - hash[name] = @serializable.send(name) - hash - } - end - end -end |