versioned_seeds 0.0.1

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.
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'http://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in versioned_seeds.gemspec
4
+ gemspec
data/README.mdown ADDED
@@ -0,0 +1,52 @@
1
+ # Versioned Seeds
2
+
3
+ Versioned Seeds is an alternative to Rails seeds. It allows to store your seeds in several files and prevent from re-seeding.
4
+
5
+ Rails seeds are great when you create a project but what about new ones when the project is already running ? When you have to import some data from a CSV file ?
6
+
7
+ Versioned Seeds provides a simple, conventions based, way to do that.
8
+
9
+ ## Installation
10
+
11
+ gem 'versioned_seeds', :require => false
12
+
13
+ ## Usage
14
+
15
+ You can get the last imported seeds version :
16
+
17
+ $ rake vs:status
18
+ Last seeds: 0
19
+
20
+ Given two seeds files :
21
+
22
+ ``` ruby
23
+ # db/seeds/001_create_users.rb
24
+ User.create!(:username => 'admin', :password => 'password', :admin => true)
25
+ User.create!(:username => 'user1', :password => 'password')
26
+
27
+ # db/seeds/002_import_articles.rb
28
+ require 'csv'
29
+
30
+ CSV.foreach('/some/file.csv') do |line|
31
+ # ...
32
+ end
33
+ ```
34
+
35
+ You can import only the first one by using the `vs:next` task :
36
+
37
+ $ rake vs:next
38
+ Loading: 001_create_users.rb
39
+
40
+ $ rake vs:status
41
+ Last seeds: 1
42
+
43
+ Or load all files using the `vs:all` task :
44
+
45
+ $ rake vs:all
46
+ Loading: 001_create_users.rb
47
+ Loading: 002_import_articles.rb
48
+
49
+ $ rake vs:status
50
+ Last seeds: 2
51
+
52
+ Once you're at some version, any file with a version equal or inferior to that version will not be imported next time.
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
@@ -0,0 +1,18 @@
1
+ require 'versioned_seeds'
2
+
3
+ namespace :vs do
4
+ desc "Display current seeds version"
5
+ task :status do
6
+ puts "Last seeds: #{VersionedSeeds.current_version}"
7
+ end
8
+
9
+ desc "Task description"
10
+ task :next => :environment do
11
+ VersionedSeeds.next
12
+ end
13
+
14
+ desc "Task description"
15
+ task :all => :environment do
16
+ VersionedSeeds.all
17
+ end
18
+ end
@@ -0,0 +1,12 @@
1
+ require 'versioned_seeds'
2
+ require 'rails'
3
+
4
+ module VersionedSeeds
5
+ class Railtie < Rails::Railtie
6
+ railtie_name :versioned_seeds
7
+
8
+ rake_tasks do
9
+ load "tasks/versioned_seeds.rake"
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,3 @@
1
+ module VersionedSeeds
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,54 @@
1
+ require "ostruct"
2
+ require "versioned_seeds/version"
3
+
4
+ module VersionedSeeds
5
+ require "versioned_seeds/railtie" if defined?(Rails)
6
+
7
+ class << self
8
+ def next(version=current_version)
9
+ load next_seeds(version)
10
+ end
11
+
12
+ def all(version=current_version)
13
+ load all_seeds(version)
14
+ end
15
+
16
+ def load(seeds)
17
+ last_version = seeds.inject(false) do |version, seed|
18
+ puts "Loading: #{File.basename seed.file}"
19
+ require seed.file
20
+ seed.version
21
+ end
22
+ write_version last_version if last_version
23
+ end
24
+
25
+ def next_seeds(version=current_version)
26
+ seeds.keep_if { |seed| seed.version == version.next }
27
+ end
28
+
29
+ def all_seeds(version=current_version)
30
+ seeds.keep_if { |seed| seed.version > version }
31
+ end
32
+
33
+ def seeds
34
+ Dir[Rails.root+'db/seeds/*.rb'].inject([]) { |list, file|
35
+ filename = File.basename(file)
36
+ version = filename.to_i
37
+ list << OpenStruct.new(:file => file, :version => version)
38
+ list
39
+ }.sort { |seed1, seed2| seed1.version <=> seed2.version }
40
+ end
41
+
42
+ def write_version(version)
43
+ File.open(Rails.root+'.versioned_seeds', 'w') do |f|
44
+ f.puts version
45
+ end
46
+ end
47
+
48
+ def current_version
49
+ file = Rails.root+'.versioned_seeds'
50
+ return 0 unless File.exists?(file)
51
+ File.read(file).to_i
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,17 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/versioned_seeds/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Simon COURTOIS"]
6
+ gem.email = ["scourtois@cubyx.fr"]
7
+ gem.description = %q{Manage your seed scripts by versioning them}
8
+ gem.summary = %q{Versioned Seeds provides a very simple way to manage your seed scripts by versioning them. It provides rake tasks to load them.}
9
+ gem.homepage = "http://github.com/simonc/versioned_seeds"
10
+
11
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
12
+ gem.files = `git ls-files`.split("\n")
13
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
14
+ gem.name = "versioned_seeds"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = VersionedSeeds::VERSION
17
+ end
metadata ADDED
@@ -0,0 +1,55 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: versioned_seeds
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Simon COURTOIS
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-11-27 00:00:00.000000000Z
13
+ dependencies: []
14
+ description: Manage your seed scripts by versioning them
15
+ email:
16
+ - scourtois@cubyx.fr
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - .gitignore
22
+ - Gemfile
23
+ - README.mdown
24
+ - Rakefile
25
+ - lib/tasks/versioned_seeds.rake
26
+ - lib/versioned_seeds.rb
27
+ - lib/versioned_seeds/railtie.rb
28
+ - lib/versioned_seeds/version.rb
29
+ - versioned_seeds.gemspec
30
+ homepage: http://github.com/simonc/versioned_seeds
31
+ licenses: []
32
+ post_install_message:
33
+ rdoc_options: []
34
+ require_paths:
35
+ - lib
36
+ required_ruby_version: !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ! '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ required_rubygems_version: !ruby/object:Gem::Requirement
43
+ none: false
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ requirements: []
49
+ rubyforge_project:
50
+ rubygems_version: 1.8.10
51
+ signing_key:
52
+ specification_version: 3
53
+ summary: Versioned Seeds provides a very simple way to manage your seed scripts by
54
+ versioning them. It provides rake tasks to load them.
55
+ test_files: []