colonization 0.1.0 → 0.2.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/colonization.gemspec +2 -0
- data/lib/colonization/absence_validator.rb +2 -0
- data/lib/colonization/acceptance_validator.rb +2 -0
- data/lib/colonization/colonizer.rb +123 -0
- data/lib/colonization/factory.rb +15 -0
- data/lib/colonization/investigator.rb +36 -0
- data/lib/colonization/model_entity.rb +11 -0
- data/lib/colonization/model_field.rb +45 -0
- data/lib/colonization/model_instaces_repository.rb +11 -0
- data/lib/colonization/model_relation.rb +60 -0
- data/lib/colonization/reg_exp_values_generator.rb +31 -0
- data/lib/colonization/ship.rb +45 -0
- data/lib/colonization/validators/active_model/confirmation_validator.rb +26 -0
- data/lib/colonization/validators/active_model/exclusion_validator.rb +26 -0
- data/lib/colonization/validators/active_model/format_validator.rb +26 -0
- data/lib/colonization/validators/active_model/inclusion_validator.rb +26 -0
- data/lib/colonization/validators/active_model/length_validator.rb +26 -0
- data/lib/colonization/validators/active_model/numericality_validator.rb +26 -0
- data/lib/colonization/validators/active_model/presence_validator.rb +26 -0
- data/lib/colonization/validators/active_model/with_validator.rb +26 -0
- data/lib/colonization/validators/active_record/associated_validator.rb +26 -0
- data/lib/colonization/validators/active_record/presence_validator.rb +26 -0
- data/lib/colonization/validators/active_record/uniqueness_validator.rb +26 -0
- data/lib/colonization/validators/carrier_wave/download_validator.rb +26 -0
- data/lib/colonization/validators/carrier_wave/integrity_validator.rb +26 -0
- data/lib/colonization/validators/carrier_wave/processing_validator.rb +26 -0
- data/lib/colonization/validators/factory.rb +63 -0
- data/lib/colonization/validators/null_object.rb +16 -0
- data/lib/colonization/values_generator.rb +65 -0
- data/lib/colonization/version.rb +1 -1
- data/lib/colonization.rb +1 -0
- metadata +59 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f8749d58f3a8916ee1cd5625efed1a7111e564e1
|
4
|
+
data.tar.gz: a8236e79fcef58917c403b15f62606d03fb28203
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9fc887ec749342c13c791d5f0d2453fe8bf2bf1a62a2b20bb1c5456d46456e38ce42418dc0a5491bfe2a51d9b2b46e365ef3865321af7e08417ecb1085162788
|
7
|
+
data.tar.gz: 1bc3bf77e92f3fb2c721ea4641869de267818ce9750b6c86816c8f7e1ce46c7eaf7bf1f76c10603de9b9393b6281d1585149f85ff383719494b1065119d7bca1
|
data/colonization.gemspec
CHANGED
@@ -0,0 +1,123 @@
|
|
1
|
+
require 'colonization/model_field'
|
2
|
+
require 'colonization/model_relation'
|
3
|
+
require 'pry'
|
4
|
+
|
5
|
+
class Colonization::Colonizer
|
6
|
+
|
7
|
+
DEFAULT_MODEL_INSTANCES_NUMBER = 20
|
8
|
+
|
9
|
+
def initialize(model)
|
10
|
+
@model = model
|
11
|
+
end
|
12
|
+
|
13
|
+
def model
|
14
|
+
@model
|
15
|
+
end
|
16
|
+
|
17
|
+
def print_action
|
18
|
+
puts "colonize #{model}"
|
19
|
+
end
|
20
|
+
|
21
|
+
def colonize(times = nil)
|
22
|
+
res = []
|
23
|
+
|
24
|
+
(times || model_instances_number).times do
|
25
|
+
res << model.create(params_with_values)
|
26
|
+
end
|
27
|
+
|
28
|
+
res
|
29
|
+
end
|
30
|
+
|
31
|
+
def clear_table
|
32
|
+
model.destroy_all if clear_table?
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def params_with_values
|
38
|
+
res = {}
|
39
|
+
|
40
|
+
model_fields_objects.each do |field_object|
|
41
|
+
res[field_object.name] = field_object.value
|
42
|
+
end
|
43
|
+
|
44
|
+
model_relation_objects.each do |field_object|
|
45
|
+
res[field_object.name] = field_object.value
|
46
|
+
end
|
47
|
+
|
48
|
+
res
|
49
|
+
end
|
50
|
+
|
51
|
+
def model_fields
|
52
|
+
model.column_names - unnecessary_fields
|
53
|
+
end
|
54
|
+
|
55
|
+
def model_relations_strings
|
56
|
+
all_relations.map do |relation|
|
57
|
+
"#{relation.name}_id"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def all_relations
|
62
|
+
model.reflect_on_all_associations
|
63
|
+
end
|
64
|
+
|
65
|
+
def belongs_to_relations
|
66
|
+
model.reflect_on_all_associations(:belongs_to) || []
|
67
|
+
end
|
68
|
+
|
69
|
+
def has_many_relations
|
70
|
+
model.reflect_on_all_associations(:has_many) || []
|
71
|
+
end
|
72
|
+
|
73
|
+
def unnecessary_fields
|
74
|
+
["created_at", "updated_at", "id"] + model_relations_strings + custom_excepted_fields
|
75
|
+
end
|
76
|
+
|
77
|
+
def custom_excepted_fields
|
78
|
+
[] #TODO
|
79
|
+
end
|
80
|
+
|
81
|
+
def model_fields_objects
|
82
|
+
res = []
|
83
|
+
model_fields.each do |field|
|
84
|
+
res << Colonization::ModelField.new(model, field, values_generator, strategy(field))
|
85
|
+
end
|
86
|
+
res
|
87
|
+
end
|
88
|
+
|
89
|
+
def model_relation_objects
|
90
|
+
res = []
|
91
|
+
needed_relations.each do |reflection|
|
92
|
+
res << Colonization::ModelRelation.new(reflection, strategy(reflection))
|
93
|
+
end
|
94
|
+
res
|
95
|
+
end
|
96
|
+
|
97
|
+
def needed_relations
|
98
|
+
strategy[:type] == :fixed ? belongs_to_relations : has_many_relations
|
99
|
+
end
|
100
|
+
|
101
|
+
def model_instances_number
|
102
|
+
#TODO config[model][:model_instances_number] || DEFAULT_MODEL_INSTANCES_NUMBER
|
103
|
+
DEFAULT_MODEL_INSTANCES_NUMBER - model.count
|
104
|
+
end
|
105
|
+
|
106
|
+
def values_generator
|
107
|
+
nil #TODO config[model][values_generator] || cofig[values_generator]
|
108
|
+
end
|
109
|
+
|
110
|
+
def strategy(field = nil)
|
111
|
+
#TODO config[model][field]
|
112
|
+
{ type: :fixed }
|
113
|
+
end
|
114
|
+
|
115
|
+
def clear_table?
|
116
|
+
true #TODO config[model][:clear_table] || config[:clear_table] || true
|
117
|
+
end
|
118
|
+
|
119
|
+
def config
|
120
|
+
raise #TODO
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
class Colonization::Investigator
|
2
|
+
|
3
|
+
def investigate
|
4
|
+
models
|
5
|
+
end
|
6
|
+
|
7
|
+
private
|
8
|
+
|
9
|
+
def models
|
10
|
+
models_list = []
|
11
|
+
|
12
|
+
Rails.application.eager_load!
|
13
|
+
ActiveRecord::Base.descendants.each do |model|
|
14
|
+
models_list << model if rb_files_from_models_dir.include?(model) && !model.abstract_class
|
15
|
+
end
|
16
|
+
|
17
|
+
models_list
|
18
|
+
end
|
19
|
+
|
20
|
+
def rb_files_from_models_dir
|
21
|
+
models = []
|
22
|
+
|
23
|
+
Dir.foreach("#{Rails.root}/app/models") do |model_path|
|
24
|
+
if model_path.ends_with?('.rb')
|
25
|
+
begin
|
26
|
+
model_str = model_path.split('/').last.split('.').first
|
27
|
+
models << model_str.camelize.constantize
|
28
|
+
rescue
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
models
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'colonization/model_entity'
|
2
|
+
require 'colonization/values_generator'
|
3
|
+
|
4
|
+
class Colonization::ModelField < Colonization::ModelEntity
|
5
|
+
|
6
|
+
attr_reader :model, :field, :strategy
|
7
|
+
|
8
|
+
def initialize(model, field, values_generator, strategy)
|
9
|
+
@model = model
|
10
|
+
@field = field
|
11
|
+
@values_generator = values_generator
|
12
|
+
@strategy = strategy
|
13
|
+
end
|
14
|
+
|
15
|
+
def name
|
16
|
+
field
|
17
|
+
end
|
18
|
+
|
19
|
+
def value
|
20
|
+
values_generator.call
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def values_generator
|
26
|
+
if @values_generator.class == Proc
|
27
|
+
@values_generator
|
28
|
+
else
|
29
|
+
(@values_generator || default_values_generator).new(field_type, validators, strategy)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def default_values_generator
|
34
|
+
Colonization::ValuesGenerator
|
35
|
+
end
|
36
|
+
|
37
|
+
def validators
|
38
|
+
model.validators_on(field)
|
39
|
+
end
|
40
|
+
|
41
|
+
def field_type
|
42
|
+
model.columns_hash[field].type
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'colonization/model_entity'
|
2
|
+
require 'colonization/model_instaces_repository'
|
3
|
+
require 'colonization/colonizer'
|
4
|
+
|
5
|
+
class Colonization::ModelRelation < Colonization::ModelEntity
|
6
|
+
|
7
|
+
DEAFULT_SEED_INDEX = 3
|
8
|
+
|
9
|
+
def initialize(reflection, strategy)
|
10
|
+
@reflection = reflection
|
11
|
+
@strategy = strategy
|
12
|
+
end
|
13
|
+
|
14
|
+
def reflection
|
15
|
+
@reflection
|
16
|
+
end
|
17
|
+
|
18
|
+
def strategy
|
19
|
+
@strategy || {}
|
20
|
+
end
|
21
|
+
|
22
|
+
def name
|
23
|
+
reflection.name
|
24
|
+
end
|
25
|
+
|
26
|
+
def value
|
27
|
+
if strategy[:type] == :fixed
|
28
|
+
generate_relation_value_with_fixed_strategy
|
29
|
+
else
|
30
|
+
generate_relation_value_with_default_strategy
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def generate_relation_value_with_fixed_strategy
|
37
|
+
instance = Colonization::ModelInstancesRepository.new.get_instance(model: reflection_class)
|
38
|
+
unless instance
|
39
|
+
instance = Colonization::Colonizer.new(reflection_class).colonize
|
40
|
+
end
|
41
|
+
instance
|
42
|
+
end
|
43
|
+
|
44
|
+
def generate_relation_value_with_default_strategy
|
45
|
+
seed_index = strategy[:seed_index] || DEAFULT_SEED_INDEX
|
46
|
+
|
47
|
+
found_instances = Colonization::ModelInstancesRepository.new.get_instance_without_relation(model: reflection_class, relation: reflection_owner)
|
48
|
+
result_instances = Colonization::Colonizer.new(reflection_class).colonize(seed_index - (found_instances ? found_instances.count : 0))
|
49
|
+
result_instances
|
50
|
+
end
|
51
|
+
|
52
|
+
def reflection_class
|
53
|
+
reflection.class_name.constantize
|
54
|
+
end
|
55
|
+
|
56
|
+
def reflection_owner
|
57
|
+
reflection.active_record
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
class Colonization::RegExpValuesGenerator
|
2
|
+
|
3
|
+
def generate(config)
|
4
|
+
@config = config
|
5
|
+
@current_reg_exp = default_reg_exp
|
6
|
+
numericality_mutate
|
7
|
+
//
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def numericality_mutate
|
13
|
+
case config[:numericality]
|
14
|
+
when :only_integer
|
15
|
+
str = @current_reg_exp.source
|
16
|
+
index = str.index('^')
|
17
|
+
str.insert(index,'[1-9]{1,1}\d*')
|
18
|
+
@current_reg_exp = RegExp.new(str)
|
19
|
+
when :all_numbers
|
20
|
+
str = @current_reg_exp.source
|
21
|
+
index = str.index('^')
|
22
|
+
str.insert(index,'[1-9]{1,1}\d*(\.\d+)')
|
23
|
+
@current_reg_exp = RegExp.new(str)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def default_reg_exp
|
28
|
+
/^$/
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'colonization/investigator'
|
2
|
+
require 'colonization/factory'
|
3
|
+
|
4
|
+
class Colonization::Ship
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
models = investigate_database
|
8
|
+
@colonizers = get_colonizers(models)
|
9
|
+
end
|
10
|
+
|
11
|
+
def colonize
|
12
|
+
clear_db
|
13
|
+
populate
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def clear_db
|
19
|
+
@colonizers.each do |item|
|
20
|
+
item.clear_table
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def populate
|
25
|
+
@colonizers.each do |item|
|
26
|
+
item.print_action
|
27
|
+
item.colonize
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def investigate_database
|
32
|
+
investigator = Colonization::Investigator.new
|
33
|
+
investigator.investigate
|
34
|
+
end
|
35
|
+
|
36
|
+
def get_colonizers(colonize_list)
|
37
|
+
colonizers = []
|
38
|
+
colonizer_factory = Colonization::Factory.new
|
39
|
+
colonize_list.each do |item|
|
40
|
+
colonizers << colonizer_factory.produce(item)
|
41
|
+
end
|
42
|
+
colonizers
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Colonization::Validators::ActiveModel
|
2
|
+
class ConfirmationValidator
|
3
|
+
|
4
|
+
attr_reader :validator
|
5
|
+
|
6
|
+
def initialize(validator, config)
|
7
|
+
@validator = validator
|
8
|
+
@config = config
|
9
|
+
end
|
10
|
+
|
11
|
+
def add_restriction
|
12
|
+
config[type] = true
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def type
|
18
|
+
:confirmation
|
19
|
+
end
|
20
|
+
|
21
|
+
def config
|
22
|
+
@config
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Colonization::Validators::ActiveModel
|
2
|
+
class ExclusionValidator
|
3
|
+
|
4
|
+
attr_reader :validator
|
5
|
+
|
6
|
+
def initialize(validator, config)
|
7
|
+
@validator = validator
|
8
|
+
@config = config
|
9
|
+
end
|
10
|
+
|
11
|
+
def add_restriction
|
12
|
+
config[type] = validator.options[:in] || validator.options[:within]
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def type
|
18
|
+
:exclusion
|
19
|
+
end
|
20
|
+
|
21
|
+
def config
|
22
|
+
@config
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Colonization::Validators::ActiveModel
|
2
|
+
class FormatValidator
|
3
|
+
|
4
|
+
attr_reader :validator
|
5
|
+
|
6
|
+
def initialize(validator, config)
|
7
|
+
@validator = validator
|
8
|
+
@config = config
|
9
|
+
end
|
10
|
+
|
11
|
+
def add_restriction
|
12
|
+
config[type] = validator.options[:with]
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def type
|
18
|
+
:format
|
19
|
+
end
|
20
|
+
|
21
|
+
def config
|
22
|
+
@config
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Colonization::Validators::ActiveModel
|
2
|
+
class InclusionValidator
|
3
|
+
|
4
|
+
attr_reader :validator
|
5
|
+
|
6
|
+
def initialize(validator, config)
|
7
|
+
@validator = validator
|
8
|
+
@config = config
|
9
|
+
end
|
10
|
+
|
11
|
+
def add_restriction
|
12
|
+
config[type] = validator.options[:in] || validator.options[:within]
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def config
|
18
|
+
@config
|
19
|
+
end
|
20
|
+
|
21
|
+
def type
|
22
|
+
:inclusion
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Colonization::Validators::ActiveModel
|
2
|
+
class LengthValidator
|
3
|
+
|
4
|
+
attr_reader :validator
|
5
|
+
|
6
|
+
def initialize(validator, config)
|
7
|
+
@validator = validator
|
8
|
+
@config = config
|
9
|
+
end
|
10
|
+
|
11
|
+
def add_restriction
|
12
|
+
config[type] = validator.options.slice(:minimum, :maximum, :in, :within, :is)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def type
|
18
|
+
:length
|
19
|
+
end
|
20
|
+
|
21
|
+
def config
|
22
|
+
@config
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Colonization::Validators::ActiveModel
|
2
|
+
class NumericalityValidator
|
3
|
+
|
4
|
+
attr_reader :validator
|
5
|
+
|
6
|
+
def initialize(validator, config)
|
7
|
+
@validator = validator
|
8
|
+
@config = config
|
9
|
+
end
|
10
|
+
|
11
|
+
def add_restriction
|
12
|
+
config[type] = validator.options[:only_integer] ? :only_integer : :all_numbers
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def type
|
18
|
+
:numericality
|
19
|
+
end
|
20
|
+
|
21
|
+
def config
|
22
|
+
@config
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Colonization::Validators::ActiveModel
|
2
|
+
class PresenceValidator
|
3
|
+
|
4
|
+
attr_reader :validator
|
5
|
+
|
6
|
+
def initialize(validator, config)
|
7
|
+
@validator = validator
|
8
|
+
@config = config
|
9
|
+
end
|
10
|
+
|
11
|
+
def add_restriction
|
12
|
+
config[type] = true
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def type
|
18
|
+
:presence
|
19
|
+
end
|
20
|
+
|
21
|
+
def config
|
22
|
+
@config
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Colonization::Validators::ActiveModel
|
2
|
+
class WithValidator
|
3
|
+
|
4
|
+
attr_reader :validator
|
5
|
+
|
6
|
+
def initialize(validator, config)
|
7
|
+
@validator = validator
|
8
|
+
@config = config
|
9
|
+
end
|
10
|
+
|
11
|
+
def add_restriction
|
12
|
+
config[type] = true
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def type
|
18
|
+
:with
|
19
|
+
end
|
20
|
+
|
21
|
+
def config
|
22
|
+
@config
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Colonization::Validators::ActiveRecord
|
2
|
+
class AssociatedValidator
|
3
|
+
|
4
|
+
attr_reader :validator
|
5
|
+
|
6
|
+
def initialize(validator, config)
|
7
|
+
@validator = validator
|
8
|
+
@config = config
|
9
|
+
end
|
10
|
+
|
11
|
+
def add_restriction
|
12
|
+
config[type] = true
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def type
|
18
|
+
:associated
|
19
|
+
end
|
20
|
+
|
21
|
+
def config
|
22
|
+
@config
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Colonization::Validators::ActiveRecord
|
2
|
+
class PresenceValidator
|
3
|
+
|
4
|
+
attr_reader :validator
|
5
|
+
|
6
|
+
def initialize(validator, config)
|
7
|
+
@validator = validator
|
8
|
+
@config = config
|
9
|
+
end
|
10
|
+
|
11
|
+
def add_restriction
|
12
|
+
config[type] = true
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def type
|
18
|
+
:presence
|
19
|
+
end
|
20
|
+
|
21
|
+
def config
|
22
|
+
@config
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Colonization::Validators::ActiveRecord
|
2
|
+
class UniquenessValidator
|
3
|
+
|
4
|
+
attr_reader :validator
|
5
|
+
|
6
|
+
def initialize(validator, config)
|
7
|
+
@validator = validator
|
8
|
+
@config = config
|
9
|
+
end
|
10
|
+
|
11
|
+
def add_restriction
|
12
|
+
config[type] = true
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def type
|
18
|
+
:uniqueness
|
19
|
+
end
|
20
|
+
|
21
|
+
def config
|
22
|
+
@config
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Colonization::Validators::CarrierWave
|
2
|
+
class DownloadValidator
|
3
|
+
|
4
|
+
attr_reader :validator
|
5
|
+
|
6
|
+
def initialize(validator, config)
|
7
|
+
@validator = validator
|
8
|
+
@config = config
|
9
|
+
end
|
10
|
+
|
11
|
+
def add_restriction
|
12
|
+
config[type] = true #TODO
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def type
|
18
|
+
:download
|
19
|
+
end
|
20
|
+
|
21
|
+
def config
|
22
|
+
@config
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Colonization::Validators::CarrierWave
|
2
|
+
class IntegrityValidator
|
3
|
+
|
4
|
+
attr_reader :validator
|
5
|
+
|
6
|
+
def initialize(validator, config)
|
7
|
+
@validator = validator
|
8
|
+
@config = config
|
9
|
+
end
|
10
|
+
|
11
|
+
def add_restriction
|
12
|
+
config[type] = true #TODO
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def type
|
18
|
+
:integrity
|
19
|
+
end
|
20
|
+
|
21
|
+
def config
|
22
|
+
@config
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Colonization::Validators::CarrierWave
|
2
|
+
class ProcessingValidator
|
3
|
+
|
4
|
+
attr_reader :validator
|
5
|
+
|
6
|
+
def initialize(validator, config)
|
7
|
+
@validator = validator
|
8
|
+
@config = config
|
9
|
+
end
|
10
|
+
|
11
|
+
def add_restriction
|
12
|
+
config[type] = true #TODO
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def type
|
18
|
+
:processing
|
19
|
+
end
|
20
|
+
|
21
|
+
def config
|
22
|
+
@config
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module Colonization::Validators
|
2
|
+
|
3
|
+
require 'colonization/validators/active_model/confirmation_validator'
|
4
|
+
require 'colonization/validators/active_model/exclusion_validator'
|
5
|
+
require 'colonization/validators/active_model/format_validator'
|
6
|
+
require 'colonization/validators/active_model/inclusion_validator'
|
7
|
+
require 'colonization/validators/active_model/length_validator'
|
8
|
+
require 'colonization/validators/active_model/numericality_validator'
|
9
|
+
require 'colonization/validators/active_model/presence_validator'
|
10
|
+
require 'colonization/validators/active_model/with_validator'
|
11
|
+
require 'colonization/validators/active_record/associated_validator'
|
12
|
+
require 'colonization/validators/active_record/presence_validator'
|
13
|
+
require 'colonization/validators/active_record/uniqueness_validator'
|
14
|
+
require 'colonization/validators/carrier_wave/integrity_validator'
|
15
|
+
require 'colonization/validators/carrier_wave/processing_validator'
|
16
|
+
require 'colonization/validators/carrier_wave/download_validator'
|
17
|
+
require 'colonization/validators/null_object'
|
18
|
+
|
19
|
+
class Factory
|
20
|
+
def produce(validator, validations_config)
|
21
|
+
case validator.class.to_s
|
22
|
+
when ::ActiveModel::Validations::PresenceValidator.to_s
|
23
|
+
Colonization::Validators::ActiveModel::PresenceValidator.new(validator, validations_config)
|
24
|
+
when ::ActiveModel::Validations::InclusionValidator.to_s
|
25
|
+
Colonization::Validators::ActiveModel::InclusionValidator.new(validator, validations_config)
|
26
|
+
when ::ActiveModel::Validations::WithValidator.to_s
|
27
|
+
Colonization::Validators::ActiveModel::WithValidator.new(validator, validations_config)
|
28
|
+
when ::ActiveModel::Validations::NumericalityValidator.to_s
|
29
|
+
Colonization::Validators::ActiveModel::NumericalityValidator.new(validator, validations_config)
|
30
|
+
when ::ActiveModel::Validations::LengthValidator.to_s
|
31
|
+
Colonization::Validators::ActiveModel::LengthValidator.new(validator, validations_config)
|
32
|
+
when ::ActiveModel::Validations::FormatValidator.to_s
|
33
|
+
Colonization::Validators::ActiveModel::FormatValidator.new(validator, validations_config)
|
34
|
+
when ::ActiveModel::Validations::ExclusionValidator.to_s
|
35
|
+
Colonization::Validators::ActiveModel::ExclusionValidator.new(validator, validations_config)
|
36
|
+
when ::ActiveModel::Validations::ConfirmationValidator.to_s
|
37
|
+
Colonization::Validators::ActiveModel::ConfirmationValidator.new(validator, validations_config)
|
38
|
+
when ::ActiveModel::Validations::AcceptanceValidator.to_s
|
39
|
+
Colonization::Validators::ActiveModel::AcceptanceValidator.new(validator, validations_config)
|
40
|
+
when ::ActiveModel::Validations::AbsenceValidator.to_s
|
41
|
+
Colonization::Validators::ActiveModel::AbsenceValidator.new(validator, validations_config)
|
42
|
+
when ::ActiveRecord::Validations::UniquenessValidator.to_s
|
43
|
+
Colonization::Validators::ActiveRecord::UniquenessValidator.new(validator, validations_config)
|
44
|
+
when ::ActiveRecord::Validations::AssociatedValidator.to_s
|
45
|
+
Colonization::Validators::ActiveRecord::AssociatedValidator.new(validator, validations_config)
|
46
|
+
when ::ActiveRecord::Validations::PresenceValidator.to_s
|
47
|
+
Colonization::Validators::ActiveRecord::PresenceValidator.new(validator, validations_config)
|
48
|
+
when ::CarrierWave::Validations::ActiveModel::IntegrityValidator.to_s
|
49
|
+
Colonization::Validators::CarrierWave::IntegrityValidator.new(validator, validations_config)
|
50
|
+
when ::CarrierWave::Validations::ActiveModel::ProcessingValidator.to_s
|
51
|
+
Colonization::Validators::CarrierWave::ProcessingValidator.new(validator, validations_config)
|
52
|
+
when ::CarrierWave::Validations::ActiveModel::DownloadValidator.to_s
|
53
|
+
Colonization::Validators::CarrierWave::DownloadValidator.new(validator, validations_config)
|
54
|
+
else
|
55
|
+
Colonization::Validators::NullObject.new(validator, validations_config)
|
56
|
+
#when ActiveRecord::Validations::AbsenceValidator #TODO ????
|
57
|
+
#when ActiveRecord::Validations::LengthValidator #TODO ????
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'colonization/validators/factory'
|
2
|
+
require 'colonization/reg_exp_values_generator'
|
3
|
+
require 'faker'
|
4
|
+
|
5
|
+
class Colonization::ValuesGenerator
|
6
|
+
|
7
|
+
def initialize(type, validators, strategy)
|
8
|
+
init_config(type)
|
9
|
+
set_validations(custom_validators(validators))
|
10
|
+
end
|
11
|
+
|
12
|
+
def call
|
13
|
+
#@config[:validations].empty? ? generate_faker_value : generate_custom_value
|
14
|
+
generate_faker_value
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def init_config(type)
|
20
|
+
@config = { validations: {}, type: type }
|
21
|
+
end
|
22
|
+
|
23
|
+
def custom_validators(validators)
|
24
|
+
res = []
|
25
|
+
factory = Colonization::Validators::Factory.new
|
26
|
+
validators.each do |validator|
|
27
|
+
res << factory.produce(validator, @config[:validations])
|
28
|
+
end
|
29
|
+
res
|
30
|
+
end
|
31
|
+
|
32
|
+
def set_validations(validators)
|
33
|
+
validators.each do |validator|
|
34
|
+
validator.add_restriction
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def generate_custom_value
|
39
|
+
Colonization::RegExpValuesGenerator.generate(@config)
|
40
|
+
end
|
41
|
+
|
42
|
+
def generate_faker_value
|
43
|
+
case @config[:type]
|
44
|
+
when :integer
|
45
|
+
Faker::Number.between(1, 2)
|
46
|
+
when :float
|
47
|
+
Faker::Number.decimal(2, 3)
|
48
|
+
when :string
|
49
|
+
Faker::Lorem.word
|
50
|
+
when :text
|
51
|
+
Faker::Lorem.sentence
|
52
|
+
when :date
|
53
|
+
Faker::Time.between(300.days.ago, 300.days.since, :day)
|
54
|
+
when :datetime
|
55
|
+
Faker::Time.between(300.days.ago, 300.days.since, :day)
|
56
|
+
when :boolean
|
57
|
+
[true, false].sample
|
58
|
+
when :time
|
59
|
+
Faker::Time.between(300.days.ago, 300.days.since, :day)
|
60
|
+
else
|
61
|
+
raise @config[:type].inspect
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
data/lib/colonization/version.rb
CHANGED
data/lib/colonization.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: colonization
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Denys Dvoriashyn
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-12-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -38,6 +38,34 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: regexp-examples
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: faker
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.6'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.6'
|
41
69
|
description:
|
42
70
|
email:
|
43
71
|
- don19880101gan@gmail.com
|
@@ -53,6 +81,34 @@ files:
|
|
53
81
|
- bin/setup
|
54
82
|
- colonization.gemspec
|
55
83
|
- lib/colonization.rb
|
84
|
+
- lib/colonization/absence_validator.rb
|
85
|
+
- lib/colonization/acceptance_validator.rb
|
86
|
+
- lib/colonization/colonizer.rb
|
87
|
+
- lib/colonization/factory.rb
|
88
|
+
- lib/colonization/investigator.rb
|
89
|
+
- lib/colonization/model_entity.rb
|
90
|
+
- lib/colonization/model_field.rb
|
91
|
+
- lib/colonization/model_instaces_repository.rb
|
92
|
+
- lib/colonization/model_relation.rb
|
93
|
+
- lib/colonization/reg_exp_values_generator.rb
|
94
|
+
- lib/colonization/ship.rb
|
95
|
+
- lib/colonization/validators/active_model/confirmation_validator.rb
|
96
|
+
- lib/colonization/validators/active_model/exclusion_validator.rb
|
97
|
+
- lib/colonization/validators/active_model/format_validator.rb
|
98
|
+
- lib/colonization/validators/active_model/inclusion_validator.rb
|
99
|
+
- lib/colonization/validators/active_model/length_validator.rb
|
100
|
+
- lib/colonization/validators/active_model/numericality_validator.rb
|
101
|
+
- lib/colonization/validators/active_model/presence_validator.rb
|
102
|
+
- lib/colonization/validators/active_model/with_validator.rb
|
103
|
+
- lib/colonization/validators/active_record/associated_validator.rb
|
104
|
+
- lib/colonization/validators/active_record/presence_validator.rb
|
105
|
+
- lib/colonization/validators/active_record/uniqueness_validator.rb
|
106
|
+
- lib/colonization/validators/carrier_wave/download_validator.rb
|
107
|
+
- lib/colonization/validators/carrier_wave/integrity_validator.rb
|
108
|
+
- lib/colonization/validators/carrier_wave/processing_validator.rb
|
109
|
+
- lib/colonization/validators/factory.rb
|
110
|
+
- lib/colonization/validators/null_object.rb
|
111
|
+
- lib/colonization/values_generator.rb
|
56
112
|
- lib/colonization/version.rb
|
57
113
|
homepage:
|
58
114
|
licenses: []
|
@@ -74,7 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
74
130
|
version: '0'
|
75
131
|
requirements: []
|
76
132
|
rubyforge_project:
|
77
|
-
rubygems_version: 2.
|
133
|
+
rubygems_version: 2.5.1
|
78
134
|
signing_key:
|
79
135
|
specification_version: 4
|
80
136
|
summary: Gem for data populating
|