validate_block 0.1.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/History.txt ADDED
@@ -0,0 +1,3 @@
1
+ === 0.1 2010-08-20
2
+
3
+ * Initial release
data/Manifest.txt ADDED
@@ -0,0 +1,12 @@
1
+ History.txt
2
+ Manifest.txt
3
+ README.rdoc
4
+ Rakefile
5
+ lib/validate_block.rb
6
+ script/console
7
+ script/destroy
8
+ script/generate
9
+ spec/spec.opts
10
+ spec/spec_helper.rb
11
+ spec/validate_block_spec.rb
12
+ tasks/rspec.rake
data/README.rdoc ADDED
@@ -0,0 +1,57 @@
1
+ = validate_block
2
+
3
+ * http://github.com/xunker/validate_block
4
+
5
+ == DESCRIPTION:
6
+
7
+ This gem allows similar ActiveRecord validates_* commands to be grouped together in blocks and pruned of repeated parameters.
8
+
9
+ How often have you had a block of validation commands in an ActiveRecord object that are repeated, especially :id or :unless options? Does this look familiar?
10
+
11
+ validates_presence_of :hair, :unless => :bald?
12
+ validates_length_of :hair, :within => 3..15, :unless => :bald?
13
+ validates_inclusion_of :hair_color, :in => HAIR_COLORS, :unless => bald?
14
+
15
+ Instead, this gem will allow you to replace the above code with:
16
+
17
+ validate_block :unless => :bald? do
18
+ presence_of :hair
19
+ length_of :hair, :within => 3..15
20
+ inclusion_of :hair_color, :in => HAIR_COLORS
21
+ end
22
+
23
+ ..which is a great way to DRY your :hair, don't you think?
24
+
25
+ Basically, this gem 1) removes the requirement to have 'validates_' on the front of the commands and 2) passes the options on the validate_block command to each validation command inside the block.
26
+
27
+ The syntax of the validation commands remains the same. Keeping the 'validate_*' prefix on the commands inside the block _will_ work but it is not required.
28
+
29
+ WARNING: There are no specs for this yet because I suck. Actually, it's because I don't properly understand how to spec a module like this so any help on that front would be appreciated.
30
+
31
+ == SYNOPSIS:
32
+
33
+ require 'rubygems'
34
+ require 'activerecord'
35
+ require 'validate_block'
36
+
37
+ class SomeObject < ActiveRecord::Base
38
+
39
+ validate_block :if => :some_method? do
40
+ presence_of :some_field
41
+ inclusion_of :some_other_field, :in => SOME_VALUES
42
+ end
43
+
44
+ end
45
+
46
+ == REQUIREMENTS:
47
+
48
+ ActiveRecord >= 2.1.0
49
+ Rspec (for specs)
50
+
51
+ == INSTALL:
52
+
53
+ sudo gem install validate_block
54
+
55
+ == LICENSE:
56
+
57
+ http://sam.zoy.org/wtfpl/COPYING
data/Rakefile ADDED
@@ -0,0 +1,20 @@
1
+ require 'rubygems'
2
+ gem 'hoe', '>= 2.1.0'
3
+ gem 'activerecord', '>= 2.1.0'
4
+ gem 'rspec', '>= 1.3.0'
5
+ require 'hoe'
6
+ require 'fileutils'
7
+ require './lib/validate_block'
8
+
9
+ VERSION = "0.1.0"
10
+
11
+ Hoe.plugin :newgem
12
+
13
+ $hoe = Hoe.spec 'validate_block' do
14
+ self.developer 'Matthew Nielsen', 'xunker@pyxidis.org'
15
+ end
16
+
17
+ require 'newgem/tasks'
18
+ Dir['tasks/**/*.rake'].each { |t| load t }
19
+
20
+ task :default => :spec
@@ -0,0 +1,23 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ module ActiveRecord
5
+ module Validations
6
+ module ClassMethods
7
+ def validate_block(opts = {}, &block)
8
+ @block_opts = opts || {}
9
+ yield
10
+ end
11
+
12
+ def method_missing(name, attrib, opts = {}, &block)
13
+ if name.to_s =~ /^validates_/
14
+ send(name, attrib, opts.merge(@block_opts))
15
+ elsif respond_to?(("validates_"+name.to_s).to_sym)
16
+ send(("validates_"+name.to_s).to_sym, attrib, opts.merge(@block_opts))
17
+ else
18
+ super
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
data/script/console ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ # File: script/console
3
+ irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
4
+
5
+ libs = " -r irb/completion"
6
+ # Perhaps use a console_lib to store any extra methods I may want available in the cosole
7
+ # libs << " -r #{File.dirname(__FILE__) + '/../lib/console_lib/console_logger.rb'}"
8
+ libs << " -r #{File.dirname(__FILE__) + '/../lib/validate_block.rb'}"
9
+ puts "Loading validate_block gem"
10
+ exec "#{irb} #{libs} --simple-prompt"
data/script/destroy ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/destroy'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Destroy.new.run(ARGV)
data/script/generate ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/generate'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Generate.new.run(ARGV)
data/spec/spec.opts ADDED
@@ -0,0 +1 @@
1
+ --colour
@@ -0,0 +1,10 @@
1
+ begin
2
+ require 'spec'
3
+ rescue LoadError
4
+ require 'rubygems' unless ENV['NO_RUBYGEMS']
5
+ gem 'rspec'
6
+ require 'spec'
7
+ end
8
+
9
+ $:.unshift(File.dirname(__FILE__) + '/../lib')
10
+ require 'validate_block'
@@ -0,0 +1,5 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+
3
+ describe "validate_block" do
4
+ # there wer currently no specs, I'm lazy and don't understand how to spec a module like this.
5
+ end
data/tasks/rspec.rake ADDED
@@ -0,0 +1,21 @@
1
+ begin
2
+ require 'spec'
3
+ rescue LoadError
4
+ require 'rubygems' unless ENV['NO_RUBYGEMS']
5
+ require 'spec'
6
+ end
7
+ begin
8
+ require 'spec/rake/spectask'
9
+ rescue LoadError
10
+ puts <<-EOS
11
+ To use rspec for testing you must install rspec gem:
12
+ gem install rspec
13
+ EOS
14
+ exit(0)
15
+ end
16
+
17
+ desc "Run the specs under spec/models"
18
+ Spec::Rake::SpecTask.new do |t|
19
+ t.spec_opts = ['--options', "spec/spec.opts"]
20
+ t.spec_files = FileList['spec/**/*_spec.rb']
21
+ end
metadata ADDED
@@ -0,0 +1,135 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: validate_block
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Matthew Nielsen
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-08-20 00:00:00 -06:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rubyforge
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 7
30
+ segments:
31
+ - 2
32
+ - 0
33
+ - 4
34
+ version: 2.0.4
35
+ type: :development
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: hoe
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ hash: 21
46
+ segments:
47
+ - 2
48
+ - 6
49
+ - 1
50
+ version: 2.6.1
51
+ type: :development
52
+ version_requirements: *id002
53
+ description: |-
54
+ This gem allows similar ActiveRecord validates_* commands to be grouped together in blocks and pruned of repeated parameters.
55
+
56
+ How often have you had a block of validation commands in an ActiveRecord object that are repeated, especially :id or :unless options? Does this look familiar?
57
+
58
+ validates_presence_of :hair, :unless => :bald?
59
+ validates_length_of :hair, :within => 3..15, :unless => :bald?
60
+ validates_inclusion_of :hair_color, :in => HAIR_COLORS, :unless => bald?
61
+
62
+ Instead, this gem will allow you to replace the above code with:
63
+
64
+ validate_block :unless => :bald? do
65
+ presence_of :hair
66
+ length_of :hair, :within => 3..15
67
+ inclusion_of :hair_color, :in => HAIR_COLORS
68
+ end
69
+
70
+ ..which is a great way to DRY your :hair, don't you think?
71
+
72
+ Basically, this gem 1) removes the requirement to have 'validates_' on the front of the commands and 2) passes the options on the validate_block command to each validation command inside the block.
73
+
74
+ The syntax of the validation commands remains the same. Keeping the 'validate_*' prefix on the commands inside the block _will_ work but it is not required.
75
+
76
+ WARNING: There are no specs for this yet because I suck. Actually, it's because I don't properly understand how to spec a module like this so any help on that front would be appreciated.
77
+ email:
78
+ - xunker@pyxidis.org
79
+ executables: []
80
+
81
+ extensions: []
82
+
83
+ extra_rdoc_files:
84
+ - History.txt
85
+ - Manifest.txt
86
+ files:
87
+ - History.txt
88
+ - Manifest.txt
89
+ - README.rdoc
90
+ - Rakefile
91
+ - lib/validate_block.rb
92
+ - script/console
93
+ - script/destroy
94
+ - script/generate
95
+ - spec/spec.opts
96
+ - spec/spec_helper.rb
97
+ - spec/validate_block_spec.rb
98
+ - tasks/rspec.rake
99
+ has_rdoc: true
100
+ homepage: http://github.com/xunker/validate_block
101
+ licenses: []
102
+
103
+ post_install_message:
104
+ rdoc_options:
105
+ - --main
106
+ - README.rdoc
107
+ require_paths:
108
+ - lib
109
+ required_ruby_version: !ruby/object:Gem::Requirement
110
+ none: false
111
+ requirements:
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ hash: 3
115
+ segments:
116
+ - 0
117
+ version: "0"
118
+ required_rubygems_version: !ruby/object:Gem::Requirement
119
+ none: false
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ hash: 3
124
+ segments:
125
+ - 0
126
+ version: "0"
127
+ requirements: []
128
+
129
+ rubyforge_project: validate_block
130
+ rubygems_version: 1.3.7
131
+ signing_key:
132
+ specification_version: 3
133
+ summary: This gem allows similar ActiveRecord validates_* commands to be grouped together in blocks and pruned of repeated parameters
134
+ test_files: []
135
+