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 |
# File 'lib/beautified_url.rb', line 3 def self.included(base) base.extend(ClassMethods) base.send(:before_validation, :beautify_url) end |
Instance Method Details
#attribute_scope_hash_set(base = self.class) ⇒ Object
31 32 33 34 35 36 37 38 39 |
# File 'lib/beautified_url.rb', line 31 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
79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/beautified_url.rb', line 79 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
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/beautified_url.rb', line 42 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)
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/beautified_url.rb', line 60 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 |