simple_descriptor 0.1.1 → 0.2.0

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/CHANGELOG CHANGED
@@ -1 +1,2 @@
1
- 2006 11 26 first release
1
+ 0.2.0 added direct bindings for ActiveRecord
2
+ 2006 11 26 first release 0.1.0
data/README CHANGED
@@ -104,6 +104,30 @@ The line
104
104
 
105
105
  adds some new methods to our class that makes more easy to access a description
106
106
 
107
+ == Too lazy? Let Simple Descriptor do the hard work for you
108
+
109
+ Since 0.2.0 version Simple Descriptor provides method to automate some
110
+ ActiveRecord models description
111
+
112
+ class Employee < ActiveRecord::Base
113
+ extend SimpleDescriptor::ClassDescriptor
114
+ validates_ar_descriptions
115
+ end
116
+
117
+ With just the code above you will get validations for:
118
+
119
+ 1) all your numeric fields defined as numeric in your DB
120
+ 2) maximum length of all the fields defined as string in the DB
121
+ 3) all the required field defined as not null in the DB
122
+
123
+ and you get
124
+
125
+ Employee.maxlength(field)
126
+
127
+ plus a lot of pre-defined descriptions for your model that you can inspect with
128
+
129
+ Employee.descriptions
130
+
107
131
  == Where are the description stored and how?
108
132
 
109
133
  All the descriptions are stored in a DESCRIPTIONS constant, you can always
data/Rakefile CHANGED
@@ -12,8 +12,8 @@ require File.join(File.dirname(__FILE__), 'lib', 'simple_descriptor', 'version')
12
12
 
13
13
  AUTHOR = "blank"
14
14
  EMAIL = "your contact email for bug fixes and info"
15
- DESCRIPTION = "description of gem"
16
- RUBYFORGE_PROJECT = "simple_descriptor"
15
+ DESCRIPTION = "add description to your classes and make your ActiveRecord validations smarter"
16
+ RUBYFORGE_PROJECT = "simpledesc"
17
17
  HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
18
18
  BIN_FILES = %w( )
19
19
 
@@ -125,7 +125,7 @@ module SimpleDescriptor #:nodoc:
125
125
  end
126
126
  end
127
127
  alias :description_of :described_value_for
128
- #creates some shortcut method to access a description
128
+ #creates some shortcut methods to access a description
129
129
  #
130
130
  #example
131
131
  # Person.shortcut_desctiption :limited, :as => :maxlength
@@ -163,6 +163,62 @@ module SimpleDescriptor #:nodoc:
163
163
  end
164
164
  end
165
165
  end
166
+ #loads standard descriptions from columns_hash of ActiveRecord classes
167
+ #
168
+ #every column will be described as db type (i.e. :integer, :string, :date etc.)
169
+ #
170
+ #string columns are described as limited with the value of the maximum length
171
+ #
172
+ #a maxlength class method will be added to provide the maximum length of a field
173
+ #as defined from the database
174
+ #
175
+ #This methods is called by validates_ar_descriptions unless validates_ar_descriptions is called
176
+ #with the :load_desc option set to false
177
+ #
178
+ # Post.described_as :string
179
+ #
180
+ #will return all the fields of posts table that are defined as strings
181
+ #
182
+ # Post.maxlength :title
183
+ #
184
+ #will return the maximum length of post title as defined in the database
185
+ #
186
+ def load_ar_descriptions
187
+ if respond_to? :columns_hash
188
+ columns_hash.each do |k, v|
189
+ describe k.to_sym, :as => v.type
190
+ describe k.to_sym, :as => :required if !v.null
191
+ case v.type
192
+ when :string : describe k.to_sym, :as => :limited, :with_value => v.limit
193
+ end
194
+ end
195
+ shortcut_description :limited, :as => :maxlength
196
+ else
197
+ raise "no columns_hash method"
198
+ end
199
+ end
200
+ #runs validations following the descriptions provided
201
+ # 1 loads all the descriptions from the database using load_ar_descriptions
202
+ # 2 validates presence of all required fields unless :required => false in options
203
+ # 3 validates maximum length of every string field unless :length => false in options
204
+ # 4 validates integer format for every integer field unless :integer => false in options
205
+ # 5 validates float format for every float field unless :float => false in options
206
+ # 6 validates decimal format for every decimal field unless :decimal => false in options
207
+ # 7 if numbers => false in options then float, decimal and integer validations won't be done
208
+ def validates_ar_descriptions(options = {})
209
+ options = {:load_desc => true, :required => true, :length => true, :numbers => true, :float => true, :decimal => true, :integer => true}.update options
210
+ load_ar_descriptions if options[:load_desc]
211
+ yield if block_given?
212
+ send(:validates_presence_of, described_as(:required)) if options[:required]
213
+ described_as(:limited).each { |field| validates_length_of field, :maximum => maxlength(field), :allow_nil => true } if options[:length]
214
+ if options[:numbers]
215
+ described_as(:integer).each { |field| validates_numericality_of field, :only_integer => true, :allow_nil => true } if options[:integer]
216
+ described_as(:decimal).each { |field| validates_numericality_of field } if options[:decimal]
217
+ described_as(:float).each { |field| validates_numericality_of field } if options[:float]
218
+ end
219
+ validates_custom_descriptions if respond_to? :validates_custom_descriptions
220
+ end
221
+
166
222
  private
167
223
  def find_description_for(arg)
168
224
  descriptions.inject({}) do |h, d|
@@ -1,8 +1,8 @@
1
1
  module SimpleDescriptor #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
- MINOR = 1
5
- TINY = 1
4
+ MINOR = 2
5
+ TINY = 0
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.0
2
+ rubygems_version: 0.9.4
3
3
  specification_version: 1
4
4
  name: simple_descriptor
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.1.1
7
- date: 2007-01-07 00:00:00 +00:00
8
- summary: description of gem
6
+ version: 0.2.0
7
+ date: 2007-06-04 00:00:00 +01:00
8
+ summary: add description to your classes and make your ActiveRecord validations smarter
9
9
  require_paths:
10
10
  - lib
11
11
  email: your contact email for bug fixes and info
12
- homepage: http://simple_descriptor.rubyforge.org
13
- rubyforge_project: simple_descriptor
14
- description: description of gem
12
+ homepage: http://simpledesc.rubyforge.org
13
+ rubyforge_project: simpledesc
14
+ description: add description to your classes and make your ActiveRecord validations smarter
15
15
  autorequire: simple_descriptor
16
16
  default_executable:
17
17
  bindir: bin