0.0
Repository is archived
No commit activity in last 3 years
No release in over 3 years
A component to auto generate seed data with ActiveRecord using a set of predefined or custom rules respecting models validations
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 1
~> 2
~> 12

Runtime

 Project Readme

Auto-seeding Gem Version Build Status

A component to auto generate seed data with ActiveRecord using a set of predefined or custom rules respecting models validations.

Install

  • Add to Gemfile: gem 'auto-seeding' (better in development group)
  • Edit the seed task:
auto_seeding = AutoSeeding::Seeder.new
3.times.each do
  auto_seeding.update( Author.new ).save!
end

Options

  • conf/seeder: seeding source [nil | :faker | :ffaker] (:faker requires Faker gem, :ffaker requires FFaker gem)
  • conf/file: load seed configuration from a local file
  • auto_create: array of nested associations to create while seeding (useful for has_one associations), ex. [:profile]
  • ignore_attrs: ignore some attributes, ex. [:id, updated_at]
  • skip_associations: array of nested associations to skip while seeding, ex. [:posts]
  • sources: configure sources rules for autoseed data

Conf file: see data folder

Global options (shared between instances):

AutoSeeding::Seeder.config({
  skip_associations: [:versions],
  conf: {
    seeder: :ffaker,
  },
})

Instance options:

autoseeding = AutoSeeding::Seeder.new({
  auto_create: [:profile],       # array of symbols
  conf: {
    file: 'test/conf.yml',       # string
    seeder: :faker,              # symbol - :faker or :ffaker
  },
  ignore_attrs: [:id],           # array of symbols - ignored attributes
  skip_associations: [:author],  # array of symbols - ignored nested associations
  sources: {                     # hash - keys: types, fields
    types: {                     # hash - override basic types rules
      integer: {
        source_model: 'Random',
        source_method: 'rand',
        source_args: '0..100',
      }
    },
    fields: [                    # array of hashes - override fields rules
      {
        in: ['name'],
        source_model: 'Faker::StarWars',
        source_method: 'character',
        type: 'string'
      },
      {
        regexp: '^(.+_|)title(|_.+)$',
        source_model: 'Faker::Book',
        source_method: 'title',
        post_process: '->( val ) { val + " (seeding)" }',
        type: 'string'
      }
    ]
  }
})

Notes

Generated data can be manipulated easily before saving:

obj = auto_seeding.update( Author.new )
obj.name = 'John Doe'
obj.save!

Field names can be changed using append and prepend options - example using Carrierwave remote url property:

AutoSeeding::Seeder.new({
  sources: {
    fields: [
      {
        regexp: '^(.+_|)photo(|_.+)$|^(.+_|)image(|_.+)$',
        source_model: 'Faker::Avatar',
        source_method: 'image',
        prepend: 'remote_',
        append: '_url',
        type: 'string'
      }
    ]
  }
}

To avoid problems with PaperTrail use:

AutoSeeding::Seeder.config({ skip_associations: [:versions] })

Do you like it? Star it!

If you use this component just star it. A developer is more motivated to improve a project when there is some interest.

Contributors

License

MIT