dm-is-reflective 1.3.1 → 1.3.2

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
- SHA1:
3
- metadata.gz: e0cf6d64d700dd5f9892573cc43a1d19eb3ba2cd
4
- data.tar.gz: 7c7647fd2e0a7c917aaf4b035432cff3849ad828
2
+ SHA256:
3
+ metadata.gz: 972e519551e2031e811a3e88abca4ae417993dfd88c14c3470784f2abe5ddeaa
4
+ data.tar.gz: ffc5f2f1637e6fd97304a40533326361226661693038e0a30ef333f05ed522cd
5
5
  SHA512:
6
- metadata.gz: f2551113619f6540170864bcb217550037d70e5f4887812c88501b8aa302174080b7244817596e47d45e7d9826b0d152a39cc040d352a2d7803795b33e5946b0
7
- data.tar.gz: eb33bdb42e9c47d686a7f8cd99a8848f99260fa82053d751e070855de838f045aa4b146b5919fa469a77b9b8b3b71cfd1f7b9cbb59b658d37c2e6702e64c10f6
6
+ metadata.gz: 31ca16bc14df04ad99fc3b4141d5730e123e81fd64304b188f54cd576045856b8441dd14f537755d7a7dd846a6d99aafa0206a0c7cfd21bc32a4109097406b7f
7
+ data.tar.gz: 8cd3bb490db9d397b02ae9b1e78424547ad6cbd4885ccb991f527a372265104157b034bb5e3b74336f9ff1278bb207545d2eff1d269839fa88aef6572a807be6
data/.gitignore CHANGED
@@ -1,7 +1,2 @@
1
- tmp
2
- pkg
3
- doc
4
- ann-*
5
- Gemfile.lock
6
-
1
+ /pkg/
7
2
  *.rbc
@@ -1,15 +1,28 @@
1
- before_install:
2
- - 'git submodule update --init'
3
- - mysql -e 'create database myapp_test;'
4
- - psql -c 'create database myapp_test;' -U postgres
1
+ sudo: false
2
+ language: ruby
3
+
4
+ install: 'gem install bundler; bundle install --retry=3'
5
+ script: 'ruby -vr bundler/setup -S rake test'
5
6
 
6
- script: 'ruby -r bundler/setup -S rake test'
7
+ matrix:
8
+ include:
9
+ - rvm: 2.2
10
+ - rvm: 2.3
11
+ - rvm: 2.4
12
+ - rvm: ruby-head
13
+ - rvm: jruby
14
+ env: JRUBY_OPTS=--debug
15
+ - rvm: rbx
7
16
 
8
- env:
9
- - 'RBXOPT=-X19'
17
+ allow_failures:
18
+ - rvm: rbx
19
+ - rvm: jruby
10
20
 
11
- rvm:
12
- - 1.9.3
13
- - 2.0.0
14
- - rbx-head
15
- - jruby-head
21
+ addons:
22
+ postgresql: 9.3
23
+
24
+ before_install:
25
+ - sudo apt-get update
26
+ - sudo apt-get install postgresql-server-dev-9.3 libpq-dev
27
+ - mysql -e 'create database myapp_test;'
28
+ - psql -c 'create database myapp_test;' -U postgres
data/CHANGES.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # CHANGES
2
2
 
3
+ ## dm-is-reflective 1.3.2 -- 2017-12-29
4
+
5
+ * Prefix an underscore whenever the property begins with a number, which
6
+ cannot be used as a method name. See:
7
+ [#9](https://github.com/godfat/dm-is-reflective/pull/9)
8
+ Thanks Mischa Molhoek (@mmolhoek)
9
+ * Don't create the model for PostgreSQL views. See:
10
+ [#10](https://github.com/godfat/dm-is-reflective/pull/10)
11
+ Thanks @philfine
12
+
3
13
  ## dm-is-reflective 1.3.1, 2013-05-22
4
14
 
5
15
  * Introduce `indices` method which would return all indices in the storage.
data/Gemfile CHANGED
@@ -5,3 +5,10 @@ gemspec
5
5
 
6
6
  gem 'rake'
7
7
  gem 'bacon'
8
+
9
+ gem 'simplecov', :require => false if ENV['COV']
10
+ gem 'coveralls', :require => false if ENV['CI']
11
+
12
+ platforms :rbx do
13
+ gem 'rubysl-singleton' # used in rake
14
+ end
data/README.md CHANGED
@@ -140,12 +140,15 @@ puts User.to_source
140
140
 
141
141
  * Andrew Kreps (@onewheelskyward)
142
142
  * Lin Jen-Shin (@godfat)
143
+ * Mischa Molhoek (@mmolhoek)
144
+ * @philfine
145
+ * Sebastian Marr (@sebastianmarr)
143
146
 
144
147
  ## LICENSE:
145
148
 
146
149
  Apache License 2.0
147
150
 
148
- Copyright (c) 2008-2013, Lin Jen-Shin (godfat)
151
+ Copyright (c) 2008-2017, Lin Jen-Shin (godfat)
149
152
 
150
153
  Licensed under the Apache License, Version 2.0 (the "License");
151
154
  you may not use this file except in compliance with the License.
data/Rakefile CHANGED
@@ -1,28 +1,19 @@
1
- # encoding: utf-8
2
1
 
3
2
  begin
4
3
  require "#{dir = File.dirname(__FILE__)}/task/gemgem"
5
4
  rescue LoadError
6
- sh "git submodule update --init"
7
- exec Gem.ruby, "-S", "rake", *ARGV
5
+ sh 'git submodule update --init'
6
+ exec Gem.ruby, '-S', $PROGRAM_NAME, *ARGV
8
7
  end
9
8
 
10
- Gemgem.dir = dir
11
- ($LOAD_PATH << File.expand_path("#{Gemgem.dir}/lib" )).uniq!
9
+ Gemgem.init(dir) do |s|
10
+ require 'dm-is-reflective/version'
11
+ s.name = 'dm-is-reflective'
12
+ s.version = DmIsReflective::VERSION
12
13
 
13
- desc 'Generate gemspec'
14
- task 'gem:spec' do
15
- Gemgem.spec = Gemgem.create do |s|
16
- require 'dm-is-reflective/version'
17
- s.name = 'dm-is-reflective'
18
- s.version = DmIsReflective::VERSION
19
-
20
- %w[dm-core dm-do-adapter].each{ |g| s.add_runtime_dependency(g) }
21
- %w[dm-migrations
22
- dm-sqlite-adapter
23
- dm-mysql-adapter
24
- dm-postgres-adapter].each{ |g| s.add_development_dependency(g) }
25
- end
26
-
27
- Gemgem.write
14
+ %w[dm-core dm-do-adapter].each{ |g| s.add_runtime_dependency(g) }
15
+ %w[dm-migrations
16
+ dm-sqlite-adapter
17
+ dm-mysql-adapter
18
+ dm-postgres-adapter].each{ |g| s.add_development_dependency(g) }
28
19
  end
@@ -1,78 +1,79 @@
1
1
  # -*- encoding: utf-8 -*-
2
+ # stub: dm-is-reflective 1.3.2 ruby lib
2
3
 
3
4
  Gem::Specification.new do |s|
4
- s.name = "dm-is-reflective"
5
- s.version = "1.3.1"
5
+ s.name = "dm-is-reflective".freeze
6
+ s.version = "1.3.2"
6
7
 
7
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
- s.authors = ["Lin Jen-Shin (godfat)"]
9
- s.date = "2013-05-22"
10
- s.description = "DataMapper plugin that helps you manipulate an existing database.\nIt creates mappings between existing columns and model's properties."
11
- s.email = ["godfat (XD) godfat.org"]
12
- s.executables = ["dm-is-reflective"]
8
+ s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
9
+ s.require_paths = ["lib".freeze]
10
+ s.authors = ["Lin Jen-Shin (godfat)".freeze]
11
+ s.date = "2017-12-29"
12
+ s.description = "DataMapper plugin that helps you manipulate an existing database.\nIt creates mappings between existing columns and model's properties.".freeze
13
+ s.email = ["godfat (XD) godfat.org".freeze]
14
+ s.executables = ["dm-is-reflective".freeze]
13
15
  s.files = [
14
- ".gitignore",
15
- ".gitmodules",
16
- ".travis.yml",
17
- "CHANGES.md",
18
- "Gemfile",
19
- "LICENSE",
20
- "README.md",
21
- "Rakefile",
22
- "TODO.md",
23
- "bin/dm-is-reflective",
24
- "dm-is-reflective.gemspec",
25
- "lib/dm-is-reflective.rb",
26
- "lib/dm-is-reflective/adapters/data_objects_adapter.rb",
27
- "lib/dm-is-reflective/adapters/mysql_adapter.rb",
28
- "lib/dm-is-reflective/adapters/postgres_adapter.rb",
29
- "lib/dm-is-reflective/adapters/sqlite_adapter.rb",
30
- "lib/dm-is-reflective/reflective.rb",
31
- "lib/dm-is-reflective/runner.rb",
32
- "lib/dm-is-reflective/test.rb",
33
- "lib/dm-is-reflective/version.rb",
34
- "task/.gitignore",
35
- "task/gemgem.rb",
36
- "test/setup_db.sh",
37
- "test/test_mysql.rb",
38
- "test/test_postgres.rb",
39
- "test/test_sqlite.rb",
40
- "test/test_to_source.rb"]
41
- s.homepage = "https://github.com/godfat/dm-is-reflective"
42
- s.licenses = ["Apache License 2.0"]
43
- s.require_paths = ["lib"]
44
- s.rubygems_version = "2.0.3"
45
- s.summary = "DataMapper plugin that helps you manipulate an existing database."
16
+ ".gitignore".freeze,
17
+ ".gitmodules".freeze,
18
+ ".travis.yml".freeze,
19
+ "CHANGES.md".freeze,
20
+ "Gemfile".freeze,
21
+ "LICENSE".freeze,
22
+ "README.md".freeze,
23
+ "Rakefile".freeze,
24
+ "TODO.md".freeze,
25
+ "bin/dm-is-reflective".freeze,
26
+ "dm-is-reflective.gemspec".freeze,
27
+ "lib/dm-is-reflective.rb".freeze,
28
+ "lib/dm-is-reflective/adapters/data_objects_adapter.rb".freeze,
29
+ "lib/dm-is-reflective/adapters/mysql_adapter.rb".freeze,
30
+ "lib/dm-is-reflective/adapters/postgres_adapter.rb".freeze,
31
+ "lib/dm-is-reflective/adapters/sqlite_adapter.rb".freeze,
32
+ "lib/dm-is-reflective/reflective.rb".freeze,
33
+ "lib/dm-is-reflective/runner.rb".freeze,
34
+ "lib/dm-is-reflective/test.rb".freeze,
35
+ "lib/dm-is-reflective/version.rb".freeze,
36
+ "task/README.md".freeze,
37
+ "task/gemgem.rb".freeze,
38
+ "test/setup_db.sh".freeze,
39
+ "test/test_mysql.rb".freeze,
40
+ "test/test_postgres.rb".freeze,
41
+ "test/test_sqlite.rb".freeze,
42
+ "test/test_to_source.rb".freeze]
43
+ s.homepage = "https://github.com/godfat/dm-is-reflective".freeze
44
+ s.licenses = ["Apache License 2.0".freeze]
45
+ s.rubygems_version = "2.7.3".freeze
46
+ s.summary = "DataMapper plugin that helps you manipulate an existing database.".freeze
46
47
  s.test_files = [
47
- "test/test_mysql.rb",
48
- "test/test_postgres.rb",
49
- "test/test_sqlite.rb",
50
- "test/test_to_source.rb"]
48
+ "test/test_mysql.rb".freeze,
49
+ "test/test_postgres.rb".freeze,
50
+ "test/test_sqlite.rb".freeze,
51
+ "test/test_to_source.rb".freeze]
51
52
 
52
53
  if s.respond_to? :specification_version then
53
54
  s.specification_version = 4
54
55
 
55
56
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
56
- s.add_runtime_dependency(%q<dm-core>, [">= 0"])
57
- s.add_runtime_dependency(%q<dm-do-adapter>, [">= 0"])
58
- s.add_development_dependency(%q<dm-migrations>, [">= 0"])
59
- s.add_development_dependency(%q<dm-sqlite-adapter>, [">= 0"])
60
- s.add_development_dependency(%q<dm-mysql-adapter>, [">= 0"])
61
- s.add_development_dependency(%q<dm-postgres-adapter>, [">= 0"])
57
+ s.add_runtime_dependency(%q<dm-core>.freeze, [">= 0"])
58
+ s.add_runtime_dependency(%q<dm-do-adapter>.freeze, [">= 0"])
59
+ s.add_development_dependency(%q<dm-migrations>.freeze, [">= 0"])
60
+ s.add_development_dependency(%q<dm-sqlite-adapter>.freeze, [">= 0"])
61
+ s.add_development_dependency(%q<dm-mysql-adapter>.freeze, [">= 0"])
62
+ s.add_development_dependency(%q<dm-postgres-adapter>.freeze, [">= 0"])
62
63
  else
63
- s.add_dependency(%q<dm-core>, [">= 0"])
64
- s.add_dependency(%q<dm-do-adapter>, [">= 0"])
65
- s.add_dependency(%q<dm-migrations>, [">= 0"])
66
- s.add_dependency(%q<dm-sqlite-adapter>, [">= 0"])
67
- s.add_dependency(%q<dm-mysql-adapter>, [">= 0"])
68
- s.add_dependency(%q<dm-postgres-adapter>, [">= 0"])
64
+ s.add_dependency(%q<dm-core>.freeze, [">= 0"])
65
+ s.add_dependency(%q<dm-do-adapter>.freeze, [">= 0"])
66
+ s.add_dependency(%q<dm-migrations>.freeze, [">= 0"])
67
+ s.add_dependency(%q<dm-sqlite-adapter>.freeze, [">= 0"])
68
+ s.add_dependency(%q<dm-mysql-adapter>.freeze, [">= 0"])
69
+ s.add_dependency(%q<dm-postgres-adapter>.freeze, [">= 0"])
69
70
  end
70
71
  else
71
- s.add_dependency(%q<dm-core>, [">= 0"])
72
- s.add_dependency(%q<dm-do-adapter>, [">= 0"])
73
- s.add_dependency(%q<dm-migrations>, [">= 0"])
74
- s.add_dependency(%q<dm-sqlite-adapter>, [">= 0"])
75
- s.add_dependency(%q<dm-mysql-adapter>, [">= 0"])
76
- s.add_dependency(%q<dm-postgres-adapter>, [">= 0"])
72
+ s.add_dependency(%q<dm-core>.freeze, [">= 0"])
73
+ s.add_dependency(%q<dm-do-adapter>.freeze, [">= 0"])
74
+ s.add_dependency(%q<dm-migrations>.freeze, [">= 0"])
75
+ s.add_dependency(%q<dm-sqlite-adapter>.freeze, [">= 0"])
76
+ s.add_dependency(%q<dm-mysql-adapter>.freeze, [">= 0"])
77
+ s.add_dependency(%q<dm-postgres-adapter>.freeze, [">= 0"])
77
78
  end
78
79
  end
@@ -5,7 +5,7 @@ module DmIsReflective::PostgresAdapter
5
5
  def storages
6
6
  sql = <<-SQL
7
7
  SELECT table_name FROM "information_schema"."tables"
8
- WHERE table_schema = current_schema()
8
+ WHERE table_schema = current_schema() AND table_type = 'BASE TABLE'
9
9
  SQL
10
10
 
11
11
  select(Ext::String.compress_lines(sql))
@@ -55,13 +55,19 @@ module DmIsReflective
55
55
 
56
56
  reflected = targets.each{ |target|
57
57
  case target
58
- when Regexp;
59
- break name if name.to_s =~ target
58
+ when Regexp
59
+ if name.to_s =~ target
60
+ if name.to_s =~ /^\d/
61
+ break :"_#{name}" # TODO: missing test for this
62
+ else
63
+ break name
64
+ end
65
+ end
60
66
 
61
- when Symbol, String;
67
+ when Symbol, String
62
68
  break name if name == target.to_sym
63
69
 
64
- when Class;
70
+ when Class
65
71
  break name if type == target
66
72
 
67
73
  else
@@ -73,8 +73,9 @@ module DmIsReflective::Runner
73
73
  end
74
74
 
75
75
  def help
76
- maxn = options.transpose.first.map(&:size).max
77
- maxd = options.transpose.last .map(&:size).max
76
+ optt = options.transpose
77
+ maxn = optt.first.map(&:size).max
78
+ maxd = optt.last .map(&:size).max
78
79
  "Usage: dm-is-reflective DATABASE_URI\n" +
79
80
  options.map{ |(name, desc)|
80
81
  if desc.empty?
@@ -1,4 +1,4 @@
1
1
 
2
2
  module DmIsReflective
3
- VERSION = '1.3.1'
3
+ VERSION = '1.3.2'
4
4
  end
@@ -0,0 +1,54 @@
1
+ # Gemgem
2
+
3
+ ## DESCRIPTION:
4
+
5
+ Provided tasks:
6
+
7
+ rake clean # Trash ignored files
8
+ rake gem:build # Build gem
9
+ rake gem:install # Install gem
10
+ rake gem:release # Release gem
11
+ rake gem:spec # Generate gemspec
12
+ rake test # Run tests
13
+
14
+ ## REQUIREMENTS:
15
+
16
+ * Tested with MRI (official CRuby), Rubinius and JRuby.
17
+
18
+ ## INSTALLATION:
19
+
20
+ git submodule add git://github.com/godfat/gemgem.git task
21
+
22
+ And in Rakefile:
23
+
24
+ ``` ruby
25
+ begin
26
+ require "#{__dir__}/task/gemgem"
27
+ rescue LoadError
28
+ sh 'git submodule update --init --recursive'
29
+ exec Gem.ruby, '-S', $PROGRAM_NAME, *ARGV
30
+ end
31
+
32
+ Gemgem.init(__dir__, :submodules => %w[your-dep]) do |s|
33
+ s.name = 'your-gem'
34
+ s.version = '0.1.0'
35
+ end
36
+ ```
37
+
38
+ ## LICENSE:
39
+
40
+ Apache License 2.0 (Apache-2.0)
41
+
42
+ Copyright (c) 2011-2017, Lin Jen-Shin (godfat)
43
+
44
+ Licensed under the Apache License, Version 2.0 (the "License");
45
+ you may not use this file except in compliance with the License.
46
+ You may obtain a copy of the License at
47
+
48
+ <http://www.apache.org/licenses/LICENSE-2.0>
49
+
50
+ Unless required by applicable law or agreed to in writing, software
51
+ distributed under the License is distributed on an "AS IS" BASIS,
52
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
53
+ See the License for the specific language governing permissions and
54
+ limitations under the License.
@@ -1,107 +1,150 @@
1
1
 
2
- require 'pathname'
3
-
4
2
  module Gemgem
5
3
  class << self
6
- attr_accessor :dir, :spec
4
+ attr_accessor :dir, :spec, :submodules, :spec_create
7
5
  end
8
6
 
9
7
  module_function
8
+ def gem_tag ; "#{spec.name}-#{spec.version}" ; end
9
+ def gem_path ; "#{pkg_dir}/#{gem_tag}.gem" ; end
10
+ def spec_path ; "#{dir}/#{spec.name}.gemspec" ; end
11
+ def pkg_dir ; "#{dir}/pkg" ; end
12
+ def escaped_dir; @escaped_dir ||= Regexp.escape(dir); end
13
+
14
+ def init dir, options={}, &block
15
+ self.dir = dir
16
+ ENV['RUBYLIB'] = "#{dir}/lib:#{ENV['RUBYLIB']}"
17
+ ENV['PATH'] = "#{dir}/bin:#{ENV['PATH']}"
18
+ self.submodules = options[:submodules] || []
19
+ self.spec_create = block
20
+
21
+ $LOAD_PATH.unshift("#{dir}/lib", *submodules_libs)
22
+ end
23
+
10
24
  def create
11
- yield(spec = Gem::Specification.new{ |s|
25
+ spec = Gem::Specification.new do |s|
12
26
  s.authors = ['Lin Jen-Shin (godfat)']
13
27
  s.email = ['godfat (XD) godfat.org']
14
28
 
15
29
  s.description = description.join
16
30
  s.summary = description.first
17
- s.license = readme['LICENSE'].sub(/.+\n\n/, '').lines.first.strip
18
-
19
- s.rubygems_version = Gem::VERSION
20
- s.date = Time.now.strftime('%Y-%m-%d')
21
- s.files = gem_files
22
- s.test_files = gem_files.grep(%r{^test/(.+?/)*test_.+?\.rb$})
23
- s.executables = Dir['bin/*'].map{ |f| File.basename(f) }
24
- s.require_paths = %w[lib]
25
- })
31
+ s.license = license
32
+
33
+ s.date = Time.now.strftime('%Y-%m-%d')
34
+ s.files = gem_files
35
+ s.test_files = test_files
36
+ s.executables = bin_files
37
+ end
38
+ spec_create.call(spec)
26
39
  spec.homepage ||= "https://github.com/godfat/#{spec.name}"
27
- spec
40
+ self.spec = spec
28
41
  end
29
42
 
30
- def readme
31
- path = %w[README.md README].find{ |name|
32
- File.exist?("#{Gemgem.dir}/#{name}")
33
- }
34
- @readme ||=
35
- if path
36
- ps = "##{File.read(path)}".
37
- scan(/((#+)[^\n]+\n\n.+?(?=(\n\n\2[^#\n]+\n)|\Z))/m).map(&:first)
38
- ps.inject('HEADER' => ps.first){ |r, s, i|
39
- r[s[/\w+/]] = s
40
- r
41
- }
42
- else
43
- {}
44
- end
43
+ def gem_install
44
+ require 'rubygems/commands/install_command'
45
+ # read ~/.gemrc
46
+ Gem.use_paths(Gem.configuration[:gemhome], Gem.configuration[:gempath])
47
+ Gem::Command.extra_args = Gem.configuration[:gem]
48
+
49
+ # setup install options
50
+ cmd = Gem::Commands::InstallCommand.new
51
+ cmd.handle_options([])
52
+
53
+ # install
54
+ install = Gem::Installer.new(gem_path, cmd.options)
55
+ install.install
56
+ puts "\e[35mGem installed: \e[33m#{strip_path(install.gem_dir)}\e[0m"
45
57
  end
46
58
 
47
- def description
48
- @description ||= (readme['DESCRIPTION']||'').sub(/.+\n\n/, '').lines
59
+ def gem_spec
60
+ create
61
+ write
49
62
  end
50
63
 
51
- def changes
52
- path = %w[CHANGES.md CHANGES].find{ |name|
53
- File.exist?("#{Gemgem.dir}/#{name}")
54
- }
55
- @changes ||=
56
- if path
57
- date = '\d+{4}\-\d+{2}\-\d{2}'
58
- File.read(path).match(
59
- /([^\n]+#{date}\n\n(.+?))(?=\n\n[^\n]+#{date}\n|\Z)/m)[1]
60
- else
61
- ''
62
- end
64
+ def gem_build
65
+ require 'fileutils'
66
+ require 'rubygems/package'
67
+ gem = nil
68
+ Dir.chdir(dir) do
69
+ gem = Gem::Package.build(Gem::Specification.load(spec_path))
70
+ FileUtils.mkdir_p(pkg_dir)
71
+ FileUtils.mv(gem, pkg_dir) # gem is relative path, but might be ok
72
+ end
73
+ puts "\e[35mGem built: \e[33m#{strip_path("#{pkg_dir}/#{gem}")}\e[0m"
63
74
  end
64
75
 
65
- def ann_md
66
- "#{readme['HEADER'].sub(/([\w\-]+)/, "[\\1](#{spec.homepage})")}\n\n" \
67
- "##{readme['DESCRIPTION'][/[^\n]+\n\n[^\n]+/]}\n\n" \
68
- "### CHANGES:\n\n" \
69
- "###{changes}\n\n" \
70
- "##{readme['INSTALLATION']}\n\n" +
71
- if readme['SYNOPSIS'] then "##{readme['SYNOPSIS'][/[^\n]+\n\n[^\n]+/]}"
72
- else '' end
76
+ def gem_release
77
+ sh_git('tag', gem_tag)
78
+ sh_git('push')
79
+ sh_git('push', '--tags')
80
+ sh_gem('push', gem_path)
73
81
  end
74
82
 
75
- def ann_html
76
- gem 'nokogiri'
77
- gem 'kramdown'
83
+ def gem_check
84
+ unless git('status', '--porcelain').empty?
85
+ puts("\e[35mWorking copy is not clean.\e[0m")
86
+ exit(3)
87
+ end
88
+
89
+ ver = spec.version.to_s
78
90
 
79
- IO.popen('kramdown', 'r+') do |md|
80
- md.puts Gemgem.ann_md
81
- md.close_write
82
- require 'nokogiri'
83
- html = Nokogiri::XML.parse("<gemgem>#{md.read}</gemgem>")
84
- html.css('*').each{ |n| n.delete('id') }
85
- html.root.children.to_html
91
+ if ENV['VERSION'].nil?
92
+ puts("\e[35mExpected " \
93
+ "\e[33mVERSION\e[35m=\e[33m#{ver}\e[0m")
94
+ exit(1)
95
+
96
+ elsif ENV['VERSION'] != ver
97
+ puts("\e[35mExpected \e[33mVERSION\e[35m=\e[33m#{ver} " \
98
+ "\e[35mbut got\n " \
99
+ "\e[33mVERSION\e[35m=\e[33m#{ENV['VERSION']}\e[0m")
100
+ exit(2)
86
101
  end
87
102
  end
88
103
 
89
- def ann_email
90
- "#{readme['HEADER'].sub(/([\w\-]+)/, "\\1 <#{spec.homepage}>")}\n\n" \
91
- "#{readme['DESCRIPTION']}\n\n" \
92
- "#{readme['INSTALLATION']}\n\n" +
93
- if readme['SYNOPSIS'] then "##{readme['SYNOPSIS']}\n\n" else '' end +
94
- "## CHANGES:\n\n" \
95
- "##{changes}\n\n"
104
+ def test
105
+ return if test_files.empty?
106
+
107
+ if ENV['COV'] || ENV['CI']
108
+ require 'simplecov'
109
+ if ENV['CI']
110
+ begin
111
+ require 'coveralls'
112
+ SimpleCov.formatter = Coveralls::SimpleCov::Formatter
113
+ rescue LoadError => e
114
+ puts "Cannot load coveralls, skip: #{e}"
115
+ end
116
+ end
117
+ SimpleCov.start do
118
+ add_filter('test/')
119
+ add_filter('test.rb')
120
+ submodules_libs.each(&method(:add_filter))
121
+ end
122
+ end
123
+
124
+ test_files.each{ |file| require "#{dir}/#{file[0..-4]}" }
96
125
  end
97
126
 
98
- def gem_tag
99
- "#{spec.name}-#{spec.version}"
127
+ def clean
128
+ return if ignored_files.empty?
129
+
130
+ require 'fileutils'
131
+ trash = File.expand_path("~/.Trash/#{spec.name}")
132
+ puts "Move the following files into: \e[35m#{strip_path(trash)}\e[33m"
133
+
134
+ ignored_files.each do |file|
135
+ from = "#{dir}/#{file}"
136
+ to = "#{trash}/#{File.dirname(file)}"
137
+ puts strip_path(from)
138
+
139
+ FileUtils.mkdir_p(to)
140
+ FileUtils.mv(from, to)
141
+ end
142
+
143
+ print "\e[0m"
100
144
  end
101
145
 
102
146
  def write
103
- File.open("#{dir}/#{spec.name}.gemspec", 'w'){ |f|
104
- f << split_lines(spec.to_ruby) }
147
+ File.open(spec_path, 'w'){ |f| f << split_lines(spec.to_ruby) }
105
148
  end
106
149
 
107
150
  def split_lines ruby
@@ -114,65 +157,139 @@ module Gemgem
114
157
  }
115
158
  end
116
159
 
160
+ def strip_path path
161
+ strip_home_path(strip_cwd_path(path))
162
+ end
163
+
164
+ def strip_home_path path
165
+ path.sub(/\A#{Regexp.escape(ENV['HOME'])}\//, '~/')
166
+ end
167
+
168
+ def strip_cwd_path path
169
+ path.sub(/\A#{Regexp.escape(Dir.pwd)}\//, '')
170
+ end
171
+
172
+ def submodules_libs
173
+ submodules.map{ |path| "#{dir}/#{path}/lib" }
174
+ end
175
+
176
+ def git *args
177
+ `git --git-dir=#{dir}/.git #{args.join(' ')}`
178
+ end
179
+
180
+ def sh_git *args
181
+ Rake.sh('git', "--git-dir=#{dir}/.git", *args)
182
+ end
183
+
184
+ def sh_gem *args
185
+ Rake.sh(Gem.ruby, '-S', 'gem', *args)
186
+ end
187
+
188
+ def glob path=dir
189
+ Dir.glob("#{path}/**/*", File::FNM_DOTMATCH)
190
+ end
191
+
192
+ def readme
193
+ @readme ||=
194
+ if (path = "#{Gemgem.dir}/README.md") && File.exist?(path)
195
+ ps = "##{File.read(path)}".
196
+ scan(/((#+)[^\n]+\n\n.+?(?=(\n\n\2[^#\n]+\n)|\Z))/m).map(&:first)
197
+ ps.inject('HEADER' => ps.first){ |r, s, i|
198
+ r[s[/\w+/]] = s
199
+ r
200
+ }
201
+ else
202
+ {}
203
+ end
204
+ end
205
+
206
+ def description
207
+ # JRuby String#lines is returning an enumerator
208
+ @description ||= (readme['DESCRIPTION']||'').sub(/.+\n\n/, '').lines.to_a
209
+ end
210
+
211
+ def license
212
+ readme['LICENSE'].sub(/.+\n\n/, '').lines.first.
213
+ split(/[()]/).map(&:strip).reject(&:empty?).last
214
+ end
215
+
117
216
  def all_files
118
- @all_files ||= find_files(Pathname.new(dir)).map{ |file|
119
- if file.to_s =~ %r{\.git/|\.git$}
120
- nil
217
+ @all_files ||= fold_files(glob).sort
218
+ end
219
+
220
+ def fold_files files
221
+ files.inject([]){ |r, path|
222
+ if File.file?(path) && path !~ %r{/\.git(/|$)} &&
223
+ (rpath = path[%r{^#{escaped_dir}/(.*$)}, 1])
224
+ r << rpath
225
+ elsif File.symlink?(path) # walk into symlinks...
226
+ r.concat(fold_files(glob(File.expand_path(path,
227
+ File.readlink(path)))))
121
228
  else
122
- file.to_s
229
+ r
123
230
  end
124
- }.compact.sort
231
+ }
125
232
  end
126
233
 
127
234
  def gem_files
128
- @gem_files ||= all_files - ignored_files
235
+ @gem_files ||= all_files.reject{ |f|
236
+ f =~ submodules_pattern ||
237
+ (f =~ ignored_pattern && !git_files.include?(f))
238
+ }
129
239
  end
130
240
 
131
- def ignored_files
132
- @ignored_file ||= all_files.select{ |path| ignore_patterns.find{ |ignore|
133
- path =~ ignore && !git_files.include?(path)}}
241
+ def test_files
242
+ @test_files ||= gem_files.grep(%r{^test/(.+?/)*test_.+?\.rb$})
243
+ end
244
+
245
+ def bin_files
246
+ @bin_files ||= gem_files.grep(%r{^bin/}).map{ |f| File.basename(f) }
134
247
  end
135
248
 
136
249
  def git_files
137
250
  @git_files ||= if File.exist?("#{dir}/.git")
138
- `git ls-files`.split("\n")
251
+ git('ls-files').split("\n")
139
252
  else
140
253
  []
141
254
  end
142
255
  end
143
256
 
144
- # protected
145
- def find_files path
146
- path.children.select(&:file?).map{|file| file.to_s[(dir.size+1)..-1]} +
147
- path.children.select(&:directory?).map{|dir| find_files(dir)}.flatten
257
+ def ignored_files
258
+ @ignored_files ||= all_files.grep(ignored_pattern)
259
+ end
260
+
261
+ def ignored_pattern
262
+ @ignored_pattern ||= if gitignore.empty?
263
+ /^$/
264
+ else
265
+ Regexp.new(expand_patterns(gitignore).join('|'))
266
+ end
148
267
  end
149
268
 
150
- def ignore_patterns
151
- @ignore_files ||= expand_patterns(
152
- gitignore.split("\n").reject{ |pattern|
153
- pattern.strip == ''
154
- }).map{ |pattern| %r{^([^/]+/)*?#{Regexp.escape(pattern)}(/[^/]+)*?$} }
269
+ def submodules_pattern
270
+ @submodules_pattern ||= if submodules.empty?
271
+ /^$/
272
+ else
273
+ Regexp.new(submodules.map{ |path|
274
+ "^#{Regexp.escape(path)}/" }.join('|'))
275
+ end
155
276
  end
156
277
 
157
278
  def expand_patterns pathes
158
- pathes.map{ |path|
159
- if path !~ /\*/
160
- path
161
- else
162
- expand_patterns(
163
- Dir[path] +
164
- Pathname.new(File.dirname(path)).children.select(&:directory?).
165
- map{ |prefix| "#{prefix}/#{File.basename(path)}" })
166
- end
167
- }.flatten
279
+ # http://git-scm.com/docs/gitignore
280
+ pathes.flat_map{ |path|
281
+ # we didn't implement negative pattern for now
282
+ Regexp.escape(path).sub(%r{^/}, '^').gsub(/\\\*/, '[^/]*')
283
+ }
168
284
  end
169
285
 
170
286
  def gitignore
171
- if File.exist?(path = "#{dir}/.gitignore")
172
- File.read(path)
173
- else
174
- ''
175
- end
287
+ @gitignore ||= if File.exist?(path = "#{dir}/.gitignore")
288
+ File.read(path).lines.
289
+ reject{ |l| l == /^\s*(#|\s+$)/ }.map(&:strip)
290
+ else
291
+ []
292
+ end
176
293
  end
177
294
  end
178
295
 
@@ -180,89 +297,42 @@ namespace :gem do
180
297
 
181
298
  desc 'Install gem'
182
299
  task :install => [:build] do
183
- sh("#{Gem.ruby} -S gem install pkg/#{Gemgem.gem_tag}.gem")
300
+ Gemgem.gem_install
184
301
  end
185
302
 
186
303
  desc 'Build gem'
187
304
  task :build => [:spec] do
188
- sh("#{Gem.ruby} -S gem build #{Gemgem.spec.name}.gemspec")
189
- sh("mkdir -p pkg")
190
- sh("mv #{Gemgem.gem_tag}.gem pkg/")
305
+ Gemgem.gem_build
306
+ end
307
+
308
+ desc 'Generate gemspec'
309
+ task :spec do
310
+ Gemgem.gem_spec
191
311
  end
192
312
 
193
313
  desc 'Release gem'
194
314
  task :release => [:spec, :check, :build] do
195
- sh("git tag #{Gemgem.gem_tag}")
196
- sh("git push")
197
- sh("git push --tags")
198
- sh("#{Gem.ruby} -S gem push pkg/#{Gemgem.gem_tag}.gem")
315
+ Gemgem.gem_release
199
316
  end
200
317
 
201
318
  task :check do
202
- ver = Gemgem.spec.version.to_s
203
-
204
- if ENV['VERSION'].nil?
205
- puts("\e[35mExpected " \
206
- "\e[33mVERSION\e[35m=\e[33m#{ver}\e[0m")
207
- exit(1)
208
-
209
- elsif ENV['VERSION'] != ver
210
- puts("\e[35mExpected \e[33mVERSION\e[35m=\e[33m#{ver} " \
211
- "\e[35mbut got\n " \
212
- "\e[33mVERSION\e[35m=\e[33m#{ENV['VERSION']}\e[0m")
213
- exit(2)
214
- end
319
+ Gemgem.gem_check
215
320
  end
216
321
 
217
322
  end # of gem namespace
218
323
 
219
- desc 'Run tests in memory'
324
+ desc 'Run tests'
220
325
  task :test do
221
- require 'bacon'
222
- Bacon.extend(Bacon::TestUnitOutput)
223
- Bacon.summary_on_exit
224
- $LOAD_PATH.unshift('lib')
225
- Dir['./test/**/test_*.rb'].each{ |file| require file[0..-4] }
226
- end
227
-
228
- desc 'Run tests with shell'
229
- task 'test:shell', :RUBY_OPTS do |t, args|
230
- files = Dir['test/**/test_*.rb'].join(' ')
231
-
232
- cmd = [Gem.ruby, args[:RUBY_OPTS],
233
- '-I', 'lib', '-S', 'bacon', '--quiet', files]
234
-
235
- sh(cmd.compact.join(' '))
236
- end
237
-
238
- desc 'Generate ann markdown'
239
- task 'ann:md' => ['gem:spec'] do
240
- puts Gemgem.ann_md
241
- end
242
-
243
- desc 'Generate ann html'
244
- task 'ann:html' => ['gem:spec'] do
245
- puts Gemgem.ann_html
246
- end
247
-
248
- desc 'Generate ann email'
249
- task 'ann:email' => ['gem:spec'] do
250
- puts Gemgem.ann_email
251
- end
252
-
253
- desc 'Generate rdoc'
254
- task :doc => ['gem:spec'] do
255
- sh("yardoc -o rdoc --main README.md" \
256
- " --files #{Gemgem.spec.extra_rdoc_files.join(',')}")
326
+ Gemgem.test
257
327
  end
258
328
 
259
- desc 'Remove ignored files'
329
+ desc 'Trash ignored files'
260
330
  task :clean => ['gem:spec'] do
261
- trash = "~/.Trash/#{Gemgem.spec.name}/"
262
- sh "mkdir -p #{trash}" unless File.exist?(File.expand_path(trash))
263
- Gemgem.ignored_files.each{ |file| sh "mv #{file} #{trash}" }
331
+ Gemgem.clean
264
332
  end
265
333
 
266
334
  task :default do
267
- puts `#{Gem.ruby} -S #{$PROGRAM_NAME} -T`
335
+ # Is there a reliable way to do this in the current process?
336
+ # It failed miserably before between Rake versions...
337
+ exec "#{Gem.ruby} -S #{$PROGRAM_NAME} -f #{Rake.application.rakefile} -T"
268
338
  end
metadata CHANGED
@@ -1,97 +1,97 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dm-is-reflective
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 1.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lin Jen-Shin (godfat)
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-05-22 00:00:00.000000000 Z
11
+ date: 2017-12-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dm-core
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: dm-do-adapter
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: dm-migrations
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: dm-sqlite-adapter
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: dm-mysql-adapter
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: dm-postgres-adapter
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - '>='
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - '>='
94
+ - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  description: |-
@@ -104,9 +104,9 @@ executables:
104
104
  extensions: []
105
105
  extra_rdoc_files: []
106
106
  files:
107
- - .gitignore
108
- - .gitmodules
109
- - .travis.yml
107
+ - ".gitignore"
108
+ - ".gitmodules"
109
+ - ".travis.yml"
110
110
  - CHANGES.md
111
111
  - Gemfile
112
112
  - LICENSE
@@ -124,7 +124,7 @@ files:
124
124
  - lib/dm-is-reflective/runner.rb
125
125
  - lib/dm-is-reflective/test.rb
126
126
  - lib/dm-is-reflective/version.rb
127
- - task/.gitignore
127
+ - task/README.md
128
128
  - task/gemgem.rb
129
129
  - test/setup_db.sh
130
130
  - test/test_mysql.rb
@@ -141,17 +141,17 @@ require_paths:
141
141
  - lib
142
142
  required_ruby_version: !ruby/object:Gem::Requirement
143
143
  requirements:
144
- - - '>='
144
+ - - ">="
145
145
  - !ruby/object:Gem::Version
146
146
  version: '0'
147
147
  required_rubygems_version: !ruby/object:Gem::Requirement
148
148
  requirements:
149
- - - '>='
149
+ - - ">="
150
150
  - !ruby/object:Gem::Version
151
151
  version: '0'
152
152
  requirements: []
153
153
  rubyforge_project:
154
- rubygems_version: 2.0.3
154
+ rubygems_version: 2.7.3
155
155
  signing_key:
156
156
  specification_version: 4
157
157
  summary: DataMapper plugin that helps you manipulate an existing database.
@@ -1 +0,0 @@
1
- *.rbc