geny 2.0.0 → 2.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.
- checksums.yaml +4 -4
- data/lib/geny/actions/find.rb +72 -0
- data/lib/geny/context/invoke.rb +7 -0
- data/lib/geny/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 26e05f21ea0266a46ce4c2cdf05d3fd46be21cce
|
4
|
+
data.tar.gz: 5ab64929a864a15791f9a7a4604eda223619c7eb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 312151d3e72663e279482d451a2e72400f8ee7d735a61bd063c35755af9967dc10bec11e0725744824378fab911d073831a2f52160ff4f76ad4888d763ddd0cb
|
7
|
+
data.tar.gz: fd10235c2db8e2bbdac6df3aff16a71a9c61dce8bb589d1d1af2b211b63be2f4edb98d92bfb07d0e9365d755660cb7cfb2959dec678a26b8c08c383f74e65de8
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require "find"
|
2
|
+
require "fileutils"
|
3
|
+
require "tty-file"
|
4
|
+
|
5
|
+
module Geny
|
6
|
+
module Actions
|
7
|
+
class Find
|
8
|
+
# Replace the content of any file that matches the pattern with
|
9
|
+
# a replacement
|
10
|
+
# @param root [String] the path to search
|
11
|
+
# @param pattern [String,Regexp] a pattern to find
|
12
|
+
# @param replacement [String] the content to insert
|
13
|
+
# @param force [TrueClass,FalseClass] overwrite existing files
|
14
|
+
# @param excluding [Regexp] exclude any file matching this pattern
|
15
|
+
# @note This attempts to ignore binary files
|
16
|
+
#
|
17
|
+
# @example
|
18
|
+
# find.replace("src", "Boilerplate", "YourProject")
|
19
|
+
def replace(root, pattern, replacement, force: false, excluding: nil)
|
20
|
+
::Find.find(root)
|
21
|
+
.lazy
|
22
|
+
.reject { |path| path == root }
|
23
|
+
.reject { |path| excluding && path.match?(excluding) }
|
24
|
+
.reject { |path| File.directory?(path) }
|
25
|
+
.reject { |path| TTY::File.binary?(path) }
|
26
|
+
.each do |path|
|
27
|
+
TTY::File.replace_in_file(
|
28
|
+
path,
|
29
|
+
pattern,
|
30
|
+
replacement,
|
31
|
+
verbose: false,
|
32
|
+
force: force
|
33
|
+
)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# Replace any filename that matches the pattern with a replacement
|
38
|
+
# @param root [String] the path to search
|
39
|
+
# @param pattern [String,Regexp] a pattern to find
|
40
|
+
# @param replacement [String] the content to insert
|
41
|
+
# @param force [TrueClass,FalseClass] overwrite existing files
|
42
|
+
# @param excluding [Regexp] exclude any file matching this pattern
|
43
|
+
#
|
44
|
+
# @example
|
45
|
+
# find.rename("src", "Boilerplate", "YourProject")
|
46
|
+
def rename(root, pattern, replacement, force: false, excluding: nil)
|
47
|
+
::Find.find(root)
|
48
|
+
.lazy
|
49
|
+
.reject { |path| path == root }
|
50
|
+
.reject { |path| excluding && path.match?(excluding) }
|
51
|
+
.select { |path| path.match?(pattern) }
|
52
|
+
.sort { |path| depth(path) }
|
53
|
+
.map { |path| [path, rsub(path, pattern, replacement)] }
|
54
|
+
.each { |source, dest| FileUtils.mv(source, dest) }
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
# Replace the last match of a string
|
60
|
+
def rsub(str, pattern, replacement)
|
61
|
+
prefix, match, suffix = str.rpartition(pattern)
|
62
|
+
return str if prefix.empty? and match.empty?
|
63
|
+
"#{prefix}#{replacement}#{suffix}"
|
64
|
+
end
|
65
|
+
|
66
|
+
# Get the depth of a path
|
67
|
+
def depth(path)
|
68
|
+
path.split(File::SEPARATOR).length
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
data/lib/geny/context/invoke.rb
CHANGED
@@ -5,6 +5,7 @@ require "geny/actions/geny"
|
|
5
5
|
require "geny/actions/git"
|
6
6
|
require "geny/actions/shell"
|
7
7
|
require "geny/actions/files"
|
8
|
+
require "geny/actions/find"
|
8
9
|
require "geny/actions/templates"
|
9
10
|
|
10
11
|
module Geny
|
@@ -32,6 +33,12 @@ module Geny
|
|
32
33
|
Actions::Files.new
|
33
34
|
end
|
34
35
|
|
36
|
+
# A utility for bulk find-and-replace operations
|
37
|
+
# @return [Actions::Find]
|
38
|
+
def find
|
39
|
+
Actions::Find.new
|
40
|
+
end
|
41
|
+
|
35
42
|
# A utility for running shell commands
|
36
43
|
# @return [Actions::Shell]
|
37
44
|
def shell
|
data/lib/geny/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: geny
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ray Zane
|
@@ -147,6 +147,7 @@ files:
|
|
147
147
|
- lib/generators/new/templates/generator.rb.erb
|
148
148
|
- lib/geny.rb
|
149
149
|
- lib/geny/actions/files.rb
|
150
|
+
- lib/geny/actions/find.rb
|
150
151
|
- lib/geny/actions/geny.rb
|
151
152
|
- lib/geny/actions/git.rb
|
152
153
|
- lib/geny/actions/shell.rb
|