lockdown 0.5.14 → 0.5.16

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.
data/History.txt CHANGED
@@ -1,5 +1,9 @@
1
- == 0.5.14 2008-07-xx
1
+ == 0.5.15 2008-07-18
2
+ * Updated included classy inheritance library.
3
+
4
+ == 0.5.14 2008-07-18
2
5
  * Change: option no_migration to skip-migrations to mimick other generator options
6
+ * Fixed: errant creation of sessions directory in app/controllers
3
7
 
4
8
  == 0.5.13 2008-07-10
5
9
  * Add: Support for --namespace option on generator. Use as ./script generate lockdown --all --namespace=admin
@@ -26,8 +26,22 @@ module Stonean
26
26
  def depends_on(model_sym, options = {})
27
27
  define_relationship(model_sym,options)
28
28
 
29
- validates_presence_of model_sym
30
- validates_associated model_sym
29
+ # Optional presence of handling
30
+ if options.has_key?(:validates_presence_if) && options[:validates_presence_if] != true
31
+ if [Symbol, String, Proc].include?(options[:validates_presence_if].class)
32
+ validates_presence_of model_sym, :if => options[:validates_presence_if]
33
+ end
34
+ else
35
+ validates_presence_of model_sym
36
+ end
37
+
38
+ if options.has_key?(:validates_associated_if) && options[:validates_associated_if] != true
39
+ if [Symbol, String, Proc].include?(options[:validates_assoicated_if].class)
40
+ validates_associated model_sym, :if => options[:validates_associated_if]
41
+ end
42
+ else
43
+ validates_associated model_sym
44
+ end
31
45
 
32
46
  # Before save functionality to create/update the requisite object
33
47
  define_save_method(model_sym, options[:as])
@@ -36,7 +50,7 @@ module Stonean
36
50
  define_find_with_method(model_sym)
37
51
 
38
52
  if options[:as]
39
- define_can_be_method_on_requisite_class(model_sym, options[:as])
53
+ define_can_be_method_on_requisite_class(options[:class_name] || model_sym, options[:as])
40
54
  end
41
55
 
42
56
  options[:attrs].each{|attr| define_accessors(model_sym, attr, options)}
@@ -63,9 +77,19 @@ module Stonean
63
77
 
64
78
  private
65
79
 
80
+ def classy_options
81
+ [:as, :attrs, :prefix, :postfix, :validates_presence_if, :validates_associated_if]
82
+ end
83
+
84
+ def delete_classy_options(options, *keepers)
85
+ options.delete_if do |key,value|
86
+ classy_options.include?(key) && !keepers.include?(key)
87
+ end
88
+ options
89
+ end
90
+
66
91
  def define_relationship(model_sym, options)
67
- opts = options.dup
68
- [:attrs, :prefix].each{|key| opts.delete(key)}
92
+ opts = delete_classy_options(options.dup, :as)
69
93
  if opts[:as]
70
94
  as_opt = opts.delete(:as)
71
95
  opts = polymorphic_constraints(as_opt).merge(opts)
@@ -77,12 +101,17 @@ module Stonean
77
101
 
78
102
  def define_save_method(model_sym, polymorphic_name = nil)
79
103
  define_method "save_requisite_#{model_sym}" do
104
+ # Return unless the association exists
105
+ eval("return unless self.#{model_sym}")
106
+
107
+ # Set the polymorphic type and id before saving
80
108
  if polymorphic_name
81
109
  eval("self.#{model_sym}.#{polymorphic_name}_type = self.class.name")
82
110
  eval("self.#{model_sym}.#{polymorphic_name}_id = self.id")
83
111
  end
84
112
 
85
113
  if polymorphic_name
114
+ # Save only if it's an update, has_one creates automatically
86
115
  eval <<-SAVEIT
87
116
  unless self.#{model_sym}.new_record?
88
117
  self.#{model_sym}.save
@@ -116,7 +145,15 @@ module Stonean
116
145
  end
117
146
 
118
147
  def define_accessors(model_sym, attr, options)
119
- accessor_method_name = ( options[:prefix] ? "#{model_sym}_#{attr}" : attr)
148
+ accessor_method_name = attr
149
+
150
+ if options[:prefix]
151
+ accessor_method_name = (options[:prefix] == true) ? "#{model_sym}_#{accessor_method_name}" : "#{options[:prefix]}_#{accessor_method_name}"
152
+ end
153
+
154
+ if options[:postfix]
155
+ accessor_method_name = (options[:postfix] == true) ? "#{accessor_method_name}_#{model_sym}" : "#{accessor_method_name}_#{options[:postfix]}"
156
+ end
120
157
 
121
158
  define_method accessor_method_name do
122
159
  eval("self.#{model_sym} ? self.#{model_sym}.#{attr} : nil")
@@ -2,7 +2,7 @@ module Lockdown #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 5
5
- TINY = 14
5
+ TINY = 16
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
data/website/index.html CHANGED
@@ -33,7 +33,7 @@
33
33
  <h1>Lockdown</h1>
34
34
  <div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/lockdown"; return false'>
35
35
  <p>Get Version</p>
36
- <a href="http://rubyforge.org/projects/lockdown" class="numbers">0.5.14</a>
36
+ <a href="http://rubyforge.org/projects/lockdown" class="numbers">0.5.16</a>
37
37
  </div>
38
38
  <h2>What</h2>
39
39
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lockdown
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.14
4
+ version: 0.5.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Stone