dirty_seed 0.1.7 → 0.1.8
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/README.md +4 -2
- data/lib/dirty_seed.rb +15 -11
- data/lib/dirty_seed/assigners/assigner.rb +73 -0
- data/lib/dirty_seed/assigners/base.rb +86 -0
- data/lib/dirty_seed/assigners/{dirty_boolean.rb → boolean.rb} +2 -2
- data/lib/dirty_seed/assigners/{dirty_date.rb → date.rb} +2 -2
- data/lib/dirty_seed/assigners/fakers.yml +64 -1
- data/lib/dirty_seed/assigners/float.rb +21 -0
- data/lib/dirty_seed/assigners/integer.rb +20 -0
- data/lib/dirty_seed/assigners/min_max_helper.rb +115 -0
- data/lib/dirty_seed/assigners/{dirty_number.rb → number.rb} +2 -2
- data/lib/dirty_seed/assigners/string.rb +39 -0
- data/lib/dirty_seed/assigners/{dirty_time.rb → time.rb} +2 -2
- data/lib/dirty_seed/{dirty_association.rb → association.rb} +6 -17
- data/lib/dirty_seed/attribute.rb +62 -0
- data/lib/dirty_seed/data_model.rb +17 -18
- data/lib/dirty_seed/method_missing_helper.rb +1 -1
- data/lib/dirty_seed/{dirty_model.rb → model.rb} +81 -33
- data/lib/dirty_seed/version.rb +1 -1
- data/spec/dummy/app/models/bravo.rb +2 -1
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +2 -0
- data/spec/dummy/log/test.log +62192 -0
- data/spec/lib/dirty_seed/assigners/assigner_spec.rb +19 -0
- data/spec/lib/dirty_seed/assigners/base_spec.rb +81 -0
- data/spec/lib/dirty_seed/assigners/boolean_spec.rb +13 -0
- data/spec/lib/dirty_seed/assigners/date_spec.rb +15 -0
- data/spec/lib/dirty_seed/assigners/float_spec.rb +43 -0
- data/spec/lib/dirty_seed/assigners/integer_spec.rb +43 -0
- data/spec/lib/dirty_seed/assigners/string_spec.rb +47 -0
- data/spec/lib/dirty_seed/assigners/time_spec.rb +15 -0
- data/spec/lib/dirty_seed/association_spec.rb +64 -0
- data/spec/lib/dirty_seed/attribute_spec.rb +49 -0
- data/spec/lib/dirty_seed/data_model_spec.rb +8 -36
- data/spec/lib/dirty_seed/{dirty_model_spec.rb → model_spec.rb} +13 -13
- data/spec/support/helpers.rb +5 -5
- metadata +37 -33
- data/lib/dirty_seed/assigners/dirty_assigner.rb +0 -95
- data/lib/dirty_seed/assigners/dirty_float.rb +0 -35
- data/lib/dirty_seed/assigners/dirty_integer.rb +0 -16
- data/lib/dirty_seed/assigners/dirty_string.rb +0 -74
- data/lib/dirty_seed/dirty_attribute.rb +0 -75
- data/spec/lib/dirty_seed/assigners/dirty_assigner_spec.rb +0 -68
- data/spec/lib/dirty_seed/assigners/dirty_boolean_spec.rb +0 -13
- data/spec/lib/dirty_seed/assigners/dirty_date_spec.rb +0 -15
- data/spec/lib/dirty_seed/assigners/dirty_float_spec.rb +0 -43
- data/spec/lib/dirty_seed/assigners/dirty_integer_spec.rb +0 -43
- data/spec/lib/dirty_seed/assigners/dirty_string_spec.rb +0 -53
- data/spec/lib/dirty_seed/assigners/dirty_time_spec.rb +0 -15
- data/spec/lib/dirty_seed/dirty_association_spec.rb +0 -64
- data/spec/lib/dirty_seed/dirty_attribute_spec.rb +0 -49
@@ -1,68 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'rails_helper'
|
4
|
-
|
5
|
-
RSpec.describe DirtySeed::Assigners::DirtyAssigner do
|
6
|
-
let(:dirty_attribute) { build_dirty_attribute(type: :integer) }
|
7
|
-
|
8
|
-
describe '#initialize' do
|
9
|
-
it 'instantiates an instance' do
|
10
|
-
expect(described_class.new(dirty_attribute)).to be_a described_class
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
describe 'absent' do
|
15
|
-
context 'when value should be absent' do
|
16
|
-
it 'returns nil' do
|
17
|
-
bravos = DirtySeed::DataModel.bravo.seed(10)
|
18
|
-
expect(bravos.map(&:an_absent_value).all?(&:nil?)).to be true
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
describe 'inclusion' do
|
24
|
-
context 'when value should be one of options' do
|
25
|
-
let(:bravos) { DirtySeed::DataModel.bravo.seed(10) }
|
26
|
-
|
27
|
-
it 'returns a value from options [strings]' do
|
28
|
-
expect(
|
29
|
-
bravos.map(&:a_string_from_options).all? { |v| v.in? %w[foo bar zed] }
|
30
|
-
).to be true
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'returns a value from options [integers]' do
|
34
|
-
expect(
|
35
|
-
bravos.map(&:an_integer_from_options).all? { |v| v.in? [15, 30, 45] }
|
36
|
-
).to be true
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
describe 'uniqueness' do
|
42
|
-
context 'when value should be unique' do
|
43
|
-
it 'returns unique values or nil' do
|
44
|
-
bravos = DirtySeed::DataModel.bravo.seed(20)
|
45
|
-
expect(bravos.map(&:a_unique_value).count(&:nil?)).to eq 10
|
46
|
-
expect(bravos.map(&:a_unique_value).compact).to eq bravos.map(&:a_unique_value).compact.uniq
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
describe '#unique?', skip: 'has been set private' do
|
52
|
-
let(:assigner) { described_class.new(dirty_attribute) }
|
53
|
-
|
54
|
-
context 'when there is a uniqueness validation' do
|
55
|
-
it 'returns true' do
|
56
|
-
validator = ActiveModel::Validations::NumericalityValidator.new(attributes: :fake, uniqueness: true)
|
57
|
-
allow(assigner.dirty_attribute).to receive(:validators).and_return([validator])
|
58
|
-
expect(assigner.unique?).to be true
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
context 'when there is no uniqueness validation' do
|
63
|
-
it 'returns false' do
|
64
|
-
expect(assigner.unique?).to be false
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'rails_helper'
|
4
|
-
|
5
|
-
RSpec.describe DirtySeed::Assigners::DirtyBoolean do
|
6
|
-
let(:dirty_attribute) { build_dirty_attribute(type: :boolean) }
|
7
|
-
|
8
|
-
describe '#define_value' do
|
9
|
-
it 'returns a Boolean' do
|
10
|
-
expect(described_class.new(dirty_attribute).define_value).to be_in([true, false])
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'rails_helper'
|
4
|
-
|
5
|
-
RSpec.describe DirtySeed::Assigners::DirtyDate do
|
6
|
-
let(:dirty_attribute) { build_dirty_attribute(type: :date) }
|
7
|
-
|
8
|
-
describe '#define_value' do
|
9
|
-
context 'when there are no validators' do
|
10
|
-
it 'returns a Date' do
|
11
|
-
expect(described_class.new(dirty_attribute).define_value).to be_a Date
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'rails_helper'
|
4
|
-
|
5
|
-
RSpec.describe DirtySeed::Assigners::DirtyFloat do
|
6
|
-
let(:dirty_attribute) { build_dirty_attribute(type: :float) }
|
7
|
-
|
8
|
-
describe '#define_value' do
|
9
|
-
context 'when there are no validators' do
|
10
|
-
it 'returns an integer' do
|
11
|
-
expect(described_class.new(dirty_attribute).define_value).to be_a Float
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
context 'when there is greater_than validator' do
|
16
|
-
it 'returns an integer greater than the requirement' do
|
17
|
-
assigner = described_class.new(dirty_attribute)
|
18
|
-
validator = ActiveModel::Validations::NumericalityValidator.new(attributes: :fake, greater_than: 1_000)
|
19
|
-
allow(assigner.dirty_attribute).to receive(:validators).and_return([validator])
|
20
|
-
5.times { expect(assigner.define_value).to be >= 1_000 }
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
context 'when there is less_than validator' do
|
25
|
-
it 'returns an integer less than the requirement' do
|
26
|
-
assigner = described_class.new(dirty_attribute)
|
27
|
-
validator = ActiveModel::Validations::NumericalityValidator.new(attributes: :fake, less_than: -1_000)
|
28
|
-
allow(assigner.dirty_attribute).to receive(:validators).and_return([validator])
|
29
|
-
5.times { expect(assigner.define_value).to be < -1_000 }
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
context 'when there are less_than and greater_than validators' do
|
34
|
-
it 'returns an integer greater than and less than the requirements' do
|
35
|
-
greater_than = ActiveModel::Validations::NumericalityValidator.new(attributes: :fake, greater_than: 0)
|
36
|
-
less_than = ActiveModel::Validations::NumericalityValidator.new(attributes: :fake, less_than: 1)
|
37
|
-
assigner = described_class.new(dirty_attribute)
|
38
|
-
allow(assigner.dirty_attribute).to(receive(:validators).and_return([greater_than, less_than]))
|
39
|
-
5.times { expect(assigner.define_value).to be_between(0, 1).exclusive }
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'rails_helper'
|
4
|
-
|
5
|
-
RSpec.describe DirtySeed::Assigners::DirtyInteger do
|
6
|
-
let(:dirty_attribute) { build_dirty_attribute(type: :integer) }
|
7
|
-
|
8
|
-
describe '#define_value' do
|
9
|
-
context 'when there are no validators' do
|
10
|
-
it 'returns an integer' do
|
11
|
-
expect(described_class.new(dirty_attribute).define_value).to be_an Integer
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
context 'when there is greater_than validator' do
|
16
|
-
it 'returns an integer greater than the requirement' do
|
17
|
-
assigner = described_class.new(dirty_attribute)
|
18
|
-
validator = ActiveModel::Validations::NumericalityValidator.new(attributes: :fake, greater_than: 1_000)
|
19
|
-
allow(assigner.dirty_attribute).to receive(:validators).and_return([validator])
|
20
|
-
5.times { expect(assigner.define_value).to be >= 1_000 }
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
context 'when there is less_than validator' do
|
25
|
-
it 'returns an integer less than the requirement' do
|
26
|
-
assigner = described_class.new(dirty_attribute)
|
27
|
-
validator = ActiveModel::Validations::NumericalityValidator.new(attributes: :fake, less_than: -1_000)
|
28
|
-
allow(assigner.dirty_attribute).to receive(:validators).and_return([validator])
|
29
|
-
5.times { expect(assigner.define_value).to be < -1_000 }
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
context 'when there are less_than and greater_than validators' do
|
34
|
-
it 'returns an integer greater than and less than the requirements' do
|
35
|
-
greater_than = ActiveModel::Validations::NumericalityValidator.new(attributes: :fake, greater_than: 1)
|
36
|
-
less_than = ActiveModel::Validations::NumericalityValidator.new(attributes: :fake, less_than: 5)
|
37
|
-
assigner = described_class.new(dirty_attribute)
|
38
|
-
allow(assigner.dirty_attribute).to receive(:validators).and_return([greater_than, less_than])
|
39
|
-
5.times { expect(assigner.define_value).to be_between(1, 5).exclusive }
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'rails_helper'
|
4
|
-
|
5
|
-
RSpec.describe DirtySeed::Assigners::DirtyString do
|
6
|
-
let(:data_model) { DirtySeed::DataModel }
|
7
|
-
let(:dirty_attribute) { build_dirty_attribute(type: :string) }
|
8
|
-
|
9
|
-
describe '#define_value' do
|
10
|
-
context 'when there are no validators' do
|
11
|
-
it 'returns a String' do
|
12
|
-
expect(described_class.new(dirty_attribute).define_value).to be_a String
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
context 'when value should match pattern' do
|
17
|
-
it 'returns a value matching the pattern' do
|
18
|
-
dirty_attribute = build_dirty_attribute(type: :string)
|
19
|
-
assigner = described_class.new(dirty_attribute)
|
20
|
-
regex = /\w{10}@(hotmail|gmail)\.com/
|
21
|
-
validator = ActiveModel::Validations::FormatValidator.new(attributes: :fake, with: regex)
|
22
|
-
allow(assigner.dirty_attribute).to receive(:validators).and_return([validator])
|
23
|
-
expect(assigner.value).to match(regex)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
context 'when meaning can be guessed' do
|
28
|
-
it 'returns a meaningfull String [email]' do
|
29
|
-
email_attribute = build_dirty_attribute(name: :email, type: :string)
|
30
|
-
assigner = described_class.new(email_attribute)
|
31
|
-
expect(assigner.value).to match(URI::MailTo::EMAIL_REGEXP)
|
32
|
-
end
|
33
|
-
|
34
|
-
it 'returns a meaningfull String [latitude]' do
|
35
|
-
latitude_attribute = build_dirty_attribute(name: :latitude, type: :string)
|
36
|
-
assigner = described_class.new(latitude_attribute)
|
37
|
-
expect(assigner.value.to_s).to match(/-?\d+\.\d+/)
|
38
|
-
end
|
39
|
-
|
40
|
-
it 'returns a meaningfull String [locale]' do
|
41
|
-
locale_attribute = build_dirty_attribute(name: :locale, type: :string)
|
42
|
-
assigner = described_class.new(locale_attribute)
|
43
|
-
expect(assigner.value).to match(/[A-Z]{2}/)
|
44
|
-
end
|
45
|
-
|
46
|
-
it 'returns a meaningfull String [uuid]' do
|
47
|
-
uuid_attribute = build_dirty_attribute(name: :uuid, type: :string)
|
48
|
-
assigner = described_class.new(uuid_attribute)
|
49
|
-
expect(assigner.value).to match(/([a-z]|-|\d){36}/)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'rails_helper'
|
4
|
-
|
5
|
-
RSpec.describe DirtySeed::Assigners::DirtyTime do
|
6
|
-
let(:dirty_attribute) { build_dirty_attribute(type: :time) }
|
7
|
-
|
8
|
-
describe '#define_value' do
|
9
|
-
context 'when there are no validators' do
|
10
|
-
it 'returns a Time' do
|
11
|
-
expect(described_class.new(dirty_attribute).define_value).to be_a Time
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
@@ -1,64 +0,0 @@
|
|
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
|
@@ -1,49 +0,0 @@
|
|
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
|