schema_dev 1.4.0 → 2.0.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: 2cb7062449c508b64eba10f96d4654c25c01b1e7
4
- data.tar.gz: bc5dbd89355222666cd98f462e7740348be9be82
3
+ metadata.gz: f1ea08cf350172c2ab73709dd71a577f961aae09
4
+ data.tar.gz: f96afa1f7bbe6224735327391fe49bb9e21cb9a1
5
5
  SHA512:
6
- metadata.gz: 4f126d36df88514c8760faca2fb606797a7e039d6f04369ef381558ee0d14183f85c37598b12c252a14f274369e246e97087fe914fb9e39151c8147d46601bb3
7
- data.tar.gz: 395d6081c0853eda0f040fcf16352918a11d5204e8e72e6cb55f0be053f873b4e4316a05f292d83ad9b8f7c1193036b895043d5dd408d0b0653ef97fba16cf3c
6
+ metadata.gz: 18f9f21f9becb8ec1a5f1fdea351f79b87625451ea173ccbf5abe6fca244675fcd0452872cb0025d83588dfa2526215f9053287cf8575b610f2eec6b6b944231
7
+ data.tar.gz: 714b246726fcbec24ffa397c39e980f604597302c721e86d17201f7f14d220a5f7e70ba293f3d373adcc25b8689cb6b997d156b5f0f73e3b03f3879100531ae8
data/README.md CHANGED
@@ -8,15 +8,19 @@ Development tools for the SchemaPlus family of gems.
8
8
 
9
9
  Provides support for working with multiple ruby versions, rails adapaters, and db versions. In particular provides a command `schema_dev` for running rspec (or whatever) on the matrix or a slice or element of it. It also auto-generates the `.travis.yml` file for [travis-ci](https://travis-ci.org) testing.
10
10
 
11
- ## Installation
11
+ ## Creating a new gem for the SchemaPlus family
12
12
 
13
- Include this as a development dependency in the client gem's `<ame>.gemfile`:
13
+ The `schema_dev` script has a generator for new gems:
14
14
 
15
- s.add_development_dependency "schema_dev"
15
+ $ gem install schema_dev
16
+ $ schema_dev gem new_gem_name
17
+
18
+ Similar to `bundle gem`, this creates a skeleton structure for a new gem. The structure includes appropriate dependencies on [schema_monkey](https://github.com/SchemaPlus/schema_monkey) and on `schema_dev` itself, and creates an initial `schema_dev.yml` file, etc.
19
+
16
20
 
17
- ## Setup
21
+ ## Usage
18
22
 
19
- #### `schema_dev.yml`
23
+ ### schema_dev.yml
20
24
 
21
25
  The client gem needs a file `schema_dev.yml` in it's root, which specifies the testing matrix among other things.
22
26
 
@@ -25,39 +29,7 @@ The client gem needs a file `schema_dev.yml` in it's root, which specifies the t
25
29
  * `db`: A single db adapter, or a list of db adapters.
26
30
  * `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
31
 
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
-
30
- #### Gemfiles
31
-
32
- The client gem must contain a "gemfiles" directory containing the matrix of
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
34
-
35
- $ schema_dev gemfiles
36
-
37
- This directory should be checked in to the git repo.
38
-
39
- `schema_dev gemfiles` only generates gemfiles for the versions of rails &
40
- db listed in `schema_dev.yml`. If you change the listed versions you'll
41
- need to re-generate.
42
-
43
- Note that generating the gemfiles blows away any previous files. If you had made
44
- local changes for some reason, you'll need to rely on git to recover them.
45
-
46
-
47
- #### Rspec
48
-
49
- The client gem should include this in its `spec/spec_helper`
50
-
51
- require 'schema_dev/rspec'
52
- SchemaDev::Rspec.setup_db
53
-
54
- This will take care of connecting to the test database appropriately, and will set up logging to a file specific to the test matrix cell.
55
-
56
- #### Rake
57
-
58
- The client gem should include this in its `Rakefile`:
59
-
60
- require 'schema_dev/tasks'
32
+ If you change this file, it's a good idea to run `schema_dev freshen`
61
33
 
62
34
  ### Ruby selection
63
35
 
@@ -112,8 +84,49 @@ For more info, see
112
84
  $ schema_dev help
113
85
  $ schema_dev help rspec # etc.
114
86
 
115
- ## Generating `.travis.yml`
87
+ ## Auto-generated/updated files
88
+
89
+ Whenever you run a `schema_dev` matrix command, it first freshens the various generated files; you can also run `schema_dev freshen` manually.
116
90
 
117
- To keep things in sync `.travis.yml` gets automatically updated whenever you run `schema_dev matrix` or any of its shorthands. There's also a command to just explicitly update `.travis.yml`
91
+ ### gemfiles
118
92
 
119
- $ schema_dev travis
93
+ The client gem will contain a "gemfiles" subdirectory tree containing the matrix of
94
+ possible gemfiles; this entire tree gets created/updated automatically, and should be checked into the git repo.
95
+
96
+ Note that freshening the gemfiles happens automatically whenever you run a schema_dev matrix command, and blows away any previous files. So you should not attempt to change any files in `gemfiles/*`
97
+
98
+ If you need to include extra specifications in the Gemfile (e.g. to specify a path for a gem), you can create a file `Gemfile.local` in the project root, and its contents will be included in the Gemfile.
99
+
100
+ ### .travis.yml
101
+
102
+ The `.travis.yml` file gets created automatically. Don't edit it by hand.
103
+
104
+ ### README.md
105
+
106
+ `schema_dev` generates markdown describing the text matrix, and inserts it into the README.md, in a block guarded by markdown comments
107
+
108
+ [//]: # SCHEMA_DEV: MATRIX
109
+ .
110
+ .
111
+ .
112
+ [//]: # SCHEMA_DEV: MATRIX
113
+
114
+
115
+ ## Behind-the-scenes
116
+
117
+ #### Rspec
118
+
119
+ The client gem's`spec/spec_helper` includes this
120
+
121
+ require 'schema_dev/rspec'
122
+ SchemaDev::Rspec.setup
123
+
124
+ This will take care of starting up `schema_monkey`, connecting to the test database appropriately, and and setting up logging to a file specific to the test matrix cell.
125
+
126
+ #### Rake
127
+
128
+ The client gem's `Rakefile` includes:
129
+
130
+ require 'schema_dev/tasks'
131
+
132
+ Which defines the rake task `create_databases` and also a task for travis-ci
data/bin/schema_dev CHANGED
@@ -3,6 +3,7 @@
3
3
  require 'active_support/core_ext/hash'
4
4
  require 'thor'
5
5
  require_relative '../lib/schema_dev/config'
6
+ require_relative '../lib/schema_dev/gem'
6
7
  require_relative '../lib/schema_dev/runner'
7
8
  require_relative '../lib/schema_dev/version'
8
9
 
@@ -23,19 +24,11 @@ class CLI < Thor
23
24
  method_option :db, type: :string, desc: "Only execute for the specified database"
24
25
  end
25
26
 
26
- desc "travis", "create/update .travis.yml based on schema_dev.yml values"
27
- def travis
28
- runner.travis
29
- end
30
-
31
- desc "gemfiles", "create/update gemfiles/* hierarchy based on schema_dev.yml values"
32
- def gemfiles
33
- runner.gemfiles
34
- end
27
+ default_task :rspec
35
28
 
36
- desc "refresh", "shorthand for runnin both '#{$cmd} travis' and '#{$cmd} gemfiles'"
37
- def refresh
38
- runner.refresh
29
+ desc "freshen", "update files that depend on schema_dev.yml: .travis, gemfiles/, README.md"
30
+ def freshen
31
+ runner.freshen
39
32
  end
40
33
 
41
34
  desc "matrix", "run a command over the matrix"
@@ -62,11 +55,15 @@ class CLI < Thor
62
55
  runner.run('bundle', 'exec', 'rspec', args, **options.to_h.symbolize_keys)
63
56
  end
64
57
 
65
- end
58
+ desc "gem", "create a new SchemaPlus gem"
59
+ def gem(name)
60
+ SchemaDev::Gem.build(name)
61
+ end
66
62
 
67
- if ARGV[0] == "--version"
68
- puts "SchemaDev #{SchemaDev::VERSION}"
69
- exit
70
63
  end
71
64
 
72
- CLI.start(ARGV)
65
+ case
66
+ when ARGV.empty? then CLI.start(["--help"])
67
+ when ARGV[0] == "--version" then puts "SchemaDev #{SchemaDev::VERSION}"
68
+ else CLI.start(ARGV)
69
+ end
@@ -16,8 +16,12 @@ module SchemaDev
16
16
 
17
17
  def self._reset ; @@config = nil end # for use by rspec
18
18
 
19
+ def self.read
20
+ new((YAML.load Pathname.new(CONFIG_FILE).read).symbolize_keys)
21
+ end
22
+
19
23
  def self.load
20
- @@config ||= new((YAML.load Pathname.new(CONFIG_FILE).read).symbolize_keys)
24
+ @@config ||= read
21
25
  end
22
26
 
23
27
  def initialize(opts={}) # once we no longer support ruby 1.9.3, can switch to native keyword args
@@ -0,0 +1,122 @@
1
+ require 'faraday'
2
+ require 'fileutils'
3
+ require 'pathname'
4
+ require 'active_support/core_ext/string'
5
+
6
+ require_relative 'templates'
7
+
8
+ module SchemaDev
9
+ class Gem
10
+ def self.build(name)
11
+ new(name).build
12
+ end
13
+
14
+ attr_accessor :gem_name, :gem_module, :gem_root, :fullname, :email
15
+
16
+ def initialize(name)
17
+ self.gem_name = name.underscore
18
+ self.gem_module = gem_name.camelize
19
+ self.gem_root = Pathname.new(gem_name)
20
+ end
21
+
22
+ def build
23
+ ensure_not_in_git
24
+ ensure_doesnt_exist
25
+ get_fullname_and_email
26
+ copy_template
27
+ self.gem_root = self.gem_root.realpath
28
+ rename_files
29
+ substitute_keys
30
+ freshen
31
+ git_init
32
+ puts <<-END.strip_heredoc
33
+
34
+ Created #{gem_name}. Your recommended next steps are:
35
+
36
+ $ cd #{gem_name}
37
+ $ bundle install
38
+ $ schema_dev bundle install
39
+ $ schema_dev rspec
40
+ END
41
+ end
42
+
43
+ def die(msg)
44
+ abort "schema_dev: #{msg}"
45
+ end
46
+
47
+ def ensure_not_in_git
48
+ if system("git rev-parse >& /dev/null")
49
+ die "Cannot create new gem inside existing git worktree; please cd elsewhere"
50
+ end
51
+ end
52
+
53
+ def ensure_doesnt_exist
54
+ if gem_root.exist?
55
+ die "Cannot create new gem: '#{gem_root}' already exists"
56
+ end
57
+ end
58
+
59
+ def get_fullname_and_email
60
+ {'fullname' => 'name', 'email' => 'email' }.each do |myattr, gitattr|
61
+ if (self.send myattr+"=", `git config user.#{gitattr}`.strip).blank?
62
+ die "Who are you? Please run 'git config --global user.#{gitattr} <your-#{gitattr}>'"
63
+ end
64
+ end
65
+ end
66
+
67
+ def copy_template
68
+ FileUtils.cp_r Templates.root + "gem", gem_root
69
+ end
70
+
71
+ def rename_files
72
+ Dir.glob(gem_root + "**/*GEM_NAME*").each do |path|
73
+ FileUtils.mv path, path.gsub(/GEM_NAME/, gem_name)
74
+ end
75
+ end
76
+
77
+ def substitute_keys
78
+ gem_root.find.each do |path|
79
+ next unless path.file?
80
+ path.write subs(path.read)
81
+ end
82
+ end
83
+
84
+ def subs(s)
85
+ s = s.gsub('%GEM_NAME%', gem_name)
86
+ s = s.gsub('%GEM_MODULE%', gem_module)
87
+ s = s.gsub('%FULLNAME%', fullname)
88
+ s = s.gsub('%EMAIL%', email)
89
+ s = s.gsub('%SCHEMA_MONKEY_DEPENDENCY%', dependency(schema_monkey_version))
90
+ s = s.gsub('%SCHEMA_DEV_DEPENDENCY%', dependency(SchemaDev::VERSION))
91
+ s = s.gsub('%YEAR%', Time.now.strftime("%Y"))
92
+ end
93
+
94
+ def dependency(v)
95
+ major, minor, patch = v.split('.')
96
+ dep = %Q{"~> #{major}.#{minor}"}
97
+ dep += %Q{, ">= #{v}"} if patch != "0"
98
+ dep
99
+ end
100
+
101
+ def schema_monkey_version
102
+ @monkey_version ||= begin
103
+ gems = JSON.parse Faraday.get('https://rubygems.org/api/v1/versions/schema_monkey.json').body
104
+ gems.reject(&it["prerelease"]).sort_by{|g| Time.new(g["built_at"])}.last["number"]
105
+ end
106
+ end
107
+
108
+ def freshen
109
+ Dir.chdir gem_root do
110
+ Runner.new(Config.read).freshen(quiet:true)
111
+ end
112
+ end
113
+
114
+ def git_init
115
+ Dir.chdir gem_name do
116
+ system "git init"
117
+ system "git add #{gem_root.find.select(&:exist?).join(' ')}"
118
+ system "git commit -m 'Initial skeleton generated by `schema_dev gem #{gem_name}`'"
119
+ end
120
+ end
121
+ end
122
+ end
@@ -1,15 +1,15 @@
1
1
  require 'pathname'
2
2
 
3
+ require_relative 'templates'
4
+
3
5
  module SchemaDev
4
6
 
5
7
  module Gemfiles
6
8
  extend self
7
9
 
8
- TEMPLATES_ROOT = Pathname.new(__FILE__).dirname.parent.parent + "templates"
9
-
10
10
  def build(config)
11
11
  Dir.mktmpdir do |tmpdir|
12
- @src_root = TEMPLATES_ROOT
12
+ @src_root = Templates.root
13
13
  @dst_root = Pathname.new(tmpdir).realpath
14
14
 
15
15
  relpath = Pathname.new("gemfiles")
@@ -0,0 +1,46 @@
1
+ require 'pathname'
2
+
3
+ module SchemaDev
4
+ class Readme
5
+ def self.update(config)
6
+ new(config.matrix).update
7
+ end
8
+
9
+ attr_accessor :matrix, :readme
10
+
11
+ def initialize(matrix)
12
+ self.matrix = matrix
13
+ self.readme = Pathname.new('README.md')
14
+ end
15
+
16
+ def update
17
+ return false unless readme.exist?
18
+ lines = readme.readlines
19
+ newlines = sub_matrix(lines)
20
+ if lines != newlines
21
+ readme.write newlines.join
22
+ return true
23
+ end
24
+ end
25
+
26
+ def sub_matrix(lines)
27
+ pattern = %r{^\[//\]: # SCHEMA_DEV: MATRIX}
28
+ before = lines.take_while(&it !~ pattern)
29
+
30
+ return lines if before == lines
31
+
32
+ after = lines.reverse.take_while(&it !~ pattern).reverse
33
+
34
+ contents = []
35
+ contents << "[//]: # SCHEMA_DEV: MATRIX - begin\n"
36
+ contents << "[//]: # These lines are auto-generated by schema_dev based on schema_dev.yml\n"
37
+ self.matrix.group_by(&it.slice(:ruby, :rails)).each do |pair, items|
38
+ contents << "* ruby **#{pair[:ruby]}** with rails **#{pair[:rails]}**, using #{items.map{|item| "**#{item[:db]}**"}.to_sentence(last_word_connector: ' or ')}\n"
39
+ end
40
+ contents << "\n"
41
+ contents << "[//]: # SCHEMA_DEV: MATRIX - end\n"
42
+
43
+ before + contents + after
44
+ end
45
+ end
46
+ end
@@ -3,10 +3,16 @@ require_relative 'rspec/db'
3
3
  module SchemaDev
4
4
  module Rspec
5
5
 
6
- def self.setup_db
6
+ def self.setup
7
+ SchemaMonkey.insert
7
8
  Db.setup
8
9
  end
9
10
 
11
+ def self.setup_db
12
+ ActiveSupport::Deprecation.warn "SchemaDev::Rspec.setup_db is deprecated. Use SchemaDev::Rspec.setup"
13
+ self.setup
14
+ end
15
+
10
16
  def self.db_configuration
11
17
  Db.configuration
12
18
  end
@@ -3,6 +3,7 @@ require 'shellwords'
3
3
  require_relative 'matrix_executor'
4
4
  require_relative 'travis'
5
5
  require_relative 'gemfiles'
6
+ require_relative 'readme'
6
7
 
7
8
  module SchemaDev
8
9
  class Runner
@@ -10,21 +11,32 @@ module SchemaDev
10
11
  @config = config
11
12
  end
12
13
 
13
- def travis
14
- Travis.update(@config) and puts "* Updated #{Travis::TRAVIS_FILE}"
14
+ def travis(quiet: false)
15
+ if Travis.update(@config)
16
+ puts "* Updated #{Travis::TRAVIS_FILE}" unless quiet
17
+ end
15
18
  end
16
19
 
17
- def gemfiles
18
- Gemfiles.build(@config) and puts "* Updated gemfiles"
20
+ def gemfiles(quiet: false)
21
+ if Gemfiles.build(@config)
22
+ puts "* Updated gemfiles" unless quiet
23
+ end
19
24
  end
20
25
 
21
- def refresh
22
- self.travis
23
- self.gemfiles
26
+ def readme(quiet: false)
27
+ if Readme.update(@config)
28
+ puts "* Updated README" unless quiet
29
+ end
30
+ end
31
+
32
+ def freshen(quiet: false)
33
+ self.travis(quiet: quiet)
34
+ self.gemfiles(quiet: quiet)
35
+ self.readme(quiet: quiet)
24
36
  end
25
37
 
26
38
  def run(*args, dry_run: false, quick: false, ruby: nil, rails: nil, db: nil, freshen: true)
27
- self.refresh if freshen
39
+ self.freshen if freshen
28
40
 
29
41
  matrix = MatrixExecutor.new @config.matrix(quick: quick, ruby: ruby, rails: rails, db: db)
30
42
 
@@ -0,0 +1,9 @@
1
+ require 'pathname'
2
+
3
+ module SchemaDev
4
+ module Templates
5
+ def self.root
6
+ @root ||= Pathname.new(__FILE__).dirname.parent.parent + "templates"
7
+ end
8
+ end
9
+ end
@@ -1,3 +1,3 @@
1
1
  module SchemaDev
2
- VERSION = "1.4.0"
2
+ VERSION = "2.0.0"
3
3
  end
data/lib/schema_dev.rb CHANGED
@@ -1,5 +1 @@
1
1
  require "schema_dev/version"
2
-
3
- module SchemaDev
4
- # Your code goes here...
5
- end
data/schema_dev.gemspec CHANGED
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_dependency "activesupport"
22
22
  spec.add_dependency "coveralls"
23
+ spec.add_dependency "faraday"
23
24
  spec.add_dependency "fastandand"
24
25
  spec.add_dependency "hash_keyword_args"
25
26
  spec.add_dependency "its-it"
@@ -30,4 +31,5 @@ Gem::Specification.new do |spec|
30
31
  spec.add_development_dependency "rake", "~> 10.0"
31
32
  spec.add_development_dependency "rspec", "~> 3.0"
32
33
  spec.add_development_dependency "simplecov"
34
+ spec.add_development_dependency "webmock"
33
35
  end
data/spec/gem_spec.rb ADDED
@@ -0,0 +1,52 @@
1
+ require 'schema_dev/gem'
2
+
3
+ describe SchemaDev::Gem do
4
+ before(:each) do
5
+ stub_request(:get, 'https://rubygems.org/api/v1/versions/schema_monkey.json').to_return body: JSON.generate([{ built_at: Time.now, number: "0.1.2"}])
6
+ end
7
+
8
+ around(:each) do |example|
9
+ silence_stream(STDOUT) do
10
+ example.run
11
+ end
12
+ end
13
+
14
+ it "creates gemspec" do
15
+ in_tmpdir do
16
+ expect{SchemaDev::Gem.build("NewGem")}.not_to raise_error
17
+ gemspec = File.read "new_gem/new_gem.gemspec"
18
+ expect(gemspec).to include %q{"schema_monkey", "~> 0.1", ">= 0.1.2"}
19
+ end
20
+ end
21
+
22
+ context "complains" do
23
+
24
+ around(:each) do |example|
25
+ silence_stream(STDERR) do
26
+ example.run
27
+ end
28
+ end
29
+
30
+ it "when no git user.name" do
31
+ in_tmpdir do
32
+ expect_any_instance_of(SchemaDev::Gem).to receive(:`).with("git config user.name").and_return ""
33
+ expect{SchemaDev::Gem.build("NewGem")}.to raise_error SystemExit, /who are you/i
34
+ end
35
+ end
36
+
37
+ it "when in git worktree" do
38
+ in_tmpdir do
39
+ system('git init')
40
+ expect{SchemaDev::Gem.build("NewGem")}.to raise_error SystemExit, /\bgit\b/
41
+ end
42
+ end
43
+
44
+ it "when gem directory exists" do
45
+ in_tmpdir do
46
+ FileUtils.touch "new_gem"
47
+ expect{SchemaDev::Gem.build("NewGem")}.to raise_error SystemExit, /exists/
48
+ end
49
+ end
50
+ end
51
+
52
+ end
@@ -19,7 +19,7 @@ describe SchemaDev::Gemfiles do
19
19
  end
20
20
 
21
21
  def relevant_diff(config, dir)
22
- src = SchemaDev::Gemfiles::TEMPLATES_ROOT + dir
22
+ src = SchemaDev::Templates.root + dir
23
23
  diff = `diff -rq #{src} #{dir} 2>&1`.split("\n")
24
24
 
25
25
  # expect copy not to have entry for rails not in config
data/spec/spec_helper.rb CHANGED
@@ -2,6 +2,7 @@ require 'simplecov'
2
2
  SimpleCov.start
3
3
 
4
4
  require 'tmpdir'
5
+ require 'webmock/rspec'
5
6
 
6
7
  require 'schema_dev/config'
7
8
 
@@ -0,0 +1,8 @@
1
+ /coverage
2
+ /tmp
3
+ /pkg
4
+
5
+ *.lock
6
+ *.log
7
+ *.sqlite3
8
+ !gemfiles/**/*.sqlite3
@@ -0,0 +1,30 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require '%GEM_NAME%/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "%GEM_NAME%"
8
+ spec.version = %GEM_MODULE%::VERSION
9
+ spec.authors = ["%FULLNAME%"]
10
+ spec.email = ["%EMAIL%"]
11
+ spec.summary = %q{TODO: Write a short summary. Required.}
12
+ spec.description = %q{TODO: Write a longer description. Optional.}
13
+ spec.homepage = "https://github.com/SchemaPlus/%GEM_NAME%"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency "activerecord", "~> 4.2"
22
+ spec.add_dependency "schema_monkey", %SCHEMA_MONKEY_DEPENDENCY%
23
+
24
+ spec.add_development_dependency "bundler", "~> 1.7"
25
+ spec.add_development_dependency "rake", "~> 10.0"
26
+ spec.add_development_dependency "rspec", "~> 3.0.0"
27
+ spec.add_development_dependency "schema_dev", %SCHEMA_DEV_DEPENDENCY%
28
+ spec.add_development_dependency "simplecov"
29
+ spec.add_development_dependency "simplecov-gem-profile"
30
+ end
@@ -0,0 +1,3 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) %YEAR% %FULLNAME%
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,62 @@
1
+ [![Gem Version](https://badge.fury.io/rb/%GEM_NAME%.svg)](http://badge.fury.io/rb/%GEM_NAME%)
2
+ [![Build Status](https://secure.travis-ci.org/SchemaPlus/%GEM_NAME%.svg)](http://travis-ci.org/SchemaPlus/%GEM_NAME%)
3
+ [![Coverage Status](https://img.shields.io/coveralls/SchemaPlus/%GEM_NAME%.svg)](https://coveralls.io/r/SchemaPlus/%GEM_NAME%)
4
+ [![Dependency Status](https://gemnasium.com/lomba/%GEM_NAME%.svg)](https://gemnasium.com/SchemaPlus/%GEM_NAME%)
5
+
6
+ # %GEM_NAME%
7
+
8
+ TODO: Write a gem description
9
+
10
+ %GEM_NAME% is part of the [SchemaPlus](https://github.com/SchemaPlus/) family of Ruby on Rails extension gems.
11
+
12
+ ## Installation
13
+
14
+ In your application's Gemfile
15
+
16
+ ```ruby
17
+ gem "%GEM_NAME%"
18
+ ```
19
+ ## Compatibility
20
+
21
+ %GEM_NAME% is tested on
22
+
23
+ [//]: # SCHEMA_DEV: MATRIX
24
+
25
+ ## Usage
26
+
27
+ TODO: Write usage instructions here
28
+
29
+
30
+ ## History
31
+
32
+ * See [CHANGELOG](CHANGELOG.md) for per-version release notes.
33
+
34
+ ## Development & Testing
35
+
36
+ Are you interested in contributing to %GEM_NAME%? Thanks! Please follow
37
+ the standard protocol: fork, feature branch, develop, push, and issue pull request.
38
+
39
+ Some things to know about to help you develop and test:
40
+
41
+ * **schema_dev**: %GEM_NAME% uses [schema_dev](https://github.com/SchemaPlus/schema_dev) to
42
+ facilitate running rspec tests on the matrix of ruby, rails, and database
43
+ versions that the gem supports, both locally and on
44
+ [travis-ci](http://travis-ci.org/SchemaPlus/%GEM_NAME%)
45
+
46
+ To to run rspec locally on the full matrix, do:
47
+
48
+ $ schema_dev bundle install
49
+ $ schema_dev rspec
50
+
51
+ You can also run on just one configuration at a time; For info, see `schema_dev --help` or the
52
+ [schema_dev](https://github.com/SchemaPlus/schema_dev) README.
53
+
54
+ The matrix of configurations is specified in `schema_dev.yml` in
55
+ the project root.
56
+
57
+ * **schema_monkey**: %GEM_NAME% extends ActiveRecord using
58
+ [schema_monkey](https://github.com/SchemaPlus/schema_monkey)'s extension
59
+ API and protocols -- see its README for details. If your contribution needs any additional monkey patching
60
+ that isn't already supported by
61
+ [schema_monkey](https://github.com/SchemaPlus/schema_monkey), please head
62
+ over there and submit a PR.
@@ -0,0 +1,9 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'schema_dev/tasks'
5
+
6
+ task :default => :spec
7
+
8
+ require 'rspec/core/rake_task'
9
+ RSpec::Core::RakeTask.new(:spec)
@@ -0,0 +1,3 @@
1
+ module %GEM_MODULE%
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,39 @@
1
+ require 'schema_monkey'
2
+
3
+ # Load any mixins to ActiveRecord modules, such as:
4
+ #
5
+ # require_relative '%GEM_NAME%/active_record/base'
6
+ # require_relative '%GEM_NAME%/active_record/connection_adapters/abstract_adapter'
7
+ #
8
+ # Any modules named %GEM_MODULE%::ActiveRecord::<remainder-of-submodule-path>
9
+ # will be automatically #include'd in their counterparts in ::ActiveRecord
10
+
11
+
12
+ # Load any middleware, such as:
13
+ #
14
+ # require_relative '%GEM_NAME%/middleware/model'
15
+ #
16
+ # Any modules named %GEM_MODULE%::Middleware::<submodule-path> will
17
+ # automatically have their .insert method called.
18
+
19
+ # Database adapter-specific mixin, if any, will automatically #include'd in
20
+ # its counterpart depending on which database adapter is in use.
21
+ module %GEM_MODULE%
22
+ module ActiveRecord
23
+ module ConnectionAdapters
24
+ # autoload :MysqlAdapter, 'schema_plus_tables/active_record/connection_adapters/mysql_adapter'
25
+ # autoload :PostgresqlAdapter, 'schema_plus_tables/active_record/connection_adapters/postgresql_adapter'
26
+ # autoload :Sqlite3Adapter, 'schema_plus_tables/active_record/connection_adapters/sqlite3_adapter'
27
+ end
28
+ end
29
+ end
30
+
31
+
32
+
33
+ # Extra load-time initialization can go here. You can delete this if you don't have any.
34
+ module %GEM_MODULE%
35
+ def self.insert
36
+ end
37
+ end
38
+
39
+ SchemaMonkey.register(%GEM_MODULE%)
@@ -0,0 +1,9 @@
1
+ ruby:
2
+ - 1.9.3
3
+ - 2.1.5
4
+ rails:
5
+ - 4.2
6
+ db:
7
+ - mysql2
8
+ - sqlite3
9
+ - postgresql
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+
4
+ # A basic sanity check to have as a spec when first starting. Feel free to delete this
5
+ # once you've got real content.
6
+
7
+ describe "Sanity Check" do
8
+
9
+ it "database is connected" do
10
+ expect(ActiveRecord::Base).to be_connected
11
+ end
12
+
13
+ end
@@ -0,0 +1,22 @@
1
+ require 'simplecov'
2
+ require 'simplecov-gem-profile'
3
+ SimpleCov.start "gem"
4
+
5
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
6
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
7
+
8
+ require 'rspec'
9
+ require 'active_record'
10
+ require '%GEM_NAME%'
11
+ require 'schema_dev/rspec'
12
+
13
+ SchemaDev::Rspec.setup
14
+
15
+ Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each {|f| require f}
16
+
17
+ RSpec.configure do |config|
18
+ config.warnings = true
19
+ end
20
+
21
+ SimpleCov.command_name "[ruby #{RUBY_VERSION} - ActiveRecord #{::ActiveRecord::VERSION::STRING} - #{ActiveRecord::Base.connection.adapter_name}]"
22
+
@@ -4,3 +4,5 @@ gemspec :path => File.expand_path('..', __FILE__)
4
4
  platform :ruby do
5
5
  gem "byebug" if RUBY_VERSION > "2"
6
6
  end
7
+
8
+ File.exist?(gemfile_local = File.expand_path('../Gemfile.local', __FILE__)) and eval File.read(gemfile_local), binding, gemfile_local
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.4.0
4
+ version: 2.0.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: 2015-01-14 00:00:00.000000000 Z
11
+ date: 2015-01-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: faraday
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: fastandand
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -164,6 +178,20 @@ dependencies:
164
178
  - - ">="
165
179
  - !ruby/object:Gem::Version
166
180
  version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: webmock
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
167
195
  description: SchemaPlus development tools
168
196
  email:
169
197
  - ronen@barzel.org
@@ -183,9 +211,11 @@ files:
183
211
  - lib/schema_dev.rb
184
212
  - lib/schema_dev/config.rb
185
213
  - lib/schema_dev/executor.rb
214
+ - lib/schema_dev/gem.rb
186
215
  - lib/schema_dev/gemfile_selector.rb
187
216
  - lib/schema_dev/gemfiles.rb
188
217
  - lib/schema_dev/matrix_executor.rb
218
+ - lib/schema_dev/readme.rb
189
219
  - lib/schema_dev/rspec.rb
190
220
  - lib/schema_dev/rspec/db.rb
191
221
  - lib/schema_dev/ruby_selector.rb
@@ -193,15 +223,28 @@ files:
193
223
  - lib/schema_dev/tasks.rb
194
224
  - lib/schema_dev/tasks/coveralls.rb
195
225
  - lib/schema_dev/tasks/dbms.rb
226
+ - lib/schema_dev/templates.rb
196
227
  - lib/schema_dev/travis.rb
197
228
  - lib/schema_dev/version.rb
198
229
  - schema_dev.gemspec
199
230
  - spec/config_spec.rb
231
+ - spec/gem_spec.rb
200
232
  - spec/gemfile_sepector_spec.rb
201
233
  - spec/gemfiles_spec.rb
202
234
  - spec/runner_spec.rb
203
235
  - spec/spec_helper.rb
204
236
  - spec/travis_spec.rb
237
+ - templates/gem/.gitignore
238
+ - templates/gem/GEM_NAME.gemspec
239
+ - templates/gem/Gemfile
240
+ - templates/gem/LICENSE.txt
241
+ - templates/gem/README.md
242
+ - templates/gem/Rakefile
243
+ - templates/gem/lib/GEM_NAME.rb
244
+ - templates/gem/lib/GEM_NAME/version.rb
245
+ - templates/gem/schema_dev.yml
246
+ - templates/gem/spec/sanity_spec.rb
247
+ - templates/gem/spec/spec_helper.rb
205
248
  - templates/gemfiles/Gemfile.base
206
249
  - templates/gemfiles/rails-3.2/Gemfile.base
207
250
  - templates/gemfiles/rails-3.2/Gemfile.mysql
@@ -250,6 +293,7 @@ specification_version: 4
250
293
  summary: SchemaPlus development tools
251
294
  test_files:
252
295
  - spec/config_spec.rb
296
+ - spec/gem_spec.rb
253
297
  - spec/gemfile_sepector_spec.rb
254
298
  - spec/gemfiles_spec.rb
255
299
  - spec/runner_spec.rb