cwninja-make-gem-now 0.3

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.
data/README.markdown ADDED
@@ -0,0 +1,11 @@
1
+ # Make Gem Now
2
+
3
+ A tool to scan through a whole bunch of checked out repos and build gems for them as needed. It will then index those gems, and make them available for download.
4
+
5
+ ## Usage:
6
+
7
+ make-gem-now path/to/my/code /var/www/gems
8
+
9
+ Simple no?
10
+
11
+ Now you can run your own github!
data/Rakefile ADDED
@@ -0,0 +1,41 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'rake/testtask'
4
+ require 'rake/rdoctask'
5
+ require 'rake/gempackagetask'
6
+ require 'date'
7
+
8
+ spec = Gem::Specification.new do |s|
9
+ s.name = %q{make-gem-now}
10
+ s.version = "0.3"
11
+ s.summary = %q{A tool to build all gems in a given dir, and index them appropriately.}
12
+ s.description = %q{A tool to build all gems in a given dir, and index them appropriately.}
13
+
14
+ s.files = FileList['[A-Z]*', 'lib/**/*.rb', 'test/**/*.rb', 'rails/*']
15
+ s.require_path = 'lib'
16
+ s.executables = ["make-gem-now"]
17
+
18
+ s.has_rdoc = true
19
+ s.extra_rdoc_files = ["README.markdown"]
20
+ s.rdoc_options = ['--line-numbers', '--inline-source', "--main", "README.markdown"]
21
+
22
+ s.authors = ["Tom Lea"]
23
+ s.email = %q{commits@tomlea.co.uk}
24
+
25
+ s.platform = Gem::Platform::RUBY
26
+ end
27
+
28
+ Rake::GemPackageTask.new spec do |pkg|
29
+ pkg.need_tar = true
30
+ pkg.need_zip = true
31
+ end
32
+
33
+ desc "Clean files generated by rake tasks"
34
+ task :clobber => [:clobber_package]
35
+
36
+ desc "Generate a gemspec file"
37
+ task :gemspec do
38
+ File.open("#{spec.name}.gemspec", 'w') do |f|
39
+ f.write spec.to_ruby
40
+ end
41
+ end
data/bin/make-gem-now ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require File.join(File.dirname(__FILE__), *%w[.. lib make_gem_now])
3
+
4
+ MakeGemNow.make_all(*ARGV)
@@ -0,0 +1,56 @@
1
+ require "rubygems"
2
+ require "yaml"
3
+ require "rubygems/package"
4
+ require 'timeout'
5
+
6
+ module MakeGemNow
7
+ class Builder
8
+ def initialize(path_to_gemspec, output_path = ".")
9
+ @path_to_gemspec = path_to_gemspec
10
+ @output_path = output_path
11
+ raise "Could not find gemspec!" unless File.exist? @path_to_gemspec
12
+ end
13
+
14
+ def generate_spec
15
+ spec_file = File.read(@path_to_gemspec)
16
+
17
+ IO.popen("-"){|yaml_pipe|
18
+ if yaml_pipe
19
+ Timeout.timeout(1){
20
+ @spec = YAML.load(yaml_pipe)
21
+ raise "This isn't a freaking gemspec, what you trying to pull here buddy?" unless @spec.class == Gem::Specification
22
+ }
23
+ else
24
+ puts eval("$SAFE = 3\n (\n#{spec_file}\n).to_yaml")
25
+ end
26
+ }
27
+
28
+ raise "Loading the YAML failed." unless $?.success?
29
+ end
30
+
31
+ def build!
32
+ old_pwd = Dir.pwd
33
+ generate_spec
34
+ Dir.chdir(File.dirname(@path_to_gemspec))
35
+ open File.join(@output_path, @spec.file_name), 'wb' do |gem_io|
36
+ Gem::Package.open gem_io, 'w', nil do |pkg|
37
+ pkg.metadata = @spec.to_yaml
38
+ @spec.files.each do |file|
39
+ next if File.directory? file
40
+ next if file == @spec.file_name # Don't add gem onto itself
41
+
42
+ stat = File.stat file
43
+ mode = stat.mode & 0777
44
+ size = stat.size
45
+
46
+ pkg.add_file_simple file, mode, size do |tar_io|
47
+ tar_io.write open(file, "rb") { |f| f.read }
48
+ end
49
+ end
50
+ end
51
+ end
52
+ ensure
53
+ Dir.chdir(old_pwd)
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,22 @@
1
+ module MakeGemNow
2
+ class Scanner
3
+ include Enumerable
4
+ def initialize(path)
5
+ @base_path = path
6
+ end
7
+
8
+ def each
9
+ Dir.new(@base_path).each do |f|
10
+ next if f =~ /^\./
11
+
12
+ path = File.join(@base_path, f)
13
+ next unless File.directory? path
14
+
15
+ gemspec = File.join(path, File.basename(path)+".gemspec")
16
+ next unless File.exist?( gemspec )
17
+
18
+ yield(gemspec)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,33 @@
1
+ require "rubygems/indexer"
2
+ require "logger"
3
+ module MakeGemNow
4
+ def make_all(source_paths, output_path = ".")
5
+ gems_path = File.join(output_path, "gems")
6
+ Dir.mkdir(gems_path) unless File.exists? gems_path
7
+
8
+ MakeGemNow::Scanner.new(source_paths).each do |gemspec|
9
+ update_repo(File.dirname(gemspec))
10
+ begin
11
+ MakeGemNow::Builder.new(gemspec, gems_path).build!
12
+ rescue => e
13
+ puts "Could not build #{gemspec}:"
14
+ puts " "+e.message
15
+ end
16
+ end
17
+ Gem::Indexer.new(output_path).generate_index
18
+ end
19
+
20
+ def update_repo(path)
21
+ if File.directory?(File.join(path, ".git"))
22
+ require 'git'
23
+ g = Git.open(path, :log => Logger.new(STDOUT))
24
+ g.fetch
25
+ g.merge "origin/master"
26
+ end
27
+ end
28
+
29
+ extend self
30
+ end
31
+
32
+ require File.join(File.dirname(__FILE__), *%w[make_gem_now builder])
33
+ require File.join(File.dirname(__FILE__), *%w[make_gem_now scanner])
metadata ADDED
@@ -0,0 +1,61 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cwninja-make-gem-now
3
+ version: !ruby/object:Gem::Version
4
+ version: "0.3"
5
+ platform: ruby
6
+ authors:
7
+ - Tom Lea
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-01-30 00:00:00 -08:00
13
+ default_executable: make-gem-now
14
+ dependencies: []
15
+
16
+ description: A tool to build all gems in a given dir, and index them appropriately.
17
+ email: commits@tomlea.co.uk
18
+ executables:
19
+ - make-gem-now
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README.markdown
24
+ files:
25
+ - Rakefile
26
+ - README.markdown
27
+ - lib/make_gem_now/builder.rb
28
+ - lib/make_gem_now/scanner.rb
29
+ - lib/make_gem_now.rb
30
+ - bin/make-gem-now
31
+ has_rdoc: true
32
+ homepage:
33
+ post_install_message:
34
+ rdoc_options:
35
+ - --line-numbers
36
+ - --inline-source
37
+ - --main
38
+ - README.markdown
39
+ require_paths:
40
+ - lib
41
+ required_ruby_version: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: "0"
46
+ version:
47
+ required_rubygems_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: "0"
52
+ version:
53
+ requirements: []
54
+
55
+ rubyforge_project:
56
+ rubygems_version: 1.2.0
57
+ signing_key:
58
+ specification_version: 2
59
+ summary: A tool to build all gems in a given dir, and index them appropriately.
60
+ test_files: []
61
+