yop 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/yop/exceptions.rb +3 -0
- data/lib/yop/templates.rb +26 -2
- data/lib/yop/version.rb +1 -1
- data/tests/templates_tests.rb +35 -0
- metadata +2 -2
- metadata.gz.sig +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 48cdd693ddc63341281872a917f15d02c137bef9
|
4
|
+
data.tar.gz: 5d3d39003aead9c3f03eff542dde957ed60e9e4d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 374870859aa358c2727f47ff5fc8a6f0e93fb3239eee8b6a213e5d608bfb59090a2e262ba4b7dda5ea09020eff5f83508a9c6a8bf8b8599a8b7fb850aa8cffa3
|
7
|
+
data.tar.gz: 3ec5f24284bcbfb77d2cf6c3f08d0c949f10563ce08f5a1674fb07e40cee1fffb3e9d4c8c2554443a18a44d7c65d3d60f77a70b798f7f7e4aa6753c76a3ad365
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/lib/yop/exceptions.rb
CHANGED
@@ -9,6 +9,9 @@ class NonExistentTemplate < YopException; end
|
|
9
9
|
# Raised when a template variable is undefined
|
10
10
|
class UndefinedTemplateVariable < YopException; end
|
11
11
|
|
12
|
+
# Raised when a dynamic template variable is undefined
|
13
|
+
class UndefinedDynamicTemplateVariable < UndefinedTemplateVariable; end
|
14
|
+
|
12
15
|
# Raised when a template variable has a wrong value
|
13
16
|
class BadTemplateVariableValue < YopException; end
|
14
17
|
|
data/lib/yop/templates.rb
CHANGED
@@ -34,6 +34,9 @@ module Yop
|
|
34
34
|
# @return [Yop::UI]
|
35
35
|
attr_writer :ui
|
36
36
|
|
37
|
+
# The prefix used for dynamic variables
|
38
|
+
DYNAMIC_PREFIX = Regexp.escape "!"
|
39
|
+
|
37
40
|
# Create a new template from a base directory
|
38
41
|
# @param base_directory [String] a path to an existing directory which will
|
39
42
|
# be used as a source when this template will be applied
|
@@ -105,6 +108,10 @@ module Yop
|
|
105
108
|
[/\.git/, /.~$/, /__pycache__/].any? { |reg| path =~ reg }
|
106
109
|
end
|
107
110
|
|
111
|
+
def dynamic_var?(name)
|
112
|
+
name && name =~ /^#{DYNAMIC_PREFIX}/
|
113
|
+
end
|
114
|
+
|
108
115
|
# Replace vars in a file
|
109
116
|
# @param source [String] the file path
|
110
117
|
def replace_vars(source)
|
@@ -116,7 +123,12 @@ module Yop
|
|
116
123
|
def replace_vars_in_string(text)
|
117
124
|
text.gsub(@var_pattern) do
|
118
125
|
name = Regexp.last_match[1]
|
119
|
-
|
126
|
+
|
127
|
+
if dynamic_var? name
|
128
|
+
get_dynamic_var name
|
129
|
+
else
|
130
|
+
@vars[name] || @vars[name.to_sym] || get_var(name)
|
131
|
+
end
|
120
132
|
end
|
121
133
|
end
|
122
134
|
|
@@ -131,12 +143,24 @@ module Yop
|
|
131
143
|
@vars[name] = (@ui ||= Yop::TerminalUI.new).get_var(name)
|
132
144
|
end
|
133
145
|
|
146
|
+
# Return a value for a dynamic variable.
|
147
|
+
# @param name [String]
|
148
|
+
def get_dynamic_var(name)
|
149
|
+
case name[DYNAMIC_PREFIX.size..-1]
|
150
|
+
# {(!CURRENT_YEAR)} -> the current year (four digits)
|
151
|
+
when "CURRENT_YEAR"
|
152
|
+
Time.now.year.to_s
|
153
|
+
else
|
154
|
+
fail UndefinedDynamicTemplateVariable, name
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
134
158
|
# Initialize @var_pattern
|
135
159
|
def compile_var_pattern!
|
136
160
|
opening = Regexp.escape(@config[:before_var] || "{(")
|
137
161
|
closing = Regexp.escape(@config[:after_var] || ")}")
|
138
162
|
|
139
|
-
@var_pattern = /#{opening}([_A-Z][_A-Z0-9]*)#{closing}/
|
163
|
+
@var_pattern = /#{opening}(#{DYNAMIC_PREFIX}?[_A-Z][_A-Z0-9]*)#{closing}/
|
140
164
|
end
|
141
165
|
|
142
166
|
# Try to mirror the permissions from a file to another
|
data/lib/yop/version.rb
CHANGED
data/tests/templates_tests.rb
CHANGED
@@ -207,6 +207,28 @@ class YopTemplatesTests < YopTestCase
|
|
207
207
|
assert_not_directory "#{dest}/{(SOME_VAR)}"
|
208
208
|
end
|
209
209
|
|
210
|
+
def test_apply_dir_with_dynamic_variable_placeholder
|
211
|
+
capture_output!
|
212
|
+
set_input "v1"
|
213
|
+
|
214
|
+
year = Time.now.year.to_s
|
215
|
+
mkdir_p "templates/foo/{(!CURRENT_YEAR)}"
|
216
|
+
Yop.config! :vars => {:CURRENT_YEAR => "v2"}
|
217
|
+
t = Yop.get_template("foo")
|
218
|
+
dest = "#{Yop.home}/tmp/test-foo"
|
219
|
+
assert_nothing_raised { t.apply dest }
|
220
|
+
assert_directory "#{dest}/#{year}"
|
221
|
+
assert_not_directory "#{dest}/v1"
|
222
|
+
assert_not_directory "#{dest}/v2"
|
223
|
+
end
|
224
|
+
|
225
|
+
def test_apply_dir_with_undefined_dynamic_variable_placeholder
|
226
|
+
mkdir_p "templates/foo/{(!SOME_VAR)}"
|
227
|
+
t = Yop.get_template("foo")
|
228
|
+
dest = "#{Yop.home}/tmp/test-foo"
|
229
|
+
assert_raise(UndefinedDynamicTemplateVariable) { t.apply dest }
|
230
|
+
end
|
231
|
+
|
210
232
|
# placeholders in files
|
211
233
|
|
212
234
|
def test_apply_file_with_variable_placeholders_in_content
|
@@ -234,6 +256,19 @@ EOS
|
|
234
256
|
assert_equal expected, File.read("#{dest}/README")
|
235
257
|
end
|
236
258
|
|
259
|
+
def test_apply_file_with_dynamic_variable_placeholders_in_content
|
260
|
+
mkdir_p "templates/foo"
|
261
|
+
File.open("#{Yop.home}/templates/foo/LICENSE", "w") do |f|
|
262
|
+
f.write "(c) {(!CURRENT_YEAR)} Someone"
|
263
|
+
end
|
264
|
+
t = Yop.get_template("foo")
|
265
|
+
dest = "#{Yop.home}/tmp/test-foo"
|
266
|
+
assert_nothing_raised { t.apply dest }
|
267
|
+
expected = "(c) #{Time.now.year} Someone"
|
268
|
+
assert_true File.file?("#{dest}/LICENSE")
|
269
|
+
assert_equal expected, File.read("#{dest}/LICENSE")
|
270
|
+
end
|
271
|
+
|
237
272
|
# UI variables
|
238
273
|
|
239
274
|
def test_apply_dir_with_var_in_path_values_from_terminal
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yop
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Baptiste Fontaine
|
@@ -30,7 +30,7 @@ cert_chain:
|
|
30
30
|
QnOQb8zHyNL+gq2m/mnZGrSehx+6AujokjOfHbmivYMfDATOQQx0eIBI18IhacZm
|
31
31
|
42WxhhIV2bwDtd77
|
32
32
|
-----END CERTIFICATE-----
|
33
|
-
date: 2015-02-
|
33
|
+
date: 2015-02-12 00:00:00.000000000 Z
|
34
34
|
dependencies:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: trollop
|
metadata.gz.sig
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
��
|
2
|
-
|
3
|
-
�
|
4
|
-
LW���]��j{-�:�|m��+*|�,���.�P��
|
1
|
+
}�P����O!S#�Tw"��Uj�d ��RkTj2�JMu_�O����ԧb�Çf4Kdk���. ѹ=D�10��%v�Q� "�K�g��=�n�e��ԍ��D%Q��%%���J'���
|
2
|
+
��2�z��P��
|
3
|
+
��Q�%���a��XԹ�k!W�tQ��"Z�^��lU�/��4�
|