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
@@ -1,61 +0,0 @@
1
- module MigrationValidators
2
- module Core
3
- class StatementBuilder
4
- attr_reader :actions
5
-
6
- def initialize value = "", builder = nil
7
- @stmt = value
8
- @actions = builder ? builder.actions.clone : {}
9
- end
10
-
11
- def to_s
12
- @stmt
13
- end
14
-
15
- def operation name, &block
16
- @actions[name.to_s] = block || lambda{|stmt| stmt}
17
- end
18
-
19
- def compile value
20
- StatementBuilder.new value, self
21
- end
22
-
23
- def merge! builder
24
- @actions.merge!(builder.actions) if builder
25
- self
26
- end
27
-
28
- alias_method :old_method_missing, :method_missing
29
- def method_missing method_name, *args
30
- call_action(method_name, *args) || old_method_missing(method_name, *args)
31
- end
32
-
33
- protected
34
-
35
-
36
- attr_accessor :stmt
37
-
38
- def clear!
39
- @stmt = ""
40
- end
41
-
42
- def change *args, &block
43
- @stmt = instance_exec(*args, &block).to_s
44
- end
45
-
46
- private
47
-
48
- def call_action action_name, *args
49
- block = @actions[action_name.to_s]
50
-
51
- if (block)
52
- change(@stmt, *args, &block)
53
- return self
54
- end
55
-
56
- return nil
57
- end
58
-
59
- end
60
- end
61
- end
@@ -1,32 +0,0 @@
1
- module MigrationValidators
2
- module Core
3
- class ValidatorConstraintsList
4
- attr_reader :raw_list
5
-
6
- def initialize *constraints
7
- @raw_list = constraints.collect(&:to_s)
8
- end
9
-
10
- def add constraint
11
- @raw_list << constraint.to_s
12
- @raw_list.uniq!
13
- end
14
-
15
- def remove constraint
16
- @raw_list.delete(constraint.to_s)
17
- end
18
-
19
- def include? constraint
20
- @raw_list.include?(constraint.to_s)
21
- end
22
-
23
- def self.load(raw_list)
24
- new(*(YAML.load(raw_list || "") || []))
25
- end
26
-
27
- def self.dump(list)
28
- YAML.dump(list.raw_list)
29
- end
30
- end
31
- end
32
- end
@@ -1,110 +0,0 @@
1
- module MigrationValidators
2
- module Core
3
- class ValidatorContainer < StatementBuilder
4
- attr_reader :name
5
-
6
- def initialize name, definitions, builder = nil
7
- super "", builder
8
-
9
- @name = name
10
- @definitions = definitions
11
-
12
- group do |validator|
13
- validator.name
14
- end
15
-
16
- constraint_name do |group_key|
17
- group_key.to_s
18
- end
19
-
20
- operation :create do |stmt, group_name|
21
- stmt
22
- end
23
-
24
- operation :drop do
25
- ""
26
- end
27
-
28
- operation :join do |stmt, stmt_1|
29
- [stmt, stmt_1].delete_if(&:blank?).join(" JOIN ")
30
- end
31
- end
32
-
33
- def group &block
34
- @group_proc = block
35
- end
36
-
37
- def constraint_name &block
38
- @constraint_name_proc = block
39
- end
40
-
41
- def add_validators validators
42
- res, constraint_name = process_validators(validators) do |existing_validators|
43
- validators + existing_validators
44
- end
45
-
46
- validators.each {|validator| validator.constraints.add(constraint_name) }
47
-
48
- res
49
- end
50
-
51
- def remove_validators validators
52
- res, constraint_name = process_validators(validators) do |existing_validators|
53
- existing_validators - validators
54
- end
55
-
56
- validators.each {|validator| validator.constraints.remove(constraint_name) }
57
-
58
- res
59
- end
60
-
61
- private
62
-
63
- def process_validators validators
64
- validators.group_by(&@group_proc).inject([]) do |res, (group_name, group)|
65
- constraint_name = @constraint_name_proc.call(group_name)
66
- constraint_validators = MigrationValidators::Core::DbValidator.constraint_validators(constraint_name)
67
-
68
- group = yield(constraint_validators).uniq
69
-
70
- stmt = drop_group(constraint_name, group_name)
71
- res << stmt unless stmt.blank?
72
-
73
- unless group.blank?
74
- stmt = create_group(constraint_name, group_name, group)
75
- res << stmt unless stmt.blank?
76
- end
77
- [res, constraint_name]
78
- end
79
- end
80
-
81
- def isolate
82
- clear!
83
- yield if block_given?
84
- res = self.to_s
85
- clear!
86
- res
87
- end
88
-
89
- def drop_group constraint_name, group_name
90
- isolate { drop(constraint_name, group_name) }
91
- end
92
-
93
- def create_group constraint_name, group_name, group
94
- isolate do
95
- group.each do |validator|
96
- definition = @definitions[validator.validator_name.to_s] || @definitions[validator.validator_name.to_sym]
97
-
98
- raise MigrationValidators::MigrationValidatorsException.new("Validator defintion for #{validator.validator_name} is not defined.") unless definition
99
-
100
- definition.clone(self).process(validator).each do |statement|
101
- join(statement)
102
- end
103
- end
104
-
105
- create(constraint_name, group_name) unless group.blank?
106
- end
107
- end
108
- end
109
- end
110
- end
@@ -1,91 +0,0 @@
1
- module MigrationValidators
2
- module Core
3
- class ValidatorDefinition < StatementBuilder
4
- attr_reader :validator
5
-
6
- def initialize definition = nil, validator = nil, properties = {}, posts = []
7
- super "", definition
8
-
9
- @properties = properties
10
- @posts = posts
11
-
12
- self.validator = validator if validator
13
-
14
- operation :bind_to_error do |stmt, error|
15
- stmt
16
- end
17
- end
18
-
19
- def validator= validator
20
- @validator = validator
21
- @stmt = validator.column_name
22
- end
23
-
24
- def column
25
- clone
26
- end
27
-
28
- def clone builder = nil
29
- res = ValidatorDefinition.new self, validator, @properties.clone, @posts.clone
30
- res.merge!(builder) if builder
31
- res
32
- end
33
-
34
- def property name = "", opts = {}, &block
35
- @properties[name.to_s] ||= [opts, block]
36
- end
37
-
38
- def post opts = {}, &block
39
- @posts << [opts, block]
40
- end
41
-
42
- def process validator, filter = []
43
- self.validator = validator
44
-
45
- return [] if validator.options.nil?
46
-
47
- unless filter.blank?
48
- filter = filter.collect(&:to_s)
49
- options = validator.options.select{|name, value| filter.include?(name.to_s) }
50
- else
51
- options = validator.options
52
- end
53
-
54
- res = options.inject([]) do |res, (property_name, property_value)|
55
- res << self.to_s if handle_property(property_name, property_value)
56
- res
57
- end
58
-
59
- return res unless res.blank?
60
- return (handle_property("", options) && res << self.to_s) || []
61
- end
62
-
63
- private
64
-
65
- def handle_property property_name, property_value
66
- opts, block = @properties[property_name.to_s]
67
-
68
- if (block)
69
- # at_least_one_property_handled = true
70
- change(property_value, &block)
71
- apply_posts
72
- bind_to_error(message(opts))
73
-
74
- return true
75
- end
76
-
77
- false
78
- end
79
-
80
- def apply_posts
81
- @posts.each{|opts, post_block| change(&post_block) if validator.satisfies(opts)}
82
- end
83
-
84
- def message opts
85
- validator.options[opts[:message]] ||
86
- validator.options[:message] ||
87
- validator.error_message
88
- end
89
- end
90
- end
91
- end
@@ -1,45 +0,0 @@
1
- module MigrationValidators
2
- module Core
3
- class ValidatorRouter
4
- def initialize containers
5
- @containers = containers
6
- @routes = {}
7
- end
8
-
9
- def to container_name, conditions = {}
10
- raise "Container name is undefined" if container_name.blank?
11
-
12
- @routes[container_name] ||= conditions[:if]
13
- end
14
-
15
- def add_validators validators
16
- process(validators) do |container, filtered_validators|
17
- container.add_validators(filtered_validators)
18
- end
19
- end
20
-
21
- def remove_validators validators
22
- process(validators) do |container, filtered_validators|
23
- container.remove_validators(filtered_validators)
24
- end
25
- end
26
-
27
- private
28
-
29
- def process validators
30
- @routes.inject([]) do |res, (container_name, conditions)|
31
- filtered_validators = validators.select {|validator| validator.satisfies(conditions)}
32
-
33
- unless filtered_validators.blank?
34
- container = @containers[container_name]
35
- raise MigrationValidators::MigrationValidatorsException.new("Routing error. Contianer #{container_name} is not defined.") if container.nil?
36
-
37
- res.concat(yield(container, filtered_validators))
38
- end
39
-
40
- res
41
- end
42
- end
43
- end
44
- end
45
- end
@@ -1,7 +0,0 @@
1
- module MigrationValidators
2
- @migration_validators_table_name = :migration_validators
3
-
4
- class << self
5
- attr_accessor :migration_validators_table_name
6
- end
7
- end