Module: BeautifiedUrl

Defined in:
lib/beautified_url.rb

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

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