dirty_seed 0.1.4

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 (118) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +44 -0
  4. data/Rakefile +22 -0
  5. data/lib/dirty_seed.rb +23 -0
  6. data/lib/dirty_seed/assigners/dirty_assigner.rb +32 -0
  7. data/lib/dirty_seed/assigners/dirty_boolean.rb +14 -0
  8. data/lib/dirty_seed/assigners/dirty_date.rb +14 -0
  9. data/lib/dirty_seed/assigners/dirty_float.rb +28 -0
  10. data/lib/dirty_seed/assigners/dirty_integer.rb +86 -0
  11. data/lib/dirty_seed/assigners/dirty_string.rb +49 -0
  12. data/lib/dirty_seed/assigners/dirty_time.rb +14 -0
  13. data/lib/dirty_seed/data_model.rb +80 -0
  14. data/lib/dirty_seed/dirty_association.rb +106 -0
  15. data/lib/dirty_seed/dirty_attribute.rb +64 -0
  16. data/lib/dirty_seed/dirty_model.rb +123 -0
  17. data/lib/dirty_seed/engine.rb +11 -0
  18. data/lib/dirty_seed/exceptions.rb +6 -0
  19. data/lib/dirty_seed/method_missing_helper.rb +49 -0
  20. data/lib/dirty_seed/sorter.rb +118 -0
  21. data/lib/dirty_seed/version.rb +6 -0
  22. data/lib/tasks/dirty_seed_tasks.rake +8 -0
  23. data/spec/dummy/Rakefile +6 -0
  24. data/spec/dummy/app/assets/config/manifest.js +3 -0
  25. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  26. data/spec/dummy/app/channels/application_cable/channel.rb +4 -0
  27. data/spec/dummy/app/channels/application_cable/connection.rb +4 -0
  28. data/spec/dummy/app/controllers/application_controller.rb +2 -0
  29. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  30. data/spec/dummy/app/javascript/packs/application.js +15 -0
  31. data/spec/dummy/app/jobs/application_job.rb +7 -0
  32. data/spec/dummy/app/mailers/application_mailer.rb +4 -0
  33. data/spec/dummy/app/models/alfa.rb +5 -0
  34. data/spec/dummy/app/models/application_record.rb +3 -0
  35. data/spec/dummy/app/models/bravo.rb +3 -0
  36. data/spec/dummy/app/models/charlie.rb +5 -0
  37. data/spec/dummy/app/models/delta.rb +4 -0
  38. data/spec/dummy/app/models/echo.rb +3 -0
  39. data/spec/dummy/app/models/foxtrot.rb +2 -0
  40. data/spec/dummy/app/models/golf.rb +2 -0
  41. data/spec/dummy/app/models/hotel.rb +4 -0
  42. data/spec/dummy/app/models/india.rb +4 -0
  43. data/spec/dummy/app/models/juliett.rb +21 -0
  44. data/spec/dummy/app/models/kilo.rb +2 -0
  45. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  46. data/spec/dummy/app/views/layouts/mailer.html.erb +13 -0
  47. data/spec/dummy/app/views/layouts/mailer.text.erb +1 -0
  48. data/spec/dummy/bin/rails +4 -0
  49. data/spec/dummy/bin/rake +4 -0
  50. data/spec/dummy/bin/setup +33 -0
  51. data/spec/dummy/config.ru +5 -0
  52. data/spec/dummy/config/application.rb +18 -0
  53. data/spec/dummy/config/boot.rb +5 -0
  54. data/spec/dummy/config/cable.yml +10 -0
  55. data/spec/dummy/config/database.yml +25 -0
  56. data/spec/dummy/config/environment.rb +5 -0
  57. data/spec/dummy/config/environments/development.rb +62 -0
  58. data/spec/dummy/config/environments/production.rb +112 -0
  59. data/spec/dummy/config/environments/test.rb +49 -0
  60. data/spec/dummy/config/initializers/application_controller_renderer.rb +8 -0
  61. data/spec/dummy/config/initializers/assets.rb +12 -0
  62. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  63. data/spec/dummy/config/initializers/content_security_policy.rb +28 -0
  64. data/spec/dummy/config/initializers/cookies_serializer.rb +5 -0
  65. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  66. data/spec/dummy/config/initializers/inflections.rb +27 -0
  67. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  68. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  69. data/spec/dummy/config/locales/en.yml +33 -0
  70. data/spec/dummy/config/puma.rb +38 -0
  71. data/spec/dummy/config/routes.rb +3 -0
  72. data/spec/dummy/config/spring.rb +6 -0
  73. data/spec/dummy/config/storage.yml +34 -0
  74. data/spec/dummy/db/development.sqlite3 +0 -0
  75. data/spec/dummy/db/migrate/20200923100317_create_alfas.rb +15 -0
  76. data/spec/dummy/db/migrate/20200923100328_create_bravos.rb +12 -0
  77. data/spec/dummy/db/migrate/20200923100329_create_charlies.rb +9 -0
  78. data/spec/dummy/db/migrate/20200923100330_create_deltas.rb +10 -0
  79. data/spec/dummy/db/migrate/20200923100331_create_echos.rb +9 -0
  80. data/spec/dummy/db/migrate/20200923100332_create_foxtrots.rb +9 -0
  81. data/spec/dummy/db/migrate/20200923100334_create_hotels.rb +7 -0
  82. data/spec/dummy/db/migrate/20200923100335_create_indias.rb +11 -0
  83. data/spec/dummy/db/migrate/20200923100336_create_julietts.rb +11 -0
  84. data/spec/dummy/db/migrate/20200923100337_create_kilos.rb +13 -0
  85. data/spec/dummy/db/schema.rb +105 -0
  86. data/spec/dummy/db/test.sqlite3 +0 -0
  87. data/spec/dummy/log/development.log +217 -0
  88. data/spec/dummy/log/test.log +95379 -0
  89. data/spec/dummy/public/404.html +67 -0
  90. data/spec/dummy/public/422.html +67 -0
  91. data/spec/dummy/public/500.html +66 -0
  92. data/spec/dummy/public/apple-touch-icon-precomposed.png +0 -0
  93. data/spec/dummy/public/apple-touch-icon.png +0 -0
  94. data/spec/dummy/public/favicon.ico +0 -0
  95. data/spec/dummy/spec/factories/bars.rb +8 -0
  96. data/spec/dummy/spec/factories/foos.rb +7 -0
  97. data/spec/dummy/spec/models/alfa_spec.rb +6 -0
  98. data/spec/dummy/spec/models/bravo_spec.rb +6 -0
  99. data/spec/dummy/spec/models/charlie_spec.rb +6 -0
  100. data/spec/dummy/spec/models/delta_spec.rb +6 -0
  101. data/spec/dummy/spec/models/echo_spec.rb +6 -0
  102. data/spec/dummy/tmp/development_secret.txt +1 -0
  103. data/spec/lib/dirty_seed/assigners/dirty_assigner_spec.rb +13 -0
  104. data/spec/lib/dirty_seed/assigners/dirty_boolean_spec.rb +13 -0
  105. data/spec/lib/dirty_seed/assigners/dirty_date_spec.rb +15 -0
  106. data/spec/lib/dirty_seed/assigners/dirty_float_spec.rb +47 -0
  107. data/spec/lib/dirty_seed/assigners/dirty_integer_spec.rb +49 -0
  108. data/spec/lib/dirty_seed/assigners/dirty_string_spec.rb +15 -0
  109. data/spec/lib/dirty_seed/assigners/dirty_time_spec.rb +15 -0
  110. data/spec/lib/dirty_seed/data_model_spec.rb +72 -0
  111. data/spec/lib/dirty_seed/dirty_association_spec.rb +64 -0
  112. data/spec/lib/dirty_seed/dirty_attribute_spec.rb +49 -0
  113. data/spec/lib/dirty_seed/dirty_model_spec.rb +102 -0
  114. data/spec/lib/dirty_seed/sorter_spec.rb +46 -0
  115. data/spec/lib/tasks/dirty_seed_tasks_spec.rb +21 -0
  116. data/spec/rails_helper.rb +44 -0
  117. data/spec/support/helpers.rb +30 -0
  118. metadata +282 -0
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails_helper'
4
+
5
+ RSpec.describe DirtySeed::DataModel do
6
+ describe '::seed' do
7
+ context 'when ApplicationRecord is defined' do
8
+ it 'seeds instances for each model' do
9
+ described_class.seed
10
+ # As expected, Juliett can not be seed
11
+ [Alfa, Bravo, Charlie, Delta, Echo, Foxtrot, Golf, Hotel, India, Kilo].each do |active_record_model|
12
+ expect(active_record_model.count).to be > 0
13
+ end
14
+ end
15
+ end
16
+
17
+ context 'when ApplicationRecord is not defined' do
18
+ it 'puts an error message' do
19
+ hide_const('ApplicationRecord')
20
+ expect { described_class.seed }.to raise_error NameError
21
+ end
22
+ end
23
+ end
24
+
25
+ xdescribe '::print_logs' do
26
+ it 'prints logs in the console' do
27
+ described_class.seed
28
+ end
29
+ end
30
+
31
+ describe '::models' do
32
+ it 'returns an array of dirty models representing Active Record models' do
33
+ expect(described_class.models.map(&:name)).to match_array(
34
+ %w[Alfa Bravo Charlie Delta Echo Foxtrot Golf Hotel India Juliett Kilo]
35
+ )
36
+ end
37
+ end
38
+
39
+ describe '::active_record_models' do
40
+ let(:active_record_models) { described_class.active_record_models }
41
+
42
+ it 'returns an array of Active Record models' do
43
+ expect(active_record_models).to match_array(
44
+ [Alfa, Bravo, Charlie, Delta, Echo, Foxtrot, Golf, Hotel, India, Juliett, Kilo]
45
+ )
46
+ end
47
+
48
+ it 'sorts models with associations' do
49
+ expect(active_record_models.index(Alfa)).to be < active_record_models.index(Delta)
50
+ expect(active_record_models.index(Alfa)).to be < active_record_models.index(Echo)
51
+ expect(active_record_models.index(Alfa)).to be < active_record_models.index(Juliett)
52
+ expect(active_record_models.index(Charlie)).to be < active_record_models.index(Echo)
53
+ end
54
+ end
55
+
56
+ describe '#method_missing' do
57
+ context 'when method_name matches an ActiveRecord model' do
58
+ it 'returns the related dirty model' do
59
+ dirty_alfa = described_class.models.find { |dirty_model| dirty_model.model == Alfa }
60
+ expect(described_class.respond_to_missing?(:alfa)).to be true
61
+ expect(described_class.alfa).to eq dirty_alfa
62
+ end
63
+ end
64
+
65
+ context 'when method_name does not match an ActiveRecord model' do
66
+ it 'raises a NoMethodError' do
67
+ expect(described_class.respond_to_missing?(:foo)).to be false
68
+ expect { described_class.foo }.to raise_error NoMethodError
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails_helper'
4
+
5
+ RSpec.describe DirtySeed::DirtyAssociation do
6
+ let(:dirty_model) { DirtySeed::DataModel.charlie }
7
+ let(:reflection) { Charlie.reflections['alfa'] }
8
+ let(:dirty_association) { described_class.new(dirty_model, reflection) }
9
+
10
+ describe '#initialize' do
11
+ it 'instantiates an instance' do
12
+ expect(dirty_association).to be_a described_class
13
+ end
14
+ end
15
+
16
+ describe '#dirty_model' do
17
+ it 'returns dirty model' do
18
+ expect(dirty_association.dirty_model).to eq dirty_model
19
+ end
20
+ end
21
+
22
+ describe '#name' do
23
+ it 'returns attribute name' do
24
+ expect(dirty_association.name).to eq :alfa
25
+ end
26
+ end
27
+
28
+ describe '#attribute' do
29
+ it 'returns attribute of this association' do
30
+ expect(dirty_association.attribute).to eq :alfa_id
31
+ end
32
+ end
33
+
34
+ describe '#associated_models' do
35
+ context 'when the reflection is regular' do
36
+ it 'returns belongs_to association' do
37
+ expect(dirty_association.associated_models).to eq [Alfa]
38
+ end
39
+ end
40
+
41
+ context 'when the reflection is polymorphic' do
42
+ it 'returns models associated with has_many or has_one' do
43
+ dirty_model = DirtySeed::DataModel.echo
44
+ reflection = Echo.reflections['echoable']
45
+ dirty_association = described_class.new(dirty_model, reflection)
46
+ expect(dirty_association.associated_models).to eq [Alfa, Charlie]
47
+ end
48
+ end
49
+
50
+ context 'when the reflection is cyclic (a belongs to b and b optionnally belongs to a)' do
51
+ it 'returns models accepting this one as polymorphic' do
52
+ dirty_model = DirtySeed::DataModel.hotel
53
+ reflection = Hotel.reflections['india']
54
+ dirty_association = described_class.new(dirty_model, reflection)
55
+ expect(dirty_association.associated_models).to eq [India]
56
+
57
+ dirty_model = DirtySeed::DataModel.india
58
+ reflection = India.reflections['hotel']
59
+ dirty_association = described_class.new(dirty_model, reflection)
60
+ expect(dirty_association.associated_models).to eq [Hotel]
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails_helper'
4
+
5
+ RSpec.describe DirtySeed::DirtyAttribute do
6
+ let(:dirty_attribute) { described_class.new(build_dirty_model, build_column) }
7
+
8
+ describe '#initialize' do
9
+ it 'instantiates an instance' do
10
+ expect(dirty_attribute).to be_a described_class
11
+ end
12
+ end
13
+
14
+ describe '#dirty_model' do
15
+ it 'returns dirty model' do
16
+ expect(dirty_attribute.dirty_model).to be_a DirtySeed::DirtyModel
17
+ end
18
+ end
19
+
20
+ describe '#type' do
21
+ context 'when column is a boolean' do
22
+ it 'returns :boolean' do
23
+ dirty_attribute = described_class.new(build_dirty_model, build_column(type: :boolean))
24
+ expect(dirty_attribute.type).to eq :boolean
25
+ end
26
+ end
27
+
28
+ context 'when column is an integer' do
29
+ it 'returns :integer' do
30
+ dirty_attribute = described_class.new(build_dirty_model, build_column(type: :integer))
31
+ expect(dirty_attribute.type).to eq :integer
32
+ end
33
+ end
34
+
35
+ context 'when column is a decimal' do
36
+ it 'returns :float' do
37
+ dirty_attribute = described_class.new(build_dirty_model, build_column(type: :float))
38
+ expect(dirty_attribute.type).to eq :float
39
+ end
40
+ end
41
+
42
+ context 'when column is a string' do
43
+ it 'returns :string' do
44
+ dirty_attribute = described_class.new(build_dirty_model, build_column(type: :string))
45
+ expect(dirty_attribute.type).to eq :string
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,102 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails_helper'
4
+
5
+ RSpec.describe DirtySeed::DirtyModel do
6
+ let(:data_model) { DirtySeed::DataModel }
7
+
8
+ describe '#initialize(model:)' do
9
+ it 'instantiates an instance' do
10
+ expect(described_class.new(Alfa)).to be_a described_class
11
+ end
12
+ end
13
+
14
+ describe '#seed(count)' do
15
+ it 'tries to create <count> instances of the model' do
16
+ expect { data_model.alfa.seed(3) }.to change { Alfa.count }.by(3)
17
+ end
18
+
19
+ it 'counts the number of successfully seeded instances' do
20
+ data_model.alfa.seed(3)
21
+ expect(data_model.alfa.count).to eq 3
22
+ end
23
+
24
+ it 'logs the errors' do
25
+ Alfa.create!
26
+ data_model.juliett.seed(3)
27
+ expect(data_model.juliett.errors).to match_array(
28
+ [
29
+ 'Alfa should be some specific alfa',
30
+ 'String should be a specific string',
31
+ 'Integer should be a specific integer'
32
+ ]
33
+ )
34
+ end
35
+ end
36
+
37
+ describe '#associations' do
38
+ it 'returns associations' do
39
+ expect(data_model.alfa.associations.count).to eq 0
40
+ expect(data_model.bravo.associations.count).to eq 0
41
+ expect(data_model.charlie.associations.count).to eq 1
42
+ expect(data_model.delta.associations.count).to eq 2
43
+ expect(data_model.echo.associations.count).to eq 1
44
+ expect(data_model.foxtrot.associations.count).to eq 0
45
+ expect(data_model.golf.associations.count).to eq 0
46
+ expect(data_model.hotel.associations.count).to eq 1
47
+ expect(data_model.india.associations.count).to eq 1
48
+ expect(data_model.juliett.associations.count).to eq 1
49
+ expect(data_model.kilo.associations.count).to eq 0
50
+ end
51
+ end
52
+
53
+ describe '#associated_models' do
54
+ it 'returns belongs_to models' do
55
+ expect(data_model.alfa.associated_models).to be_empty
56
+ expect(data_model.bravo.associated_models).to be_empty
57
+ expect(data_model.charlie.associated_models).to match_array([Alfa])
58
+ expect(data_model.delta.associated_models).to match_array([Bravo, Charlie])
59
+ expect(data_model.echo.associated_models).to match_array([Alfa, Charlie])
60
+ expect(data_model.foxtrot.associated_models).to be_empty
61
+ expect(data_model.golf.associated_models).to be_empty
62
+ expect(data_model.hotel.associated_models).to match_array([India])
63
+ expect(data_model.india.associated_models).to match_array([Hotel])
64
+ expect(data_model.juliett.associated_models).to match_array([Alfa])
65
+ expect(data_model.kilo.associated_models).to be_empty
66
+ end
67
+ end
68
+
69
+ describe '#attributes' do
70
+ it 'defines attributes' do
71
+ expect(data_model.alfa.attributes.count).to eq 7
72
+ expect(data_model.bravo.attributes.count).to eq 4
73
+ expect(data_model.charlie.attributes.count).to eq 0
74
+ expect(data_model.delta.attributes.count).to eq 0
75
+ expect(data_model.echo.attributes.count).to eq 0
76
+ expect(data_model.foxtrot.attributes.count).to eq 0
77
+ expect(data_model.golf.attributes.count).to eq 0
78
+ expect(data_model.hotel.attributes.count).to eq 0
79
+ expect(data_model.india.attributes.count).to eq 0
80
+ expect(data_model.juliett.attributes.count).to eq 2
81
+ expect(data_model.kilo.attributes.count).to eq 0
82
+ end
83
+ end
84
+
85
+ describe '#method_missing' do
86
+ context 'when model respond to the method' do
87
+ it 'calls method on model' do
88
+ expect(DirtySeed::DirtyModel.instance_methods(false)).to_not include :name
89
+ expect(Alfa.methods).to include :name
90
+ expect(data_model.alfa.name).to eq Alfa.name
91
+ end
92
+ end
93
+
94
+ context 'when model does not respond to the method' do
95
+ it 'raises a NoMethodError' do
96
+ expect(DirtySeed::DirtyModel.instance_methods(false)).to_not include :foo
97
+ expect(Alfa.methods).to_not include :foo
98
+ expect { data_model.alfa.foo }.to raise_error NoMethodError
99
+ end
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails_helper'
4
+
5
+ RSpec.describe DirtySeed::Sorter do
6
+ describe '#initialize' do
7
+ it 'instantiates an instance' do
8
+ expect(described_class.new([Alfa, Bravo])).to be_a described_class
9
+ end
10
+ end
11
+
12
+ describe '#sort' do
13
+ it 'returns an empty array if models is empty' do
14
+ sorted = DirtySeed::Sorter.new([]).sort!
15
+ expect(sorted).to be_empty
16
+ end
17
+
18
+ it 'sorts models by dependencies [1]' do
19
+ sorted = DirtySeed::Sorter.new([Alfa, Charlie]).sort!
20
+ expect(sorted).to eq([Alfa, Charlie])
21
+ end
22
+
23
+ it 'sorts models by dependencies [2]' do
24
+ sorted = DirtySeed::Sorter.new([Charlie, Alfa]).sort!
25
+ expect(sorted).to eq([Alfa, Charlie])
26
+ end
27
+
28
+ it 'sorts models by dependencies [3]' do
29
+ active_record_models = [Alfa, Bravo, Charlie, Delta, Echo, Foxtrot, Golf, Hotel, India, Juliett, Kilo]
30
+ 10.times do
31
+ sorted = DirtySeed::Sorter.new(active_record_models.shuffle).sort!
32
+ expect(sorted.index(Alfa)).to be < sorted.index(Delta)
33
+ expect(sorted.index(Alfa)).to be < sorted.index(Echo)
34
+ expect(sorted.index(Charlie)).to be < sorted.index(Echo)
35
+ expect(sorted.index(Hotel)).to be < sorted.index(India)
36
+ end
37
+ end
38
+
39
+ context 'when infinite loop could happens' do
40
+ it 'does not raise error' do
41
+ sorted = DirtySeed::Sorter.new([India, Hotel]).sort!
42
+ expect(sorted).to eq([Hotel, India])
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails_helper'
4
+
5
+ Rails.application.load_tasks
6
+
7
+ RSpec.describe 'Dirty Seed' do
8
+ describe 'dirty_seed:seed' do
9
+ before(:each) do
10
+ # prevent logs in specs
11
+ allow_any_instance_of(DirtySeed::DataModel).to(receive(:print_logs).and_return(nil))
12
+ Rake::Task[:'dirty_seed:seed'].invoke
13
+ end
14
+
15
+ it 'seeds data' do
16
+ # As expected, Juliett can not be seed
17
+ active_record_models = [Alfa, Bravo, Charlie, Delta, Echo, Foxtrot, Golf, Hotel, India, Kilo]
18
+ expect(active_record_models.map(&:count).all?(&:positive?)).to be true
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'simplecov'
4
+ SimpleCov.start 'rails' do
5
+ add_filter 'lib/dirty_seed/version.rb'
6
+ end
7
+
8
+ ENV['RAILS_ENV'] ||= 'test'
9
+
10
+ ENGINE_ROOT = File.join(File.dirname(__FILE__), '../')
11
+
12
+ # Load environment.rb from the dummy app.
13
+ require File.expand_path('dummy/config/environment', __dir__)
14
+
15
+ abort('The Rails environment is running in production mode!') if Rails.env.production?
16
+
17
+ require 'database_cleaner'
18
+ require 'factory_bot_rails'
19
+ require 'rspec/rails'
20
+ Dir[Rails.root.join('..', '..', 'spec', 'support', '**', '*.rb')].sort.each { |f| require f }
21
+
22
+ # Load migrations from the dummy app.
23
+ ActiveRecord::Migrator.migrations_paths = File.join(ENGINE_ROOT, 'spec/dummy/db/migrate')
24
+ ActiveRecord::Migration.maintain_test_schema!
25
+
26
+ RSpec.configure do |config|
27
+ config.include FactoryBot::Syntax::Methods
28
+
29
+ config.before(:suite) do
30
+ DatabaseCleaner.clean_with(:truncation)
31
+ DatabaseCleaner.strategy = :transaction
32
+ end
33
+
34
+ config.around(:each) do |example|
35
+ DirtySeed::Engine.initializers.each(&:run)
36
+ DatabaseCleaner.cleaning do
37
+ example.run
38
+ end
39
+ end
40
+
41
+ config.use_transactional_fixtures = true
42
+ config.infer_spec_type_from_file_location!
43
+ config.filter_rails_from_backtrace!
44
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ def build_column(name: nil, type: :boolean)
4
+ ActiveRecord::ConnectionAdapters::Column.new(
5
+ name || "my_#{type}",
6
+ false,
7
+ ActiveRecord::ConnectionAdapters::SqlTypeMetadata.new(type: sql_type(type))
8
+ )
9
+ end
10
+
11
+ def build_dirty_attribute(name: nil, dirty_model: nil, type: :boolean)
12
+ DirtySeed::DirtyAttribute.new(
13
+ dirty_model || build_dirty_model,
14
+ build_column(name: name, type: type)
15
+ )
16
+ end
17
+
18
+ def build_dirty_model(model: Alfa)
19
+ DirtySeed::DirtyModel.new(model)
20
+ end
21
+
22
+ private
23
+
24
+ def sql_type(type)
25
+ case type
26
+ when :float then :decimal
27
+ when :time then :datetime
28
+ else type
29
+ end
30
+ end
metadata ADDED
@@ -0,0 +1,282 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dirty_seed
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.4
5
+ platform: ruby
6
+ authors:
7
+ - Edouard Piron
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-11-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: faker
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 2.14.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 2.14.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: rails
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '6.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '6.0'
41
+ description: Description of DirtySeed.
42
+ email:
43
+ - ed.piron@gmail.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - MIT-LICENSE
49
+ - README.md
50
+ - Rakefile
51
+ - lib/dirty_seed.rb
52
+ - lib/dirty_seed/assigners/dirty_assigner.rb
53
+ - lib/dirty_seed/assigners/dirty_boolean.rb
54
+ - lib/dirty_seed/assigners/dirty_date.rb
55
+ - lib/dirty_seed/assigners/dirty_float.rb
56
+ - lib/dirty_seed/assigners/dirty_integer.rb
57
+ - lib/dirty_seed/assigners/dirty_string.rb
58
+ - lib/dirty_seed/assigners/dirty_time.rb
59
+ - lib/dirty_seed/data_model.rb
60
+ - lib/dirty_seed/dirty_association.rb
61
+ - lib/dirty_seed/dirty_attribute.rb
62
+ - lib/dirty_seed/dirty_model.rb
63
+ - lib/dirty_seed/engine.rb
64
+ - lib/dirty_seed/exceptions.rb
65
+ - lib/dirty_seed/method_missing_helper.rb
66
+ - lib/dirty_seed/sorter.rb
67
+ - lib/dirty_seed/version.rb
68
+ - lib/tasks/dirty_seed_tasks.rake
69
+ - spec/dummy/Rakefile
70
+ - spec/dummy/app/assets/config/manifest.js
71
+ - spec/dummy/app/assets/stylesheets/application.css
72
+ - spec/dummy/app/channels/application_cable/channel.rb
73
+ - spec/dummy/app/channels/application_cable/connection.rb
74
+ - spec/dummy/app/controllers/application_controller.rb
75
+ - spec/dummy/app/helpers/application_helper.rb
76
+ - spec/dummy/app/javascript/packs/application.js
77
+ - spec/dummy/app/jobs/application_job.rb
78
+ - spec/dummy/app/mailers/application_mailer.rb
79
+ - spec/dummy/app/models/alfa.rb
80
+ - spec/dummy/app/models/application_record.rb
81
+ - spec/dummy/app/models/bravo.rb
82
+ - spec/dummy/app/models/charlie.rb
83
+ - spec/dummy/app/models/delta.rb
84
+ - spec/dummy/app/models/echo.rb
85
+ - spec/dummy/app/models/foxtrot.rb
86
+ - spec/dummy/app/models/golf.rb
87
+ - spec/dummy/app/models/hotel.rb
88
+ - spec/dummy/app/models/india.rb
89
+ - spec/dummy/app/models/juliett.rb
90
+ - spec/dummy/app/models/kilo.rb
91
+ - spec/dummy/app/views/layouts/application.html.erb
92
+ - spec/dummy/app/views/layouts/mailer.html.erb
93
+ - spec/dummy/app/views/layouts/mailer.text.erb
94
+ - spec/dummy/bin/rails
95
+ - spec/dummy/bin/rake
96
+ - spec/dummy/bin/setup
97
+ - spec/dummy/config.ru
98
+ - spec/dummy/config/application.rb
99
+ - spec/dummy/config/boot.rb
100
+ - spec/dummy/config/cable.yml
101
+ - spec/dummy/config/database.yml
102
+ - spec/dummy/config/environment.rb
103
+ - spec/dummy/config/environments/development.rb
104
+ - spec/dummy/config/environments/production.rb
105
+ - spec/dummy/config/environments/test.rb
106
+ - spec/dummy/config/initializers/application_controller_renderer.rb
107
+ - spec/dummy/config/initializers/assets.rb
108
+ - spec/dummy/config/initializers/backtrace_silencers.rb
109
+ - spec/dummy/config/initializers/content_security_policy.rb
110
+ - spec/dummy/config/initializers/cookies_serializer.rb
111
+ - spec/dummy/config/initializers/filter_parameter_logging.rb
112
+ - spec/dummy/config/initializers/inflections.rb
113
+ - spec/dummy/config/initializers/mime_types.rb
114
+ - spec/dummy/config/initializers/wrap_parameters.rb
115
+ - spec/dummy/config/locales/en.yml
116
+ - spec/dummy/config/puma.rb
117
+ - spec/dummy/config/routes.rb
118
+ - spec/dummy/config/spring.rb
119
+ - spec/dummy/config/storage.yml
120
+ - spec/dummy/db/development.sqlite3
121
+ - spec/dummy/db/migrate/20200923100317_create_alfas.rb
122
+ - spec/dummy/db/migrate/20200923100328_create_bravos.rb
123
+ - spec/dummy/db/migrate/20200923100329_create_charlies.rb
124
+ - spec/dummy/db/migrate/20200923100330_create_deltas.rb
125
+ - spec/dummy/db/migrate/20200923100331_create_echos.rb
126
+ - spec/dummy/db/migrate/20200923100332_create_foxtrots.rb
127
+ - spec/dummy/db/migrate/20200923100334_create_hotels.rb
128
+ - spec/dummy/db/migrate/20200923100335_create_indias.rb
129
+ - spec/dummy/db/migrate/20200923100336_create_julietts.rb
130
+ - spec/dummy/db/migrate/20200923100337_create_kilos.rb
131
+ - spec/dummy/db/schema.rb
132
+ - spec/dummy/db/test.sqlite3
133
+ - spec/dummy/log/development.log
134
+ - spec/dummy/log/test.log
135
+ - spec/dummy/public/404.html
136
+ - spec/dummy/public/422.html
137
+ - spec/dummy/public/500.html
138
+ - spec/dummy/public/apple-touch-icon-precomposed.png
139
+ - spec/dummy/public/apple-touch-icon.png
140
+ - spec/dummy/public/favicon.ico
141
+ - spec/dummy/spec/factories/bars.rb
142
+ - spec/dummy/spec/factories/foos.rb
143
+ - spec/dummy/spec/models/alfa_spec.rb
144
+ - spec/dummy/spec/models/bravo_spec.rb
145
+ - spec/dummy/spec/models/charlie_spec.rb
146
+ - spec/dummy/spec/models/delta_spec.rb
147
+ - spec/dummy/spec/models/echo_spec.rb
148
+ - spec/dummy/tmp/development_secret.txt
149
+ - spec/lib/dirty_seed/assigners/dirty_assigner_spec.rb
150
+ - spec/lib/dirty_seed/assigners/dirty_boolean_spec.rb
151
+ - spec/lib/dirty_seed/assigners/dirty_date_spec.rb
152
+ - spec/lib/dirty_seed/assigners/dirty_float_spec.rb
153
+ - spec/lib/dirty_seed/assigners/dirty_integer_spec.rb
154
+ - spec/lib/dirty_seed/assigners/dirty_string_spec.rb
155
+ - spec/lib/dirty_seed/assigners/dirty_time_spec.rb
156
+ - spec/lib/dirty_seed/data_model_spec.rb
157
+ - spec/lib/dirty_seed/dirty_association_spec.rb
158
+ - spec/lib/dirty_seed/dirty_attribute_spec.rb
159
+ - spec/lib/dirty_seed/dirty_model_spec.rb
160
+ - spec/lib/dirty_seed/sorter_spec.rb
161
+ - spec/lib/tasks/dirty_seed_tasks_spec.rb
162
+ - spec/rails_helper.rb
163
+ - spec/support/helpers.rb
164
+ homepage: https://github.com/BigBigDoudou/dirty_seed
165
+ licenses:
166
+ - MIT
167
+ metadata: {}
168
+ post_install_message:
169
+ rdoc_options: []
170
+ require_paths:
171
+ - lib
172
+ required_ruby_version: !ruby/object:Gem::Requirement
173
+ requirements:
174
+ - - ">="
175
+ - !ruby/object:Gem::Version
176
+ version: '2.6'
177
+ required_rubygems_version: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - ">="
180
+ - !ruby/object:Gem::Version
181
+ version: '0'
182
+ requirements: []
183
+ rubygems_version: 3.1.4
184
+ signing_key:
185
+ specification_version: 4
186
+ summary: Summary of DirtySeed.
187
+ test_files:
188
+ - spec/lib/dirty_seed/assigners/dirty_assigner_spec.rb
189
+ - spec/lib/dirty_seed/assigners/dirty_time_spec.rb
190
+ - spec/lib/dirty_seed/assigners/dirty_string_spec.rb
191
+ - spec/lib/dirty_seed/assigners/dirty_float_spec.rb
192
+ - spec/lib/dirty_seed/assigners/dirty_date_spec.rb
193
+ - spec/lib/dirty_seed/assigners/dirty_boolean_spec.rb
194
+ - spec/lib/dirty_seed/assigners/dirty_integer_spec.rb
195
+ - spec/lib/dirty_seed/data_model_spec.rb
196
+ - spec/lib/dirty_seed/dirty_model_spec.rb
197
+ - spec/lib/dirty_seed/dirty_association_spec.rb
198
+ - spec/lib/dirty_seed/dirty_attribute_spec.rb
199
+ - spec/lib/dirty_seed/sorter_spec.rb
200
+ - spec/lib/tasks/dirty_seed_tasks_spec.rb
201
+ - spec/dummy/config.ru
202
+ - spec/dummy/public/apple-touch-icon.png
203
+ - spec/dummy/public/apple-touch-icon-precomposed.png
204
+ - spec/dummy/public/404.html
205
+ - spec/dummy/public/favicon.ico
206
+ - spec/dummy/public/500.html
207
+ - spec/dummy/public/422.html
208
+ - spec/dummy/db/development.sqlite3
209
+ - spec/dummy/db/schema.rb
210
+ - spec/dummy/db/test.sqlite3
211
+ - spec/dummy/db/migrate/20200923100334_create_hotels.rb
212
+ - spec/dummy/db/migrate/20200923100335_create_indias.rb
213
+ - spec/dummy/db/migrate/20200923100336_create_julietts.rb
214
+ - spec/dummy/db/migrate/20200923100337_create_kilos.rb
215
+ - spec/dummy/db/migrate/20200923100330_create_deltas.rb
216
+ - spec/dummy/db/migrate/20200923100332_create_foxtrots.rb
217
+ - spec/dummy/db/migrate/20200923100317_create_alfas.rb
218
+ - spec/dummy/db/migrate/20200923100329_create_charlies.rb
219
+ - spec/dummy/db/migrate/20200923100328_create_bravos.rb
220
+ - spec/dummy/db/migrate/20200923100331_create_echos.rb
221
+ - spec/dummy/config/routes.rb
222
+ - spec/dummy/config/puma.rb
223
+ - spec/dummy/config/environment.rb
224
+ - spec/dummy/config/initializers/inflections.rb
225
+ - spec/dummy/config/initializers/mime_types.rb
226
+ - spec/dummy/config/initializers/backtrace_silencers.rb
227
+ - spec/dummy/config/initializers/cookies_serializer.rb
228
+ - spec/dummy/config/initializers/filter_parameter_logging.rb
229
+ - spec/dummy/config/initializers/wrap_parameters.rb
230
+ - spec/dummy/config/initializers/application_controller_renderer.rb
231
+ - spec/dummy/config/initializers/assets.rb
232
+ - spec/dummy/config/initializers/content_security_policy.rb
233
+ - spec/dummy/config/cable.yml
234
+ - spec/dummy/config/boot.rb
235
+ - spec/dummy/config/locales/en.yml
236
+ - spec/dummy/config/environments/test.rb
237
+ - spec/dummy/config/environments/development.rb
238
+ - spec/dummy/config/environments/production.rb
239
+ - spec/dummy/config/database.yml
240
+ - spec/dummy/config/application.rb
241
+ - spec/dummy/config/storage.yml
242
+ - spec/dummy/config/spring.rb
243
+ - spec/dummy/Rakefile
244
+ - spec/dummy/log/development.log
245
+ - spec/dummy/log/test.log
246
+ - spec/dummy/app/javascript/packs/application.js
247
+ - spec/dummy/app/assets/config/manifest.js
248
+ - spec/dummy/app/assets/stylesheets/application.css
249
+ - spec/dummy/app/mailers/application_mailer.rb
250
+ - spec/dummy/app/views/layouts/mailer.text.erb
251
+ - spec/dummy/app/views/layouts/application.html.erb
252
+ - spec/dummy/app/views/layouts/mailer.html.erb
253
+ - spec/dummy/app/jobs/application_job.rb
254
+ - spec/dummy/app/channels/application_cable/channel.rb
255
+ - spec/dummy/app/channels/application_cable/connection.rb
256
+ - spec/dummy/app/helpers/application_helper.rb
257
+ - spec/dummy/app/models/echo.rb
258
+ - spec/dummy/app/models/kilo.rb
259
+ - spec/dummy/app/models/hotel.rb
260
+ - spec/dummy/app/models/alfa.rb
261
+ - spec/dummy/app/models/india.rb
262
+ - spec/dummy/app/models/application_record.rb
263
+ - spec/dummy/app/models/delta.rb
264
+ - spec/dummy/app/models/charlie.rb
265
+ - spec/dummy/app/models/bravo.rb
266
+ - spec/dummy/app/models/juliett.rb
267
+ - spec/dummy/app/models/foxtrot.rb
268
+ - spec/dummy/app/models/golf.rb
269
+ - spec/dummy/app/controllers/application_controller.rb
270
+ - spec/dummy/bin/rake
271
+ - spec/dummy/bin/setup
272
+ - spec/dummy/bin/rails
273
+ - spec/dummy/tmp/development_secret.txt
274
+ - spec/dummy/spec/factories/bars.rb
275
+ - spec/dummy/spec/factories/foos.rb
276
+ - spec/dummy/spec/models/charlie_spec.rb
277
+ - spec/dummy/spec/models/bravo_spec.rb
278
+ - spec/dummy/spec/models/alfa_spec.rb
279
+ - spec/dummy/spec/models/delta_spec.rb
280
+ - spec/dummy/spec/models/echo_spec.rb
281
+ - spec/support/helpers.rb
282
+ - spec/rails_helper.rb