Module: Louisville::Extensions::Finder::RelationMethods

Defined in:
lib/louisville/extensions/finder.rb

Instance Method Summary collapse

Instance Method Details

#exists?(id = :none) ⇒ Boolean

Returns:

  • (Boolean)


85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/louisville/extensions/finder.rb', line 85

def exists?(id = :none)
  id = id.id if ActiveRecord::Base === id

  return super(id) if Louisville::Util.numeric?(id)

  if String === id
    return true       if super(louisville_config[:column] => id)
    return super(id)  unless louisville_config.option?(:history)

    base, seq = Louisville::Util.slug_parts(id)

    Louisville::Slug.where(:slug_base => base, :slug_sequence => seq, :sluggable_type => ::Louisville::Util.polymorphic_name(name)).exists?

  elsif ActiveRecord::VERSION::MAJOR == 3
    return super(id == :none ? false : id)
  else
    return super(id)
  end
end

#find_one(id) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/louisville/extensions/finder.rb', line 57

def find_one(id)
  id = id.id if ActiveRecord::Base === id

  return super(id) if Louisville::Util.numeric?(id)

  seq_column = "#{louisville_config[:column]}_sequence"

  if self.column_names.include?(seq_column)
    base, seq = Louisville::Util.slug_parts(id)
    record = self.where(louisville_config[:column] => base, seq_column => seq).first
  else
    record = self.where(louisville_config[:column] => id).first
  end

  return record if record

  if louisville_config.option?(:history)

    base, seq = Louisville::Util.slug_parts(id)

    record = Louisville::Slug.where(:slug_base => base, :slug_sequence => seq, :sluggable_type => ::Louisville::Util.polymorphic_name(self)).select(:sluggable_id).first
    super(record.try(:sluggable_id) || id)
  else
    return super(id)
  end
end