mergit 0.1.0
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/.gitignore +17 -0
- data/.rspec +2 -0
- data/.travis.yml +7 -0
- data/Gemfile +4 -0
- data/Guardfile +10 -0
- data/LICENSE.txt +22 -0
- data/README.md +65 -0
- data/Rakefile +6 -0
- data/bin/mergit +95 -0
- data/lib/mergit.rb +48 -0
- data/lib/mergit/errors.rb +5 -0
- data/lib/mergit/processor.rb +86 -0
- data/lib/mergit/version.rb +3 -0
- data/mergit.gemspec +32 -0
- data/spec/examples/loop/a.rb +1 -0
- data/spec/examples/loop/b.rb +1 -0
- data/spec/examples/loop/c.rb +1 -0
- data/spec/mergit/processor_spec.rb +162 -0
- data/spec/mergit_spec.rb +60 -0
- data/spec/spec_helper.rb +19 -0
- metadata +256 -0
    
        data/.gitignore
    ADDED
    
    
    
        data/.rspec
    ADDED
    
    
    
        data/.travis.yml
    ADDED
    
    
    
        data/Gemfile
    ADDED
    
    
    
        data/Guardfile
    ADDED
    
    
    
        data/LICENSE.txt
    ADDED
    
    | @@ -0,0 +1,22 @@ | |
| 1 | 
            +
            Copyright (c) 2013 Christian Höltje
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            MIT License
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            Permission is hereby granted, free of charge, to any person obtaining
         | 
| 6 | 
            +
            a copy of this software and associated documentation files (the
         | 
| 7 | 
            +
            "Software"), to deal in the Software without restriction, including
         | 
| 8 | 
            +
            without limitation the rights to use, copy, modify, merge, publish,
         | 
| 9 | 
            +
            distribute, sublicense, and/or sell copies of the Software, and to
         | 
| 10 | 
            +
            permit persons to whom the Software is furnished to do so, subject to
         | 
| 11 | 
            +
            the following conditions:
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            The above copyright notice and this permission notice shall be
         | 
| 14 | 
            +
            included in all copies or substantial portions of the Software.
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
         | 
| 17 | 
            +
            EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
         | 
| 18 | 
            +
            MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
         | 
| 19 | 
            +
            NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
         | 
| 20 | 
            +
            LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
         | 
| 21 | 
            +
            OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
         | 
| 22 | 
            +
            WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
         | 
    
        data/README.md
    ADDED
    
    | @@ -0,0 +1,65 @@ | |
| 1 | 
            +
            # Mergit
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            * [](http://travis-ci.org/docwhat/mergit)
         | 
| 4 | 
            +
            * [](https://gemnasium.com/docwhat/mergit)
         | 
| 5 | 
            +
            * [](https://coveralls.io/r/docwhat/mergit)
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            Mergit is a way to merge a bunch of `require`d files into one file.
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            This is useful to distribute single-file ruby executables, such as administration scripts, simple tools, etc.  Yet allows you to break
         | 
| 10 | 
            +
            files out for easy design, programming and testing.
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            ## Limitations
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            Mergit uses simple text processing, therefore it can be tripped up.  Some known problems include:
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            * `require` statements nested in code instead of at outermost scope of a file.
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            ## Installation
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            Add this line to your application's Gemfile:
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                gem 'mergit'
         | 
| 23 | 
            +
             | 
| 24 | 
            +
            And then execute:
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                $ bundle
         | 
| 27 | 
            +
             | 
| 28 | 
            +
            Or install it yourself as:
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                $ gem install mergit
         | 
| 31 | 
            +
             | 
| 32 | 
            +
            ## Usage
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            ### Command Line Tool
         | 
| 35 | 
            +
             | 
| 36 | 
            +
            The command line tool, `mergit`, is pretty self-explanatory.
         | 
| 37 | 
            +
             | 
| 38 | 
            +
            You specify the ruby file you want `require`s merged into on the command line (via standard in, if you specify `-`) and any library directories
         | 
| 39 | 
            +
            you want `require`d from.
         | 
| 40 | 
            +
             | 
| 41 | 
            +
            You can specify the `--lib` flag multiple times.
         | 
| 42 | 
            +
             | 
| 43 | 
            +
            Use the `--output` flag to send the resulting output to someplace other than stdout.
         | 
| 44 | 
            +
             | 
| 45 | 
            +
            ### Library API
         | 
| 46 | 
            +
             | 
| 47 | 
            +
            Simple usage:
         | 
| 48 | 
            +
             | 
| 49 | 
            +
            ```
         | 
| 50 | 
            +
            search_path = [ '/path/to/lib', '/path/to/other/lib' ]
         | 
| 51 | 
            +
            mergit = Mergit.new(:search_path => search_path)
         | 
| 52 | 
            +
             | 
| 53 | 
            +
            string_of_merged_file = mergit.process_file('/path/to/file')
         | 
| 54 | 
            +
            # or
         | 
| 55 | 
            +
            string_of_merged_string = mergit.process(some_string)
         | 
| 56 | 
            +
             | 
| 57 | 
            +
            ```
         | 
| 58 | 
            +
             | 
| 59 | 
            +
            ## Contributing
         | 
| 60 | 
            +
             | 
| 61 | 
            +
            1. Fork it
         | 
| 62 | 
            +
            2. Create your feature branch (`git checkout -b my-new-feature`)
         | 
| 63 | 
            +
            3. Commit your changes (`git commit -am 'Add some feature'`)
         | 
| 64 | 
            +
            4. Push to the branch (`git push origin my-new-feature`)
         | 
| 65 | 
            +
            5. Create new Pull Request
         | 
    
        data/Rakefile
    ADDED
    
    
    
        data/bin/mergit
    ADDED
    
    | @@ -0,0 +1,95 @@ | |
| 1 | 
            +
            #!/usr/bin/env ruby
         | 
| 2 | 
            +
            # -*- coding: utf-8 -*-
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            $: << File.expand_path('../../lib/', __FILE__) if File.directory?(File.expand_path('../../lib/', __FILE__))
         | 
| 5 | 
            +
            require 'mergit'
         | 
| 6 | 
            +
            require 'optparse'
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            class MergitProgram
         | 
| 9 | 
            +
              attr_accessor :output
         | 
| 10 | 
            +
              attr_reader   :input
         | 
| 11 | 
            +
             | 
| 12 | 
            +
              def err msg
         | 
| 13 | 
            +
                $stderr.puts "* error: #{msg}"
         | 
| 14 | 
            +
                exit 1
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              def debug msg
         | 
| 18 | 
            +
                $stderr.puts "* debug: #{msg}"
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              def mergit
         | 
| 22 | 
            +
                @mergit ||= Mergit.new()
         | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              def parse_options
         | 
| 26 | 
            +
                # Defaults
         | 
| 27 | 
            +
                @output = $stdout
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                # Parser
         | 
| 30 | 
            +
                optparse = OptionParser.new do |opts|
         | 
| 31 | 
            +
                  opts.banner =    "Usage: #{opts.program_name} [OPTIONS] ruby-file"
         | 
| 32 | 
            +
                  opts.define_head "Merges all require's found in the specified lib directories into one ruby file."
         | 
| 33 | 
            +
                  opts.separator   ''
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                  opts.on('-l', '--lib DIR', String,
         | 
| 36 | 
            +
                          "Adds DIR to the list of directories to look for require'd files. Can be specified multiple times.") do |d|
         | 
| 37 | 
            +
                    d = Pathname.new(d)
         | 
| 38 | 
            +
                    if d.directory?
         | 
| 39 | 
            +
                      mergit.search_path.unshift d.realpath.to_s
         | 
| 40 | 
            +
                    else
         | 
| 41 | 
            +
                      err "'#{d}' is not a directory."
         | 
| 42 | 
            +
                    end
         | 
| 43 | 
            +
                  end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                  opts.on('-d', '--debug', "Turn on debugging.") do
         | 
| 46 | 
            +
                    @debug = true
         | 
| 47 | 
            +
                  end
         | 
| 48 | 
            +
                  opts.on('-o', '--output FILE', String,
         | 
| 49 | 
            +
                          "Where to output the merged ruby script.") do |f|
         | 
| 50 | 
            +
                    @output = File.open(f, 'w') unless '-' == f
         | 
| 51 | 
            +
                  end
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                  opts.on_tail('-V', '--version', 'Show the version.') do
         | 
| 54 | 
            +
                    $stderr.puts "#{opts.program_name} version: #{Mergit::VERSION}"
         | 
| 55 | 
            +
                    exit
         | 
| 56 | 
            +
                  end
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                  opts.on_tail('-h', '--help', 'This Help.') do
         | 
| 59 | 
            +
                    $stderr.puts opts
         | 
| 60 | 
            +
                    exit
         | 
| 61 | 
            +
                  end
         | 
| 62 | 
            +
                end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                arguments = optparse.parse!
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                if arguments.size == 0
         | 
| 67 | 
            +
                  err "You need to specify the ruby file to merge."
         | 
| 68 | 
            +
                elsif arguments.size > 1
         | 
| 69 | 
            +
                  err "You can only specify one ruby file to merge at a time."
         | 
| 70 | 
            +
                end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                if '-' == arguments.first
         | 
| 73 | 
            +
                  @input = $stdin
         | 
| 74 | 
            +
                else
         | 
| 75 | 
            +
                  @input = File.open(arguments.first, 'r')
         | 
| 76 | 
            +
                end
         | 
| 77 | 
            +
              end
         | 
| 78 | 
            +
             | 
| 79 | 
            +
              def run
         | 
| 80 | 
            +
                parse_options
         | 
| 81 | 
            +
                debug "Search Path: #{mergit.search_path.inspect}"
         | 
| 82 | 
            +
                debug "Input:       #{input.inspect}"
         | 
| 83 | 
            +
                debug "Output:      #{output.inspect}"
         | 
| 84 | 
            +
                input_string = @input.read
         | 
| 85 | 
            +
                @input.close
         | 
| 86 | 
            +
                output_string = mergit.process(input_string)
         | 
| 87 | 
            +
                @output.write output_string
         | 
| 88 | 
            +
              end
         | 
| 89 | 
            +
            end
         | 
| 90 | 
            +
             | 
| 91 | 
            +
            if __FILE__ == $0
         | 
| 92 | 
            +
              MergitProgram.new.run
         | 
| 93 | 
            +
            end
         | 
| 94 | 
            +
             | 
| 95 | 
            +
            # EOF
         | 
    
        data/lib/mergit.rb
    ADDED
    
    | @@ -0,0 +1,48 @@ | |
| 1 | 
            +
            require 'mergit/version'
         | 
| 2 | 
            +
            require 'mergit/processor'
         | 
| 3 | 
            +
            require 'mergit/errors'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            class Mergit
         | 
| 6 | 
            +
              ATTRIBUTES = {
         | 
| 7 | 
            +
                :search_path => [Dir.pwd],
         | 
| 8 | 
            +
                :replacements => {},
         | 
| 9 | 
            +
              }.freeze
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              ATTRIBUTES.each_key do |attr|
         | 
| 12 | 
            +
                attr_accessor attr
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              def initialize options=nil
         | 
| 16 | 
            +
                final_options = options ? ATTRIBUTES.merge(options) : ATTRIBUTES
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                ATTRIBUTES.each_key do |attr|
         | 
| 19 | 
            +
                  instance_variable_set("@#{attr}", final_options[attr])
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
              def process_file filename
         | 
| 24 | 
            +
                if File.file? filename
         | 
| 25 | 
            +
                  create_file_processor(filename).output
         | 
| 26 | 
            +
                else
         | 
| 27 | 
            +
                  raise MergitError.new "No such file: #{filename}"
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
              def process string
         | 
| 32 | 
            +
                create_string_processor(string).output
         | 
| 33 | 
            +
              end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
              # add file to visited list
         | 
| 36 | 
            +
              # scan file
         | 
| 37 | 
            +
              # for all requires, process files
         | 
| 38 | 
            +
             | 
| 39 | 
            +
              private
         | 
| 40 | 
            +
             | 
| 41 | 
            +
              def create_string_processor string
         | 
| 42 | 
            +
                Processor.new(search_path, replacements, :string => string)
         | 
| 43 | 
            +
              end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
              def create_file_processor filename
         | 
| 46 | 
            +
                Processor.new(search_path, replacements, :filename => filename)
         | 
| 47 | 
            +
              end
         | 
| 48 | 
            +
            end
         | 
| @@ -0,0 +1,86 @@ | |
| 1 | 
            +
            require 'mergit/errors'
         | 
| 2 | 
            +
            require 'pathname'
         | 
| 3 | 
            +
            require 'stringio'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            class Mergit
         | 
| 6 | 
            +
              class Processor
         | 
| 7 | 
            +
                def initialize search_path, replacements, options
         | 
| 8 | 
            +
                  @search_path = search_path.map{|p| Pathname.new p}
         | 
| 9 | 
            +
                  @replacements = replacements
         | 
| 10 | 
            +
                  @visited_files = []
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  @output = StringIO.new
         | 
| 13 | 
            +
                  begin
         | 
| 14 | 
            +
                    if options.key?(:filename)
         | 
| 15 | 
            +
                      scan_file(Pathname.new(options[:filename]).realpath)
         | 
| 16 | 
            +
                    elsif options.key?(:string)
         | 
| 17 | 
            +
                      scan(options[:string])
         | 
| 18 | 
            +
                    end
         | 
| 19 | 
            +
                  ensure
         | 
| 20 | 
            +
                    @output.close unless options[:do_not_close]
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                def find_requirement lib_name
         | 
| 25 | 
            +
                  @search_path.each do |directory|
         | 
| 26 | 
            +
                    possible_path = directory + "#{lib_name}.rb"
         | 
| 27 | 
            +
                    return possible_path.realpath if possible_path.file?
         | 
| 28 | 
            +
                  end
         | 
| 29 | 
            +
                  nil
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                def find_requirement! lib_name
         | 
| 33 | 
            +
                  find_requirement(lib_name).tap do |retval|
         | 
| 34 | 
            +
                    raise Mergit::RequirementNotFound.new("Unabled to find require'd file: #{lib_name}") if retval.nil?
         | 
| 35 | 
            +
                  end
         | 
| 36 | 
            +
                end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                def scan_line line
         | 
| 39 | 
            +
                  line.chomp!
         | 
| 40 | 
            +
                  if line =~ /^\s*require\s+'([^']+)'\s*$/ or line =~ /^\s*require\s+"([^"]+)"\s*$/
         | 
| 41 | 
            +
                    requirement = find_requirement($1)
         | 
| 42 | 
            +
                    if requirement.nil?
         | 
| 43 | 
            +
                      emit line
         | 
| 44 | 
            +
                    else
         | 
| 45 | 
            +
                      scan_file requirement
         | 
| 46 | 
            +
                    end
         | 
| 47 | 
            +
                  else
         | 
| 48 | 
            +
                    emit line
         | 
| 49 | 
            +
                  end
         | 
| 50 | 
            +
                end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                def scan_file filename
         | 
| 53 | 
            +
                  relative_filename = if filename.relative?
         | 
| 54 | 
            +
                                        filename
         | 
| 55 | 
            +
                                      else
         | 
| 56 | 
            +
                                        filename.relative_path_from(Pathname.pwd)
         | 
| 57 | 
            +
                                      end
         | 
| 58 | 
            +
                  if @visited_files.include? relative_filename
         | 
| 59 | 
            +
                    return
         | 
| 60 | 
            +
                  else
         | 
| 61 | 
            +
                    @visited_files << relative_filename
         | 
| 62 | 
            +
                  end
         | 
| 63 | 
            +
                  emit "### MERGIT: Start of '#{relative_filename}'"
         | 
| 64 | 
            +
                  filename.readlines.each { |line| scan_line line }
         | 
| 65 | 
            +
                  emit "### MERGIT: End of '#{relative_filename}'"
         | 
| 66 | 
            +
                end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                def scan string
         | 
| 69 | 
            +
                  string_split(string).each { |line| scan_line line }
         | 
| 70 | 
            +
                end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                def string_split string
         | 
| 73 | 
            +
                  string.split(/\n|\r\n/)
         | 
| 74 | 
            +
                end
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                def output
         | 
| 77 | 
            +
                  @output.close unless @output.closed?
         | 
| 78 | 
            +
                  @final_output ||= @output.string
         | 
| 79 | 
            +
                end
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                def emit string
         | 
| 82 | 
            +
                  @output.puts string
         | 
| 83 | 
            +
                end
         | 
| 84 | 
            +
             | 
| 85 | 
            +
              end
         | 
| 86 | 
            +
            end
         | 
    
        data/mergit.gemspec
    ADDED
    
    | @@ -0,0 +1,32 @@ | |
| 1 | 
            +
            # coding: utf-8
         | 
| 2 | 
            +
            lib = File.expand_path('../lib', __FILE__)
         | 
| 3 | 
            +
            $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
         | 
| 4 | 
            +
            require 'mergit/version'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            Gem::Specification.new do |spec|
         | 
| 7 | 
            +
              spec.name          = "mergit"
         | 
| 8 | 
            +
              spec.version       = Mergit::VERSION
         | 
| 9 | 
            +
              spec.authors       = ["Christian Höltje"]
         | 
| 10 | 
            +
              spec.email         = ["docwhat@gerf.org"]
         | 
| 11 | 
            +
              spec.description   = %q{Merge 'require'd files into one file.}
         | 
| 12 | 
            +
              spec.summary       = %q{Ever wanted to merge all your 'require'd files into one file for easy distribution? Mergit is your friend!}
         | 
| 13 | 
            +
              spec.homepage      = ""
         | 
| 14 | 
            +
              spec.license       = "MIT"
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              spec.files         = `git ls-files`.split($/)
         | 
| 17 | 
            +
              spec.executables   = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
         | 
| 18 | 
            +
              spec.test_files    = spec.files.grep(%r{^(test|spec|features)/})
         | 
| 19 | 
            +
              spec.require_paths = ["lib"]
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              spec.add_development_dependency "bundler",                 "~> 1.3"
         | 
| 22 | 
            +
              spec.add_development_dependency "rake",                    "~> 10.0"
         | 
| 23 | 
            +
              spec.add_development_dependency "rspec",                   "~> 2.13"
         | 
| 24 | 
            +
              spec.add_development_dependency "coveralls",               "~> 0.6"
         | 
| 25 | 
            +
              spec.add_development_dependency "guard-rspec",             "~> 2.5"
         | 
| 26 | 
            +
              spec.add_development_dependency "guard-bundler",           "~> 1.0"
         | 
| 27 | 
            +
              spec.add_development_dependency "rb-inotify",              "~> 0.9"
         | 
| 28 | 
            +
              spec.add_development_dependency "rb-fsevent",              "~> 0.9"
         | 
| 29 | 
            +
              spec.add_development_dependency "growl",                   "~> 1.0"
         | 
| 30 | 
            +
              spec.add_development_dependency "libnotify",               "~> 0.8"
         | 
| 31 | 
            +
              spec.add_development_dependency "terminal-notifier-guard", "~> 1.5"
         | 
| 32 | 
            +
            end
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            require 'b'
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            require 'c'
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            require 'a'
         | 
| @@ -0,0 +1,162 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
            require 'mergit/processor'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            describe Mergit::Processor do
         | 
| 5 | 
            +
              let(:search_path)  { [LIB_PATH] }
         | 
| 6 | 
            +
              let(:replacements)  { {} }
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              describe "find_requirement" do
         | 
| 9 | 
            +
                subject { Mergit::Processor.new(search_path, replacements, :string => '') }
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                context "with a known lib-file" do
         | 
| 12 | 
            +
                  let(:lib_file) { Pathname.new File.expand_path('../../../lib/mergit.rb', __FILE__) }
         | 
| 13 | 
            +
                  let(:lib_name) { lib_file.basename '.rb' }
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  it "should find mergit.rb" do
         | 
| 16 | 
            +
                    subject.find_requirement(lib_name).should eq(lib_file)
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                it "should return nil if it doesn't exist" do
         | 
| 21 | 
            +
                  subject.find_requirement('does-not-exist').should be_nil
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              describe "find_requirement!" do
         | 
| 26 | 
            +
                subject { Mergit::Processor.new(search_path, replacements, :string => '') }
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                context "with a known lib-file" do
         | 
| 29 | 
            +
                  let(:lib_file) { Pathname.new File.expand_path('../../../lib/mergit.rb', __FILE__) }
         | 
| 30 | 
            +
                  let(:lib_name) { lib_file.basename '.rb' }
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                  it "should find mergit.rb" do
         | 
| 33 | 
            +
                    subject.find_requirement!(lib_name).should eq(lib_file)
         | 
| 34 | 
            +
                  end
         | 
| 35 | 
            +
                end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                it "should raise an exception when it doesn't exist" do
         | 
| 38 | 
            +
                  expect { subject.find_requirement!('does-not-exist') }.
         | 
| 39 | 
            +
                    to raise_error(Mergit::RequirementNotFound)
         | 
| 40 | 
            +
                end
         | 
| 41 | 
            +
              end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
              describe "scan_file" do
         | 
| 44 | 
            +
                subject { Mergit::Processor.new(search_path, replacements, :string => '', :do_not_close => true) }
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                context "of an existing lib_file" do
         | 
| 47 | 
            +
                  let(:lib_file) { Pathname.new('../../../lib/mergit/version.rb').expand_path(__FILE__) }
         | 
| 48 | 
            +
                  let(:relative_lib_file) { 'lib/mergit/version.rb' }
         | 
| 49 | 
            +
                  let(:lib_name) { lib_file.basename '.rb' }
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                  it "should call .scan_line multiple times" do
         | 
| 52 | 
            +
                    subject.should_receive(:scan_line).at_least(3).times
         | 
| 53 | 
            +
                    subject.scan_file(lib_file)
         | 
| 54 | 
            +
                  end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                  context "then the output" do
         | 
| 57 | 
            +
                    before { subject.scan_file(lib_file) }
         | 
| 58 | 
            +
                    it "should start with the merget header" do
         | 
| 59 | 
            +
                      subject.output.should =~ /\A### MERGIT: Start of '#{relative_lib_file}'$/
         | 
| 60 | 
            +
                    end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                    it "should end with the merget header" do
         | 
| 63 | 
            +
                      subject.output.should =~ /^### MERGIT: End of '#{relative_lib_file}'\Z/
         | 
| 64 | 
            +
                    end
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                    it "contain the contents of lib_file" do
         | 
| 67 | 
            +
                      subject.output.should include(lib_file.read)
         | 
| 68 | 
            +
                    end
         | 
| 69 | 
            +
                  end
         | 
| 70 | 
            +
                end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                context "with a lib_file that has a requires" do
         | 
| 73 | 
            +
                  let(:required_content) { Pathname.new('../../../lib/mergit/version.rb').expand_path(__FILE__).read }
         | 
| 74 | 
            +
                  let(:lib_file) { Pathname.new('../../../lib/mergit.rb').expand_path(__FILE__) }
         | 
| 75 | 
            +
                  subject { Mergit::Processor.new(search_path, replacements, :string => '', :do_not_close => true) }
         | 
| 76 | 
            +
                  before { subject.scan_file(lib_file) }
         | 
| 77 | 
            +
             | 
| 78 | 
            +
                  it "should contain the required file" do
         | 
| 79 | 
            +
                    subject.output.should include(required_content)
         | 
| 80 | 
            +
                  end
         | 
| 81 | 
            +
                end
         | 
| 82 | 
            +
              end
         | 
| 83 | 
            +
             | 
| 84 | 
            +
              describe "scan" do
         | 
| 85 | 
            +
                subject { Mergit::Processor.new(search_path, replacements, :string => '', :do_not_close => true) }
         | 
| 86 | 
            +
             | 
| 87 | 
            +
                context "with a string" do
         | 
| 88 | 
            +
                  let(:ruby_string) { "puts 'hello'\nrequire 'pathname'\n\nputs 'goodbye'\n" }
         | 
| 89 | 
            +
             | 
| 90 | 
            +
                  context "should call .scan_line" do
         | 
| 91 | 
            +
                    after { subject.scan(ruby_string) }
         | 
| 92 | 
            +
             | 
| 93 | 
            +
                    it "multiple times" do
         | 
| 94 | 
            +
                      subject.should_receive(:scan_line).at_least(3).times
         | 
| 95 | 
            +
                    end
         | 
| 96 | 
            +
             | 
| 97 | 
            +
                    it "with the contents of the contents of ruby_string" do
         | 
| 98 | 
            +
                      ruby_string.split("\n").each do |line|
         | 
| 99 | 
            +
                        subject.should_receive(:scan_line).with(line).once.ordered
         | 
| 100 | 
            +
                      end
         | 
| 101 | 
            +
                    end
         | 
| 102 | 
            +
                  end
         | 
| 103 | 
            +
             | 
| 104 | 
            +
                  context "then the output" do
         | 
| 105 | 
            +
                    before { subject.scan(ruby_string) }
         | 
| 106 | 
            +
             | 
| 107 | 
            +
                    it "contain the contents of lib_file" do
         | 
| 108 | 
            +
                      subject.output.should include(ruby_string)
         | 
| 109 | 
            +
                    end
         | 
| 110 | 
            +
                  end
         | 
| 111 | 
            +
                end
         | 
| 112 | 
            +
              end
         | 
| 113 | 
            +
             | 
| 114 | 
            +
              describe "scan_line" do
         | 
| 115 | 
            +
                subject { Mergit::Processor.new(search_path, replacements, :string => '', :do_not_close => true) }
         | 
| 116 | 
            +
             | 
| 117 | 
            +
                context "given a single requires" do
         | 
| 118 | 
            +
                  let(:ruby_string) { "require 'mergit/version'" }
         | 
| 119 | 
            +
                  after { subject.scan_line ruby_string }
         | 
| 120 | 
            +
             | 
| 121 | 
            +
                  it "should call scan_file()" do
         | 
| 122 | 
            +
                    subject.should_receive(:scan_file).with(Pathname.new('../../../lib/mergit/version.rb').expand_path(__FILE__)).once
         | 
| 123 | 
            +
                  end
         | 
| 124 | 
            +
                end
         | 
| 125 | 
            +
              end
         | 
| 126 | 
            +
             | 
| 127 | 
            +
              describe "string_split" do
         | 
| 128 | 
            +
                subject { Mergit::Processor.new(search_path, replacements, :string => '') }
         | 
| 129 | 
            +
                let(:example_parts) { [ 'one', '', 'two', 'three' ] }
         | 
| 130 | 
            +
             | 
| 131 | 
            +
                context "with unix newlines" do
         | 
| 132 | 
            +
                  let(:example_string) { example_parts.join("\n") }
         | 
| 133 | 
            +
                  it "should be correct" do
         | 
| 134 | 
            +
                    subject.string_split(example_string).should eq(example_parts)
         | 
| 135 | 
            +
                  end
         | 
| 136 | 
            +
                end
         | 
| 137 | 
            +
             | 
| 138 | 
            +
                context "with windows newlines" do
         | 
| 139 | 
            +
                  let(:example_string) { example_parts.join("\r\n") }
         | 
| 140 | 
            +
                  it "should be correct" do
         | 
| 141 | 
            +
                    subject.string_split(example_string).should eq(example_parts)
         | 
| 142 | 
            +
                  end
         | 
| 143 | 
            +
                end
         | 
| 144 | 
            +
              end
         | 
| 145 | 
            +
             | 
| 146 | 
            +
              context "with looping requires" do
         | 
| 147 | 
            +
                let(:dir) { EXAMPLE_DIR + 'loop' }
         | 
| 148 | 
            +
                subject do
         | 
| 149 | 
            +
                  Mergit::Processor.new(
         | 
| 150 | 
            +
                    [ dir ],
         | 
| 151 | 
            +
                    {},
         | 
| 152 | 
            +
                    :string => '',
         | 
| 153 | 
            +
                    :do_not_close => true
         | 
| 154 | 
            +
                  )
         | 
| 155 | 
            +
                end
         | 
| 156 | 
            +
             | 
| 157 | 
            +
                it "should not go into an infinite loop" do
         | 
| 158 | 
            +
                  subject.scan_file(dir + 'a.rb')
         | 
| 159 | 
            +
                end
         | 
| 160 | 
            +
              end
         | 
| 161 | 
            +
             | 
| 162 | 
            +
            end
         | 
    
        data/spec/mergit_spec.rb
    ADDED
    
    | @@ -0,0 +1,60 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
            require 'mergit'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            describe Mergit do
         | 
| 5 | 
            +
              it 'should have a version number' do
         | 
| 6 | 
            +
                Mergit::VERSION.should_not be_nil
         | 
| 7 | 
            +
              end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
              context "with no initial paramaters" do
         | 
| 10 | 
            +
                its(:search_path)  { should eq([Dir.pwd]) }
         | 
| 11 | 
            +
                its(:replacements) { should eq({}) }
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              context "with initial parameters" do
         | 
| 15 | 
            +
                let(:search_path)  { [LIB_PATH] }
         | 
| 16 | 
            +
                let(:replacements) { { 'VERSION' => '1.2.3' } }
         | 
| 17 | 
            +
                subject do
         | 
| 18 | 
            +
                  Mergit.new({
         | 
| 19 | 
            +
                    :search_path => search_path,
         | 
| 20 | 
            +
                    :replacements => replacements,
         | 
| 21 | 
            +
                  })
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                its(:search_path)  { should eq(search_path) }
         | 
| 25 | 
            +
                its(:replacements) { should eq(replacements) }
         | 
| 26 | 
            +
              end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
              describe "process" do
         | 
| 29 | 
            +
                let(:text) { "require 'something'" }
         | 
| 30 | 
            +
                let(:processor) { double(Mergit::Processor, :output => 'output-text') }
         | 
| 31 | 
            +
                before { subject.stub(:create_string_processor).and_return(processor) }
         | 
| 32 | 
            +
                after { subject.process(text) }
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                it "should call create_string_processor" do
         | 
| 35 | 
            +
                  subject.should_receive(:create_string_processor).with(text)
         | 
| 36 | 
            +
                end
         | 
| 37 | 
            +
              end
         | 
| 38 | 
            +
             | 
| 39 | 
            +
              describe "process_file" do
         | 
| 40 | 
            +
                context "with a bogus libname" do
         | 
| 41 | 
            +
                  it "should raise MergitError" do
         | 
| 42 | 
            +
                    expect { subject.process_file('totolly-bogus-filename') }.
         | 
| 43 | 
            +
                      to raise_error(Mergit::MergitError)
         | 
| 44 | 
            +
                  end
         | 
| 45 | 
            +
                end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                context "with a legit libname" do
         | 
| 48 | 
            +
                  let(:libname) { File.join(LIB_PATH, 'mergit.rb') }
         | 
| 49 | 
            +
                  let(:processor) { double(Mergit::Processor, :output => 'output-text') }
         | 
| 50 | 
            +
                  before { subject.stub(:create_file_processor).and_return(processor) }
         | 
| 51 | 
            +
                  after { subject.process_file(libname) }
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                  it "should call create_file_processor" do
         | 
| 54 | 
            +
                    subject.should_receive(:create_file_processor).with(libname)
         | 
| 55 | 
            +
                  end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
              end
         | 
| 60 | 
            +
            end
         | 
    
        data/spec/spec_helper.rb
    ADDED
    
    | @@ -0,0 +1,19 @@ | |
| 1 | 
            +
            LIB_PATH = File.expand_path('../../lib', __FILE__)
         | 
| 2 | 
            +
            $LOAD_PATH.unshift LIB_PATH
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            require 'pathname'
         | 
| 5 | 
            +
            EXAMPLE_DIR = Pathname.new("../examples").expand_path(__FILE__)
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            if ENV['TRAVIS'] == 'true'
         | 
| 8 | 
            +
              require 'coveralls'
         | 
| 9 | 
            +
              Coveralls.wear!
         | 
| 10 | 
            +
            else
         | 
| 11 | 
            +
              begin
         | 
| 12 | 
            +
                require 'simplecov'
         | 
| 13 | 
            +
                SimpleCov.start
         | 
| 14 | 
            +
              rescue LoadError
         | 
| 15 | 
            +
                puts "Not loading simplecov"
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
            end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            # EOF
         | 
    
        metadata
    ADDED
    
    | @@ -0,0 +1,256 @@ | |
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 | 
            +
            name: mergit
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 0.1.0
         | 
| 5 | 
            +
              prerelease: 
         | 
| 6 | 
            +
            platform: ruby
         | 
| 7 | 
            +
            authors:
         | 
| 8 | 
            +
            - Christian Höltje
         | 
| 9 | 
            +
            autorequire: 
         | 
| 10 | 
            +
            bindir: bin
         | 
| 11 | 
            +
            cert_chain: []
         | 
| 12 | 
            +
            date: 2013-04-18 00:00:00.000000000 Z
         | 
| 13 | 
            +
            dependencies:
         | 
| 14 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 15 | 
            +
              name: bundler
         | 
| 16 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 17 | 
            +
                none: false
         | 
| 18 | 
            +
                requirements:
         | 
| 19 | 
            +
                - - ~>
         | 
| 20 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 21 | 
            +
                    version: '1.3'
         | 
| 22 | 
            +
              type: :development
         | 
| 23 | 
            +
              prerelease: false
         | 
| 24 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 25 | 
            +
                none: false
         | 
| 26 | 
            +
                requirements:
         | 
| 27 | 
            +
                - - ~>
         | 
| 28 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 29 | 
            +
                    version: '1.3'
         | 
| 30 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 31 | 
            +
              name: rake
         | 
| 32 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 33 | 
            +
                none: false
         | 
| 34 | 
            +
                requirements:
         | 
| 35 | 
            +
                - - ~>
         | 
| 36 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 37 | 
            +
                    version: '10.0'
         | 
| 38 | 
            +
              type: :development
         | 
| 39 | 
            +
              prerelease: false
         | 
| 40 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 41 | 
            +
                none: false
         | 
| 42 | 
            +
                requirements:
         | 
| 43 | 
            +
                - - ~>
         | 
| 44 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 45 | 
            +
                    version: '10.0'
         | 
| 46 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 47 | 
            +
              name: rspec
         | 
| 48 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 49 | 
            +
                none: false
         | 
| 50 | 
            +
                requirements:
         | 
| 51 | 
            +
                - - ~>
         | 
| 52 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 53 | 
            +
                    version: '2.13'
         | 
| 54 | 
            +
              type: :development
         | 
| 55 | 
            +
              prerelease: false
         | 
| 56 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 57 | 
            +
                none: false
         | 
| 58 | 
            +
                requirements:
         | 
| 59 | 
            +
                - - ~>
         | 
| 60 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 61 | 
            +
                    version: '2.13'
         | 
| 62 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 63 | 
            +
              name: coveralls
         | 
| 64 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 65 | 
            +
                none: false
         | 
| 66 | 
            +
                requirements:
         | 
| 67 | 
            +
                - - ~>
         | 
| 68 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 69 | 
            +
                    version: '0.6'
         | 
| 70 | 
            +
              type: :development
         | 
| 71 | 
            +
              prerelease: false
         | 
| 72 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 73 | 
            +
                none: false
         | 
| 74 | 
            +
                requirements:
         | 
| 75 | 
            +
                - - ~>
         | 
| 76 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 77 | 
            +
                    version: '0.6'
         | 
| 78 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 79 | 
            +
              name: guard-rspec
         | 
| 80 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 81 | 
            +
                none: false
         | 
| 82 | 
            +
                requirements:
         | 
| 83 | 
            +
                - - ~>
         | 
| 84 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 85 | 
            +
                    version: '2.5'
         | 
| 86 | 
            +
              type: :development
         | 
| 87 | 
            +
              prerelease: false
         | 
| 88 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 89 | 
            +
                none: false
         | 
| 90 | 
            +
                requirements:
         | 
| 91 | 
            +
                - - ~>
         | 
| 92 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 93 | 
            +
                    version: '2.5'
         | 
| 94 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 95 | 
            +
              name: guard-bundler
         | 
| 96 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 97 | 
            +
                none: false
         | 
| 98 | 
            +
                requirements:
         | 
| 99 | 
            +
                - - ~>
         | 
| 100 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 101 | 
            +
                    version: '1.0'
         | 
| 102 | 
            +
              type: :development
         | 
| 103 | 
            +
              prerelease: false
         | 
| 104 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 105 | 
            +
                none: false
         | 
| 106 | 
            +
                requirements:
         | 
| 107 | 
            +
                - - ~>
         | 
| 108 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 109 | 
            +
                    version: '1.0'
         | 
| 110 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 111 | 
            +
              name: rb-inotify
         | 
| 112 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 113 | 
            +
                none: false
         | 
| 114 | 
            +
                requirements:
         | 
| 115 | 
            +
                - - ~>
         | 
| 116 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 117 | 
            +
                    version: '0.9'
         | 
| 118 | 
            +
              type: :development
         | 
| 119 | 
            +
              prerelease: false
         | 
| 120 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 121 | 
            +
                none: false
         | 
| 122 | 
            +
                requirements:
         | 
| 123 | 
            +
                - - ~>
         | 
| 124 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 125 | 
            +
                    version: '0.9'
         | 
| 126 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 127 | 
            +
              name: rb-fsevent
         | 
| 128 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 129 | 
            +
                none: false
         | 
| 130 | 
            +
                requirements:
         | 
| 131 | 
            +
                - - ~>
         | 
| 132 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 133 | 
            +
                    version: '0.9'
         | 
| 134 | 
            +
              type: :development
         | 
| 135 | 
            +
              prerelease: false
         | 
| 136 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 137 | 
            +
                none: false
         | 
| 138 | 
            +
                requirements:
         | 
| 139 | 
            +
                - - ~>
         | 
| 140 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 141 | 
            +
                    version: '0.9'
         | 
| 142 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 143 | 
            +
              name: growl
         | 
| 144 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 145 | 
            +
                none: false
         | 
| 146 | 
            +
                requirements:
         | 
| 147 | 
            +
                - - ~>
         | 
| 148 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 149 | 
            +
                    version: '1.0'
         | 
| 150 | 
            +
              type: :development
         | 
| 151 | 
            +
              prerelease: false
         | 
| 152 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 153 | 
            +
                none: false
         | 
| 154 | 
            +
                requirements:
         | 
| 155 | 
            +
                - - ~>
         | 
| 156 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 157 | 
            +
                    version: '1.0'
         | 
| 158 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 159 | 
            +
              name: libnotify
         | 
| 160 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 161 | 
            +
                none: false
         | 
| 162 | 
            +
                requirements:
         | 
| 163 | 
            +
                - - ~>
         | 
| 164 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 165 | 
            +
                    version: '0.8'
         | 
| 166 | 
            +
              type: :development
         | 
| 167 | 
            +
              prerelease: false
         | 
| 168 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 169 | 
            +
                none: false
         | 
| 170 | 
            +
                requirements:
         | 
| 171 | 
            +
                - - ~>
         | 
| 172 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 173 | 
            +
                    version: '0.8'
         | 
| 174 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 175 | 
            +
              name: terminal-notifier-guard
         | 
| 176 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 177 | 
            +
                none: false
         | 
| 178 | 
            +
                requirements:
         | 
| 179 | 
            +
                - - ~>
         | 
| 180 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 181 | 
            +
                    version: '1.5'
         | 
| 182 | 
            +
              type: :development
         | 
| 183 | 
            +
              prerelease: false
         | 
| 184 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 185 | 
            +
                none: false
         | 
| 186 | 
            +
                requirements:
         | 
| 187 | 
            +
                - - ~>
         | 
| 188 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 189 | 
            +
                    version: '1.5'
         | 
| 190 | 
            +
            description: Merge 'require'd files into one file.
         | 
| 191 | 
            +
            email:
         | 
| 192 | 
            +
            - docwhat@gerf.org
         | 
| 193 | 
            +
            executables:
         | 
| 194 | 
            +
            - mergit
         | 
| 195 | 
            +
            extensions: []
         | 
| 196 | 
            +
            extra_rdoc_files: []
         | 
| 197 | 
            +
            files:
         | 
| 198 | 
            +
            - .gitignore
         | 
| 199 | 
            +
            - .rspec
         | 
| 200 | 
            +
            - .travis.yml
         | 
| 201 | 
            +
            - Gemfile
         | 
| 202 | 
            +
            - Guardfile
         | 
| 203 | 
            +
            - LICENSE.txt
         | 
| 204 | 
            +
            - README.md
         | 
| 205 | 
            +
            - Rakefile
         | 
| 206 | 
            +
            - bin/mergit
         | 
| 207 | 
            +
            - lib/mergit.rb
         | 
| 208 | 
            +
            - lib/mergit/errors.rb
         | 
| 209 | 
            +
            - lib/mergit/processor.rb
         | 
| 210 | 
            +
            - lib/mergit/version.rb
         | 
| 211 | 
            +
            - mergit.gemspec
         | 
| 212 | 
            +
            - spec/examples/loop/a.rb
         | 
| 213 | 
            +
            - spec/examples/loop/b.rb
         | 
| 214 | 
            +
            - spec/examples/loop/c.rb
         | 
| 215 | 
            +
            - spec/mergit/processor_spec.rb
         | 
| 216 | 
            +
            - spec/mergit_spec.rb
         | 
| 217 | 
            +
            - spec/spec_helper.rb
         | 
| 218 | 
            +
            homepage: ''
         | 
| 219 | 
            +
            licenses:
         | 
| 220 | 
            +
            - MIT
         | 
| 221 | 
            +
            post_install_message: 
         | 
| 222 | 
            +
            rdoc_options: []
         | 
| 223 | 
            +
            require_paths:
         | 
| 224 | 
            +
            - lib
         | 
| 225 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 226 | 
            +
              none: false
         | 
| 227 | 
            +
              requirements:
         | 
| 228 | 
            +
              - - ! '>='
         | 
| 229 | 
            +
                - !ruby/object:Gem::Version
         | 
| 230 | 
            +
                  version: '0'
         | 
| 231 | 
            +
                  segments:
         | 
| 232 | 
            +
                  - 0
         | 
| 233 | 
            +
                  hash: -2751772494269357839
         | 
| 234 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 235 | 
            +
              none: false
         | 
| 236 | 
            +
              requirements:
         | 
| 237 | 
            +
              - - ! '>='
         | 
| 238 | 
            +
                - !ruby/object:Gem::Version
         | 
| 239 | 
            +
                  version: '0'
         | 
| 240 | 
            +
                  segments:
         | 
| 241 | 
            +
                  - 0
         | 
| 242 | 
            +
                  hash: -2751772494269357839
         | 
| 243 | 
            +
            requirements: []
         | 
| 244 | 
            +
            rubyforge_project: 
         | 
| 245 | 
            +
            rubygems_version: 1.8.23
         | 
| 246 | 
            +
            signing_key: 
         | 
| 247 | 
            +
            specification_version: 3
         | 
| 248 | 
            +
            summary: Ever wanted to merge all your 'require'd files into one file for easy distribution?
         | 
| 249 | 
            +
              Mergit is your friend!
         | 
| 250 | 
            +
            test_files:
         | 
| 251 | 
            +
            - spec/examples/loop/a.rb
         | 
| 252 | 
            +
            - spec/examples/loop/b.rb
         | 
| 253 | 
            +
            - spec/examples/loop/c.rb
         | 
| 254 | 
            +
            - spec/mergit/processor_spec.rb
         | 
| 255 | 
            +
            - spec/mergit_spec.rb
         | 
| 256 | 
            +
            - spec/spec_helper.rb
         |