schema_dev 3.1.1 → 3.2.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 46e6668bceb23523e1553a0f9e471ebc124d0e40
4
- data.tar.gz: 9407c2e3d0ced7c676631efe9e2578aa3d7e2c4d
3
+ metadata.gz: e3dae5713b925a353bc74bb7b9783670586f350c
4
+ data.tar.gz: 73f1a0ab7b0e913d31311c4296b97e7847ed00de
5
5
  SHA512:
6
- metadata.gz: 8f10858e559e27e283ad32925ac58960977b27a6bc70320e169cf9875c01638e5cad43fb6f39163835eefcc0c13ab06918940b3180d81ea9e9714a7b09058ccf
7
- data.tar.gz: e5b2b82af3c11ef8631133ec188b23e8ff4a5823574eb01ca122e78f3f413410aa382b624872cba127d79e5aacfc2fc8826faf041b772cea86f284692bdd1b7c
6
+ metadata.gz: aa6d02ba2491b08e1177caf97fdd455853b9f37a887a2537bf8bcf1f44c24528da5f188bb1734e10a13da7a182caf1ba0d1b2d95e065e22da39b3a008d326ae7
7
+ data.tar.gz: f806f3e86dd8eb20e9d8ab6ec57de80db8c508d67b57de47d9174e18a81f178d0d203a9ec832da86290c67b1724b868ec92fa58acfab957691de9e44a98de0b6
@@ -1,8 +1,10 @@
1
1
  require 'faraday'
2
+ require 'json'
2
3
  require 'fileutils'
3
4
  require 'pathname'
4
5
  require 'active_support/core_ext/string'
5
6
 
7
+ require_relative 'runner'
6
8
  require_relative 'templates'
7
9
 
8
10
  module SchemaDev
@@ -11,12 +13,24 @@ module SchemaDev
11
13
  new(name).build
12
14
  end
13
15
 
14
- attr_accessor :gem_name, :gem_module, :gem_root, :fullname, :email
16
+ attr_accessor :gem_name, :gem_module, :gem_root, :gem_parent_name, :gem_base_name, :gem_lib_path, :fullname, :email
15
17
 
16
18
  def initialize(name)
17
19
  self.gem_name = name.underscore
18
- self.gem_module = gem_name.camelize.sub(/^SchemaPlus(?=\w+)/, 'SchemaPlus::')
19
20
  self.gem_root = Pathname.new(gem_name)
21
+ if gem_name =~ /^(schema_plus)_(.*)/
22
+ parent, base = [$1, $2]
23
+ self.gem_module = [parent, base].map(&:camelize).join('::')
24
+ self.gem_lib_path = [parent, base].join('/')
25
+ self.gem_parent_name = parent
26
+ self.gem_base_name = base
27
+ @subdir = true
28
+ else
29
+ self.gem_module = gem_name.camelize
30
+ self.gem_lib_path = gem_name
31
+ self.gem_base_name = gem_name
32
+ @subdir = false
33
+ end
20
34
  get_fullname_and_email
21
35
  end
22
36
 
@@ -26,6 +40,7 @@ module SchemaDev
26
40
  copy_template
27
41
  self.gem_root = self.gem_root.realpath
28
42
  rename_files
43
+ fixup_subdir if @subdir
29
44
  substitute_keys
30
45
  freshen
31
46
  git_init
@@ -73,6 +88,22 @@ module SchemaDev
73
88
  Dir.glob(gem_root + "**/*GEM_NAME*").each do |path|
74
89
  FileUtils.mv path, path.gsub(/GEM_NAME/, gem_name)
75
90
  end
91
+ Dir.glob(gem_root + "**/*GEM_BASE_NAME*").each do |path|
92
+ FileUtils.mv path, path.gsub(/GEM_BASE_NAME/, gem_base_name)
93
+ end
94
+ end
95
+
96
+ def fixup_subdir
97
+ libdir = gem_root + "lib"
98
+ aside = libdir.to_s + "x"
99
+ subdir = libdir + gem_parent_name
100
+
101
+ FileUtils.mv libdir, aside
102
+ libdir.mkpath
103
+ FileUtils.mv aside, subdir
104
+ (gem_root + "lib" + "#{gem_name}.rb").write <<-END.lstrip
105
+ require_relative '#{gem_parent_name}/#{gem_base_name}.rb'
106
+ END
76
107
  end
77
108
 
78
109
  def substitute_keys
@@ -84,10 +115,12 @@ module SchemaDev
84
115
 
85
116
  def subs(s)
86
117
  s = s.gsub('%GEM_NAME%', gem_name)
118
+ s = s.gsub('%GEM_BASE_NAME%', gem_base_name)
119
+ s = s.gsub('%GEM_LIB_PATH%', gem_lib_path)
87
120
  s = s.gsub('%GEM_MODULE%', gem_module)
88
121
  s = s.gsub('%FULLNAME%', fullname)
89
122
  s = s.gsub('%EMAIL%', email)
90
- s = s.gsub('%SCHEMA_MONKEY_DEPENDENCY%', dependency(schema_monkey_version))
123
+ s = s.gsub('%SCHEMA_PLUS_CORE_DEPENDENCY%', dependency(schema_plus_core_version))
91
124
  s = s.gsub('%SCHEMA_DEV_DEPENDENCY%', dependency(SchemaDev::VERSION))
92
125
  s = s.gsub('%YEAR%', Time.now.strftime("%Y"))
93
126
  end
@@ -99,9 +132,9 @@ module SchemaDev
99
132
  dep
100
133
  end
101
134
 
102
- def schema_monkey_version
103
- @monkey_version ||= begin
104
- gems = JSON.parse Faraday.get('https://rubygems.org/api/v1/versions/schema_monkey.json').body
135
+ def schema_plus_core_version
136
+ @core_version ||= begin
137
+ gems = JSON.parse Faraday.get('https://rubygems.org/api/v1/versions/schema_plus_core.json').body
105
138
  gems.reject(&it["prerelease"]).sort_by(&it["number"].split('.')).last["number"]
106
139
  end
107
140
  end
@@ -1,3 +1,3 @@
1
1
  module SchemaDev
2
- VERSION = "3.1.1"
2
+ VERSION = "3.2.0"
3
3
  end
data/schema_dev.gemspec CHANGED
@@ -30,6 +30,7 @@ Gem::Specification.new do |spec|
30
30
  spec.add_development_dependency "bundler", "~> 1.7"
31
31
  spec.add_development_dependency "rake", "~> 10.0"
32
32
  spec.add_development_dependency "rspec", "~> 3.0"
33
+ spec.add_development_dependency "rspec-given"
33
34
  spec.add_development_dependency "simplecov"
34
35
  spec.add_development_dependency "webmock"
35
36
  end
data/spec/gem_spec.rb CHANGED
@@ -2,63 +2,72 @@ require 'schema_dev/gem'
2
2
 
3
3
  describe SchemaDev::Gem do
4
4
 
5
- let(:user_name) { "My Name" }
6
- let(:user_email) { "my_name@example.com" }
7
-
8
- before(:each) do
9
- stub_request(:get, 'https://rubygems.org/api/v1/versions/schema_monkey.json').to_return body: JSON.generate([
10
- { number: "1.0.0.pre", prerelease: true},
11
- { number: "0.2.1"},
12
- { number: "0.1.2"},
13
- { number: "0.1.1" },
14
- ])
15
- allow_any_instance_of(SchemaDev::Gem).to receive(:`).with("git config user.name").and_return user_name
16
- allow_any_instance_of(SchemaDev::Gem).to receive(:`).with("git config user.email").and_return user_email
17
- end
18
-
19
5
  around(:each) do |example|
20
6
  silence_stream(STDOUT) do
21
- example.run
7
+ silence_stream(STDERR) do
8
+ in_tmpdir do
9
+ example.run
10
+ end
11
+ end
22
12
  end
23
13
  end
24
14
 
25
- it "creates gemspec" do
26
- in_tmpdir do
27
- expect{SchemaDev::Gem.build("NewGem")}.not_to raise_error
28
- gemspec = File.read "new_gem/new_gem.gemspec"
29
- expect(gemspec).to include %q{"schema_monkey", "~> 0.2", ">= 0.2.1"}
30
- expect(gemspec).to match(/authors.*#{user_name}/)
31
- expect(gemspec).to match(/email.*#{user_email}/)
32
- end
33
- end
15
+ Given(:user_name) { "My Name" }
16
+ Given(:user_email) { "my_name@example.com" }
34
17
 
35
- context "complains" do
18
+ Given {
19
+ allow_any_instance_of(SchemaDev::Gem).to receive(:`).with("git config user.name").and_return user_name
20
+ allow_any_instance_of(SchemaDev::Gem).to receive(:`).with("git config user.email").and_return user_email
21
+ }
36
22
 
37
- around(:each) do |example|
38
- silence_stream(STDERR) do
39
- example.run
23
+ context "builds" do
24
+
25
+ Given {
26
+ stub_request(:get, 'https://rubygems.org/api/v1/versions/schema_plus_core.json').to_return body: JSON.generate([
27
+ { number: "1.0.0.pre", prerelease: true},
28
+ { number: "0.2.1"},
29
+ { number: "0.1.2"},
30
+ { number: "0.1.1" },
31
+ ])
32
+ }
33
+
34
+ When { SchemaDev::Gem.build gem_name }
35
+
36
+ When(:gemspec) { File.read "#{gem_name}/#{gem_name}.gemspec" }
37
+
38
+ Invariant { expect(gemspec).to include %q{"schema_plus_core", "~> 0.2", ">= 0.2.1"} }
39
+ Invariant { expect(gemspec).to match %r{authors.*#{user_name}} }
40
+ Invariant { expect(gemspec).to match %r{email.*#{user_email}} }
41
+
42
+ context "flat gem" do
43
+ Given(:gem_name) { "new_gem" }
44
+ Then { expect(gemspec).to include %q{require 'new_gem/version'} }
45
+ Then { expect(File.read "new_gem/lib/new_gem.rb").to include %q{SchemaMonkey.register NewGem} }
40
46
  end
41
- end
42
47
 
43
- it "when no git user.name" do
44
- in_tmpdir do
45
- expect_any_instance_of(SchemaDev::Gem).to receive(:`).with("git config user.name").and_return ""
46
- expect{SchemaDev::Gem.build("NewGem")}.to raise_error SystemExit, /who are you/i
48
+ context "subdir gem" do
49
+ Given(:gem_name) { "schema_plus_new_gem" }
50
+ Then { expect(gemspec).to include %q{require 'schema_plus/new_gem/version'} }
51
+ Then { expect(File.read "schema_plus_new_gem/lib/schema_plus_new_gem.rb").to include %q{require_relative 'schema_plus/new_gem.rb'} }
52
+ Then { expect(File.read "schema_plus_new_gem/lib/schema_plus/new_gem.rb").to include %q{SchemaMonkey.register SchemaPlus::NewGem} }
47
53
  end
54
+ end
55
+
56
+ context "complains" do
57
+
58
+ context "when no git user.name" do
59
+ Given(:user_name) { "" }
60
+ Then { expect{SchemaDev::Gem.build("NewGem")}.to raise_error SystemExit, /who are you/i }
48
61
  end
49
62
 
50
- it "when in git worktree" do
51
- in_tmpdir do
52
- expect_any_instance_of(SchemaDev::Gem).to receive(:system).with(/^git rev-parse/).and_return true
53
- expect{SchemaDev::Gem.build("NewGem")}.to raise_error SystemExit, /\bgit\b/
54
- end
63
+ context "when in git worktree" do
64
+ Given { expect_any_instance_of(SchemaDev::Gem).to receive(:system).with(/^git rev-parse/).and_return true }
65
+ Then { expect{SchemaDev::Gem.build("NewGem")}.to raise_error SystemExit, /\bgit\b/ }
55
66
  end
56
67
 
57
- it "when gem directory exists" do
58
- in_tmpdir do
59
- FileUtils.touch "new_gem"
60
- expect{SchemaDev::Gem.build("NewGem")}.to raise_error SystemExit, /exists/
61
- end
68
+ context "when gem directory exists" do
69
+ Given { FileUtils.touch "new_gem" }
70
+ Then { expect{SchemaDev::Gem.build("NewGem")}.to raise_error SystemExit, /exists/ }
62
71
  end
63
72
  end
64
73
 
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'simplecov'
2
2
  SimpleCov.start
3
3
 
4
+ require 'rspec/given'
4
5
  require 'tmpdir'
5
6
  require 'webmock/rspec'
6
7
 
@@ -1,7 +1,7 @@
1
1
  # coding: utf-8
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require '%GEM_NAME%/version'
4
+ require '%GEM_LIB_PATH%/version'
5
5
 
6
6
  Gem::Specification.new do |gem|
7
7
  gem.name = "%GEM_NAME%"
@@ -19,7 +19,7 @@ Gem::Specification.new do |gem|
19
19
  gem.require_paths = ["lib"]
20
20
 
21
21
  gem.add_dependency "activerecord", "~> 4.2"
22
- gem.add_dependency "schema_monkey", %SCHEMA_MONKEY_DEPENDENCY%
22
+ gem.add_dependency "schema_plus_core", %SCHEMA_PLUS_CORE_DEPENDENCY%
23
23
 
24
24
  gem.add_development_dependency "bundler", "~> 1.7"
25
25
  gem.add_development_dependency "rake", "~> 10.0"
@@ -0,0 +1,13 @@
1
+ require 'schema_plus/core'
2
+
3
+ require_relative '%GEM_BASE_NAME%/version'
4
+
5
+ # Load any mixins to ActiveRecord modules, such as:
6
+ #
7
+ #require_relative '%GEM_BASE_NAME%/active_record/base'
8
+
9
+ # Load any middleware, such as:
10
+ #
11
+ # require_relative '%GEM_BASE_NAME%/middleware/model'
12
+
13
+ SchemaMonkey.register %GEM_MODULE%
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: 3.1.1
4
+ version: 3.2.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-02-10 00:00:00.000000000 Z
11
+ date: 2015-02-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -164,6 +164,20 @@ dependencies:
164
164
  - - "~>"
165
165
  - !ruby/object:Gem::Version
166
166
  version: '3.0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: rspec-given
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
167
181
  - !ruby/object:Gem::Dependency
168
182
  name: simplecov
169
183
  requirement: !ruby/object:Gem::Requirement
@@ -245,8 +259,8 @@ files:
245
259
  - templates/gem/README.md
246
260
  - templates/gem/Rakefile
247
261
  - templates/gem/gitignore
248
- - templates/gem/lib/GEM_NAME.rb
249
- - templates/gem/lib/GEM_NAME/version.rb
262
+ - templates/gem/lib/GEM_BASE_NAME.rb
263
+ - templates/gem/lib/GEM_BASE_NAME/version.rb
250
264
  - templates/gem/schema_dev.yml
251
265
  - templates/gem/spec/sanity_spec.rb
252
266
  - templates/gem/spec/spec_helper.rb
@@ -1,42 +0,0 @@
1
- require 'schema_monkey'
2
-
3
- require_relative '%GEM_NAME%/version'
4
-
5
-
6
- # Load any mixins to ActiveRecord modules, such as:
7
- #
8
- # require_relative '%GEM_NAME%/active_record/base'
9
- # require_relative '%GEM_NAME%/active_record/connection_adapters/abstract_adapter'
10
- #
11
- # Any modules named %GEM_MODULE%::ActiveRecord::<remainder-of-submodule-path>
12
- # will be automatically #include'd in their counterparts in ::ActiveRecord
13
-
14
-
15
- # Load any middleware, such as:
16
- #
17
- # require_relative '%GEM_NAME%/middleware/model'
18
- #
19
- # Any modules named %GEM_MODULE%::Middleware::<submodule-path> will
20
- # automatically have their .insert method called.
21
-
22
-
23
- # Database adapter-specific mixin, if any, will automatically #include'd in
24
- # its counterpart depending on which database adapter is in use.
25
- module %GEM_MODULE%
26
- module ActiveRecord
27
- module ConnectionAdapters
28
- # autoload :MysqlAdapter, 'schema_plus_tables/active_record/connection_adapters/mysql_adapter'
29
- # autoload :PostgresqlAdapter, 'schema_plus_tables/active_record/connection_adapters/postgresql_adapter'
30
- # autoload :Sqlite3Adapter, 'schema_plus_tables/active_record/connection_adapters/sqlite3_adapter'
31
- end
32
- end
33
- end
34
-
35
-
36
- # Extra load-time initialization can go here. You can delete this if you don't have any.
37
- module %GEM_MODULE%
38
- def self.insert
39
- end
40
- end
41
-
42
- SchemaMonkey.register(%GEM_MODULE%)