fsorg 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/fsorg.rb +24 -40
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8de7035273a930e84018355538d364b68016be1d6dc015269e00867a6cb0b72b
4
- data.tar.gz: 167a486eaa81c1315c9dab96cf5c1536277a871d40a20c3f8d5dded4d13e8e0f
3
+ metadata.gz: ddcf3941d7eb4d9fc41fff221b3b178121564c52a8bfe29aabc2b30a8e0e70d7
4
+ data.tar.gz: a7b50828bdccb1a2afc8ed7911fec2c5ef6f4ebe846d86be774438c7480c8e10
5
5
  SHA512:
6
- metadata.gz: eb062a7c0e9722ff75aee01f2703bd29b0caa54668c093bceca3e4b865940da4251c79d06b01e74456730332f586c541325033e33d1e12be5623a03fca2df9c8
7
- data.tar.gz: 5cf687f4913525c92a17ba1c094e9b27fcdf2641fdf8aecbe35655c2b75d6b8b321b251fce5c72591b16a3f15b121dcf148872e5d64cd35568b9f1660e06c0c4
6
+ metadata.gz: de9ff6a647a0640cac2cc1d7ea297834b70cc9eab702f2be37565acf340cfdaaa9d35353edd6a86979131c18686f348840d7716c597d7516613f1be5e937553f
7
+ data.tar.gz: 238a5c6b2d33689d66675ea1204b0babd74da5513471c8addd1f90263e8073680c464211d16b69bde824d11e49d7e6aa48a35cf6eb3af4f7b78653a8e4754450
data/lib/fsorg.rb CHANGED
@@ -21,7 +21,6 @@ class Fsorg
21
21
  @document = document
22
22
  @current_line = 0
23
23
  @current_depth = -1
24
- @to_write = [] # [ { :path, :content, :permissions } ]
25
24
  end
26
25
 
27
26
  def from_relative_to_root(path)
@@ -47,7 +46,6 @@ class Fsorg
47
46
  # TODO process_see
48
47
  process_for
49
48
  process_if
50
- store_writes
51
49
  turn_puts_into_runs
52
50
  ask_missing_variables
53
51
  process_root
@@ -134,7 +132,7 @@ class Fsorg
134
132
  filepath = @document_path.parent.join(line.sub /^INCLUDE /, "")
135
133
  included_raw = File.new(filepath).read.strip
136
134
  included_fsorg = Fsorg.new(@root_directory, @data, included_raw, filepath)
137
- included_fsorg.preprocess
135
+ included_fsorg.preprocess
138
136
  @data = included_fsorg.data.merge @data
139
137
  output += included_fsorg.document.lines(chomp: true)
140
138
  else
@@ -147,25 +145,7 @@ class Fsorg
147
145
 
148
146
  def store_writes
149
147
  output = []
150
- current = {}
151
- inside_write_directive = -> { !current.keys.empty? }
152
-
153
- @document.lines(chomp: true).each_with_index do |line, index|
154
- @current_line = index + 1
155
- if inside_write_directive.()
156
- if line.strip == "}"
157
- @to_write << current
158
- current = {}
159
- else
160
- current[:content] += line + "\n"
161
- end
162
- elsif /^WRITE(\s+INTO)?\s+(?<destination>.+?)(?:\s+MODE\s+(?<permissions>.+?))?\s*\{$/.match line.strip
163
- current = $~.named_captures.transform_keys(&:to_sym)
164
- current[:content] = ""
165
- else
166
- output << line
167
- end
168
- end
148
+
169
149
 
170
150
  @document = output.join "\n"
171
151
  end
@@ -292,7 +272,7 @@ class Fsorg
292
272
  end
293
273
 
294
274
  def ask_missing_variables
295
- (@document + @to_write.map { |f| f[:content] }.join(" ")).scan /\{\{(?<variable>[^}]+?)\}\}/ do |variable|
275
+ @document.scan /\{\{(?<variable>[^}]+?)\}\}/ do |variable|
296
276
  unless @data.include? variable[0].to_sym
297
277
  @data[variable[0].to_sym] = :ask
298
278
  end
@@ -338,16 +318,12 @@ class Fsorg
338
318
  @data[:HERE]
339
319
  end
340
320
 
341
- def execute_writes(dry_run, quiet)
342
- @to_write.each do |future_file|
343
- do_write future_file, dry_run, quiet
344
- end
345
- end
346
-
347
321
  def walk(dry_run, quiet, verbose)
348
322
  current_path = [@root_directory]
349
- current_path_as_pathname = -> { current_path.reduce(Pathname.new "") { |path, fragment| path.join fragment } }
350
323
  @data[:HERE] = @root_directory
324
+ file_to_write = {}
325
+ inside_write_directive = -> { !file_to_write.keys.empty? }
326
+ current_path_as_pathname = -> { current_path.reduce(Pathname.new "") { |path, fragment| path.join fragment } }
351
327
 
352
328
  if verbose
353
329
  puts "Data is #{@data.except :HERE}".light_black
@@ -361,7 +337,17 @@ class Fsorg
361
337
  line = line.gsub "{{#{key}}}", value.to_s
362
338
  end
363
339
 
364
- if /^(?<leaf>.+?)\s+\{/ =~ line.strip
340
+ if inside_write_directive.()
341
+ if line.strip == "}"
342
+ do_write file_to_write, dry_run, quiet
343
+ file_to_write = {}
344
+ else
345
+ file_to_write[:content] += line + "\n"
346
+ end
347
+ elsif /^WRITE(\s+INTO)?\s+(?<destination>.+?)(?:\s+MODE\s+(?<permissions>.+?))?\s*\{$/.match line.strip
348
+ file_to_write = $~.named_captures.transform_keys(&:to_sym)
349
+ file_to_write[:content] = ""
350
+ elsif /^(?<leaf>.+?)\s+\{/ =~ line.strip
365
351
  current_path << leaf
366
352
  @data[:HERE] = current_path_as_pathname.()
367
353
  if verbose
@@ -384,11 +370,6 @@ class Fsorg
384
370
  do_run command, current_location, environment, dry_run, quiet, verbose
385
371
  end
386
372
  end
387
-
388
- @current_depth = 0
389
- # TODO do writes alongside other operations
390
- puts ("Writing files " + "─" * 40).light_black
391
- execute_writes dry_run, quiet
392
373
  end
393
374
 
394
375
  def do_mkpath(path, dry_run, quiet)
@@ -401,14 +382,17 @@ class Fsorg
401
382
  end
402
383
 
403
384
  def do_write(future_file, dry_run, quiet)
404
- dest = from_relative_to_root future_file[:destination]
405
- do_mkpath dest.parent, dry_run, quiet
385
+ indentation = " " * @current_depth
386
+ dest = from_relative_to_root(current_location) / future_file[:destination]
387
+ unless dest.parent.relative_path_from(@root_directory).to_s == "."
388
+ do_mkpath dest.parent, dry_run, quiet
389
+ end
406
390
 
407
391
  unless quiet
408
- puts "> ".cyan.bold + dest.relative_path_from(@root_directory).to_s + (future_file[:permissions] ? " mode #{future_file[:permissions]}".yellow : "")
392
+ puts "#{indentation}> ".cyan.bold + dest.relative_path_from(@root_directory).to_s + (future_file[:permissions] ? " mode #{future_file[:permissions]}".yellow : "")
409
393
  end
410
394
  unless dry_run
411
- dest.write replace_data future_file[:content]
395
+ dest.write deindent replace_data future_file[:content]
412
396
  # Not using dest.chmod as the syntax for permissions is more than just integers,
413
397
  # and matches in fact the exact syntax of chmod's argument, per the manpage, chmod(1) (line "Each MODE is of the form…")
414
398
  `chmod #{future_file[:permissions]} #{dest}` if future_file[:permissions]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fsorg
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ewen Le Bihan