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 ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in mikado.gemspec
4
+ gemspec
data/README ADDED
@@ -0,0 +1 @@
1
+ This is mikado validation helper
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
data/lib/mikado.rb ADDED
@@ -0,0 +1,4 @@
1
+ require 'rubygems'
2
+ require 'active_record'
3
+ require File.expand_path('../mikado/conditional_validation', __FILE__)
4
+
@@ -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
@@ -0,0 +1,3 @@
1
+ module Mikado
2
+ VERSION = "0.0.2"
3
+ 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
@@ -0,0 +1,9 @@
1
+ require File.expand_path('../../lib/mikado', __FILE__)
2
+ require 'sqlite3'
3
+ require 'test/unit'
4
+ require 'test/item'
5
+
6
+ ActiveRecord::Base.establish_connection(
7
+ :adapter => "sqlite3",
8
+ :database => "test/db/test.sqlite3"
9
+ )
data/test/item.rb ADDED
@@ -0,0 +1,3 @@
1
+ class Item < ActiveRecord::Base
2
+ include Mikado
3
+ end
@@ -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
@@ -0,0 +1,4 @@
1
+ ActiveRecord::Migration.create_table :items do |t|
2
+ t.string :title
3
+ t.string :description
4
+ end
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