gem-src 0.9.0 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +14 -8
- data/gem-src.gemspec +1 -1
- data/lib/gem/src/irregular_repositories.rb +81 -0
- data/lib/rubygems_plugin.rb +45 -34
- data/plugins.rb +7 -0
- data/spec/gem-src_spec.rb +71 -0
- data/spec/spec_helper.rb +6 -0
- metadata +12 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 70651b92bbaa9d17a2f084c7e2ff97adf2b40a2ebe4ec00deae616afec1fe995
|
4
|
+
data.tar.gz: 5ac36fd408e1b1f96945986c6f4bef28d737b2ef8e0d8b9e66a913c16a76dede
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1ac67aa2d4b6f7ac57ffebb80e1ebed510477117dc9e3ce3573d51d9b9b146ab2152dbdf6ad3928220e7ac6d6353808687d1548f6e310a0730def45826ba24e1
|
7
|
+
data.tar.gz: 9e2818b0389ab44f3cf537ecfcf85c00adb77d9d59edad7010ca7471aabf411403aeedb97fc4426651e372bcb788b741239f7fb9122603953544397c500ee531
|
data/README.md
CHANGED
@@ -5,7 +5,7 @@ Plus, gem-src runs `git init` on each installed gem, and links it to the cloned
|
|
5
5
|
|
6
6
|
***TL;DR***
|
7
7
|
|
8
|
-
% git clone https://github.com/amatsuda/gem-src.git
|
8
|
+
% git clone https://github.com/amatsuda/gem-src.git "$(rbenv root)/plugins/gem-src"
|
9
9
|
% mkdir ~/src
|
10
10
|
% echo "gemsrc_clone_root: ~/src" >> ~/.gemrc
|
11
11
|
|
@@ -14,20 +14,26 @@ Then you're all set!
|
|
14
14
|
|
15
15
|
## Installation
|
16
16
|
|
17
|
-
### As a Rubygem
|
18
|
-
|
19
|
-
gem-src is a gem plugin that can be installed via gem install command:
|
20
|
-
|
21
|
-
% gem install gem-src
|
22
|
-
|
23
17
|
### :star2: As an rbenv plugin (recommended)
|
24
18
|
|
25
19
|
Alternatively, if you're using rbenv, you can install gem-src as an rbenv plugin:
|
26
20
|
|
27
|
-
% git clone https://github.com/amatsuda/gem-src.git
|
21
|
+
% git clone https://github.com/amatsuda/gem-src.git "$(rbenv root)/plugins/gem-src"
|
28
22
|
|
29
23
|
then you get gem-src enabled for all `gem` and `bundle` commands invoked through rbenv.
|
30
24
|
|
25
|
+
### :star2: As a Bundler plugin (experimental, but also recommended)
|
26
|
+
|
27
|
+
gem-src is a bundler plugin that can be installed via bundler plugin install command:
|
28
|
+
|
29
|
+
% bundler plugin install gem-src
|
30
|
+
|
31
|
+
### As a Rubygem
|
32
|
+
|
33
|
+
gem-src is a gem plugin that can be installed via gem install command:
|
34
|
+
|
35
|
+
% gem install gem-src
|
36
|
+
|
31
37
|
## Configuration
|
32
38
|
|
33
39
|
### By default
|
data/gem-src.gemspec
CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |gem|
|
6
6
|
gem.name = "gem-src"
|
7
|
-
gem.version = '0.
|
7
|
+
gem.version = '0.10.0'
|
8
8
|
gem.authors = ["Akira Matsuda"]
|
9
9
|
gem.email = ["ronnie@dio.jp"]
|
10
10
|
gem.description = 'Gem.post_install { `git clone gem_source src` }'
|
@@ -0,0 +1,81 @@
|
|
1
|
+
module Gem
|
2
|
+
class Src
|
3
|
+
IRREGULAR_REPOSITORIES = {
|
4
|
+
'activesupport' => nil,
|
5
|
+
'actionview' => nil,
|
6
|
+
'actionpack' => nil,
|
7
|
+
'activemodel' => nil,
|
8
|
+
'activerecord' => nil,
|
9
|
+
'activerecord-jdbcmysql-adapter' => 'https://github.com/jruby/activerecord-jdbc-adapter',
|
10
|
+
'activerecord-jdbcpostgresql-adapter' => 'https://github.com/jruby/activerecord-jdbc-adapter',
|
11
|
+
'activerecord-jdbcsqlite3-adapter' => 'https://github.com/jruby/activerecord-jdbc-adapter',
|
12
|
+
'activejob' => nil,
|
13
|
+
'actionmailbox' => nil,
|
14
|
+
'actionmailer' => nil,
|
15
|
+
'actioncable' => nil,
|
16
|
+
'actiontext' => nil,
|
17
|
+
'activestorage' => nil,
|
18
|
+
'railties' => nil,
|
19
|
+
'activeresource' => 'https://github.com/rails/activeresource.git',
|
20
|
+
'autoparse' => 'https://github.com/google/autoparse.git',
|
21
|
+
'aws-sdk-rails' => 'https://github.com/aws/aws-sdk-rails.git',
|
22
|
+
'breadcrumbs_on_rails' => 'https://github.com/weppos/breadcrumbs_on_rails',
|
23
|
+
'bson' => 'https://github.com/mongodb/bson-ruby.git',
|
24
|
+
'coffee-script-source' => 'https://github.com/rails/ruby-coffee-script',
|
25
|
+
'compass-core' => 'https://github.com/Compass/compass.git',
|
26
|
+
'compass-import-once' => 'https://github.com/Compass/compass.git',
|
27
|
+
'concurrent-ruby' => 'https://github.com/ruby-concurrency/concurrent-ruby/',
|
28
|
+
'concurrent-ruby-edge' => 'https://github.com/ruby-concurrency/concurrent-ruby/',
|
29
|
+
'concurrent-ruby-ext' => 'https://github.com/ruby-concurrency/concurrent-ruby/',
|
30
|
+
'cool.io' => 'https://github.com/tarcieri/cool.io.git',
|
31
|
+
'cucumber-core' => 'https://github.com/cucumber/cucumber-ruby-core.git',
|
32
|
+
'cucumber-wire' => 'https://github.com/cucumber/cucumber-ruby-wire.git',
|
33
|
+
'diff-lcs' => 'https://github.com/halostatue/diff-lcs.git',
|
34
|
+
'elasticsearch' => 'https://github.com/elastic/elasticsearch-ruby.git',
|
35
|
+
'elasticsearch-api' => 'https://github.com/elastic/elasticsearch-ruby.git',
|
36
|
+
'elasticsearch-extensions' => 'https://github.com/elastic/elasticsearch-ruby.git',
|
37
|
+
'elasticsearch-transport' => 'https://github.com/elastic/elasticsearch-ruby.git',
|
38
|
+
'erubis' => 'https://github.com/kwatch/erubis.git',
|
39
|
+
'flay' => 'https://github.com/seattlerb/flay',
|
40
|
+
'geocoder' => 'https://github.com/alexreisner/geocoder',
|
41
|
+
'hirb' => 'https://github.com/cldwalker/hirb',
|
42
|
+
'houston' => 'https://github.com/nomad/houston',
|
43
|
+
'html2haml' => 'https://github.com/haml/html2haml',
|
44
|
+
'io-console' => 'https://github.com/ruby/io-console',
|
45
|
+
'kaminari-actionview' => nil,
|
46
|
+
'kaminari-activerecord' => nil,
|
47
|
+
'kaminari-core' => nil,
|
48
|
+
'kwalify' => nil,
|
49
|
+
'log4r' => 'https://github.com/colbygk/log4r',
|
50
|
+
'meta_request' => 'https://github.com/dejan/rails_panel',
|
51
|
+
'method_source' => 'https://github.com/banister/method_source',
|
52
|
+
'origin' => 'https://github.com/mongoid/origin',
|
53
|
+
'padrino' => 'https://github.com/padrino/padrino-framework',
|
54
|
+
'padrino-admin' => nil,
|
55
|
+
'padrino-cache' => nil,
|
56
|
+
'padrino-core' => nil,
|
57
|
+
'padrino-gen' => nil,
|
58
|
+
'padrino-helpers' => nil,
|
59
|
+
'padrino-mailer' => nil,
|
60
|
+
'padrino-performance' => nil,
|
61
|
+
'padrino-support' => nil,
|
62
|
+
'paranoia' => 'https://github.com/rubysherpas/paranoia',
|
63
|
+
'pdf-core' => 'https://github.com/prawnpdf/pdf-core',
|
64
|
+
'pg' => nil,
|
65
|
+
'rack-mini-profiler' => 'https://github.com/MiniProfiler/rack-mini-profiler',
|
66
|
+
'raindrops' => 'https://github.com/tmm1/raindrops',
|
67
|
+
'redis-actionpack' => 'https://github.com/redis-store/redis-actionpack',
|
68
|
+
'redis-activesupport' => 'https://github.com/redis-store/redis-activesupport',
|
69
|
+
'redis-rack' => 'https://github.com/redis-store/redis-rack',
|
70
|
+
'redis-rails' => 'https://github.com/redis-store/redis-rails',
|
71
|
+
'rom-mapper' => 'https://github.com/rom-rb/rom-mapper',
|
72
|
+
'rom-repository' => 'https://github.com/rom-rb/rom-repository',
|
73
|
+
'rom-sql' => 'https://github.com/rom-rb/rom-sql',
|
74
|
+
'rouge' => 'https://github.com/jneen/rouge',
|
75
|
+
'rubygems-update' => nil,
|
76
|
+
'spreadsheet' => 'https://github.com/zdavatz/spreadsheet',
|
77
|
+
'thin' => 'https://github.com/macournoyer/thin',
|
78
|
+
'uniform_notifier' => 'https://github.com/flyerhzm/uniform_notifier'
|
79
|
+
}.freeze unless defined? IRREGULAR_REPOSITORIES
|
80
|
+
end
|
81
|
+
end
|
data/lib/rubygems_plugin.rb
CHANGED
@@ -5,35 +5,46 @@ require 'net/https'
|
|
5
5
|
|
6
6
|
module Gem
|
7
7
|
class Src
|
8
|
-
|
8
|
+
class << self
|
9
|
+
def post_install_hook(installer)
|
10
|
+
return true if installer.class.name == 'Bundler::Source::Path::Installer'
|
11
|
+
return true if !!ENV['GEMSRC_SKIP']
|
9
12
|
|
10
|
-
|
13
|
+
gem_src = Gem::Src.new installer
|
14
|
+
gem_src.git_clone_homepage_or_source_code_uri_or_homepage_uri_or_github_organization_uri
|
15
|
+
|
16
|
+
gem_src.repositorize_installed_gem
|
17
|
+
|
18
|
+
gem_src.remote_add_src_and_origin
|
19
|
+
true
|
20
|
+
end
|
21
|
+
end
|
11
22
|
|
12
23
|
def initialize(installer)
|
13
|
-
@installer, @tested_repositories = installer, []
|
24
|
+
@installer, @spec, @tested_repositories = installer, installer.spec, []
|
14
25
|
end
|
15
26
|
|
16
27
|
# Guess the git repo from the gemspec and perform git clone
|
17
28
|
def git_clone_homepage_or_source_code_uri_or_homepage_uri_or_github_organization_uri
|
18
|
-
return false if skip_clone?
|
19
29
|
return false if File.exist? clone_dir
|
20
30
|
|
21
31
|
now = Time.now
|
22
32
|
|
23
|
-
if IRREGULAR_REPOSITORIES.key?
|
24
|
-
return git_clone IRREGULAR_REPOSITORIES[
|
33
|
+
if IRREGULAR_REPOSITORIES.key? @spec.name
|
34
|
+
return git_clone IRREGULAR_REPOSITORIES[@spec.name]
|
25
35
|
end
|
26
36
|
|
27
|
-
result = git_clone(
|
28
|
-
git_clone(
|
37
|
+
result = git_clone(source_code_uri_from_metadata) ||
|
38
|
+
git_clone(@spec.homepage) ||
|
39
|
+
git_clone(github_url(@spec.homepage)) ||
|
29
40
|
git_clone(source_code_uri) ||
|
30
41
|
git_clone(homepage_uri) ||
|
31
42
|
git_clone(github_url(homepage_uri)) ||
|
32
|
-
git_clone(github_organization_uri(
|
43
|
+
git_clone(github_organization_uri(@spec.name))
|
33
44
|
|
34
45
|
if verbose?
|
35
|
-
puts "gem-src: #{
|
36
|
-
puts "gem-src: #{
|
46
|
+
puts "gem-src: #{@spec.name} - !!! Failed to find a repo." if result.nil?
|
47
|
+
puts "gem-src: #{@spec.name} - #{Time.now - now}s"
|
37
48
|
end
|
38
49
|
result
|
39
50
|
end
|
@@ -41,7 +52,7 @@ module Gem
|
|
41
52
|
# git init the installed gem so that we can directly edit the files there
|
42
53
|
def repositorize_installed_gem
|
43
54
|
if File.directory? gem_dir
|
44
|
-
puts "gem-src: #{
|
55
|
+
puts "gem-src: #{@spec.name} - repositorizing..." if verbose?
|
45
56
|
`cd #{gem_dir} && ! git rev-parse --is-inside-work-tree 2> /dev/null && git init && git checkout -qb gem-src_init && git add -A && git commit -m 'Initial commit by gem-src'`
|
46
57
|
end
|
47
58
|
end
|
@@ -49,10 +60,10 @@ module Gem
|
|
49
60
|
# git remote add from the installed gem to the cloned repo so that we can easily transfer patches
|
50
61
|
def remote_add_src_and_origin
|
51
62
|
if File.directory?(clone_dir) && File.directory?(gem_dir)
|
52
|
-
puts "gem-src: #{
|
63
|
+
puts "gem-src: #{@spec.name} - adding remotes..." if verbose?
|
53
64
|
`cd #{gem_dir} && git remote add src #{clone_dir}`
|
54
65
|
origin = `cd #{clone_dir} && git remote get-url origin`.chomp
|
55
|
-
`cd #{gem_dir} && git remote
|
66
|
+
`cd #{gem_dir} && git config remote.origin.url #{origin}` if origin
|
56
67
|
end
|
57
68
|
end
|
58
69
|
|
@@ -60,17 +71,22 @@ module Gem
|
|
60
71
|
|
61
72
|
def clone_dir
|
62
73
|
@clone_dir ||= if ENV['GEMSRC_CLONE_ROOT']
|
63
|
-
File.expand_path
|
74
|
+
File.expand_path @spec.name, ENV['GEMSRC_CLONE_ROOT']
|
64
75
|
elsif Gem.configuration[:gemsrc_clone_root]
|
65
|
-
File.expand_path
|
76
|
+
File.expand_path @spec.name, Gem.configuration[:gemsrc_clone_root]
|
66
77
|
else
|
67
|
-
gem_dir = installer.respond_to?(:gem_dir) ? installer.gem_dir : File.expand_path(File.join(installer.gem_home, 'gems', installer.spec.full_name))
|
68
78
|
File.join gem_dir, 'src'
|
69
79
|
end
|
70
80
|
end
|
71
81
|
|
72
82
|
def gem_dir
|
73
|
-
installer.respond_to?(:gem_dir)
|
83
|
+
if @installer.respond_to?(:gem_dir)
|
84
|
+
@installer.gem_dir
|
85
|
+
elsif @installer.respond_to?(:gem_home) # old rubygems
|
86
|
+
File.expand_path(File.join(@installer.gem_home, 'gems', @spec.full_name))
|
87
|
+
else # bundler
|
88
|
+
File.expand_path(File.join(Gem.dir, 'gems', @spec.full_name))
|
89
|
+
end
|
74
90
|
end
|
75
91
|
|
76
92
|
def github_url(url)
|
@@ -99,9 +115,13 @@ module Gem
|
|
99
115
|
Net::HTTP.new('github.com', 443).tap {|h| h.use_ssl = true }.request_head(url).code != '404'
|
100
116
|
end
|
101
117
|
|
118
|
+
def source_code_uri_from_metadata
|
119
|
+
@spec.metadata['source_code_uri']
|
120
|
+
end
|
121
|
+
|
102
122
|
def api
|
103
123
|
require 'open-uri'
|
104
|
-
@api ||=
|
124
|
+
@api ||= OpenURI.open_uri("https://rubygems.org/api/v1/gems/#{@spec.name}.yaml", &:read)
|
105
125
|
rescue OpenURI::HTTPError
|
106
126
|
""
|
107
127
|
end
|
@@ -120,11 +140,12 @@ module Gem
|
|
120
140
|
|
121
141
|
def git_clone(repository)
|
122
142
|
return if repository.nil? || repository.empty?
|
143
|
+
return if repository.include? 'rubyforge.org'
|
123
144
|
return if @tested_repositories.include? repository
|
124
145
|
@tested_repositories << repository
|
125
146
|
return if github?(repository) && !github_page_exists?(repository)
|
126
147
|
|
127
|
-
puts "gem-src: #{
|
148
|
+
puts "gem-src: #{@spec.name} - Cloning from #{repository}..." if verbose?
|
128
149
|
|
129
150
|
if use_ghq?
|
130
151
|
system 'ghq', 'get', repository
|
@@ -142,25 +163,15 @@ module Gem
|
|
142
163
|
uri =~ /\A(?:https?|git):\/\// ? uri : nil
|
143
164
|
end
|
144
165
|
|
145
|
-
def skip_clone?
|
146
|
-
!!ENV['GEMSRC_SKIP']
|
147
|
-
end
|
148
|
-
|
149
166
|
def verbose?
|
150
167
|
!!ENV['GEMSRC_VERBOSE'] || Gem.configuration[:gemsrc_verbose]
|
151
168
|
end
|
152
|
-
end
|
169
|
+
end unless defined?(Src) # for rubygems test suite.
|
153
170
|
end
|
154
171
|
|
172
|
+
require 'gem/src/irregular_repositories'
|
155
173
|
|
156
|
-
Gem.post_install do |installer|
|
157
|
-
next true if installer.class.name == 'Bundler::Source::Path::Installer'
|
158
|
-
|
159
|
-
gem_src = Gem::Src.new installer
|
160
|
-
gem_src.git_clone_homepage_or_source_code_uri_or_homepage_uri_or_github_organization_uri
|
161
|
-
|
162
|
-
gem_src.repositorize_installed_gem
|
163
174
|
|
164
|
-
|
165
|
-
|
175
|
+
Gem.post_install do |installer|
|
176
|
+
Gem::Src.post_install_hook installer
|
166
177
|
end
|
data/plugins.rb
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Gem::Src do
|
4
|
+
def quick_gem(name, version='2')
|
5
|
+
require 'rubygems/specification'
|
6
|
+
|
7
|
+
spec = Gem::Specification.new do |s|
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.name = name
|
10
|
+
s.version = version
|
11
|
+
s.author = 'A User'
|
12
|
+
s.email = 'example@example.com'
|
13
|
+
s.homepage = 'http://example.com'
|
14
|
+
s.summary = "this is a summary"
|
15
|
+
s.description = "This is a test description"
|
16
|
+
|
17
|
+
yield(s) if block_given?
|
18
|
+
end
|
19
|
+
|
20
|
+
Gem::Specification.map # HACK: force specs to (re-)load before we write
|
21
|
+
|
22
|
+
written_path = write_file spec.spec_file do |io|
|
23
|
+
io.write spec.to_ruby_for_cache
|
24
|
+
end
|
25
|
+
|
26
|
+
spec.loaded_from = spec.loaded_from = written_path
|
27
|
+
|
28
|
+
Gem::Specification.add_spec spec.for_cache
|
29
|
+
|
30
|
+
spec
|
31
|
+
end
|
32
|
+
|
33
|
+
describe '#clone_dir' do
|
34
|
+
subject do
|
35
|
+
gem = quick_gem 'my_awesome_gem'
|
36
|
+
installer = Gem::Installer.new gem
|
37
|
+
installer.stub(:gem_dir, '~/g/my_awesome_gem')
|
38
|
+
Gem::Src.new installer
|
39
|
+
end
|
40
|
+
context "with ENV['GEMSRC_CLONE_ROOT']" do
|
41
|
+
around do |example|
|
42
|
+
e, g = ENV['GEMSRC_CLONE_ROOT'], Gem.configuration[:gemsrc_clone_root]
|
43
|
+
ENV['GEMSRC_CLONE_ROOT'], Gem.configuration[:gemsrc_clone_root] = '~/foo', nil
|
44
|
+
example.run
|
45
|
+
ENV['GEMSRC_CLONE_ROOT'], Gem.configuration[:gemsrc_clone_root] = e, g
|
46
|
+
end
|
47
|
+
its(:clone_dir) { should == '~/foo/my_awesome_gem' }
|
48
|
+
end
|
49
|
+
|
50
|
+
context "with Gem.configuration[:gemsrc_clone_root]" do
|
51
|
+
around do |example|
|
52
|
+
e, g = ENV['GEMSRC_CLONE_ROOT'], Gem.configuration[:gemsrc_clone_root]
|
53
|
+
ENV['GEMSRC_CLONE_ROOT'], Gem.configuration[:gemsrc_clone_root] = nil, '~/bar'
|
54
|
+
example.run
|
55
|
+
ENV['GEMSRC_CLONE_ROOT'], Gem.configuration[:gemsrc_clone_root] = e, g
|
56
|
+
end
|
57
|
+
its(:clone_dir) { should == '~/bar/my_awesome_gem' }
|
58
|
+
end
|
59
|
+
|
60
|
+
context "without clone_root configuration" do
|
61
|
+
around do |example|
|
62
|
+
e, g = ENV['GEMSRC_CLONE_ROOT'], Gem.configuration[:gemsrc_clone_root]
|
63
|
+
ENV['GEMSRC_CLONE_ROOT'], Gem.configuration[:gemsrc_clone_root] = nil, nil
|
64
|
+
example.run
|
65
|
+
ENV['GEMSRC_CLONE_ROOT'], Gem.configuration[:gemsrc_clone_root] = e, g
|
66
|
+
end
|
67
|
+
its(:clone_dir) { should == '~/aho/my_awesome_gem/src' }
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gem-src
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Akira Matsuda
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-10-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -38,7 +38,11 @@ files:
|
|
38
38
|
- Rakefile
|
39
39
|
- etc/rbenv.d/exec/~gem-src.bash
|
40
40
|
- gem-src.gemspec
|
41
|
+
- lib/gem/src/irregular_repositories.rb
|
41
42
|
- lib/rubygems_plugin.rb
|
43
|
+
- plugins.rb
|
44
|
+
- spec/gem-src_spec.rb
|
45
|
+
- spec/spec_helper.rb
|
42
46
|
homepage: https://github.com/amatsuda/gem-src
|
43
47
|
licenses: []
|
44
48
|
metadata: {}
|
@@ -64,9 +68,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
64
68
|
- !ruby/object:Gem::Version
|
65
69
|
version: '0'
|
66
70
|
requirements: []
|
67
|
-
|
68
|
-
|
69
|
-
signing_key:
|
71
|
+
rubygems_version: 3.2.0.rc.1
|
72
|
+
signing_key:
|
70
73
|
specification_version: 4
|
71
74
|
summary: Gem.post_install { `git clone gem_source src` }
|
72
|
-
test_files:
|
75
|
+
test_files:
|
76
|
+
- spec/gem-src_spec.rb
|
77
|
+
- spec/spec_helper.rb
|