From 424a053ee5cddf09aa3cda80b9d317d8e2399b6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D1=91=D0=BC=20=D0=91=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D1=88=D0=B0=D0=BA=D0=BE=D0=B2?= Date: Fri, 31 Jul 2015 19:15:56 +0300 Subject: [PATCH] Disallow to define multiple associations at once --- lib/active_model/serializer/associations.rb | 48 +++++++++------------ 1 file changed, 20 insertions(+), 28 deletions(-) diff --git a/lib/active_model/serializer/associations.rb b/lib/active_model/serializer/associations.rb index a41358c6..f864a0f0 100644 --- a/lib/active_model/serializer/associations.rb +++ b/lib/active_model/serializer/associations.rb @@ -29,65 +29,57 @@ module ActiveModel base._reflections = self._reflections.try(:dup) || [] end - # @param [Array(Array, Hash{Symbol => Object})] attrs + # @param [Symbol] name of the association + # @param [Hash any>] options for the reflection # @return [void] # # @example # has_many :comments, serializer: CommentSummarySerializer - # has_many :commits, authors # - def has_many(*attrs) - associate attrs do |name, options| - HasManyReflection.new(name, options) - end + def has_many(name, options = {}) + associate HasManyReflection.new(name, options) end - # @param [Array(Array, Hash{Symbol => Object})] attrs + # @param [Symbol] name of the association + # @param [Hash any>] options for the reflection # @return [void] # # @example # belongs_to :author, serializer: AuthorSerializer # - def belongs_to(*attrs) - associate attrs do |name, options| - BelongsToReflection.new(name, options) - end + def belongs_to(name, options = {}) + associate BelongsToReflection.new(name, options) end - # @param [Array(Array, Hash{Symbol => Object})] attrs + # @param [Symbol] name of the association + # @param [Hash any>] options for the reflection # @return [void] # # @example # has_one :author, serializer: AuthorSerializer # - def has_one(*attrs) - associate attrs do |name, options| - HasOneReflection.new(name, options) - end + def has_one(name, options = {}) + associate HasOneReflection.new(name, options) end private # Add reflection and define {name} accessor. - # @param [Array] - # @yield [Symbol] return reflection + # @param [ActiveModel::Serializer::Reflection] reflection + # @return [void] # # @api private # - def associate(attrs) - options = attrs.extract_options! - + def associate(reflection) self._reflections = _reflections.dup - attrs.each do |name| - unless method_defined?(name) - define_method name do - object.send name - end + unless method_defined?(reflection.name) + define_method reflection.name do + object.send reflection.name end - - self._reflections << yield(name, options) end + + self._reflections << reflection end end