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.
Files changed (33) hide show
  1. checksums.yaml +4 -4
  2. data/colonization.gemspec +2 -0
  3. data/lib/colonization/absence_validator.rb +2 -0
  4. data/lib/colonization/acceptance_validator.rb +2 -0
  5. data/lib/colonization/colonizer.rb +123 -0
  6. data/lib/colonization/factory.rb +15 -0
  7. data/lib/colonization/investigator.rb +36 -0
  8. data/lib/colonization/model_entity.rb +11 -0
  9. data/lib/colonization/model_field.rb +45 -0
  10. data/lib/colonization/model_instaces_repository.rb +11 -0
  11. data/lib/colonization/model_relation.rb +60 -0
  12. data/lib/colonization/reg_exp_values_generator.rb +31 -0
  13. data/lib/colonization/ship.rb +45 -0
  14. data/lib/colonization/validators/active_model/confirmation_validator.rb +26 -0
  15. data/lib/colonization/validators/active_model/exclusion_validator.rb +26 -0
  16. data/lib/colonization/validators/active_model/format_validator.rb +26 -0
  17. data/lib/colonization/validators/active_model/inclusion_validator.rb +26 -0
  18. data/lib/colonization/validators/active_model/length_validator.rb +26 -0
  19. data/lib/colonization/validators/active_model/numericality_validator.rb +26 -0
  20. data/lib/colonization/validators/active_model/presence_validator.rb +26 -0
  21. data/lib/colonization/validators/active_model/with_validator.rb +26 -0
  22. data/lib/colonization/validators/active_record/associated_validator.rb +26 -0
  23. data/lib/colonization/validators/active_record/presence_validator.rb +26 -0
  24. data/lib/colonization/validators/active_record/uniqueness_validator.rb +26 -0
  25. data/lib/colonization/validators/carrier_wave/download_validator.rb +26 -0
  26. data/lib/colonization/validators/carrier_wave/integrity_validator.rb +26 -0
  27. data/lib/colonization/validators/carrier_wave/processing_validator.rb +26 -0
  28. data/lib/colonization/validators/factory.rb +63 -0
  29. data/lib/colonization/validators/null_object.rb +16 -0
  30. data/lib/colonization/values_generator.rb +65 -0
  31. data/lib/colonization/version.rb +1 -1
  32. data/lib/colonization.rb +1 -0
  33. metadata +59 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 60abbac1bf9c7a04f494beb22ab85e1fd17bcff6
4
- data.tar.gz: 7870642e5abafd23ba6ca8588edfdd556278c616
3
+ metadata.gz: f8749d58f3a8916ee1cd5625efed1a7111e564e1
4
+ data.tar.gz: a8236e79fcef58917c403b15f62606d03fb28203
5
5
  SHA512:
6
- metadata.gz: deef2b1fde973f23f7ae3dccdf89c0b4d0ee67ce0592e9d779d04791f3ab939966b8b362f44a1abb900b8d887668fdca44f5fa5e3d522e49b820d6581e24521d
7
- data.tar.gz: f53acd2f78f85fdfa6279bd72d2226f0c04cd3c7fc766a1d87036c19cbca44da0b3b9ab3089547c2ee95f52d384dde456cdd4ec9368fba16367fd061a449f10f
6
+ metadata.gz: 9fc887ec749342c13c791d5f0d2453fe8bf2bf1a62a2b20bb1c5456d46456e38ce42418dc0a5491bfe2a51d9b2b46e365ef3865321af7e08417ecb1085162788
7
+ data.tar.gz: 1bc3bf77e92f3fb2c721ea4641869de267818ce9750b6c86816c8f7e1ce46c7eaf7bf1f76c10603de9b9393b6281d1585149f85ff383719494b1065119d7bca1
data/colonization.gemspec CHANGED
@@ -29,4 +29,6 @@ Gem::Specification.new do |spec|
29
29
 
30
30
  spec.add_development_dependency "bundler", "~> 1.13"
31
31
  spec.add_development_dependency "rake", "~> 10.0"
32
+ spec.add_development_dependency "regexp-examples"
33
+ spec.add_dependency "faker", "~> 1.6"
32
34
  end
@@ -0,0 +1,2 @@
1
+ class Colonization::Validators::ActiveModel::AbsenceValidator < ActiveModel::Validations::AbsenceValidator
2
+ end
@@ -0,0 +1,2 @@
1
+ class Colonization::Validators::ActiveModel::AcceptanceValidator < ActiveModel::Validations::AcceptanceValidator
2
+ end
@@ -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,15 @@
1
+ require 'colonization/colonizer'
2
+
3
+ class Colonization::Factory
4
+
5
+ def produce(model)
6
+ colonizer_class.new(model)
7
+ end
8
+
9
+ private
10
+
11
+ def colonizer_class
12
+ Colonization::Colonizer
13
+ end
14
+
15
+ 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,11 @@
1
+ class Colonization::ModelEntity
2
+
3
+ def name
4
+ raise NotImplementedException
5
+ end
6
+
7
+ def value
8
+ raise NotImplementedException
9
+ end
10
+
11
+ 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,11 @@
1
+ class Colonization::ModelInstancesRepository
2
+
3
+ def get_instance(model:)
4
+ model.all.sample
5
+ end
6
+
7
+ def get_instance_without_relation(model: ,relation:)
8
+ model.where("#{relation.name.downcase}" => nil).all.sample
9
+ end
10
+
11
+ 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,16 @@
1
+ module Colonization::Validators
2
+ class NullObject
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
+ raise validator.inspect
13
+ end
14
+
15
+ end
16
+ end
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Colonization
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/colonization.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require "colonization/version"
2
+ require "colonization/ship"
2
3
 
3
4
  module Colonization
4
5
  # Your code goes here...
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.1.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-10-03 00:00:00.000000000 Z
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.6.6
133
+ rubygems_version: 2.5.1
78
134
  signing_key:
79
135
  specification_version: 4
80
136
  summary: Gem for data populating