mikado 0.0.2
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/.gitignore +4 -0
- data/Gemfile +4 -0
- data/README +1 -0
- data/Rakefile +2 -0
- data/lib/mikado.rb +4 -0
- data/lib/mikado/conditional_validation.rb +80 -0
- data/lib/mikado/version.rb +3 -0
- data/mikado.gemspec +21 -0
- data/test/db/test.sqlite3 +0 -0
- data/test/helper.rb +9 -0
- data/test/item.rb +3 -0
- data/test/mikado_test.rb +176 -0
- data/test/setup.rb +4 -0
- metadata +84 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
This is mikado validation helper
|
data/Rakefile
ADDED
data/lib/mikado.rb
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
module Mikado
|
2
|
+
# add methods to get mikado functionality
|
3
|
+
|
4
|
+
def self.included(base)
|
5
|
+
base.class_eval do
|
6
|
+
extend ClassMethods
|
7
|
+
modify_validations
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
module ClassMethods
|
12
|
+
|
13
|
+
def mikado(*args, &block)
|
14
|
+
# set flag that were in mikado
|
15
|
+
# we have to monkey patch the validation methods
|
16
|
+
# these should check if were in mikado
|
17
|
+
# and add the condition to the :if param
|
18
|
+
# then we can call class_eval
|
19
|
+
|
20
|
+
self.mikado_validation = args
|
21
|
+
|
22
|
+
class_eval &block
|
23
|
+
|
24
|
+
self.mikado_validation = nil
|
25
|
+
|
26
|
+
# remove the mikado flag
|
27
|
+
end
|
28
|
+
|
29
|
+
def mikado_validation=(value)
|
30
|
+
@@mikado = value
|
31
|
+
end
|
32
|
+
|
33
|
+
def mikado_validation
|
34
|
+
return @@mikado if defined? @@mikado
|
35
|
+
return nil
|
36
|
+
end
|
37
|
+
|
38
|
+
def modify_validations
|
39
|
+
methods.map { |m| m if m.starts_with?("validates_") }.compact.each do |method|
|
40
|
+
(class << self; self; end).instance_eval do
|
41
|
+
|
42
|
+
define_method "#{method}_with_mikado" do |*attr_names|
|
43
|
+
attrs = modify_with_mikado(attr_names)
|
44
|
+
return self.send("#{method}_without_mikado", *attrs)
|
45
|
+
end
|
46
|
+
|
47
|
+
alias_method_chain method, "mikado"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
%w( validate validate_on_create validate_on_update ).each do |method|
|
52
|
+
(class << self; self; end).instance_eval do
|
53
|
+
|
54
|
+
define_method "#{method}_with_mikado" do |*attr_names, &block|
|
55
|
+
attrs = modify_with_mikado(attr_names)
|
56
|
+
return self.send("#{method}_without_mikado", *attrs, &block)
|
57
|
+
end
|
58
|
+
|
59
|
+
alias_method_chain method, "mikado"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def modify_with_mikado(attr_names)
|
65
|
+
return attr_names unless mikado_validation
|
66
|
+
|
67
|
+
options = attr_names.extract_options!
|
68
|
+
options[:if] = [] if options.blank?
|
69
|
+
options[:if] = [options[:if]] if !options[:if].is_a?(Array)
|
70
|
+
|
71
|
+
options[:if] = options[:if] | mikado_validation
|
72
|
+
|
73
|
+
attr_names << options
|
74
|
+
|
75
|
+
attr_names
|
76
|
+
end
|
77
|
+
|
78
|
+
|
79
|
+
end
|
80
|
+
end
|
data/mikado.gemspec
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "mikado/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "mikado"
|
7
|
+
s.version = Mikado::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Matthias Zirnstein"]
|
10
|
+
s.email = ["matthias.zirnstein+mikado@gmail.com"]
|
11
|
+
s.homepage = "https://github.com/zirni/mikado"
|
12
|
+
s.summary = %q{Wrap validation conditions with a single command}
|
13
|
+
s.description = %q{}
|
14
|
+
|
15
|
+
s.rubyforge_project = "mikado"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
end
|
Binary file
|
data/test/helper.rb
ADDED
data/test/item.rb
ADDED
data/test/mikado_test.rb
ADDED
@@ -0,0 +1,176 @@
|
|
1
|
+
require 'test/helper'
|
2
|
+
|
3
|
+
class ItemTest < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
|
6
|
+
end
|
7
|
+
|
8
|
+
def reload(klass)
|
9
|
+
Object.send(:remove_const, klass.to_s)
|
10
|
+
load "test/#{klass.to_s.downcase}.rb"
|
11
|
+
yield
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_without_mikado
|
15
|
+
reload(Item) do
|
16
|
+
Item.class_eval do
|
17
|
+
validates_presence_of :title
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
i = Item.new
|
22
|
+
assert_equal false, i.valid?
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_mikado_with_one_condition
|
26
|
+
reload(Item) do
|
27
|
+
Item.class_eval do
|
28
|
+
|
29
|
+
mikado :live? do
|
30
|
+
validates_presence_of :title
|
31
|
+
end
|
32
|
+
|
33
|
+
def live?
|
34
|
+
false
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
i = Item.new
|
40
|
+
assert_equal true, i.valid?
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_mikado_with_two_validations
|
44
|
+
reload(Item) do
|
45
|
+
Item.class_eval do
|
46
|
+
|
47
|
+
mikado :live? do
|
48
|
+
validates_presence_of :title
|
49
|
+
end
|
50
|
+
|
51
|
+
validates_presence_of :description
|
52
|
+
|
53
|
+
def live?
|
54
|
+
false
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
i = Item.new
|
60
|
+
assert_equal false, i.valid?
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_mikado_with_array_of_validations
|
64
|
+
reload(Item) do
|
65
|
+
Item.class_eval do
|
66
|
+
|
67
|
+
mikado [:live?, Proc.new {|r| r.payed? }] do
|
68
|
+
validates_presence_of :title
|
69
|
+
end
|
70
|
+
|
71
|
+
def live?
|
72
|
+
true
|
73
|
+
end
|
74
|
+
|
75
|
+
def payed?
|
76
|
+
false
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
i = Item.new
|
82
|
+
assert_equal true, i.valid?
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_mikado_with_array_of_validations_and_if_condition
|
86
|
+
reload(Item) do
|
87
|
+
Item.class_eval do
|
88
|
+
|
89
|
+
mikado [:live?, Proc.new {|r| r.payed? }] do
|
90
|
+
validates_presence_of :title, :if => Proc.new {|r| true}
|
91
|
+
end
|
92
|
+
|
93
|
+
def live?
|
94
|
+
true
|
95
|
+
end
|
96
|
+
|
97
|
+
def payed?
|
98
|
+
true
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
i = Item.new
|
104
|
+
assert_equal false, i.valid?
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_mikado_with_validate_function
|
108
|
+
reload(Item) do
|
109
|
+
Item.class_eval do
|
110
|
+
|
111
|
+
mikado :live? do
|
112
|
+
validate :check_format
|
113
|
+
end
|
114
|
+
|
115
|
+
def live?
|
116
|
+
false
|
117
|
+
end
|
118
|
+
|
119
|
+
def check_format
|
120
|
+
errors.add :title, 'format isnt correct'
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
i = Item.new
|
126
|
+
assert_equal true, i.valid?
|
127
|
+
end
|
128
|
+
|
129
|
+
def test_mikado_with_two_mikado_validations
|
130
|
+
reload(Item) do
|
131
|
+
Item.class_eval do
|
132
|
+
|
133
|
+
mikado :live? do
|
134
|
+
validate :check_format
|
135
|
+
end
|
136
|
+
|
137
|
+
mikado :payed? do
|
138
|
+
validates_presence_of :title
|
139
|
+
end
|
140
|
+
|
141
|
+
def live?
|
142
|
+
false
|
143
|
+
end
|
144
|
+
|
145
|
+
def payed?
|
146
|
+
true
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
i = Item.new
|
152
|
+
assert_equal false, i.valid?
|
153
|
+
end
|
154
|
+
|
155
|
+
def test_mikado_with_validate_on_create
|
156
|
+
reload(Item) do
|
157
|
+
Item.class_eval do
|
158
|
+
|
159
|
+
mikado :live? do
|
160
|
+
validate_on_create :check_format
|
161
|
+
end
|
162
|
+
|
163
|
+
def live?
|
164
|
+
false
|
165
|
+
end
|
166
|
+
|
167
|
+
def check_format
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
i = Item.new
|
173
|
+
assert_equal true, i.save
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
data/test/setup.rb
ADDED
metadata
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mikado
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 2
|
10
|
+
version: 0.0.2
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Matthias Zirnstein
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-05-03 00:00:00 -07:00
|
19
|
+
default_executable:
|
20
|
+
dependencies: []
|
21
|
+
|
22
|
+
description: ""
|
23
|
+
email:
|
24
|
+
- matthias.zirnstein+mikado@gmail.com
|
25
|
+
executables: []
|
26
|
+
|
27
|
+
extensions: []
|
28
|
+
|
29
|
+
extra_rdoc_files: []
|
30
|
+
|
31
|
+
files:
|
32
|
+
- .gitignore
|
33
|
+
- Gemfile
|
34
|
+
- README
|
35
|
+
- Rakefile
|
36
|
+
- lib/mikado.rb
|
37
|
+
- lib/mikado/conditional_validation.rb
|
38
|
+
- lib/mikado/version.rb
|
39
|
+
- mikado.gemspec
|
40
|
+
- test/db/test.sqlite3
|
41
|
+
- test/helper.rb
|
42
|
+
- test/item.rb
|
43
|
+
- test/mikado_test.rb
|
44
|
+
- test/setup.rb
|
45
|
+
has_rdoc: true
|
46
|
+
homepage: https://github.com/zirni/mikado
|
47
|
+
licenses: []
|
48
|
+
|
49
|
+
post_install_message:
|
50
|
+
rdoc_options: []
|
51
|
+
|
52
|
+
require_paths:
|
53
|
+
- lib
|
54
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
hash: 3
|
60
|
+
segments:
|
61
|
+
- 0
|
62
|
+
version: "0"
|
63
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
hash: 3
|
69
|
+
segments:
|
70
|
+
- 0
|
71
|
+
version: "0"
|
72
|
+
requirements: []
|
73
|
+
|
74
|
+
rubyforge_project: mikado
|
75
|
+
rubygems_version: 1.5.2
|
76
|
+
signing_key:
|
77
|
+
specification_version: 3
|
78
|
+
summary: Wrap validation conditions with a single command
|
79
|
+
test_files:
|
80
|
+
- test/db/test.sqlite3
|
81
|
+
- test/helper.rb
|
82
|
+
- test/item.rb
|
83
|
+
- test/mikado_test.rb
|
84
|
+
- test/setup.rb
|