Class: Cardboard::Url
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Cardboard::Url
- Defined in:
- app/models/cardboard/url.rb
Class Method Summary collapse
-
.urlable_for(full_url, options = {}) ⇒ Object
TODO: Should we use the homepage boolean? before_save :update_homepage def update_homepage return unless homepage_changed? self.class.where(‘id != ? AND homepage’, self.id).update_all(homepage: false) end.
Instance Method Summary collapse
- #path=(value) ⇒ Object
- #slug=(value) ⇒ Object
- #slugs_backup=(value) ⇒ Object
- #to_s ⇒ Object
- #using_slug_backup=(value) ⇒ Object
- #using_slug_backup? ⇒ Boolean
Class Method Details
.urlable_for(full_url, options = {}) ⇒ Object
TODO: Should we use the homepage boolean? before_save :update_homepage def update_homepage
return unless homepage_changed?
self.class.where('id != ? AND homepage', self.id).update_all(homepage: false)
end
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'app/models/cardboard/url.rb', line 22 def self.urlable_for(full_url, = {}) #TODO: refactor return nil unless full_url path, slug = self.path_and_slug(full_url) url_hash = {path: path, slug: slug} url_hash.merge!(urlable_type: [:type]) if [:type] page = self.where(url_hash).first if slug && page.nil? #use arel instead of LIKE/ILIKE page = self.where(path: path).where(self.arel_table[:slugs_backup].matches("% #{slug}\n%")).where(urlable_type: [:type]).first page.using_slug_backup = true if page end page.try(:urlable) end |
Instance Method Details
#path=(value) ⇒ Object
45 46 47 48 49 |
# File 'app/models/cardboard/url.rb', line 45 def path=(value) return if value.nil? value = value.gsub(/\//, '') self[:path] = value.blank?? "/" : "/#{value}/" end |
#slug=(value) ⇒ Object
40 41 42 43 |
# File 'app/models/cardboard/url.rb', line 40 def slug=(value) # the user can overwrite the auto generated slug self[:slug] = value.present? ? value.to_url : nil end |
#slugs_backup=(value) ⇒ Object
59 60 61 62 63 64 65 |
# File 'app/models/cardboard/url.rb', line 59 def slugs_backup=(value) if value.is_a?(String) self[:slugs_backup] = value.split(",").map(&:strip) else self[:slugs_backup] = value end end |
#to_s ⇒ Object
67 68 69 70 |
# File 'app/models/cardboard/url.rb', line 67 def to_s return "/" if slug.blank? "#{path}#{slug}/" end |
#using_slug_backup=(value) ⇒ Object
55 56 57 |
# File 'app/models/cardboard/url.rb', line 55 def using_slug_backup=(value) @using_slug_backup = value end |
#using_slug_backup? ⇒ Boolean
51 52 53 |
# File 'app/models/cardboard/url.rb', line 51 def using_slug_backup? @using_slug_backup || false end |