squasher 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 32c691bc42a70dbb727f6c865fc4ed20fccdaa5b
4
- data.tar.gz: 44f0be362840e69d663491d6596adf24bd45e541
3
+ metadata.gz: 60335f7e6ad04a4db267dd1ad99152aa02d79242
4
+ data.tar.gz: 4c17e356d84255ae3177094facf40904845e8223
5
5
  SHA512:
6
- metadata.gz: 69f6385a5155b6eb0c6893822ec8aedf055fdd566fb6cc10a35482cdc5f9dbf26c4234b2a7679b255ebb2784cae0190ede0d7daf7192d069fcb05ef5a06ac0b4
7
- data.tar.gz: 378315cdd0c0e263611fee16c32b4e2952f89333550b8698232eac8e3485163ab08b67873c247e215a3d267bb6f5dced5ce02ccbd6fb234653b312a6f62e20c7
6
+ metadata.gz: 74cd4d6ba164431b5ab92d2a57af1ac197a3cf66b790332386d29c0e305c448b4063e9119f7d22b9623a7d4145d387de7ac77ef38dfeaa216baafe86b716c20f
7
+ data.tar.gz: f6b728c61110d26e8fa647b58b8e37a02ceac6ac32f74fb6111eec377f475d983faa59d74be91ce633447e82c40fd2a2625b19fba1fd48c1d229c355c4baa735
@@ -8,3 +8,5 @@ rvm:
8
8
  - 2.2
9
9
  - 2.1
10
10
  - 2.0
11
+ notifications:
12
+ email: false
@@ -1,10 +1,34 @@
1
1
  #!/usr/bin/env ruby
2
+ lib = File.expand_path('../../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'optparse'
2
5
  require 'squasher'
3
6
 
4
- if ARGV[0] == 'clean'
5
- Squasher.clean
6
- elsif ARGV[-1] =~ /\A\d{4}/
7
- Squasher.squash(ARGV[-1], ARGV[0...-1])
7
+ options = {}
8
+ parser = OptionParser.new do |config|
9
+ config.on('-v', '--version', '-h', '--help')
10
+
11
+ config.on('-d', '--dry') do
12
+ options[:dry] = true
13
+ end
14
+
15
+ config.on('-r', '--reuse') do
16
+ options[:reuse] = true
17
+ end
18
+
19
+ config.on('-e', '--engine=PATH') do |value|
20
+ options[:engine] = value
21
+ end
22
+
23
+ config.on('-m', '--migration', '=VERSION') do |value|
24
+ options[:migration] = value
25
+ end
26
+ end
27
+ parser.parse!
28
+
29
+ case ARGV.first
30
+ when /\A\d{4}/ then Squasher.squash(ARGV.first, options)
31
+ when 'clean' then Squasher.clean(options)
8
32
  else
9
- Squasher.tell(:usage)
33
+ Squasher.tell(:usage, version: Squasher::VERSION)
10
34
  end
@@ -4,6 +4,7 @@ module Squasher
4
4
  autoload :Cleaner, 'squasher/cleaner'
5
5
  autoload :Config, 'squasher/config'
6
6
  autoload :Render, 'squasher/render'
7
+ autoload :VERSION, 'squasher/version'
7
8
  autoload :Worker, 'squasher/worker'
8
9
 
9
10
  attr_reader :config
@@ -13,28 +14,12 @@ module Squasher
13
14
  def squash(raw_date, options)
14
15
  parts = raw_date.to_s.split('/').map(&:to_i)
15
16
  date = Time.new(*parts)
16
-
17
- options.reduce([]) do |acc, arg|
18
- if arg.index('-') == 0
19
- arg = arg.gsub('-', '').to_sym
20
- unless Config::OPTIONS.include?(arg)
21
- tell(:wrong_option, arg: arg)
22
- error(:usage)
23
- end
24
- acc.push([arg])
25
- elsif acc.empty?
26
- tell(:invalid_param, arg: arg)
27
- error(:usage)
28
- else
29
- acc.last[1] = arg
30
- end
31
- acc
32
- end.each { |(k, v)| config.set(k, v) }
33
-
17
+ options.each { |(k, v)| config.set(k, v) }
34
18
  Worker.process(date)
35
19
  end
36
20
 
37
- def clean
21
+ def clean(options)
22
+ options.each { |(k, v)| config.set(k, v) }
38
23
  Cleaner.process
39
24
  end
40
25
 
@@ -13,11 +13,10 @@ module Squasher
13
13
 
14
14
  migration_file = config.migration_file(now_timestamp, MIGRATION_NAME)
15
15
  if prev_migration
16
- FileUtils.mv(prev_migration, migration_file)
17
- else
18
- File.open(migration_file, 'wb') do |stream|
19
- stream << ::Squasher::Render.render(MIGRATION_NAME, config)
20
- end
16
+ FileUtils.rm(prev_migration)
17
+ end
18
+ File.open(migration_file, 'wb') do |stream|
19
+ stream << ::Squasher::Render.render(MIGRATION_NAME, config)
21
20
  end
22
21
  Squasher.rake("db:migrate", :db_cleaning)
23
22
  end
@@ -4,8 +4,6 @@ require 'erb'
4
4
 
5
5
  module Squasher
6
6
  class Config
7
- OPTIONS = [:d, :r, :e, :m].freeze
8
-
9
7
  module Render
10
8
  extend self
11
9
 
@@ -45,7 +43,7 @@ module Squasher
45
43
  end
46
44
 
47
45
  def set(key, value)
48
- if key == :e
46
+ if key == :engine
49
47
  base = value.nil? ? @root_path : File.expand_path(value, @root_path)
50
48
  list = Dir.glob(File.join(base, '**', '*', 'config', 'application.rb'))
51
49
  case list.size
@@ -56,7 +54,7 @@ module Squasher
56
54
  else
57
55
  Squasher.error(:multi_dummy_case, base: base)
58
56
  end
59
- elsif key == :m
57
+ elsif key == :migration
60
58
  Squasher.error(:invalid_migration_version, value: value) unless value.to_s =~ /\A\d.\d\z/
61
59
  @migration_version = "[#{value}]"
62
60
  else
@@ -64,7 +62,7 @@ module Squasher
64
62
  end
65
63
  end
66
64
 
67
- def with?(k)
65
+ def set?(k)
68
66
  @flags.include?(k)
69
67
  end
70
68
 
@@ -15,7 +15,9 @@ db_migrate: Squasher is applying migrations on a tmp database
15
15
  db_cleaning: Squasher is applying the clean migration
16
16
  db_reuse: Squasher is reusing the database from the previous squashing
17
17
  usage:
18
- - "Example usage:"
18
+ - "Squasher %{version}"
19
+ - ""
20
+ - "Examples of usage:"
19
21
  - " :green<squasher> [options] :yellow<year[/month][/day]> => squash migrations prior to a specified date"
20
22
  - " :green<squasher> :yellow<clean> => generate or update a cleaning migration and apply it"
21
23
  - " :green<squasher> :yellow<info> => show the message\n"
@@ -0,0 +1,3 @@
1
+ module Squasher
2
+ VERSION = "0.5.0"
3
+ end
@@ -16,7 +16,7 @@ module Squasher
16
16
  check!
17
17
 
18
18
  result = under_squash_env do
19
- if Squasher.config.with?(:d)
19
+ if Squasher.config.set?(:dry)
20
20
  Squasher.tell(:dry_mode_finished)
21
21
  puts Render.render(:init_schema, config)
22
22
  else
@@ -66,7 +66,7 @@ module Squasher
66
66
 
67
67
  def under_squash_env
68
68
  config.stub_dbconfig do
69
- if Squasher.config.with?(:r)
69
+ if Squasher.config.set?(:reuse)
70
70
  Squasher.tell(:db_reuse)
71
71
  else
72
72
  return unless Squasher.rake("db:drop db:create", :db_create)
@@ -15,7 +15,7 @@ describe Squasher::Cleaner do
15
15
 
16
16
  it 'create a new migration' do
17
17
  allow_any_instance_of(Squasher::Cleaner).to receive(:prev_migration).and_return(nil)
18
- Squasher.clean
18
+ Squasher.clean({})
19
19
 
20
20
  expect(clean_migrations).to include(expected_file)
21
21
  File.open(expected_file) do |stream|
@@ -25,7 +25,7 @@ describe Squasher::Cleaner do
25
25
  end
26
26
 
27
27
  it 'update an existing migration' do
28
- Squasher.clean
28
+ Squasher.clean({})
29
29
 
30
30
  expect(clean_migrations.size).to be(1)
31
31
  expect(clean_migrations.first).to eq(expected_file)
@@ -58,7 +58,7 @@ describe Squasher::Config do
58
58
 
59
59
  specify "generate versioned migrations" do
60
60
  config = Squasher::Config.new
61
- config.set(:m, '5.1')
61
+ config.set(:migration, '5.1')
62
62
  content = Squasher::Render.render(:init_schema, config)
63
63
  expect(content).to include('ActiveRecord::Migration[5.1]')
64
64
  end
@@ -56,7 +56,7 @@ describe Squasher::Worker do
56
56
  end
57
57
 
58
58
  specify 'the dry mode' do
59
- Squasher.config.set(:d, nil)
59
+ Squasher.config.set(:dry, nil)
60
60
  worker = described_class.new(Time.new(2014))
61
61
  allow(worker).to receive(:under_squash_env).and_yield.and_return(true)
62
62
  expect(Squasher).to receive(:tell).with(:dry_mode_finished).and_call_original
@@ -67,7 +67,7 @@ describe Squasher::Worker do
67
67
  end
68
68
 
69
69
  specify 'reuse of an existing database' do
70
- Squasher.config.set(:r, nil)
70
+ Squasher.config.set(:reuse, nil)
71
71
  worker = described_class.new(Time.new(2014))
72
72
  expect(Squasher).to receive(:tell).with(:db_reuse).and_call_original
73
73
  expect(Squasher).not_to receive(:rake).with("db:drop db:create", :db_create)
@@ -1,11 +1,11 @@
1
1
  # encoding: utf-8
2
-
3
2
  lib = File.expand_path('../lib', __FILE__)
4
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'squasher/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "squasher"
8
- spec.version = "0.4.0"
8
+ spec.version = Squasher::VERSION
9
9
  spec.authors = ["Sergey Pchelintsev"]
10
10
  spec.email = ["linz.sergey@gmail.com"]
11
11
  spec.description = %q{Squash your old migrations}
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: squasher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sergey Pchelintsev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-23 00:00:00.000000000 Z
11
+ date: 2017-09-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -74,6 +74,7 @@ files:
74
74
  - lib/squasher/render.rb
75
75
  - lib/squasher/templates/init_schema.rb.erb
76
76
  - lib/squasher/templates/squasher_clean.rb.erb
77
+ - lib/squasher/version.rb
77
78
  - lib/squasher/worker.rb
78
79
  - spec/fake_app/config/database.yml
79
80
  - spec/fake_app/config/invalid_database.yml