Class: AdminData::ActiveRecordUtil

Inherits:
Object
  • Object
show all
Defined in:
lib/admin_data/active_record_util.rb

Class Method Summary collapse

Class Method Details

.declared_belongs_to_association_names(klass) ⇒ Object

class User

belongs_to :club

end

User.declared_belongs_to_association_names(Club) #=> [‘club’]



20
21
22
# File 'lib/admin_data/active_record_util.rb', line 20

def self.declared_belongs_to_association_names(klass)
  delcared_association_names_for(klass, :belongs_to).map(&:name).map(&:to_s)
end

.declared_habtm_association_names(klass) ⇒ Object

class User

has_and_belongs_to_many :clubs

end

User.declared_habtm_association_names(Club) #=> [‘clubs’]



10
11
12
# File 'lib/admin_data/active_record_util.rb', line 10

def self.declared_habtm_association_names(klass)
  delcared_association_names_for(klass, :has_and_belongs_to_many).map(&:name).map(&:to_s)
end

.declared_has_many_association_names(klass) ⇒ Object

class User

has_many :cars

end

User.declared_has_many_association_names(Car) #=> [‘cars’]



40
41
42
# File 'lib/admin_data/active_record_util.rb', line 40

def self.declared_has_many_association_names(klass)
  delcared_association_names_for(klass, :has_many).map(&:name).map(&:to_s)
end

.declared_has_one_association_names(klass) ⇒ Object

class User

has_one :car

end

User.declared_has_one_association_names(Car) #=> [‘car’]



30
31
32
# File 'lib/admin_data/active_record_util.rb', line 30

def self.declared_has_one_association_names(klass)
  delcared_association_names_for(klass, :has_one).map(&:name).map(&:to_s)
end

.delcared_association_names_for(klass, association_type) ⇒ Object

returns declared association names like #=> [‘comments’] #=> [‘positive_comments’] #=> [‘negative_comments’]



48
49
50
51
52
# File 'lib/admin_data/active_record_util.rb', line 48

def self.delcared_association_names_for(klass, association_type)
  klass.name.camelize.constantize.reflections.values.select do |value|
    value.macro == association_type
  end
end

.habtm_klasses_for(klass) ⇒ Object

returns an array of classes

class User

has_and_belongs_to_many :clubs

end

ActiveRecordUtil.habtm_klasses_for(User) #=> [Club]



62
63
64
65
66
# File 'lib/admin_data/active_record_util.rb', line 62

def self.habtm_klasses_for(klass)
  declared_habtm_association_names(klass).map do |assoc_name|
    klass_for_association_type_and_name(klass, :has_and_belongs_to_many, assoc_name)
  end
end

.has_association_info?(k) ⇒ Boolean

returns false if the given Klass has no association info. Otherwise returns true.

Returns:

  • (Boolean)


86
87
88
89
90
91
# File 'lib/admin_data/active_record_util.rb', line 86

def self.has_association_info?(k)
  AdminData::ActiveRecordUtil.declared_belongs_to_association_names(k).any? ||
  AdminData::ActiveRecordUtil.declared_has_many_association_names(k).any? ||
  AdminData::ActiveRecordUtil.declared_has_many_association_names(k).any? ||
  AdminData::ActiveRecordUtil.declared_habtm_association_names(k).any?
end

.klass_for_association_type_and_name(klass, association_type, association_name) ⇒ Object

returns a class or nil

class User

has_many :comments

end

ActiveRecordUtil.klass_for_association_type_and_name(User, :has_many, ‘comments’) #=> Comment



76
77
78
79
80
81
# File 'lib/admin_data/active_record_util.rb', line 76

def self.klass_for_association_type_and_name(klass, association_type, association_name)
  data = klass.name.camelize.constantize.reflections.values.detect do |value|
    value.macro == association_type && value.name.to_s == association_name
  end
  data.klass if data # output of detect from hash is an array with key and value
end