Module: DelegateAssociations

Defined in:
lib/delegate_associations.rb,
lib/delegate_associations/version.rb

Constant Summary collapse

VERSION =
"0.1.5"

Instance Method Summary collapse

Instance Method Details

#delegate_associations(*opts) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/delegate_associations.rb', line 7

def delegate_associations(*opts)
	options = {
		except: [], only: [], allow_nil: false, to: []
	}
	options.update(opts.extract_options!)
	associations = [options.delete(:to)].flatten.compact.map!(&:to_sym)
	valid_associations_to(associations)

	except = [options[:except]].flatten.compact.map!(&:to_sym)
	only  = [options[:only]].flatten.compact.map!(&:to_sym)
	except += delegate_exclude_columns

	associations.each do |association|
		reflect_on_association(association).klass.reflect_on_all_associations.each do |ass|
			next unless ass.name.in?(get_deletage_methods(reflect_on_association(association).klass.reflect_on_all_associations.map(&:name), except, only))
			delegate "#{ass.name}",  to: association, allow_nil: options[:allow_nil]
			delegate "#{ass.name}=", to: association, allow_nil: options[:allow_nil]
			begin 
				delegate "#{ass.name}_attributes=", to: association, allow_nil: options[:allow_nil]
			rescue
				true
			end
			
			unless ass.collection?
				delegate "build_#{ass.name}", to: association
			end
		end
	end
end

#delegate_attributes(*opts) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/delegate_associations.rb', line 37

def delegate_attributes(*opts)
	options = {
		suffix: ["","=","?","_before_type_cast","_change","_changed?","_was","_will_change!"], 
		except: [], only: [], allow_nil: false, to: [], prefix: nil
	}
	options.update(opts.extract_options!)
	associations = [options.delete(:to)].flatten.compact.map!(&:to_sym)

	#Valid if have an option[:to] and if association exists
	valid_associations_to(associations)

	except  = [options[:except]].flatten.compact.map!(&:to_sym)
	only    = [options[:only]].flatten.compact.map!(&:to_sym)
	prefix  = options[:prefix]
	except += delegate_exclude_columns
	
	# I need "begin" because have a problem with Devise when I run migrations
	# Devise call User classs before run all migrations
	begin
		associations.each do |association|
			get_deletage_methods(reflect_on_association(association).klass.column_names, except, only).each do |attribute| 
				options[:suffix].each do |sf|
					delegate "#{attribute}#{sf}", to: association, allow_nil: options[:allow_nil], prefix: prefix
				end
			end
		end
	rescue
		true
	end
end