fsorg 0.2.0 → 0.2.1

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.
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