pattern_patch 0.5.1 → 0.5.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/pattern_patch/core_ext/string.rb +2 -2
- data/lib/pattern_patch/patch.rb +44 -10
- data/lib/pattern_patch/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 020a46e316bbe314edeee3920555b57699d37ca1668d10f1d3e7c7b68325c523
|
4
|
+
data.tar.gz: 8cd9d162362f0a168f3950cce7b3a67083638fb55f629c89fbbc36ba89d73c6a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bb2bdeb2fd23ff22dcd79741e37e449f10b808174d6401b74fbae472f97a53d3589db604c272f7ed34f98799f7ee3382009059ef3f18a9879296e7c55b811314
|
7
|
+
data.tar.gz: e65d3f77114df163c67fd263f9471b320f6656541ab5b13173405887926755f1a8ae9dbce44030368f9974d8d337309ce0a7366abca636a4c82c3d8095f9647e
|
@@ -3,7 +3,7 @@ class String
|
|
3
3
|
# data from matches. Modifies the receiver. The receiver
|
4
4
|
# need not match the matches.regexp.
|
5
5
|
#
|
6
|
-
#
|
6
|
+
# [matches] [MatchData] A MatchData object returned by Regexp#match
|
7
7
|
def apply_matches!(matches)
|
8
8
|
search_position = 0
|
9
9
|
while (m = /\\(\d+)/.match(self, search_position))
|
@@ -19,7 +19,7 @@ class String
|
|
19
19
|
# in self replaced by appropriate data from matches. The receiver
|
20
20
|
# need not match the matches.regexp.
|
21
21
|
#
|
22
|
-
#
|
22
|
+
# [matches] [MatchData] A MatchData object returned by Regexp#match
|
23
23
|
def apply_matches(matches)
|
24
24
|
string = clone
|
25
25
|
string.apply_matches! matches
|
data/lib/pattern_patch/patch.rb
CHANGED
@@ -3,14 +3,37 @@ require "erb"
|
|
3
3
|
require "yaml"
|
4
4
|
|
5
5
|
module PatternPatch
|
6
|
+
# The PatternPatch::Patch class defines a patch as an operation that
|
7
|
+
# may be applied to any file. Often the operation may also be reverted.
|
6
8
|
class Patch
|
9
|
+
# Regexp defining one or more matching regions in a file.
|
7
10
|
attr_accessor :regexp
|
11
|
+
|
12
|
+
# String with text to use in the patch operation. May contain ERB.
|
8
13
|
attr_accessor :text
|
14
|
+
|
15
|
+
# Symbol specifying the patch mode: :append (default), :prepend or :replace
|
9
16
|
attr_accessor :mode
|
17
|
+
|
18
|
+
# Setting this to true will apply the patch to all matches in the file.
|
19
|
+
# By default (when false), the patch is only applied to the first match.
|
10
20
|
attr_accessor :global
|
21
|
+
|
22
|
+
# If set to a file path, the contents of that file will be used to populate
|
23
|
+
# the text attribute. Setting this after construction modifies the text
|
24
|
+
# field.
|
11
25
|
attr_reader :text_file
|
12
26
|
|
13
27
|
class << self
|
28
|
+
# Load a Patch from a YAML file. The following special processing applies:
|
29
|
+
# The mode field is converted to a symbol. The text_file field will be
|
30
|
+
# interpreted relative to the YAML file. A Regexp will be constructed from
|
31
|
+
# the regexp field using Regexp.new unless it is a String containing a
|
32
|
+
# Regexp literal using slash delimiters, e.g. /x/i. This format may be
|
33
|
+
# used to specify a Regexp with modifiers in YAML. Raises if the file
|
34
|
+
# cannot be loaded.
|
35
|
+
#
|
36
|
+
# [patch] [String] Path to a YAML file containing a patch definition.
|
14
37
|
def from_yaml(path)
|
15
38
|
hash = YAML.load_file(path).symbolize_keys
|
16
39
|
|
@@ -47,6 +70,11 @@ module PatternPatch
|
|
47
70
|
end
|
48
71
|
end
|
49
72
|
|
73
|
+
# Construct a new Patch from the options. The following fields are mapped
|
74
|
+
# to the corresponding attributes: :regexp, :text, :text_file, :mode,
|
75
|
+
# :global. Raises ArgumentError if both :text and :text_file are specified.
|
76
|
+
#
|
77
|
+
# [options] [Hash] Parameters used to construct the Patch
|
50
78
|
def initialize(options = {})
|
51
79
|
raise ArgumentError, "text and text_file are mutually exclusive" if options[:text] && options[:text_file]
|
52
80
|
|
@@ -68,15 +96,18 @@ module PatternPatch
|
|
68
96
|
@text = File.read path if path
|
69
97
|
end
|
70
98
|
|
99
|
+
# Applies the patch to one or more files. ERB is processed in the text
|
100
|
+
# field, whether it comes from a text_file or not. Pass a Binding to
|
101
|
+
# ERB using the :binding option. Pass the :offset option to specify a
|
102
|
+
# starting offset, in characters, from the beginning of the file.
|
103
|
+
#
|
104
|
+
# [files] [Array or String] One or more file paths to which to apply the patch.
|
105
|
+
# [options] [Hash] Options for applying the patch.
|
71
106
|
def apply(files, options = {})
|
72
107
|
offset = options[:offset] || 0
|
73
108
|
files = [files] if files.kind_of? String
|
74
109
|
|
75
|
-
|
76
|
-
patch_text = ERB.new(text).result(options[:binding])
|
77
|
-
else
|
78
|
-
patch_text = text
|
79
|
-
end
|
110
|
+
patch_text = ERB.new(text).result options[:binding]
|
80
111
|
|
81
112
|
files.each do |path|
|
82
113
|
modified = Utilities.apply_patch File.read(path),
|
@@ -89,15 +120,18 @@ module PatternPatch
|
|
89
120
|
end
|
90
121
|
end
|
91
122
|
|
123
|
+
# Reverse the effect of a patch on one or more files. ERB is processed in the text
|
124
|
+
# field, whether it comes from a text_file or not. Pass a Binding to
|
125
|
+
# ERB using the :binding option. Pass the :offset option to specify a
|
126
|
+
# starting offset, in characters, from the beginning of the file.
|
127
|
+
#
|
128
|
+
# [files] [Array or String] One or more file paths to which to apply the patch.
|
129
|
+
# [options] [Hash] Options for applying the patch.
|
92
130
|
def revert(files, options = {})
|
93
131
|
offset = options[:offset] || 0
|
94
132
|
files = [files] if files.kind_of? String
|
95
133
|
|
96
|
-
|
97
|
-
patch_text = ERB.new(text).result(options[:binding])
|
98
|
-
else
|
99
|
-
patch_text = text
|
100
|
-
end
|
134
|
+
patch_text = ERB.new(text).result options[:binding]
|
101
135
|
|
102
136
|
files.each do |path|
|
103
137
|
modified = Utilities.revert_patch File.read(path),
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pattern_patch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jimmy Dee
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-11-
|
11
|
+
date: 2017-11-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|