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.
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ /.bundle/
4
+ .config
5
+ .yardoc
6
+ /Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ /coverage/
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ /tmp/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
@@ -0,0 +1,7 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.8.7
4
+ - 1.9.2
5
+ - 1.9.3
6
+ script:
7
+ - bundle exec rspec
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in mergit.gemspec
4
+ gemspec
@@ -0,0 +1,10 @@
1
+ guard 'bundler' do
2
+ watch('Gemfile')
3
+ watch(/^.+\.gemspec/)
4
+ end
5
+
6
+ guard 'rspec' do
7
+ watch(%r{^spec/.+_spec\.rb$})
8
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
9
+ watch('spec/spec_helper.rb') { "spec" }
10
+ end
@@ -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.
@@ -0,0 +1,65 @@
1
+ # Mergit
2
+
3
+ * [![Build Status](https://secure.travis-ci.org/docwhat/mergit.png)](http://travis-ci.org/docwhat/mergit)
4
+ * [![Dependencies](https://gemnasium.com/docwhat/mergit.png)](https://gemnasium.com/docwhat/mergit)
5
+ * [![Coverage Status](https://coveralls.io/repos/docwhat/mergit/badge.png?branch=master)](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
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -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
@@ -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,5 @@
1
+ class Mergit
2
+ class MergitError < StandardError; end
3
+ class RequirementNotFound < MergitError; end
4
+ end
5
+
@@ -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
@@ -0,0 +1,3 @@
1
+ class Mergit
2
+ VERSION = "0.1.0"
3
+ end
@@ -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
@@ -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
@@ -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