Sha256: 10b06c04141479c892469bbdda01d7c53b117aa6f2a1930984184fbe1abf33e7

Contents?: true

Size: 1.8 KB

Versions: 12

Compression:

Stored size: 1.8 KB

Contents

class Jeweler

  class GemSpecHelper

    attr_accessor :spec, :base_dir

    def initialize(spec, base_dir = nil)
      self.spec = spec
      self.base_dir = base_dir || ''

      yield spec if block_given?
    end

    def valid?
      begin
        parse
        true
      rescue
        false
      end
    end

    def write
      normalize_files(:files)
      normalize_files(:files)
      normalize_files(:extra_rdoc_files)

      File.open(path, 'w') do |f|
        gemspec_ruby = @spec.to_ruby
        gemspec_ruby = prettyify_array(gemspec_ruby, :files)
        gemspec_ruby = prettyify_array(gemspec_ruby, :test_files)
        gemspec_ruby = prettyify_array(gemspec_ruby, :extra_rdoc_files)
        f.write gemspec_ruby
      end 
    end

    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

    def parse
      data = File.read(path)
      parsed_gemspec = nil
      Thread.new { parsed_gemspec = eval("$SAFE = 3\n#{data}", binding, path) }.join
      parsed_gemspec
    end

    def normalize_files(array_name)
      array = @spec.send(array_name)
      # only keep files, no directories, and sort
      array = array.select do |path|
        File.file? File.join(@base_dir, path)
      end.sort

      @spec.send("#{array_name}=", array)
    end

    def prettyify_array(gemspec_ruby, array_name)
      gemspec_ruby.gsub(/s\.#{array_name.to_s} = \[.+?\]/) do |match|
        leadin, files = match[0..-2].split("[")
        leadin + "[\n    #{files.split(",").join(",\n    ")}\n  ]"
      end
    end

    def gem_path
      File.join(@base_dir, 'pkg', parse.file_name)
    end

    def update_version(version)
      @spec.version = version.to_s
    end

  end
end

Version data entries

12 entries across 12 versions & 6 rubygems

Version Path
gohanlonllc-jeweler-0.11.1.20090513153819 lib/jeweler/gemspec_helper.rb
gohanlonllc-jeweler-1.0.0.20080513000000 lib/jeweler/gemspec_helper.rb
gohanlonllc-jeweler-1.0.0.20090513153819 lib/jeweler/gemspec_helper.rb
monkeyhelper-jeweler-1.0.1 lib/jeweler/gemspec_helper.rb
namelessjon-jeweler-1.0.1 lib/jeweler/gemspec_helper.rb
pivotal-jeweler-1.0.1.1 lib/jeweler/gemspec_helper.rb
technicalpickles-jeweler-1.0.0 lib/jeweler/gemspec_helper.rb
technicalpickles-jeweler-1.0.1 lib/jeweler/gemspec_helper.rb
technicalpickles-jeweler-1.0.2 lib/jeweler/gemspec_helper.rb
jeweler-1.0.2 lib/jeweler/gemspec_helper.rb
jeweler-1.0.1 lib/jeweler/gemspec_helper.rb
jeweler-1.0.0 lib/jeweler/gemspec_helper.rb