recursive_replace 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/Gemfile ADDED
@@ -0,0 +1,20 @@
1
+ source "http://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+
6
+ # Add dependencies to develop your gem here.
7
+ # Include everything needed to run rake, tests, features, etc.
8
+
9
+ gem "colored"
10
+
11
+ group :development do
12
+ gem "shoulda", ">= 0"
13
+ gem "bundler", "~> 1.0.0"
14
+ gem "jeweler", "~> 1.6.3"
15
+ gem "rcov", ">= 0"
16
+ end
17
+
18
+ group :test do
19
+ gem "rspec"
20
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Dave Hulihan
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,40 @@
1
+ # recursive_replace
2
+
3
+ A ruby gem for recursively replacing text in multiple files and directories. It also escapes special characters, so you can replace code syntax and special characters easily. recursive_replace also comes with a testing suite for verification against several data types and programming languages.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ gem install recursive_replace
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ### From Console/Terminal
14
+
15
+ ```bash
16
+ recursive_replace [original] [replacement] [optional_path]
17
+ ```
18
+ ```bash
19
+ echo "bad bad good" > test
20
+ recursive_replace bad good # replaced bad with bad
21
+ cat test # => good good good
22
+ rm test
23
+ ```
24
+
25
+ ### Ruby
26
+
27
+ ```bash
28
+ echo "<%= @object[:bad] %>" > test # use quotes when using special characters
29
+ recursive_replace "<%= @object[:bad] %>" "<%= @new_object[:good] %>"
30
+ cat test # => <%= @new_object[:good] %>
31
+ rm test
32
+ ```
33
+
34
+ ### From Code
35
+
36
+ ```ruby
37
+ require "recursive_replace"
38
+ file = File.join("home", "bob", "Documents)
39
+ RecursiveReplace.replace("bad", "good", :path => file)
40
+ ```
data/Rakefile ADDED
@@ -0,0 +1,53 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
+ gem.name = "recursive_replace"
18
+ gem.homepage = "http://github.com/hulihanapplications/recursive_replace"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{Recursive Text Replacement for Programming Languages}
21
+ gem.description = %Q{recursive_replace is a ruby gem for recursively replacing text in multiple files and directories. It also escapes special characters, so you can replace code syntax and special characters easily.}
22
+ gem.email = "dave@hulihanapplications.com"
23
+ gem.authors = ["Dave Hulihan", "Hulihan Applications"]
24
+ # dependencies defined in Gemfile
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ require 'rake/testtask'
29
+ Rake::TestTask.new(:test) do |test|
30
+ test.libs << 'lib' << 'test'
31
+ test.pattern = 'test/**/test_*.rb'
32
+ test.verbose = true
33
+ end
34
+
35
+ require 'rcov/rcovtask'
36
+ Rcov::RcovTask.new do |test|
37
+ test.libs << 'test'
38
+ test.pattern = 'test/**/test_*.rb'
39
+ test.verbose = true
40
+ test.rcov_opts << '--exclude "gems/*"'
41
+ end
42
+
43
+ task :default => :test
44
+
45
+ require 'rake/rdoctask'
46
+ Rake::RDocTask.new do |rdoc|
47
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
48
+
49
+ rdoc.rdoc_dir = 'rdoc'
50
+ rdoc.title = "recursive_replace #{version}"
51
+ rdoc.rdoc_files.include('README*')
52
+ rdoc.rdoc_files.include('lib/**/*.rb')
53
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.expand_path(File.join("..", "..", "lib", "recursive_replace"), __FILE__)
4
+
5
+ # Recursive String Replacement, starting in current dir.
6
+ # Author: Dave Hulihan
7
+
8
+ if ARGV.length < 2
9
+ puts "Usage: recursive_replace [original] [replacement] [file or dir]"
10
+ exit 0
11
+ end
12
+
13
+ @original = ARGV[0]
14
+ @replacement = ARGV[1]
15
+ @path = ARGV[2]
16
+
17
+ puts "Replacing #{@original} with #{@replacement} in #{@path.nil? ? Dir.pwd : @path}"
18
+
19
+ RecursiveReplace.replace(@original, @replacement, :path => @path, :verbose => true)
20
+
@@ -0,0 +1,52 @@
1
+ require "colored"
2
+
3
+ class RecursiveReplace
4
+ INDENTATION = " "
5
+
6
+ def self.replace(original, replacement, options = {}) # replace text in either a directory(recursively) or single file
7
+ #exec("find ./ -type f | xargs sed -i 's/#{@string1}/#{@string2}/g'")
8
+
9
+ #puts files.inspect
10
+ if options[:path].nil? || File.directory?(options[:path]) # recursively inside directory
11
+ for file in files_inside(options[:path])
12
+ options[:path] = file
13
+ replace_in_file(original, replacement, options) unless File.directory?(file)
14
+ end
15
+ else # single file
16
+ replace_in_file(original, replacement, options)
17
+ end
18
+ end
19
+
20
+ def self.replace_in_file(original, replacement, options = {}) # do the actual replacing in a single file
21
+ raise ScriptError, "options[:path] not defined" if options[:path].nil?
22
+ raise LoadError, "#{options[:path]} not found" unless File.exists?(options[:path])
23
+ raise LoadError, "#{options[:path]} is a directory" if File.directory?(options[:path])
24
+
25
+ # Set Defaults
26
+ options[:verbose] = false if options[:verbose].nil?
27
+
28
+ original = Regexp.escape(original) # escape any special characters
29
+ replacement = Regexp.escape(replacement)
30
+
31
+ results = system("sed -i 's/#{original}/#{replacement}/g' #{options[:path]}")
32
+ puts "success".green + "\t" + INDENTATION + print_path(options[:path]) if !File.directory?(options[:path]) && options[:verbose]
33
+ #puts results.inspect
34
+ end
35
+
36
+ def self.print_path_with_indent(path) # print pretty path
37
+ indent = String.new
38
+ path.split(File::SEPARATOR).each do
39
+ indent << RecursiveReplace::INDENTATION unless File.dirname(path) == "."
40
+ end
41
+ return File.directory?(path) ? path : indent + File.basename(path)
42
+ end
43
+
44
+ def self.print_path(path)
45
+ path
46
+ end
47
+
48
+ def self.files_inside(path) # get the working directory to start in
49
+ path.nil? ? Dir.glob(File.join("**", "*")) : Dir.glob(File.join(File.dirname(path), "**", "*"))
50
+ end
51
+
52
+ end
@@ -0,0 +1,71 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{recursive_replace}
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Dave Hulihan", "Hulihan Applications"]
12
+ s.date = %q{2011-08-26}
13
+ s.description = %q{recursive_replace is a ruby gem for recursively replacing text in multiple files and directories. It also escapes special characters, so you can replace code syntax and special characters easily.}
14
+ s.email = %q{dave@hulihanapplications.com}
15
+ s.executables = ["recursive_replace"]
16
+ s.extra_rdoc_files = [
17
+ "LICENSE.txt",
18
+ "README.md"
19
+ ]
20
+ s.files = [
21
+ ".document",
22
+ "Gemfile",
23
+ "LICENSE.txt",
24
+ "README.md",
25
+ "Rakefile",
26
+ "VERSION",
27
+ "bin/recursive_replace",
28
+ "lib/recursive_replace.rb",
29
+ "recursive_replace.gemspec",
30
+ "spec/fixtures/test/bad",
31
+ "spec/fixtures/test/file",
32
+ "spec/fixtures/test/good",
33
+ "spec/fixtures/test/subdirectory/file",
34
+ "spec/fixtures/test/syntax/file.erb",
35
+ "spec/fixtures/test/syntax/file.rb",
36
+ "spec/lib/recursive_replace_spec.rb",
37
+ "spec/spec_helper.rb",
38
+ "test/helper.rb",
39
+ "test/test_recursive_replace.rb"
40
+ ]
41
+ s.homepage = %q{http://github.com/hulihanapplications/recursive_replace}
42
+ s.licenses = ["MIT"]
43
+ s.require_paths = ["lib"]
44
+ s.rubygems_version = %q{1.7.2}
45
+ s.summary = %q{Recursive Text Replacement for Programming Languages}
46
+
47
+ if s.respond_to? :specification_version then
48
+ s.specification_version = 3
49
+
50
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
51
+ s.add_runtime_dependency(%q<colored>, [">= 0"])
52
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
53
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
54
+ s.add_development_dependency(%q<jeweler>, ["~> 1.6.3"])
55
+ s.add_development_dependency(%q<rcov>, [">= 0"])
56
+ else
57
+ s.add_dependency(%q<colored>, [">= 0"])
58
+ s.add_dependency(%q<shoulda>, [">= 0"])
59
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
60
+ s.add_dependency(%q<jeweler>, ["~> 1.6.3"])
61
+ s.add_dependency(%q<rcov>, [">= 0"])
62
+ end
63
+ else
64
+ s.add_dependency(%q<colored>, [">= 0"])
65
+ s.add_dependency(%q<shoulda>, [">= 0"])
66
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
67
+ s.add_dependency(%q<jeweler>, ["~> 1.6.3"])
68
+ s.add_dependency(%q<rcov>, [">= 0"])
69
+ end
70
+ end
71
+
@@ -0,0 +1 @@
1
+ bad
@@ -0,0 +1 @@
1
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum
@@ -0,0 +1 @@
1
+ good
@@ -0,0 +1 @@
1
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum
@@ -0,0 +1 @@
1
+ <%= print @object[:symbol] %>
@@ -0,0 +1,4 @@
1
+ class SomeClass < SomeOtherClass
2
+ def some_method
3
+ end
4
+ end
@@ -0,0 +1,46 @@
1
+ require "spec_helper"
2
+
3
+ describe RecursiveReplace do
4
+ describe "go" do
5
+ before(:each) do
6
+ # create test dir
7
+ @test_dir_fixture = File.expand_path("../../fixtures/test", __FILE__)
8
+ @test_dir = File.expand_path("../../tmp/#{File.basename(@test_dir_fixture)}", __FILE__)
9
+ #puts "#{@test_dir_fixture} -> #{@test_dir}"
10
+ FileUtils.cp_r(@test_dir_fixture, @test_dir)
11
+ end
12
+
13
+ after(:each) do
14
+ # delete test dir
15
+ FileUtils.rm_rf @test_dir
16
+ raise "test dir should have been deleted" if File.exists?(@test_dir)
17
+ end
18
+
19
+ it "creates test directory properly" do
20
+ test_exists = File.exists?(@test_dir) && File.directory?(@test_dir)
21
+ test_exists.should == true
22
+ end
23
+
24
+ it "replaces good with bad in test/good" do
25
+ path = File.join(@test_dir, "good")
26
+ File.read(path).should == "good"
27
+ described_class.replace("good", "bad", :path => path)
28
+ File.read(path).should == "bad"
29
+ end
30
+
31
+ describe "erb" do
32
+ it "should replace erb code fine" do
33
+ original = "<%= print @object[:symbol] %>"
34
+ replacement = "<%= puts @new_object[:new_symbol] %>"
35
+ path = File.join(@test_dir, "syntax", "file.erb")
36
+ File.read(path).should == original
37
+ described_class.replace(original, replacement, :path => path)
38
+ File.read(path).should == replacement
39
+ end
40
+ end
41
+
42
+ context "console" do
43
+
44
+ end
45
+ end
46
+ end
@@ -0,0 +1 @@
1
+ require File.expand_path(File.join("..", "..", "lib", "recursive_replace"), __FILE__)
data/test/helper.rb ADDED
@@ -0,0 +1,18 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'test/unit'
11
+ require 'shoulda'
12
+
13
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
14
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
15
+ require 'recursive_replace'
16
+
17
+ class Test::Unit::TestCase
18
+ end
@@ -0,0 +1,7 @@
1
+ require 'helper'
2
+
3
+ class TestRecursiveReplace < Test::Unit::TestCase
4
+ should "probably rename this file and start testing for real" do
5
+ flunk "hey buddy, you should probably rename this file and start testing for real"
6
+ end
7
+ end
metadata ADDED
@@ -0,0 +1,128 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: recursive_replace
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Dave Hulihan
9
+ - Hulihan Applications
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2011-08-26 00:00:00.000000000Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: colored
17
+ requirement: &77502280 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: *77502280
26
+ - !ruby/object:Gem::Dependency
27
+ name: shoulda
28
+ requirement: &77501720 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: *77501720
37
+ - !ruby/object:Gem::Dependency
38
+ name: bundler
39
+ requirement: &77500850 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ~>
43
+ - !ruby/object:Gem::Version
44
+ version: 1.0.0
45
+ type: :development
46
+ prerelease: false
47
+ version_requirements: *77500850
48
+ - !ruby/object:Gem::Dependency
49
+ name: jeweler
50
+ requirement: &77500360 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ version: 1.6.3
56
+ type: :development
57
+ prerelease: false
58
+ version_requirements: *77500360
59
+ - !ruby/object:Gem::Dependency
60
+ name: rcov
61
+ requirement: &77499940 !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ! '>='
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ type: :development
68
+ prerelease: false
69
+ version_requirements: *77499940
70
+ description: recursive_replace is a ruby gem for recursively replacing text in multiple
71
+ files and directories. It also escapes special characters, so you can replace code
72
+ syntax and special characters easily.
73
+ email: dave@hulihanapplications.com
74
+ executables:
75
+ - recursive_replace
76
+ extensions: []
77
+ extra_rdoc_files:
78
+ - LICENSE.txt
79
+ - README.md
80
+ files:
81
+ - .document
82
+ - Gemfile
83
+ - LICENSE.txt
84
+ - README.md
85
+ - Rakefile
86
+ - VERSION
87
+ - bin/recursive_replace
88
+ - lib/recursive_replace.rb
89
+ - recursive_replace.gemspec
90
+ - spec/fixtures/test/bad
91
+ - spec/fixtures/test/file
92
+ - spec/fixtures/test/good
93
+ - spec/fixtures/test/subdirectory/file
94
+ - spec/fixtures/test/syntax/file.erb
95
+ - spec/fixtures/test/syntax/file.rb
96
+ - spec/lib/recursive_replace_spec.rb
97
+ - spec/spec_helper.rb
98
+ - test/helper.rb
99
+ - test/test_recursive_replace.rb
100
+ homepage: http://github.com/hulihanapplications/recursive_replace
101
+ licenses:
102
+ - MIT
103
+ post_install_message:
104
+ rdoc_options: []
105
+ require_paths:
106
+ - lib
107
+ required_ruby_version: !ruby/object:Gem::Requirement
108
+ none: false
109
+ requirements:
110
+ - - ! '>='
111
+ - !ruby/object:Gem::Version
112
+ version: '0'
113
+ segments:
114
+ - 0
115
+ hash: 633788527
116
+ required_rubygems_version: !ruby/object:Gem::Requirement
117
+ none: false
118
+ requirements:
119
+ - - ! '>='
120
+ - !ruby/object:Gem::Version
121
+ version: '0'
122
+ requirements: []
123
+ rubyforge_project:
124
+ rubygems_version: 1.7.2
125
+ signing_key:
126
+ specification_version: 3
127
+ summary: Recursive Text Replacement for Programming Languages
128
+ test_files: []