mv-core 1.0.1 → 2.0.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.
- 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
|
+
[](https://bitdeli.com/free "Bitdeli Badge")
|
2
|
+
[](https://travis-ci.org/vprokopchuk256/mv-core)
|
3
|
+
[](https://coveralls.io/r/vprokopchuk256/mv-core?branch=master)
|
4
|
+
[](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
|