mv-core 1.0.1 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +67 -12
- data/lib/mv-core.rb +18 -100
- data/lib/mv/core/active_record/connection_adapters/abstract_adapter_decorator.rb +51 -0
- data/lib/mv/core/active_record/connection_adapters/table_decorator.rb +13 -0
- data/lib/mv/core/active_record/connection_adapters/table_definition_decorator.rb +21 -0
- data/lib/mv/core/active_record/migration/command_recorder_decorator.rb +13 -0
- data/lib/mv/core/active_record/migration_decorator.rb +14 -0
- data/lib/mv/core/active_record/schema_decorator.rb +16 -0
- data/lib/mv/core/active_record/schema_dumper_decorator.rb +29 -0
- data/lib/mv/core/constraint/base.rb +33 -0
- data/lib/mv/core/constraint/builder/base.rb +45 -0
- data/lib/mv/core/constraint/builder/factory.rb +42 -0
- data/lib/mv/core/constraint/builder/index.rb +50 -0
- data/lib/mv/core/constraint/builder/trigger.rb +13 -0
- data/lib/mv/core/constraint/description.rb +24 -0
- data/lib/mv/core/constraint/factory.rb +33 -0
- data/lib/mv/core/constraint/index.rb +13 -0
- data/lib/mv/core/constraint/trigger.rb +20 -0
- data/lib/mv/core/db/helpers/column_validators.rb +57 -0
- data/lib/mv/core/db/helpers/table_validators.rb +38 -0
- data/lib/mv/core/db/migration_validator.rb +26 -0
- data/lib/mv/core/error.rb +25 -0
- data/lib/mv/core/migration/base.rb +94 -0
- data/lib/mv/core/migration/operations/add_column.rb +27 -0
- data/lib/mv/core/migration/operations/change_column.rb +31 -0
- data/lib/mv/core/migration/operations/drop_table.rb +21 -0
- data/lib/mv/core/migration/operations/factory.rb +20 -0
- data/lib/mv/core/migration/operations/list.rb +28 -0
- data/lib/mv/core/migration/operations/remove_column.rb +22 -0
- data/lib/mv/core/migration/operations/rename_column.rb +26 -0
- data/lib/mv/core/migration/operations/rename_table.rb +25 -0
- data/lib/mv/core/presenter/constraint/description.rb +26 -0
- data/lib/mv/core/presenter/validation/base.rb +73 -0
- data/lib/mv/core/railtie.rb +40 -0
- data/lib/mv/core/route/base.rb +25 -0
- data/lib/mv/core/route/index.rb +17 -0
- data/lib/mv/core/route/trigger.rb +22 -0
- data/lib/mv/core/router.rb +33 -0
- data/lib/mv/core/services/compare_constraint_arrays.rb +50 -0
- data/lib/mv/core/services/compare_constraints.rb +31 -0
- data/lib/mv/core/services/create_constraints.rb +30 -0
- data/lib/mv/core/services/create_migration_validators_table.rb +31 -0
- data/lib/mv/core/services/delete_constraints.rb +30 -0
- data/lib/mv/core/services/load_constraints.rb +45 -0
- data/lib/mv/core/services/say_constraints_diff.rb +66 -0
- data/lib/mv/core/services/show_constraints.rb +41 -0
- data/lib/mv/core/services/synchronize_constraints.rb +54 -0
- data/lib/mv/core/services/uninstall.rb +25 -0
- data/lib/mv/core/validation/absence.rb +35 -0
- data/lib/mv/core/validation/base.rb +98 -0
- data/lib/mv/core/validation/builder/absence.rb +19 -0
- data/lib/mv/core/validation/builder/base.rb +58 -0
- data/lib/mv/core/validation/builder/exclusion.rb +42 -0
- data/lib/mv/core/validation/builder/factory.rb +43 -0
- data/lib/mv/core/validation/builder/inclusion.rb +42 -0
- data/lib/mv/core/validation/builder/length.rb +68 -0
- data/lib/mv/core/validation/builder/presence.rb +19 -0
- data/lib/mv/core/validation/builder/uniqueness.rb +19 -0
- data/lib/mv/core/validation/exclusion.rb +27 -0
- data/lib/mv/core/validation/factory.rb +56 -0
- data/lib/mv/core/validation/inclusion.rb +27 -0
- data/lib/mv/core/validation/length.rb +59 -0
- data/lib/mv/core/validation/presence.rb +25 -0
- data/lib/mv/core/validation/uniqueness.rb +45 -0
- data/lib/mv/core/validators/array_validator.rb +5 -0
- data/lib/mv/core/validators/integers_array_validator.rb +12 -0
- data/lib/mv/core/validators/valid_validator.rb +9 -0
- metadata +158 -30
- data/lib/migration_validators/active_record/base.rb +0 -29
- data/lib/migration_validators/active_record/connection_adapters/abstract_adapter.rb +0 -38
- data/lib/migration_validators/active_record/connection_adapters/native_adapter.rb +0 -129
- data/lib/migration_validators/active_record/connection_adapters/table.rb +0 -17
- data/lib/migration_validators/active_record/connection_adapters/table_definition.rb +0 -33
- data/lib/migration_validators/active_record/migration.rb +0 -25
- data/lib/migration_validators/active_record/schema.rb +0 -32
- data/lib/migration_validators/active_record/schema_dumper.rb +0 -25
- data/lib/migration_validators/adapters/base.rb +0 -15
- data/lib/migration_validators/adapters/containers.rb +0 -100
- data/lib/migration_validators/adapters/routing.rb +0 -102
- data/lib/migration_validators/adapters/syntax.rb +0 -51
- data/lib/migration_validators/adapters/validator_definitions.rb +0 -132
- data/lib/migration_validators/core/adapter_wrapper.rb +0 -88
- data/lib/migration_validators/core/db_validator.rb +0 -131
- data/lib/migration_validators/core/statement_builder.rb +0 -61
- data/lib/migration_validators/core/validator_constraints_list.rb +0 -32
- data/lib/migration_validators/core/validator_container.rb +0 -110
- data/lib/migration_validators/core/validator_definition.rb +0 -91
- data/lib/migration_validators/core/validator_router.rb +0 -45
- data/lib/options.rb +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 47afae888e695b35b092890df57b4fbf1d9b23c6
|
4
|
+
data.tar.gz: 11a7971962480dd4ad33753fdb581cbed182c44f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d6e3c8184fb7a1be7060614f15f34bb02f29588596fee747eac0415e894a80d2e1546e756a0827cbeafdc6bf0366f74d0eadaa8e05c66dd2621c1bb7b6b9c020
|
7
|
+
data.tar.gz: 510f102a5f0408c51244f3c94d9b2e7a3e7654e959706c175ed902870ea9c8018fbcfb79f605c15a4bac79e39795a47fad85cf14259b1abbf47dc52f707b52b8
|
data/README.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/vprokopchuk256/mv-core/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
|
2
|
+
[![Build Status](https://travis-ci.org/vprokopchuk256/mv-core.svg?branch=master)](https://travis-ci.org/vprokopchuk256/mv-core)
|
3
|
+
[![Coverage Status](https://coveralls.io/repos/vprokopchuk256/mv-core/badge.png?branch=master)](https://coveralls.io/r/vprokopchuk256/mv-core?branch=master)
|
4
|
+
[![Gem Version](https://badge.fury.io/rb/mv-core.svg)](http://badge.fury.io/rb/mv-core)
|
5
|
+
|
1
6
|
# Abbreviations
|
2
7
|
|
3
8
|
MV - Migration Validators Projects. All gems that belongs to that project are prefixed with mv-*
|
@@ -49,14 +54,14 @@ This gem is not intended to be installed directly and referenced from within the
|
|
49
54
|
```ruby
|
50
55
|
change_table do |t|
|
51
56
|
t.change :str_column, :integer, validates: { exclusion: { in: [1,2,3] }}
|
52
|
-
t.
|
57
|
+
t.validates :column_name, inclusion: { in: 1..3 }
|
53
58
|
end
|
54
59
|
```
|
55
60
|
|
56
61
|
Update validator definition:
|
57
62
|
|
58
63
|
```ruby
|
59
|
-
|
64
|
+
validates :table_name, :str_column, :exclusion: { in: [1,2,3] }
|
60
65
|
```
|
61
66
|
|
62
67
|
Remove existing validators:
|
@@ -65,7 +70,7 @@ This gem is not intended to be installed directly and referenced from within the
|
|
65
70
|
change_table do |t|
|
66
71
|
t.change :str_column, :integer, validates: { exclusion: false }
|
67
72
|
end
|
68
|
-
|
73
|
+
validates :table_name, :str_column, exclusion: false
|
69
74
|
```
|
70
75
|
|
71
76
|
There are many ways to define desired database constraint. And those ways might vary for each RDBMS. One could define the way how constaint should be
|
@@ -74,15 +79,15 @@ This gem is not intended to be installed directly and referenced from within the
|
|
74
79
|
as trigger:
|
75
80
|
|
76
81
|
```ruby
|
77
|
-
|
78
|
-
|
82
|
+
validates :table_name, :str_column, validates: { uniqueness: true,
|
83
|
+
as: :trigger }
|
79
84
|
```
|
80
85
|
|
81
86
|
as check constraint:
|
82
87
|
|
83
88
|
```ruby
|
84
|
-
|
85
|
-
|
89
|
+
validates :table_name, :str_column, validates: { uniqueness: true,
|
90
|
+
as: :check }
|
86
91
|
```
|
87
92
|
|
88
93
|
Also there is possibility to define when validations should occur:
|
@@ -90,19 +95,69 @@ This gem is not intended to be installed directly and referenced from within the
|
|
90
95
|
when new record created:
|
91
96
|
|
92
97
|
```ruby
|
93
|
-
|
94
|
-
|
98
|
+
validates :table_name, :str_column, validates: { uniqueness: true,
|
99
|
+
on: :create }
|
95
100
|
```
|
96
101
|
|
97
102
|
or when existing record updated:
|
98
103
|
|
99
104
|
```ruby
|
100
|
-
|
101
|
-
|
105
|
+
validates :table_name, :str_column, validates: { uniqueness: true,
|
106
|
+
on: :update }
|
102
107
|
```
|
103
108
|
|
104
109
|
Supported validators and their properties might vary from one db driver to another. See detailed properties description in correspondent driver section.
|
105
110
|
|
111
|
+
# Maintenance tasks
|
112
|
+
|
113
|
+
Show all constraints on the specified tables:
|
114
|
+
|
115
|
+
```ruby
|
116
|
+
bundle exec rake mv:show_constraints['table_name other_table_name']
|
117
|
+
```
|
118
|
+
|
119
|
+
or show all constraints are created in migrations:
|
120
|
+
|
121
|
+
```ruby
|
122
|
+
bundle exec rake mv:show_constraints
|
123
|
+
```
|
124
|
+
|
125
|
+
Remove all constraints on the specified tables:
|
126
|
+
|
127
|
+
```ruby
|
128
|
+
bundle exec rake mv:delete_constraints['table_name other_table_name']
|
129
|
+
```
|
130
|
+
|
131
|
+
or remove all constraints are created in migrations:
|
132
|
+
|
133
|
+
```ruby
|
134
|
+
bundle exec rake mv:delete_constraints
|
135
|
+
```
|
136
|
+
|
137
|
+
Create / restore / update constraints on the specified tables:
|
138
|
+
|
139
|
+
```ruby
|
140
|
+
bundle exec rake mv:create_constraints['table_name other_table_name']
|
141
|
+
```
|
142
|
+
|
143
|
+
or do it for the all tables:
|
144
|
+
|
145
|
+
```ruby
|
146
|
+
bundle exec rake mv:create_constraints
|
147
|
+
```
|
148
|
+
|
149
|
+
Remove all constraints and drop `migration_validators` table:
|
150
|
+
|
151
|
+
```ruby
|
152
|
+
bundle exec rake mv:uninstall
|
153
|
+
```
|
154
|
+
|
155
|
+
Restore `migrations_validators` table:
|
156
|
+
|
157
|
+
```ruby
|
158
|
+
bundle exec rake mv:install
|
159
|
+
```
|
160
|
+
|
106
161
|
# Drivers
|
107
162
|
|
108
163
|
Currently there are drivers for MySQL, PostgreSQL and SQLite RDBMS
|
@@ -125,5 +180,5 @@ So - see detailed info here:
|
|
125
180
|
|
126
181
|
## Copyright
|
127
182
|
|
128
|
-
Copyright (c)
|
183
|
+
Copyright (c) 2015 Valeriy Prokopchuk. See LICENSE.txt for
|
129
184
|
further details.
|
data/lib/mv-core.rb
CHANGED
@@ -1,105 +1,23 @@
|
|
1
|
-
|
2
|
-
require 'active_support'
|
1
|
+
require 'rails'
|
3
2
|
require 'active_record'
|
4
|
-
# require 'active_record/railtie'
|
5
3
|
|
6
|
-
require
|
7
|
-
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
11
|
-
require
|
12
|
-
require
|
13
|
-
require
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
require File.expand_path(File.dirname(__FILE__)) + '/migration_validators/core/validator_container'
|
23
|
-
require File.expand_path(File.dirname(__FILE__)) + '/migration_validators/core/validator_router'
|
24
|
-
|
25
|
-
require File.expand_path(File.dirname(__FILE__)) + '/migration_validators/adapters/base'
|
26
|
-
|
27
|
-
module MigrationValidators
|
28
|
-
class MigrationValidatorsException < Exception; end
|
29
|
-
class << self
|
30
|
-
def validators
|
31
|
-
@validators ||= {}
|
32
|
-
end
|
33
|
-
|
34
|
-
def dumpers
|
35
|
-
@dumpers ||= {}
|
36
|
-
end
|
37
|
-
|
38
|
-
def register_adapter! name, klass
|
39
|
-
validators[name] = klass
|
40
|
-
reload_validator
|
41
|
-
end
|
42
|
-
|
43
|
-
def register_dumper! name, klass
|
44
|
-
dumpers[name] = klass
|
45
|
-
end
|
46
|
-
|
47
|
-
def current_connection_adapter
|
48
|
-
::ActiveRecord::Base.connection_pool.spec.config[:adapter]
|
49
|
-
end
|
4
|
+
require 'mv/core/active_record/connection_adapters/abstract_adapter_decorator'
|
5
|
+
require 'mv/core/active_record/connection_adapters/table_definition_decorator'
|
6
|
+
require 'mv/core/active_record/connection_adapters/table_decorator'
|
7
|
+
require 'mv/core/active_record/schema_dumper_decorator'
|
8
|
+
require 'mv/core/active_record/schema_decorator'
|
9
|
+
require 'mv/core/active_record/migration_decorator'
|
10
|
+
require 'mv/core/active_record/migration/command_recorder_decorator'
|
11
|
+
require 'mv/core/railtie'
|
12
|
+
|
13
|
+
ActiveSupport.on_load(:active_record) do
|
14
|
+
::ActiveRecord::ConnectionAdapters::TableDefinition.send(:prepend, Mv::Core::ActiveRecord::ConnectionAdapters::TableDefinitionDecorator)
|
15
|
+
::ActiveRecord::ConnectionAdapters::Table.send(:prepend, Mv::Core::ActiveRecord::ConnectionAdapters::TableDecorator)
|
16
|
+
::ActiveRecord::SchemaDumper.send(:prepend, Mv::Core::ActiveRecord::SchemaDumperDecorator)
|
17
|
+
::ActiveRecord::Schema.send(:prepend, Mv::Core::ActiveRecord::SchemaDecorator)
|
18
|
+
::ActiveRecord::Migration.send(:prepend, Mv::Core::ActiveRecord::MigrationDecorator)
|
19
|
+
::ActiveRecord::Migration::CommandRecorder.send(:prepend, Mv::Core::ActiveRecord::Migration::CommandRecorderDecorator)
|
50
20
|
|
51
|
-
|
52
|
-
@dumper || dumpers[current_adapter].new
|
53
|
-
end
|
54
|
-
|
55
|
-
def adapter= adapter
|
56
|
-
@adapter = adapter
|
57
|
-
@validator = nil
|
58
|
-
end
|
59
|
-
|
60
|
-
def adapter
|
61
|
-
@adapter
|
62
|
-
end
|
63
|
-
|
64
|
-
def validator
|
65
|
-
return nil unless @adapter || validators[current_connection_adapter]
|
66
|
-
|
67
|
-
@validator ||= MigrationValidators::Core::AdapterWrapper.new(@adapter || validators[current_connection_adapter].new)
|
68
|
-
end
|
69
|
-
|
70
|
-
def reload_validator
|
71
|
-
@adapter = nil
|
72
|
-
@validator = nil
|
73
|
-
end
|
74
|
-
|
75
|
-
def load!
|
76
|
-
::ActiveRecord::ConnectionAdapters::TableDefinition.class_eval { include MigrationValidators::ActiveRecord::ConnectionAdapters::TableDefinition }
|
77
|
-
::ActiveRecord::ConnectionAdapters::Table.class_eval { include MigrationValidators::ActiveRecord::ConnectionAdapters::Table }
|
78
|
-
::ActiveRecord::ConnectionAdapters::AbstractAdapter.class_eval { include MigrationValidators::ActiveRecord::ConnectionAdapters::AbstractAdapter }
|
79
|
-
::ActiveRecord::Base.instance_eval { include MigrationValidators::ActiveRecord::Base }
|
80
|
-
::ActiveRecord::Migration.instance_eval { include MigrationValidators::ActiveRecord::Migration }
|
81
|
-
::ActiveRecord::Schema.instance_eval { include MigrationValidators::ActiveRecord::Schema }
|
82
|
-
::ActiveRecord::SchemaDumper.instance_eval { include MigrationValidators::ActiveRecord::SchemaDumper }
|
83
|
-
::ActiveRecord::SchemaDumper.ignore_tables << MigrationValidators.migration_validators_table_name.to_s
|
84
|
-
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
21
|
+
ActiveSupport.run_load_hooks(:mv_core)
|
88
22
|
end
|
89
23
|
|
90
|
-
Dir.glob('adapters/**/*.rb').each {|file_name| require file_name}
|
91
|
-
|
92
|
-
# if defined?(Rails::Railtie)
|
93
|
-
# module Foreigner
|
94
|
-
# class Railtie < Rails::Railtie
|
95
|
-
# initializer 'migration-validators.load' do
|
96
|
-
# ActiveSupport.on_load :active_record do
|
97
|
-
# MigrationValidators.load!
|
98
|
-
# end
|
99
|
-
# end
|
100
|
-
# end
|
101
|
-
# end
|
102
|
-
# else
|
103
|
-
MigrationValidators.load!
|
104
|
-
# end
|
105
|
-
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'mv/core/migration/base'
|
2
|
+
|
3
|
+
module Mv
|
4
|
+
module Core
|
5
|
+
module ActiveRecord
|
6
|
+
module ConnectionAdapters
|
7
|
+
module AbstractAdapterDecorator
|
8
|
+
def add_column table_name, column_name, type, opts
|
9
|
+
Mv::Core::Migration::Base.add_column(table_name, column_name, opts.delete(:validates))
|
10
|
+
|
11
|
+
super
|
12
|
+
end
|
13
|
+
|
14
|
+
def remove_column table_name, column_name, type = nil, options = {}
|
15
|
+
Mv::Core::Migration::Base.remove_column table_name, column_name
|
16
|
+
|
17
|
+
super
|
18
|
+
end
|
19
|
+
|
20
|
+
def rename_column table_name, old_column_name, new_column_name
|
21
|
+
Mv::Core::Migration::Base.rename_column table_name, old_column_name, new_column_name
|
22
|
+
|
23
|
+
super
|
24
|
+
end
|
25
|
+
|
26
|
+
def change_column table_name, column_name, type, opts
|
27
|
+
Mv::Core::Migration::Base.change_column(table_name, column_name, opts.delete(:validates))
|
28
|
+
|
29
|
+
super
|
30
|
+
end
|
31
|
+
|
32
|
+
def validates table_name, column_name, opts
|
33
|
+
Mv::Core::Migration::Base.change_column(table_name, column_name, opts)
|
34
|
+
end
|
35
|
+
|
36
|
+
def rename_table old_table_name, new_table_name
|
37
|
+
Mv::Core::Migration::Base.rename_table(old_table_name, new_table_name)
|
38
|
+
|
39
|
+
super
|
40
|
+
end
|
41
|
+
|
42
|
+
def drop_table table_name, opts = {}
|
43
|
+
Mv::Core::Migration::Base.drop_table(table_name)
|
44
|
+
|
45
|
+
super
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'mv/core/migration/base'
|
2
|
+
|
3
|
+
module Mv
|
4
|
+
module Core
|
5
|
+
module ActiveRecord
|
6
|
+
module ConnectionAdapters
|
7
|
+
module TableDefinitionDecorator
|
8
|
+
def column column_name, type, opts = {}
|
9
|
+
Mv::Core::Migration::Base.add_column(name, column_name, opts.delete(:validates))
|
10
|
+
|
11
|
+
super
|
12
|
+
end
|
13
|
+
|
14
|
+
def validates column_name, opts
|
15
|
+
Mv::Core::Migration::Base.change_column(name, column_name, opts)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'mv/core/services/create_migration_validators_table'
|
2
|
+
|
3
|
+
module Mv
|
4
|
+
module Core
|
5
|
+
module ActiveRecord
|
6
|
+
module SchemaDecorator
|
7
|
+
|
8
|
+
def define *args
|
9
|
+
Mv::Core::Services::CreateMigrationValidatorsTable.new.execute
|
10
|
+
super
|
11
|
+
Mv::Core::Migration::Base.execute()
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'mv/core/db/migration_validator'
|
2
|
+
require 'mv/core/services/create_migration_validators_table'
|
3
|
+
require 'mv/core/presenter/validation/base'
|
4
|
+
|
5
|
+
module Mv
|
6
|
+
module Core
|
7
|
+
module ActiveRecord
|
8
|
+
module SchemaDumperDecorator
|
9
|
+
def self.prepended(mod)
|
10
|
+
mod.ignore_tables << 'migration_validators'
|
11
|
+
end
|
12
|
+
|
13
|
+
def dump(stream)
|
14
|
+
Mv::Core::Services::CreateMigrationValidatorsTable.new(@connection).execute
|
15
|
+
super
|
16
|
+
end
|
17
|
+
|
18
|
+
def trailer(stream)
|
19
|
+
Mv::Core::Db::MigrationValidator.all.each do |migration_validator|
|
20
|
+
stream.puts("#{Mv::Core::Presenter::Validation::Base.new(migration_validator.validation)}".prepend(' '))
|
21
|
+
end
|
22
|
+
|
23
|
+
stream.puts('')
|
24
|
+
super
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'mv/core/constraint/description'
|
2
|
+
|
3
|
+
module Mv
|
4
|
+
module Core
|
5
|
+
module Constraint
|
6
|
+
class Base
|
7
|
+
include Comparable
|
8
|
+
|
9
|
+
attr_reader :description, :validations
|
10
|
+
|
11
|
+
delegate :name, :type, :options, to: :description
|
12
|
+
|
13
|
+
def initialize description
|
14
|
+
@description = description
|
15
|
+
@validations = []
|
16
|
+
end
|
17
|
+
|
18
|
+
def <=> other_constraint
|
19
|
+
[self.class.name, description, validations.sort] <=> [other_constraint.class.name, other_constraint.description, other_constraint.validations.sort]
|
20
|
+
end
|
21
|
+
|
22
|
+
def create
|
23
|
+
end
|
24
|
+
|
25
|
+
def delete
|
26
|
+
end
|
27
|
+
|
28
|
+
def update new_constraint
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|