Module: BeautifiedUrl
- Defined in:
- lib/beautified_url.rb
Defined Under Namespace
Modules: ClassMethods
Class Method Summary collapse
Instance Method Summary collapse
- #attribute_scope_hash_set(base = self.class) ⇒ Object
-
#beautify_url(base = self.class) ⇒ Object
makes beautiful url by looking at parent attribute(s) whose bu_attributes are identified by “bu” (default bu_token) only if bu_attribute is not already populated.
-
#conditions_array(p_attr, bu_attr, bu_attr_value, base = self.class) ⇒ Object
generates condition array to be used while searching for unique record from bu_attribute value.
-
#make_unique_beautiful_url(p_attr, bu_attr, bu_attr_value, base = self.class) ⇒ Object
finds uniqueness of bu_attribute’s value (with scope if defined).
Class Method Details
.included(base) ⇒ Object
3 4 5 6 7 8 9 |
# File 'lib/beautified_url.rb', line 3 def self.included(base) base.extend(ClassMethods) base.send(:before_create, :beautify_url_on_create) base.send(:before_update, :beautify_url_on_update) base.send(:before_save, :beautify_url_on_save) base.send(:before_validation, :beautify_url_on_validate) end |
Instance Method Details
#attribute_scope_hash_set(base = self.class) ⇒ Object
54 55 56 57 58 59 60 61 62 |
# File 'lib/beautified_url.rb', line 54 def attribute_scope_hash_set(base = self.class) scope_hset = base.bu_scope_set if base.bu_scope_set.is_a?(String) and base.attribute_names.include?(base.bu_scope_set) scope_hset = {} base.bu_attributes_hset.keys.each { |p_attr| scope_hset[p_attr] = base.bu_scope_set } end scope_hset ||{} end |
#beautify_url(base = self.class) ⇒ Object
makes beautiful url by looking at parent attribute(s) whose bu_attributes are identified by “bu” (default bu_token) only if bu_attribute is not already populated
102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/beautified_url.rb', line 102 def beautify_url(base = self.class) return unless base.is_beautifiable? base.bu_attributes_hset.each do |p_attr, bu_attr| if self.send(bu_attr).nil? unless (p_attr.nil? or p_attr.empty?) #If parent attribute is not nil or empty self.send("#{bu_attr}=", make_unique_beautiful_url(p_attr, bu_attr, self.send(p_attr).beautify_me)) end end end end |
#conditions_array(p_attr, bu_attr, bu_attr_value, base = self.class) ⇒ Object
generates condition array to be used while searching for unique record from bu_attribute value
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/beautified_url.rb', line 65 def conditions_array(p_attr, bu_attr, bu_attr_value, base = self.class) condition_array = ["#{bu_attr} = ? ", bu_attr_value] unless self.send(base.primary_key).nil? condition_array[0] = "#{condition_array[0]} and #{base.primary_key} != ?" condition_array.push(self.send(base.primary_key)) end attribute_scope_hash_set.each do |sp_key, sp_key_scope| sp_key, sp_key_scope = sp_key.to_s, sp_key_scope.to_s if p_attr == sp_key and base.attribute_names.include?(sp_key) and base.attribute_names.include?(sp_key_scope) condition_array[0] = "#{condition_array[0]} and #{sp_key_scope} = ?" condition_array.push(self.send(sp_key_scope)) end end condition_array end |
#make_unique_beautiful_url(p_attr, bu_attr, bu_attr_value, base = self.class) ⇒ Object
finds uniqueness of bu_attribute’s value (with scope if defined)
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/beautified_url.rb', line 83 def make_unique_beautiful_url(p_attr, bu_attr, bu_attr_value, base = self.class) bu_attr_value_t = bu_attr_value keep_looking_flag = true while (keep_looking_flag) if base.where(conditions_array(p_attr, bu_attr, bu_attr_value_t)).count == 0 keep_looking_flag = false else counter ||= 0 counter += 1 bu_attr_value_t = "#{bu_attr_value}-#{counter}" end end bu_attr_value_t end |