djanowski-permalink_fu 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. data/lib/permalink_fu.rb +24 -23
  2. metadata +1 -1
data/lib/permalink_fu.rb CHANGED
@@ -18,11 +18,6 @@ module PermalinkFu
18
18
 
19
19
  def self.included(base)
20
20
  base.extend ClassMethods
21
- class << base
22
- attr_accessor :permalink_options
23
- attr_accessor :permalink_attributes
24
- attr_accessor :permalink_field
25
- end
26
21
  end
27
22
 
28
23
  module ClassMethods
@@ -50,9 +45,14 @@ module PermalinkFu
50
45
  def has_permalink(*args)
51
46
  options = args.extract_options!
52
47
  attr_names = args.first || :to_s
53
- self.permalink_attributes = Array(attr_names)
54
- self.permalink_field = (options.delete(:as) || 'permalink').to_s
55
- self.permalink_options = options
48
+ write_inheritable_attribute(:permalink_attributes, Array(attr_names))
49
+ write_inheritable_attribute(:permalink_field, (options.delete(:as) || 'permalink').to_s)
50
+ write_inheritable_attribute(:permalink_options, options)
51
+
52
+ %w{permalink_attributes permalink_field permalink_options}.each do |v|
53
+ class_inheritable_reader(v.to_sym)
54
+ end
55
+
56
56
  before_validation :create_unique_permalink
57
57
  evaluate_attribute_method permalink_field, "def #{self.permalink_field}=(new_value);write_attribute(:#{self.permalink_field}, PermalinkFu.escape(new_value));end", "#{self.permalink_field}="
58
58
  extend PermalinkFinders
@@ -70,13 +70,13 @@ module PermalinkFu
70
70
 
71
71
  module ToParam
72
72
  def to_param
73
- send(self.class.permalink_field)
73
+ send(self.class.read_inheritable_attribute(:permalink_field))
74
74
  end
75
75
  end
76
76
 
77
77
  module ToParamWithID
78
78
  def to_param
79
- permalink = send(self.class.permalink_field)
79
+ permalink = send(self.class.read_inheritable_attribute(:permalink_field))
80
80
  return super if new_record? || permalink.blank?
81
81
  "#{id}-#{permalink}"
82
82
  end
@@ -96,26 +96,27 @@ module PermalinkFu
96
96
  protected
97
97
  def create_unique_permalink
98
98
  return unless should_create_permalink?
99
- if send(self.class.permalink_field).to_s.empty?
100
- send("#{self.class.permalink_field}=", create_permalink_for(self.class.permalink_attributes))
99
+ if send(self.class.read_inheritable_attribute(:permalink_field)).to_s.empty?
100
+ send("#{self.class.read_inheritable_attribute(:permalink_field)}=", create_permalink_for(self.class.read_inheritable_attribute(:permalink_attributes)))
101
101
  end
102
- limit = self.class.columns_hash[self.class.permalink_field].limit
103
- base = send("#{self.class.permalink_field}=", send(self.class.permalink_field)[0..limit - 1])
102
+ limit = self.class.columns_hash[self.class.read_inheritable_attribute(:permalink_field)].limit
103
+ base = send("#{self.class.read_inheritable_attribute(:permalink_field)}=",
104
+ send(self.class.read_inheritable_attribute(:permalink_field))[0..limit - 1])
104
105
  counter = 1
105
106
  # oh how i wish i could use a hash for conditions
106
- conditions = ["#{self.class.permalink_field} = ?", base]
107
+ conditions = ["#{self.class.read_inheritable_attribute(:permalink_field)} = ?", base]
107
108
  unless new_record?
108
109
  conditions.first << " and id != ?"
109
110
  conditions << id
110
111
  end
111
- if self.class.permalink_options[:scope]
112
- conditions.first << " and #{self.class.permalink_options[:scope]} = ?"
113
- conditions << send(self.class.permalink_options[:scope])
112
+ if self.class.read_inheritable_attribute(:permalink_options)[:scope]
113
+ conditions.first << " and #{self.class.read_inheritable_attribute(:permalink_options)[:scope]} = ?"
114
+ conditions << send(self.class.read_inheritable_attribute(:permalink_options)[:scope])
114
115
  end
115
116
  while self.class.exists?(conditions)
116
117
  suffix = "-#{counter += 1}"
117
118
  conditions[1] = "#{base[0..limit-suffix.size-1]}#{suffix}"
118
- send("#{self.class.permalink_field}=", conditions[1])
119
+ send("#{self.class.read_inheritable_attribute(:permalink_field)}=", conditions[1])
119
120
  end
120
121
  end
121
122
 
@@ -125,10 +126,10 @@ protected
125
126
 
126
127
  private
127
128
  def should_create_permalink?
128
- if self.class.permalink_options[:if]
129
- evaluate_method(self.class.permalink_options[:if])
130
- elsif self.class.permalink_options[:unless]
131
- !evaluate_method(self.class.permalink_options[:unless])
129
+ if self.class.read_inheritable_attribute(:permalink_options)[:if]
130
+ evaluate_method(self.class.read_inheritable_attribute(:permalink_options)[:if])
131
+ elsif self.class.read_inheritable_attribute(:permalink_options)[:unless]
132
+ !evaluate_method(self.class.read_inheritable_attribute(:permalink_options)[:unless])
132
133
  else
133
134
  true
134
135
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: djanowski-permalink_fu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Damian Janowski