schema_dev 1.2.5 → 1.3.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: 5501878ebb98b75ed4ae0b47daa25a4f4a9d9584
4
- data.tar.gz: 9a8df3284f811dad2d66bea819338c8dff3a3361
3
+ metadata.gz: a9f90059fcb7c1988ac49bab9ce3ef9533d429b8
4
+ data.tar.gz: cd263a6bf93f7b999995c045b8a37fe55175d43c
5
5
  SHA512:
6
- metadata.gz: fb22cb1d8f5b7bbd0560799220d7209eb02a5272a74597f2647e264a100af2de5c70ab4699ce36b81c8ee8c13a6de25b966efcbe25aff7fbe6da9a15061bb575
7
- data.tar.gz: e56887177fa4b182a50ba52503740bfe5f9b591b6b06e62faab706b81d9e09763789c7028a04db397dd7d0df28936da22921d2d00f2f4f7583940c845b66b8e4
6
+ metadata.gz: daa5d2797c86906c01b25636bfb75c58f06a0aee7056b505f76466a9bff948a43f882142d60ffcfc10ae38f6d4c7abaeff13b9dcb9d57dc1df63769c72880b44
7
+ data.tar.gz: 24fe7d3ebc7b35a6ba166c9266e3acac6d249b1de647cac6de859c6a7c92df372c549cade7c655f89405722e91128433c117c08f9274e786d6d4a5a402753769
data/Gemfile CHANGED
@@ -2,3 +2,5 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in schema_dev.gemspec
4
4
  gemspec
5
+
6
+ gem 'byebug'
data/README.md CHANGED
@@ -25,10 +25,12 @@ The client gem needs a file `schema_dev.yml` in it's root, which specifies the t
25
25
  * `db`: A single db adapter, or a list of db adapters.
26
26
  * `quick`: (Optional) Hash listing the version of ruby, rails, and db to use with `--quick` option. If not specified, the default is to use the last entry in each list.
27
27
 
28
+ If you change this file, it's a good idea to run `schema_dev refresh` to update the auto-generated `gemfiles` and `.travis.yml` (see below).
29
+
28
30
  #### Gemfiles
29
31
 
30
32
  The client gem must contain a "gemfiles" directory containing the matrix of
31
- possible gemfiles; Generate it by running
33
+ possible gemfiles; It will be generated/updated automatically by the `schema_dev` script whenever you run a matrix command. You can also generate it explicitly by running
32
34
 
33
35
  $ schema_dev gemfiles
34
36
 
@@ -78,7 +80,7 @@ For PostgreSQL and MySQL you must explicitly create the databases used by the te
78
80
 
79
81
  In the root directory, you can run, e.g.,
80
82
 
81
- $ schema_dev bundle install
83
+ $ schema_dev bundle install # or schema_dev bundle update
82
84
  $ schema_dev rspec
83
85
 
84
86
  Which will run those commands over the whole matrix. You can also specify slices, via any combination of `--ruby`, `--rails` and `--db`
@@ -90,6 +92,20 @@ For convenience you can also use `--quick` to run just one as specified in `sche
90
92
  If you want to pass extra arguments to a command, make sure to use `--` to avoid them being processed by `schema_dev`. e.g.
91
93
 
92
94
  $ schema_dev rspec --quick -- -e 'select which spec'
95
+
96
+ For interactive debugging you may want to run rspec directly from the shell rather than through`schema_dev` (which doesn't give you an interactive ptty). schema_dev echoes each command being run, preceded by a `*`. E.g.
97
+
98
+ $ schema_dev rspec --quick -- -e 'select which spec' -n
99
+
100
+ *** ruby 2.1.5 - rails 4.2 - db postgresql [1 of 1]
101
+
102
+ * /usr/bin/env BUNDLE_GEMFILE=gemfiles/rails-4.2/Gemfile.postgresql SHELL=`which bash` chruby-exec ruby-2.1.5 -- bundle exec rspec -e select\ which\ spec
103
+
104
+
105
+ There's no hidden environment setup; so you can copy and paste the command line into a shell:
106
+
107
+ $ /usr/bin/env BUNDLE_GEMFILE=gemfiles/rails-4.2/Gemfile.postgresql SHELL=`which bash` chruby-exec ruby-2.1.5 -- bundle exec rspec -e select\ which\ spec
108
+
93
109
 
94
110
  For more info, see
95
111
 
data/bin/schema_dev CHANGED
@@ -11,6 +11,8 @@ def runner
11
11
  $runner ||= SchemaDev::Runner.new($config)
12
12
  end
13
13
 
14
+ $cmd = File.basename $0
15
+
14
16
  class CLI < Thor
15
17
 
16
18
  def self.matrix_options
@@ -21,35 +23,40 @@ class CLI < Thor
21
23
  method_option :db, type: :string, desc: "Only execute for the specified database"
22
24
  end
23
25
 
24
- desc "travis", "create .travis.yml based on schema_dev.yml values"
26
+ desc "travis", "create/update .travis.yml based on schema_dev.yml values"
25
27
  def travis
26
28
  runner.travis
27
29
  end
28
30
 
29
- desc "gemfiles", "create gemfiles/* hierarchy based on schema_dev.yml values"
31
+ desc "gemfiles", "create/update gemfiles/* hierarchy based on schema_dev.yml values"
30
32
  def gemfiles
31
33
  runner.gemfiles
32
34
  end
33
35
 
36
+ desc "refresh", "shorthand for runnin both '#{$cmd} travis' and '#{$cmd} gemfiles'"
37
+ def refresh
38
+ runner.refresh
39
+ end
40
+
34
41
  desc "matrix", "run a command over the matrix"
35
42
  matrix_options
36
43
  def matrix(*args)
37
44
  runner.run(args, **options.to_h.symbolize_keys)
38
45
  end
39
46
 
40
- desc "bundle", "shorthand for '#{$0} matrix bundle ...'"
47
+ desc "bundle", "shorthand for '#{$cmd} matrix bundle ...'"
41
48
  matrix_options
42
49
  def bundle(*args)
43
50
  runner.run('bundle', args, **options.to_h.symbolize_keys)
44
51
  end
45
52
 
46
- desc "rake", "shorthand for '#{$0} matrix bundle exec rake ...'"
53
+ desc "rake", "shorthand for '#{$cmd} matrix bundle exec rake ...'"
47
54
  matrix_options
48
55
  def rake(*args)
49
56
  runner.run('bundle', 'exec', 'rake', args, **options.to_h.symbolize_keys)
50
57
  end
51
58
 
52
- desc "rspec", "shorthand for '#{$0} bundle exec rspec ...'"
59
+ desc "rspec", "shorthand for '#{$cmd} bundle exec rspec ...'"
53
60
  matrix_options
54
61
  def rspec(*args)
55
62
  runner.run('bundle', 'exec', 'rspec', args, **options.to_h.symbolize_keys)
@@ -8,38 +8,47 @@ module SchemaDev
8
8
  TEMPLATES_ROOT = Pathname.new(__FILE__).dirname.parent.parent + "templates"
9
9
 
10
10
  def build(config)
11
- @src_root = TEMPLATES_ROOT
12
- @dst_root = Pathname.new('.')
11
+ Dir.mktmpdir do |tmpdir|
12
+ @src_root = TEMPLATES_ROOT
13
+ @dst_root = Pathname.new(tmpdir).realpath
13
14
 
14
- path = Pathname.new("gemfiles")
15
+ relpath = Pathname.new("gemfiles")
16
+ abspath = @dst_root + relpath
17
+ target_abspath = Pathname.new(".").realpath + relpath
15
18
 
16
- _blow_away(path)
19
+ _copy(relpath, 'Gemfile.base')
17
20
 
18
- _copy(path, 'Gemfile.base')
21
+ config.rails.each do |rails|
19
22
 
20
- config.rails.each do |rails|
23
+ rails_path = relpath + "rails-#{rails}"
24
+ _copy(rails_path, 'Gemfile.base')
21
25
 
22
- rails_path = path + "rails-#{rails}"
23
- _copy(rails_path, 'Gemfile.base')
26
+ config.db.each do |db|
27
+ _copy(rails_path, "Gemfile.#{db}")
28
+ end
29
+ end
24
30
 
25
- config.db.each do |db|
26
- _copy(rails_path, "Gemfile.#{db}")
31
+ if `diff -rq #{abspath} gemfiles 2>&1 | grep -v lock`.length == 0
32
+ return false
27
33
  end
34
+
35
+ _blow_away(target_abspath)
36
+ abspath.rename(target_abspath)
37
+ return true
28
38
  end
29
- return true
30
39
  end
31
40
 
32
- def _copy(path, filename)
33
- srcfile = @src_root + path + filename
34
- dstfile = @dst_root + path + filename
41
+ def _copy(relpath, filename)
42
+ srcfile = @src_root + relpath + filename
43
+ dstfile = @dst_root + relpath + filename
35
44
  return unless srcfile.exist?
36
45
 
37
46
  dstfile.dirname.mkpath
38
47
  FileUtils.copy_file(srcfile, dstfile)
39
48
  end
40
49
 
41
- def _blow_away(path)
42
- (@dst_root + path).rmtree
50
+ def _blow_away(relpath)
51
+ (@dst_root + relpath).rmtree
43
52
  rescue Errno::ENOENT
44
53
  end
45
54
  end
@@ -15,11 +15,16 @@ module SchemaDev
15
15
  end
16
16
 
17
17
  def gemfiles
18
- Gemfiles.build(@config) and puts "* Created gemfiles"
18
+ Gemfiles.build(@config) and puts "* Updated gemfiles"
19
+ end
20
+
21
+ def refresh
22
+ self.travis
23
+ self.gemfiles
19
24
  end
20
25
 
21
26
  def run(*args, dry_run: false, quick: false, ruby: nil, rails: nil, db: nil, freshen: true)
22
- self.travis if freshen
27
+ self.refresh if freshen
23
28
 
24
29
  matrix = MatrixExecutor.new @config.matrix(quick: quick, ruby: ruby, rails: rails, db: db)
25
30
 
@@ -1,3 +1,3 @@
1
1
  module SchemaDev
2
- VERSION = "1.2.5"
2
+ VERSION = "1.3.0"
3
3
  end
data/spec/config_spec.rb CHANGED
@@ -49,5 +49,13 @@ describe SchemaDev::Config do
49
49
  { ruby: "2.1.5", rails: "4.1", db: "postgresql" },
50
50
  ]
51
51
  end
52
+
53
+ it "uses last cell for --quick" do
54
+ config = get_config(ruby: %W[1.9.3 2.1.5], rails: %W[4.0 4.1], db: %W[sqlite3 postgresql])
55
+ expect(config.matrix quick: true).to match_array [
56
+ { ruby: "2.1.5", rails: "4.1", db: "postgresql" },
57
+ ]
58
+ end
59
+
52
60
 
53
61
  end
@@ -0,0 +1,10 @@
1
+ require 'schema_dev/gemfile_selector'
2
+
3
+ describe SchemaDev::GemfileSelector do
4
+
5
+ it "infers db from env" do
6
+ test_dbname = 'this_is_a_test'
7
+ ENV['BUNDLE_GEMFILE'] = SchemaDev::GemfileSelector.gemfile(rails: '4.1', db: test_dbname).to_s
8
+ expect(SchemaDev::GemfileSelector.infer_db).to eq test_dbname
9
+ end
10
+ end
@@ -5,11 +5,19 @@ describe SchemaDev::Gemfiles do
5
5
  it "copies listed files" do
6
6
  config = get_config(ruby: %W[1.9.3 2.1.5], rails: %W[4.0 4.1], db: %W[sqlite3 postgresql])
7
7
  in_tmpdir do
8
- SchemaDev::Gemfiles.build(config)
8
+ expect(SchemaDev::Gemfiles.build(config)).to be_truthy
9
9
  expect(relevant_diff(config, "gemfiles")).to be_empty
10
10
  end
11
11
  end
12
12
 
13
+ it "only copies files once" do
14
+ config = get_config(ruby: %W[1.9.3 2.1.5], rails: %W[4.0 4.1], db: %W[sqlite3 postgresql])
15
+ in_tmpdir do
16
+ expect(SchemaDev::Gemfiles.build(config)).to be_truthy
17
+ expect(SchemaDev::Gemfiles.build(config)).to be_falsey
18
+ end
19
+ end
20
+
13
21
  def relevant_diff(config, dir)
14
22
  src = SchemaDev::Gemfiles::TEMPLATES_ROOT + dir
15
23
  diff = `diff -rq #{src} #{dir} 2>&1`.split("\n")
data/spec/runner_spec.rb CHANGED
@@ -6,7 +6,7 @@ describe SchemaDev::Runner do
6
6
  config = get_config(ruby: "2.1.3", rails: "4.0", db: "sqlite3")
7
7
  runner = SchemaDev::Runner.new(config)
8
8
  in_tmpdir do
9
- expect{ runner.gemfiles }.to output("* Created gemfiles\n").to_stdout
9
+ expect{ runner.gemfiles }.to output("* Updated gemfiles\n").to_stdout
10
10
  expect(Pathname.new("gemfiles")).to be_directory
11
11
  end
12
12
  end
@@ -60,6 +60,7 @@ describe SchemaDev::Runner do
60
60
 
61
61
  let(:expected_output) { <<ENDOUTPUT.strip }
62
62
  * Updated .travis.yml
63
+ * Updated gemfiles
63
64
 
64
65
 
65
66
  *** ruby #{RUBY_VERSION} - rails 4.0 - db sqlite3 [1 of 2]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: schema_dev
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.5
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ronen barzel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-30 00:00:00.000000000 Z
11
+ date: 2015-01-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -197,6 +197,7 @@ files:
197
197
  - lib/schema_dev/version.rb
198
198
  - schema_dev.gemspec
199
199
  - spec/config_spec.rb
200
+ - spec/gemfile_sepector_spec.rb
200
201
  - spec/gemfiles_spec.rb
201
202
  - spec/runner_spec.rb
202
203
  - spec/spec_helper.rb
@@ -249,6 +250,7 @@ specification_version: 4
249
250
  summary: SchemaPlus development tools
250
251
  test_files:
251
252
  - spec/config_spec.rb
253
+ - spec/gemfile_sepector_spec.rb
252
254
  - spec/gemfiles_spec.rb
253
255
  - spec/runner_spec.rb
254
256
  - spec/spec_helper.rb