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.
Files changed (90) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +67 -12
  3. data/lib/mv-core.rb +18 -100
  4. data/lib/mv/core/active_record/connection_adapters/abstract_adapter_decorator.rb +51 -0
  5. data/lib/mv/core/active_record/connection_adapters/table_decorator.rb +13 -0
  6. data/lib/mv/core/active_record/connection_adapters/table_definition_decorator.rb +21 -0
  7. data/lib/mv/core/active_record/migration/command_recorder_decorator.rb +13 -0
  8. data/lib/mv/core/active_record/migration_decorator.rb +14 -0
  9. data/lib/mv/core/active_record/schema_decorator.rb +16 -0
  10. data/lib/mv/core/active_record/schema_dumper_decorator.rb +29 -0
  11. data/lib/mv/core/constraint/base.rb +33 -0
  12. data/lib/mv/core/constraint/builder/base.rb +45 -0
  13. data/lib/mv/core/constraint/builder/factory.rb +42 -0
  14. data/lib/mv/core/constraint/builder/index.rb +50 -0
  15. data/lib/mv/core/constraint/builder/trigger.rb +13 -0
  16. data/lib/mv/core/constraint/description.rb +24 -0
  17. data/lib/mv/core/constraint/factory.rb +33 -0
  18. data/lib/mv/core/constraint/index.rb +13 -0
  19. data/lib/mv/core/constraint/trigger.rb +20 -0
  20. data/lib/mv/core/db/helpers/column_validators.rb +57 -0
  21. data/lib/mv/core/db/helpers/table_validators.rb +38 -0
  22. data/lib/mv/core/db/migration_validator.rb +26 -0
  23. data/lib/mv/core/error.rb +25 -0
  24. data/lib/mv/core/migration/base.rb +94 -0
  25. data/lib/mv/core/migration/operations/add_column.rb +27 -0
  26. data/lib/mv/core/migration/operations/change_column.rb +31 -0
  27. data/lib/mv/core/migration/operations/drop_table.rb +21 -0
  28. data/lib/mv/core/migration/operations/factory.rb +20 -0
  29. data/lib/mv/core/migration/operations/list.rb +28 -0
  30. data/lib/mv/core/migration/operations/remove_column.rb +22 -0
  31. data/lib/mv/core/migration/operations/rename_column.rb +26 -0
  32. data/lib/mv/core/migration/operations/rename_table.rb +25 -0
  33. data/lib/mv/core/presenter/constraint/description.rb +26 -0
  34. data/lib/mv/core/presenter/validation/base.rb +73 -0
  35. data/lib/mv/core/railtie.rb +40 -0
  36. data/lib/mv/core/route/base.rb +25 -0
  37. data/lib/mv/core/route/index.rb +17 -0
  38. data/lib/mv/core/route/trigger.rb +22 -0
  39. data/lib/mv/core/router.rb +33 -0
  40. data/lib/mv/core/services/compare_constraint_arrays.rb +50 -0
  41. data/lib/mv/core/services/compare_constraints.rb +31 -0
  42. data/lib/mv/core/services/create_constraints.rb +30 -0
  43. data/lib/mv/core/services/create_migration_validators_table.rb +31 -0
  44. data/lib/mv/core/services/delete_constraints.rb +30 -0
  45. data/lib/mv/core/services/load_constraints.rb +45 -0
  46. data/lib/mv/core/services/say_constraints_diff.rb +66 -0
  47. data/lib/mv/core/services/show_constraints.rb +41 -0
  48. data/lib/mv/core/services/synchronize_constraints.rb +54 -0
  49. data/lib/mv/core/services/uninstall.rb +25 -0
  50. data/lib/mv/core/validation/absence.rb +35 -0
  51. data/lib/mv/core/validation/base.rb +98 -0
  52. data/lib/mv/core/validation/builder/absence.rb +19 -0
  53. data/lib/mv/core/validation/builder/base.rb +58 -0
  54. data/lib/mv/core/validation/builder/exclusion.rb +42 -0
  55. data/lib/mv/core/validation/builder/factory.rb +43 -0
  56. data/lib/mv/core/validation/builder/inclusion.rb +42 -0
  57. data/lib/mv/core/validation/builder/length.rb +68 -0
  58. data/lib/mv/core/validation/builder/presence.rb +19 -0
  59. data/lib/mv/core/validation/builder/uniqueness.rb +19 -0
  60. data/lib/mv/core/validation/exclusion.rb +27 -0
  61. data/lib/mv/core/validation/factory.rb +56 -0
  62. data/lib/mv/core/validation/inclusion.rb +27 -0
  63. data/lib/mv/core/validation/length.rb +59 -0
  64. data/lib/mv/core/validation/presence.rb +25 -0
  65. data/lib/mv/core/validation/uniqueness.rb +45 -0
  66. data/lib/mv/core/validators/array_validator.rb +5 -0
  67. data/lib/mv/core/validators/integers_array_validator.rb +12 -0
  68. data/lib/mv/core/validators/valid_validator.rb +9 -0
  69. metadata +158 -30
  70. data/lib/migration_validators/active_record/base.rb +0 -29
  71. data/lib/migration_validators/active_record/connection_adapters/abstract_adapter.rb +0 -38
  72. data/lib/migration_validators/active_record/connection_adapters/native_adapter.rb +0 -129
  73. data/lib/migration_validators/active_record/connection_adapters/table.rb +0 -17
  74. data/lib/migration_validators/active_record/connection_adapters/table_definition.rb +0 -33
  75. data/lib/migration_validators/active_record/migration.rb +0 -25
  76. data/lib/migration_validators/active_record/schema.rb +0 -32
  77. data/lib/migration_validators/active_record/schema_dumper.rb +0 -25
  78. data/lib/migration_validators/adapters/base.rb +0 -15
  79. data/lib/migration_validators/adapters/containers.rb +0 -100
  80. data/lib/migration_validators/adapters/routing.rb +0 -102
  81. data/lib/migration_validators/adapters/syntax.rb +0 -51
  82. data/lib/migration_validators/adapters/validator_definitions.rb +0 -132
  83. data/lib/migration_validators/core/adapter_wrapper.rb +0 -88
  84. data/lib/migration_validators/core/db_validator.rb +0 -131
  85. data/lib/migration_validators/core/statement_builder.rb +0 -61
  86. data/lib/migration_validators/core/validator_constraints_list.rb +0 -32
  87. data/lib/migration_validators/core/validator_container.rb +0 -110
  88. data/lib/migration_validators/core/validator_definition.rb +0 -91
  89. data/lib/migration_validators/core/validator_router.rb +0 -45
  90. data/lib/options.rb +0 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 992c2fce4bb3a1fe416987d75c442a9e17d9fde4
4
- data.tar.gz: 6268526d0994ad12e25a26f4ae2ef925c19cfcea
3
+ metadata.gz: 47afae888e695b35b092890df57b4fbf1d9b23c6
4
+ data.tar.gz: 11a7971962480dd4ad33753fdb581cbed182c44f
5
5
  SHA512:
6
- metadata.gz: 2d806091feb1046cc39ceb54ca409ae11d121226e611403c9eee94d71411105fd36c46ff3ab074b9e3136655b146f6bcf63d1cccc1f37bf845db1f7f7f2f8f5e
7
- data.tar.gz: d8b81ccfeb2f538a5c64335d93ed8530922a6e928a1c1b3f6ecb87b18598c76ae4abb8dcf411a2fe99aebf6a0be9152186d41847b8f6aa350ae2908b6adfe583
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.change_validates :column_name, inclusion: { in: 1..3 }
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
- validate_column :table_name, :str_column, :exclusion: { in: [1,2,3] }
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
- validate_column table_name, :str_column, exclusion: false
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
- validate_column :table_name, :str_column, validates: { uniqueness: true,
78
- as: :trigger }
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
- validate_column :table_name, :str_column, validates: { uniqueness: true,
85
- as: :check }
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
- validate_column :table_name, :str_column, validates: { uniqueness: true,
94
- on: :create }
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
- validate_column :table_name, :str_column, validates: { uniqueness: true,
101
- on: :update }
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) 2011 Valeriy Prokopchuk. See LICENSE.txt for
183
+ Copyright (c) 2015 Valeriy Prokopchuk. See LICENSE.txt for
129
184
  further details.
@@ -1,105 +1,23 @@
1
- # require 'active_support'
2
- require 'active_support'
1
+ require 'rails'
3
2
  require 'active_record'
4
- # require 'active_record/railtie'
5
3
 
6
- require File.expand_path(File.dirname(__FILE__)) + '/options'
7
-
8
- require File.expand_path(File.dirname(__FILE__)) + '/migration_validators/active_record/connection_adapters/table'
9
- require File.expand_path(File.dirname(__FILE__)) + '/migration_validators/active_record/connection_adapters/abstract_adapter'
10
- require File.expand_path(File.dirname(__FILE__)) + '/migration_validators/active_record/connection_adapters/native_adapter'
11
- require File.expand_path(File.dirname(__FILE__)) + '/migration_validators/active_record/connection_adapters/table_definition'
12
- require File.expand_path(File.dirname(__FILE__)) + '/migration_validators/active_record/base'
13
- require File.expand_path(File.dirname(__FILE__)) + '/migration_validators/active_record/migration'
14
- require File.expand_path(File.dirname(__FILE__)) + '/migration_validators/active_record/schema'
15
- require File.expand_path(File.dirname(__FILE__)) + '/migration_validators/active_record/schema_dumper'
16
-
17
- require File.expand_path(File.dirname(__FILE__)) + '/migration_validators/core/validator_constraints_list'
18
- require File.expand_path(File.dirname(__FILE__)) + '/migration_validators/core/db_validator'
19
- require File.expand_path(File.dirname(__FILE__)) + '/migration_validators/core/adapter_wrapper'
20
- require File.expand_path(File.dirname(__FILE__)) + '/migration_validators/core/statement_builder'
21
- require File.expand_path(File.dirname(__FILE__)) + '/migration_validators/core/validator_definition'
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
- def dumper
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,13 @@
1
+ module Mv
2
+ module Core
3
+ module ActiveRecord
4
+ module ConnectionAdapters
5
+ module TableDecorator
6
+ def validates column_name, opts
7
+ @base.validates(name, column_name, opts)
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
13
+ 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,13 @@
1
+ module Mv
2
+ module Core
3
+ module ActiveRecord
4
+ module Migration
5
+ module CommandRecorderDecorator
6
+ def validates(*args, &block)
7
+ record(:validates, args, &block)
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ require 'mv/core/migration/base'
2
+
3
+ module Mv
4
+ module Core
5
+ module ActiveRecord
6
+ module MigrationDecorator
7
+ def exec_migration(conn, direction)
8
+ super
9
+ Mv::Core::Migration::Base.execute()
10
+ end
11
+ end
12
+ end
13
+ end
14
+ 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