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.
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