web_randomizer 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/web_randomizer.rb +253 -153
- data/spec/web_randomizer_spec.rb +58 -21
- data/web_randomizer.gemspec +2 -2
- 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: 51754e676ba7c463a714258160488a9d50b63e1aee19c1c388efdc9ef7950219
|
4
|
+
data.tar.gz: 8a9dbc5026a58356c7e2fe3338bd72548acf7b82259a6bab8d114eb0e6cb57b6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 936fc0f6d1c5fda79425d5e856ce895c94fd6d5feb38263777ded73b176f8caf4a464bba61966c92e8fb985d0d22cb7a0125a73668f78ebca1abebfeaac9c262
|
7
|
+
data.tar.gz: cdb0ad0a7d310fad09dae425ed5c039252392c2a0bb57d1886863a135ac6859a12a57a110ebb308eac159674af6dcfffe13398d286a6a0ef6d51785eab7b1ed8
|
data/lib/web_randomizer.rb
CHANGED
@@ -1,153 +1,253 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'yaml'
|
4
|
-
|
5
|
-
module WebRandomizer
|
6
|
-
class << self
|
7
|
-
def execute
|
8
|
-
initialize!
|
9
|
-
|
10
|
-
randomize_div!
|
11
|
-
|
12
|
-
@сss_files_array.each do |el|
|
13
|
-
puts "\n\nUpdating #{el[:filename]}\n"
|
14
|
-
|
15
|
-
File.open(el[:filename], 'w') do |file|
|
16
|
-
file.write(color_shift(el[:contents]))
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def initialize!
|
24
|
-
if File.file?('randomize.yml')
|
25
|
-
config = YAML.load_file('randomize.yml')
|
26
|
-
|
27
|
-
@html_dir_list = config['html_dir']
|
28
|
-
@css_dir_list = config['css_dir']
|
29
|
-
|
30
|
-
else
|
31
|
-
@html_dir_list = %w[_layouts _includes]
|
32
|
-
@css_dir_list = %w[assets/css _sass]
|
33
|
-
end
|
34
|
-
|
35
|
-
@сss_files_array = []
|
36
|
-
|
37
|
-
@css_dir_list.each do |dir_item|
|
38
|
-
Dir.foreach(dir_item) do |css_filename|
|
39
|
-
next if
|
40
|
-
|
41
|
-
@сss_files_array << ({ filename: "#{dir_item}/#{css_filename}",
|
42
|
-
contents: File.open("#{dir_item}/#{css_filename}").read })
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
def randomize_div!
|
48
|
-
@html_dir_list.each do |dir_item|
|
49
|
-
Dir.foreach(dir_item) do |filename|
|
50
|
-
next if
|
51
|
-
|
52
|
-
puts "Processing #{dir_item}/#{filename}"
|
53
|
-
|
54
|
-
output = File.open("#{dir_item}/#{filename}"
|
55
|
-
|
56
|
-
# puts 'DEBUG output:' + output.inspect + "\n\n"
|
57
|
-
|
58
|
-
output.gsub!(/<div>/, "<div class=\"#{rand_string}\">")
|
59
|
-
|
60
|
-
output.scan(/<div.*?class
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
end
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'yaml'
|
4
|
+
|
5
|
+
module WebRandomizer
|
6
|
+
class << self
|
7
|
+
def execute
|
8
|
+
initialize!
|
9
|
+
|
10
|
+
randomize_div!
|
11
|
+
|
12
|
+
@сss_files_array.each do |el|
|
13
|
+
puts "\n\nUpdating #{el[:filename]}\n"
|
14
|
+
|
15
|
+
File.open(el[:filename], 'w') do |file|
|
16
|
+
file.write(color_shift(el[:contents]))
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def initialize!
|
24
|
+
if File.file?('randomize.yml')
|
25
|
+
config = YAML.load_file('randomize.yml')
|
26
|
+
|
27
|
+
@html_dir_list = config['html_dir']
|
28
|
+
@css_dir_list = config['css_dir']
|
29
|
+
|
30
|
+
else
|
31
|
+
@html_dir_list = %w[_layouts _includes]
|
32
|
+
@css_dir_list = %w[assets/css _sass]
|
33
|
+
end
|
34
|
+
|
35
|
+
@сss_files_array = []
|
36
|
+
|
37
|
+
@css_dir_list.each do |dir_item|
|
38
|
+
Dir.foreach(dir_item) do |css_filename|
|
39
|
+
next if ['.', '..'].include?(css_filename)
|
40
|
+
|
41
|
+
@сss_files_array << ({ filename: "#{dir_item}/#{css_filename}",
|
42
|
+
contents: File.open("#{dir_item}/#{css_filename}").read })
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def randomize_div!
|
48
|
+
@html_dir_list.each do |dir_item|
|
49
|
+
Dir.foreach(dir_item) do |filename|
|
50
|
+
next if ['.', '..'].include?(filename)
|
51
|
+
|
52
|
+
puts "Processing #{dir_item}/#{filename}"
|
53
|
+
|
54
|
+
output = File.open("#{dir_item}/#{filename}", &:read)
|
55
|
+
|
56
|
+
# puts 'DEBUG output:' + output.inspect + "\n\n"
|
57
|
+
|
58
|
+
output.gsub!(/<div>/, "<div class=\"#{rand_string}\">")
|
59
|
+
|
60
|
+
output.scan(/<div.*?class.*?=(.*?)>/).uniq.each do |div|
|
61
|
+
# puts "\n\nDEBUG output.scan:" + output.scan(/<div.*?class.*?=(.*?)>/).inspect + "\n\n"
|
62
|
+
|
63
|
+
# raise
|
64
|
+
|
65
|
+
# puts 'DEBUG div.first: ' + div.first
|
66
|
+
# puts 'DEBUG div.first.slice(/\"(.*)\"/, 1): ' + div.first.tr('"', '').inspect
|
67
|
+
|
68
|
+
# if compound?(div.first)
|
69
|
+
# puts "\n\nSkipping compound div: " + div.first
|
70
|
+
# next
|
71
|
+
# end
|
72
|
+
|
73
|
+
div.first.tr('"', '').strip.split(/\s+/).each do |el|
|
74
|
+
# if found_in_compound(div.first)
|
75
|
+
# puts "\n\nFound in compound class. Skipping: " + div.first + "\n\n"
|
76
|
+
# next
|
77
|
+
# end
|
78
|
+
|
79
|
+
if found_in_non_div(el)
|
80
|
+
puts "\n\nFound in non-div tags. Skipping: " + el + "\n\n"
|
81
|
+
|
82
|
+
# raise
|
83
|
+
|
84
|
+
next
|
85
|
+
end
|
86
|
+
|
87
|
+
new_value = rand_string.strip
|
88
|
+
|
89
|
+
html_files_update(el, new_value)
|
90
|
+
|
91
|
+
css_array_update!(el, new_value)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def html_files_update(old_value, new_value)
|
99
|
+
@html_dir_list.each do |inner_dir_item|
|
100
|
+
Dir.foreach(inner_dir_item) do |inner_filename|
|
101
|
+
next if ['.', '..'].include?(inner_filename)
|
102
|
+
|
103
|
+
puts "\n\nHTML Processing inner file: #{inner_dir_item}/" + inner_filename + "\n\n"
|
104
|
+
|
105
|
+
contents = nil
|
106
|
+
|
107
|
+
File.open("#{inner_dir_item}/#{inner_filename}", 'r') { |f| contents = f.read }
|
108
|
+
|
109
|
+
puts 'DEBUG old_value:' + old_value
|
110
|
+
puts 'DEBUG new_value:' + new_value
|
111
|
+
|
112
|
+
# raise
|
113
|
+
|
114
|
+
File.open("#{inner_dir_item}/#{inner_filename}", 'w+') do |fw|
|
115
|
+
# TODO: must find old_value with div tag
|
116
|
+
|
117
|
+
puts "\n\nDEBUG new contents.scan:" + contents.scan(/<div.*?[^-]\b#{old_value}\b[^-].*?>/).inspect + "\n\n"
|
118
|
+
|
119
|
+
scan_result = contents.scan(/<div.*?[^-]\b#{old_value}\b[^-].*?>/).each do |el|
|
120
|
+
replaced_el = el.gsub(/\b#{old_value}\b/, new_value)
|
121
|
+
|
122
|
+
puts "\n\nDEBUG replaced_el:" + replaced_el.inspect + "\n\n"
|
123
|
+
|
124
|
+
contents.gsub!(el, replaced_el)
|
125
|
+
|
126
|
+
puts "\n\nDEBUG contents:" + contents.inspect + "\n\n"
|
127
|
+
end
|
128
|
+
|
129
|
+
# puts "\n\nDEBUG wrong contents.scan:" + contents.scan(/<.?*\b#{old_value}\b.?*>/).inspect + "\n\n"
|
130
|
+
# raise
|
131
|
+
|
132
|
+
fw.write(contents)
|
133
|
+
|
134
|
+
# puts "\n\nDEBUG contents.gsub OLD:\n\n" + contents.gsub(old_value, new_value).inspect
|
135
|
+
# puts "\n\nDEBUG contents.gsub NEW:\n\n" + contents.gsub(/[\"\s]?#{old_value}[\"\s]?/, new_value).inspect
|
136
|
+
# puts "\n\nDEBUG contents.scan :\n\n" + contents.scan(/[\"\s]?#{old_value}[\"\s]?/).inspect
|
137
|
+
# puts "\n\nDEBUG contents.scan :\n\n" + contents.scan(/\b#{old_value}\b/).inspect
|
138
|
+
# puts "\n\nDEBUG contents.scan :\n\n" + contents.scan(old_value).inspect
|
139
|
+
end
|
140
|
+
|
141
|
+
# puts 'DEBUG contents:' + contents
|
142
|
+
# puts 'DEBUG contents.gsub(el, new_value):' + contents.gsub(el, new_value)
|
143
|
+
# raise ">>>>>>>>>>> DEBUG "
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
def found_in_non_div(el)
|
149
|
+
@html_dir_list.each do |dir_item|
|
150
|
+
Dir.foreach(dir_item) do |filename|
|
151
|
+
next if ['.', '..'].include?(filename)
|
152
|
+
|
153
|
+
# puts "Processing #{dir_item}/#{filename}"
|
154
|
+
|
155
|
+
output = File.open("#{dir_item}/#{filename}", &:read)
|
156
|
+
|
157
|
+
# puts 'DEBUG output:' + output.inspect + "\n\n"
|
158
|
+
|
159
|
+
# puts 'DEBUG output scan: ' + output.scan(/<(?!div).*?class.*?=.*?#{el}.*?>/).inspect
|
160
|
+
# puts 'DEBUG output scan: ' + output.scan(/<(?!div).*?class.*?=.*?#{el}.*?>/).empty?.inspect
|
161
|
+
|
162
|
+
# return true unless output.scan(/<(?!div).*?class.*?=.*?[^-]\b#{el}\b[^-].*?>/).empty?
|
163
|
+
unless output.scan(/<(?!div).*?class.*?=.*?[^-]\b#{el}\b[^-].*?>/).empty?
|
164
|
+
|
165
|
+
puts 'DEBUG el:' + el
|
166
|
+
puts "\n\nDEBUG output scan: " + output.scan(/<(?!div).*?class.*?=.*?[^-]\b#{el}\b[^-].*?>/).inspect + "\n\n"
|
167
|
+
|
168
|
+
return true
|
169
|
+
|
170
|
+
# raise
|
171
|
+
|
172
|
+
end
|
173
|
+
# puts 'DEBUG el:' + el
|
174
|
+
# puts "\n\nDEBUG output scan: " + output.scan(/<(?!div).*?class.*?=.*?[^-]\b#{el}\b[^-].*?>/).inspect+"\n\n"
|
175
|
+
|
176
|
+
# raise
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
false
|
181
|
+
end
|
182
|
+
|
183
|
+
def css_array_update!(old_value, new_value)
|
184
|
+
puts "\n\nCSS Processing div class from #{old_value} to #{new_value}\n\n"
|
185
|
+
|
186
|
+
@сss_files_array.each do |el|
|
187
|
+
puts "CSS Processing file: #{el[:filename]}\n"
|
188
|
+
|
189
|
+
el[:contents].gsub!(/\.\b#{old_value}\b/, '.' + new_value) # .inspect
|
190
|
+
|
191
|
+
puts 'DEBUG old_value:' + old_value
|
192
|
+
puts 'DEBUG new_value:' + new_value
|
193
|
+
puts "DEBUG OLD el[:contents].gsub: \n\n" + el[:contents].gsub(/.\b#{old_value}\b/, '.' + new_value) + "\n\n"
|
194
|
+
puts "DEBUG NEW el[:contents].gsub: \n\n" + el[:contents].gsub(/\.\b#{old_value}\b[^-]/, '.' + new_value) + "\n\n"
|
195
|
+
|
196
|
+
# raise
|
197
|
+
|
198
|
+
# el[:contents].gsub!(/\.\b#{old_value}\b[^-]/, '.' + new_value+' ') # .inspect
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
def rand_string
|
203
|
+
o = [('a'..'z'), ('A'..'Z')].map(&:to_a).flatten
|
204
|
+
(0...16).map { o[rand(o.length)] }.join
|
205
|
+
end
|
206
|
+
|
207
|
+
def color_shift(contents)
|
208
|
+
contents.gsub!(/#[0-9a-fA-F]+/) do |pattern|
|
209
|
+
# puts "Color processing old_value: #{pattern}\n"
|
210
|
+
|
211
|
+
delta = pattern[1..2].downcase == 'ff' ? -1 : 1
|
212
|
+
|
213
|
+
pattern[1..2] = to_hex(pattern[1..2].hex + delta)
|
214
|
+
|
215
|
+
# puts "Color processing new value: #{pattern}\n"
|
216
|
+
|
217
|
+
pattern
|
218
|
+
end
|
219
|
+
contents
|
220
|
+
end
|
221
|
+
|
222
|
+
def to_hex(int)
|
223
|
+
int < 16 ? '0' + int.to_s(16) : int.to_s(16)
|
224
|
+
end
|
225
|
+
|
226
|
+
# def compound?(value)
|
227
|
+
# value.tr('"', '').strip.split(/\s+/).count>1
|
228
|
+
# end
|
229
|
+
#
|
230
|
+
# def found_in_compound(el)
|
231
|
+
# @html_dir_list.each do |dir_item|
|
232
|
+
# Dir.foreach(dir_item) do |filename|
|
233
|
+
# next if ['.', '..'].include?(filename)
|
234
|
+
#
|
235
|
+
# puts "Processing #{dir_item}/#{filename}"
|
236
|
+
#
|
237
|
+
# output = File.open("#{dir_item}/#{filename}", &:read)
|
238
|
+
#
|
239
|
+
# # puts 'DEBUG output:' + output.inspect + "\n\n"
|
240
|
+
#
|
241
|
+
# # puts 'DEBUG output scan: ' + output.scan(/<(?!div).*?class.*?=.*?#{el}.*?>/).inspect
|
242
|
+
# # puts 'DEBUG output scan: ' + output.scan(/<(?!div).*?class.*?=.*?#{el}.*?>/).empty?.inspect
|
243
|
+
#
|
244
|
+
# return true unless output.scan(/<(?!div).*?class.*?=.*?#{el}.*?>/).empty?
|
245
|
+
#
|
246
|
+
# # raise
|
247
|
+
# end
|
248
|
+
# end
|
249
|
+
#
|
250
|
+
# false
|
251
|
+
# end
|
252
|
+
end
|
253
|
+
end
|
data/spec/web_randomizer_spec.rb
CHANGED
@@ -21,31 +21,54 @@ RSpec.describe 'WebRandomizer' do
|
|
21
21
|
context 'with valid tags' do
|
22
22
|
before do
|
23
23
|
html1_str =
|
24
|
-
|
24
|
+
<<~'_LAYOUTS'
|
25
|
+
|
26
|
+
<div class="mh-footer-widget">
|
27
|
+
|
25
28
|
<div class="div1">
|
29
|
+
|
30
|
+
<footer class="footer-widget-title">
|
31
|
+
|
32
|
+
<div class="footer-widget">
|
33
|
+
<div class="dsada footer-widget">
|
34
|
+
|
35
|
+
|
36
|
+
<div class="footer-widget-1">
|
37
|
+
|
38
|
+
<div class="compound compound2">
|
39
|
+
|
40
|
+
<div class="footer_class">
|
41
|
+
|
26
42
|
<div class="div2">
|
27
|
-
<
|
28
|
-
|
43
|
+
<div id="text-4" class="after_id">
|
44
|
+
_LAYOUTS
|
29
45
|
|
30
46
|
html2_str =
|
31
|
-
|
47
|
+
<<~'_INCLUDES'
|
48
|
+
<footer class="footer-widget-title">
|
49
|
+
|
50
|
+
<div class="compound">
|
51
|
+
|
52
|
+
<footer class="footer_class">
|
32
53
|
<div class="div2">
|
33
|
-
|
34
|
-
_includes
|
54
|
+
_INCLUDES
|
35
55
|
|
36
56
|
css_str =
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
57
|
+
<<~'CSS'
|
58
|
+
.mh-footer-widget.widget_archive li
|
59
|
+
.comment-edit-link .div1 { margin-right: 15px; }
|
60
|
+
.div1 .comment-edit-link { margin-right: 15px; }
|
61
|
+
|
62
|
+
.div2
|
63
|
+
cite { color: #9B9b97; }
|
64
|
+
CSS
|
42
65
|
|
43
66
|
sass_str =
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
67
|
+
<<~'SASS'
|
68
|
+
.div2
|
69
|
+
.div3
|
70
|
+
a:hover { color: #ff805E; }
|
71
|
+
SASS
|
49
72
|
|
50
73
|
File.open('_layouts/test.html', 'w') { |file| file.write(html1_str) }
|
51
74
|
File.open('_includes/test.html', 'w') { |file| file.write(html2_str) }
|
@@ -55,13 +78,18 @@ RSpec.describe 'WebRandomizer' do
|
|
55
78
|
WebRandomizer.execute
|
56
79
|
|
57
80
|
puts "\n\nSPEC OUTPUT:\n\n"
|
58
|
-
puts "\n_layouts:\n" + File.open('_layouts/test.html', 'r', &:read)
|
59
|
-
puts "\n_includes:\n" + File.open('_includes/test.html', 'r', &:read)
|
60
|
-
puts "\nassets: \n" + File.open('assets/css/test.css', 'r', &:read)
|
61
|
-
puts "\n_sass:\n" + File.open('_sass/test.sass', 'r', &:read)
|
81
|
+
puts "\n_layouts:\n\n#{html1_str}\n" + File.open('_layouts/test.html', 'r', &:read)
|
82
|
+
puts "\n_includes:\n\n#{html2_str}\n" + File.open('_includes/test.html', 'r', &:read)
|
83
|
+
puts "\nassets: \n\n#{css_str}\n" + File.open('assets/css/test.css', 'r', &:read)
|
84
|
+
puts "\n_sass:\n\n#{sass_str}\n" + File.open('_sass/test.sass', 'r', &:read)
|
62
85
|
end
|
63
86
|
|
64
|
-
it '
|
87
|
+
it 'shouldn`t match tags with equal substrings' do
|
88
|
+
scan_result = File.open('_layouts/test.html', 'r', &:read).scan(/.*?[^-][\b]footer-widget[\b][^-].*?/)
|
89
|
+
expect(scan_result.empty?).to be true
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'should change div tags' do
|
65
93
|
scan_result = File.open('_layouts/test.html', 'r', &:read).scan(/.*?(?=div1|div2).*?/)
|
66
94
|
expect(scan_result.empty?).to be true
|
67
95
|
end
|
@@ -83,5 +111,14 @@ RSpec.describe 'WebRandomizer' do
|
|
83
111
|
change_result = File.open('assets/css/test.css', 'r', &:read).scan(/.*?#9B9b97.*?/)
|
84
112
|
expect(change_result.empty?).to be true
|
85
113
|
end
|
114
|
+
|
115
|
+
=begin
|
116
|
+
it 'should keep compound classes' do
|
117
|
+
scan_result = File.open('_layouts/test.html', 'r', &:read).scan(/.*?compound.*?/)
|
118
|
+
expect(scan_result.empty?).to be false
|
119
|
+
scan_result = File.open('_includes/test.html', 'r', &:read).scan(/.*?compound2.*?/)
|
120
|
+
expect(scan_result.empty?).to be false
|
121
|
+
end
|
122
|
+
=end
|
86
123
|
end
|
87
124
|
end
|
data/web_randomizer.gemspec
CHANGED
@@ -4,8 +4,8 @@ $LOAD_PATH.push File.expand_path('lib', __dir__)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = 'web_randomizer'
|
7
|
-
s.version = '0.
|
8
|
-
s.date = '2020-10-
|
7
|
+
s.version = '0.3.0'
|
8
|
+
s.date = '2020-10-13'
|
9
9
|
s.summary = 'WebRandomizer - gem for randomizing div classes and color styles for static sites'
|
10
10
|
s.description = 'Gem for randomizing div classes and color styles for static sites.'
|
11
11
|
s.author = 'Timur Sobolev'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: web_randomizer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Timur Sobolev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-10-
|
11
|
+
date: 2020-10-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: yaml
|