class Jeweler::GemSpecHelper

Attributes

base_dir[RW]
spec[RW]

Public Instance Methods

gem_path() click to toggle source
# File lib/jeweler/gemspec_helper.rb, line 74
def gem_path
  File.join(@base_dir, 'pkg', parse.file_name)
end
has_version?() click to toggle source

Checks whether it uses the version helper or the users defined version.

# File lib/jeweler/gemspec_helper.rb, line 83
def has_version?
  !@spec.version.nil?
end
normalize_files(array_attribute) click to toggle source
# File lib/jeweler/gemspec_helper.rb, line 55
def normalize_files(array_attribute)
  array = @spec.send(array_attribute)
  # only keep files, no directories, and sort
  array = array.select do |path|
    File.file? File.join(@base_dir, path)
  end.sort

  @spec.send("#{array_attribute}=", array)
end
parse() click to toggle source
# File lib/jeweler/gemspec_helper.rb, line 48
def parse
  data = self.to_ruby
  parsed_gemspec = nil
  Thread.new { parsed_gemspec = eval("$SAFE = 3\n#{data}", binding, path) }.join
  parsed_gemspec
end
path() click to toggle source
# File lib/jeweler/gemspec_helper.rb, line 42
def path
  denormalized_path = File.join(@base_dir, "#{@spec.name}.gemspec")
  absolute_path = File.expand_path(denormalized_path)
  absolute_path.gsub(Dir.getwd + File::SEPARATOR, '') 
end
prettyify_array(gemspec_ruby, array_name) click to toggle source

Adds extra space when outputting an array. This helps create better version control diffs, because otherwise it is all on the same line.

# File lib/jeweler/gemspec_helper.rb, line 66
def prettyify_array(gemspec_ruby, array_name)
  gemspec_ruby.gsub(%rs\.#{array_name.to_s} = \[.+?\]/) do |match|
    leadin, files = match[0..-2].split("[")
    
    leadin + "[\n    #{files.gsub(%|", "|, %|",\n    "|)}\n  ]"
  end
end
to_ruby() click to toggle source
# File lib/jeweler/gemspec_helper.rb, line 27
    def to_ruby
      normalize_files(:files)
      normalize_files(:extra_rdoc_files)

      gemspec_ruby = @spec.to_ruby
      gemspec_ruby = prettyify_array(gemspec_ruby, :files)
      gemspec_ruby = prettyify_array(gemspec_ruby, :extra_rdoc_files)
      gemspec_ruby = "# Generated by jeweler
# DO NOT EDIT THIS FILE DIRECTLY
# Instead, edit Jeweler::Tasks in #{Rake.application.rakefile}, and run 'rake gemspec'
#{gemspec_ruby}
"
    end
update_version(version) click to toggle source
# File lib/jeweler/gemspec_helper.rb, line 78
def update_version(version)
  @spec.version = version.to_s
end
valid?() click to toggle source
# File lib/jeweler/gemspec_helper.rb, line 12
def valid?
  begin
    parse
    true
  rescue
    false
  end
end
write() click to toggle source
# File lib/jeweler/gemspec_helper.rb, line 21
def write
  File.open(path, 'w') do |f|
    f.write self.to_ruby
  end 
end

Public Class Methods

new(spec, base_dir = nil) { |spec| ... } click to toggle source
# File lib/jeweler/gemspec_helper.rb, line 5
def initialize(spec, base_dir = nil)
  self.spec = spec
  self.base_dir = base_dir || ''

  yield spec if block_given?
end