justprep 1.2.2 → 1.2.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7e0bc299adb71964c6298e1a195b380dd37c4cf716c2c58cb6ffab9320f74a5d
4
- data.tar.gz: a22fcb32d3c7c5b516dade83e17670696ef0aa0619efcbb8c1361b580100b814
3
+ metadata.gz: c5215db017617c8b34a0e8db31b2d2f0e2db2d59c0600671347fdad324ebad83
4
+ data.tar.gz: b8d16fec5e8898ed0c8154cc1856c83f2b8419d93c1f56e758f95291bff48fde
5
5
  SHA512:
6
- metadata.gz: 9c2a9c4b7da6f3ad617f6799084808596c868a710dcb6a639dd742709c3aef18c414d32d654c3f74821d1d10af03c80f27414c0dd7007294b28b731d741eeb9b
7
- data.tar.gz: 70b4bc355484300078eac81ec0ce5f450373346dd5809338f03ddaae83f1823f07bb39a8dfa76c67a043960805c14ad54830b036722e855ec62f766c2611bf6a
6
+ metadata.gz: bae352f6da8c9b2b1f3a174f64f695485373225db830be20694688e02cc7368aab9e5548862c5e2e24d8ee985eef7f09b20bf674cee6ac85217418958af541e1
7
+ data.tar.gz: 50d4c6fd1f70c4e042e07d948fb0561e43e0788f73d277d54476e2cbbe9c4587fe4686b69262b7a7eb3d53494146f1a1516f0b3d9925651887d67415e568e73a
@@ -1,5 +1,7 @@
1
- VERSION = "1.2.2"
1
+ VERSION = "1.2.3"
2
2
 
3
3
  JUSTPREP_FILENAME_IN = ENV.fetch("JUSTPREP_FILENAME_IN", "main.just")
4
4
  JUSTPREP_FILENAME_OUT = ENV.fetch("JUSTPREP_FILENAME_OUT", "justfile")
5
5
  JUSTPREP_KEYWORDS = ENV.fetch("JUSTPREP_KEYWORDS", "import include require with").split
6
+
7
+ JUSTPREP_MODULE_KEYWORD = ENV.fetch("JUSTPREP_MODULE_KEYWORD", "module")
@@ -18,6 +18,11 @@ def error_file_does_not_exist(line_number, a_line)
18
18
  STDERR.print (" "*line_out.size)+"|"
19
19
 
20
20
  x = a_line.index(" ")
21
+
22
+ if a_line.starts_with?(JUSTPREP_MODULE_KEYWORD)
23
+ x = a_line.index(" ", x.nil? ? 0 : x + 1) # because Crystal thinks x could be nil
24
+ end
25
+
21
26
  begin_filename = x.nil? ? a_line.size + 2 : x + 2
22
27
  end_filename = a_line.size
23
28
  len_filename = end_filename - begin_filename + 1
@@ -29,3 +34,20 @@ def error_file_does_not_exist(line_number, a_line)
29
34
 
30
35
  return nil
31
36
  end
37
+
38
+
39
+ def error_syntax(line_number, a_line)
40
+ STDERR.puts
41
+ STDERR.puts "ERROR: Syntax Problem"
42
+
43
+ # Crystal types thinks line_number can be nil or Int32
44
+ line_out = sprintf("% d ", line_number.nil? ? 0 : line_number)
45
+ STDERR.puts (" "*line_out.size)+"|"
46
+ STDERR.puts "#{line_out}| #{a_line}"
47
+ STDERR.print (" "*line_out.size)+"| "
48
+ STDERR.puts "^"*(a_line.size)
49
+ STDERR.puts
50
+
51
+ return nil
52
+ end
53
+
@@ -0,0 +1,27 @@
1
+ # .../ruby/lib/justprep/common/generate_module_recipes.crb
2
+
3
+ # Given an Array of Strings representing the fake
4
+ # module names it returns a String to be appended
5
+ # to the generated justfile.
6
+ #
7
+ # Input:
8
+ # module_names .... Array(String) fake module names
9
+ #
10
+ # Output:
11
+ # recipes ... String
12
+ #
13
+ def generate_module_recipes(module_names)
14
+ recipes = ""
15
+
16
+ module_names.each do |mod_name|
17
+ recipes += "
18
+
19
+ # Module #{mod_name}
20
+ @#{mod_name} what='' args='':
21
+ just -f {{module_#{mod_name}}} {{what}} {{args}}
22
+
23
+ "
24
+ end
25
+
26
+ return recipes
27
+ end
@@ -0,0 +1,24 @@
1
+ # .../ruby/lib/justprep/common/def include_content_from.crb
2
+
3
+
4
+ # single-level inclusion
5
+ #
6
+ # Input:
7
+ # out_file .......... A File pointer for String output
8
+ # module_filename ... String The name of the file to be included
9
+ #
10
+ # Output:
11
+ # nil .... This is a function without specific return value
12
+ #
13
+ def include_content_from(out_file, module_filename)
14
+ out_file.puts "\n# >>> #{module_filename}"
15
+
16
+ File.read_lines(module_filename).each do |m_line|
17
+ out_file.puts m_line
18
+ end
19
+
20
+ out_file.puts "# <<< #{module_filename}\n"
21
+
22
+ return nil
23
+ end
24
+
@@ -0,0 +1,50 @@
1
+ # .../ruby/lig/justprep/common/replacement_for_module_line.crb
2
+
3
+ # Inserts the module_name into the Array of module_names
4
+ # Returns a string that defines the variable for the path to the module
5
+ #
6
+ # This method replaces a source line that looks like this:
7
+ #
8
+ # module aaa path/to/modules/justfile
9
+ #
10
+ # with a line that looks like this:
11
+ #
12
+ # module_aaa := "path/to/modules/justfile"
13
+ #
14
+ # where "aaa" is the module name.
15
+ #
16
+ # Limitations:
17
+ #
18
+ # module_name can not have a space. Only :alphanumberic: characters
19
+ # and the underscore character are valid.
20
+ #
21
+ # The "path/to/modules/justfile" must exist. Otherwise an error
22
+ # message is generated.
23
+ #
24
+ # Input:
25
+ # line_numer .... Integer the line number in the source file
26
+ # a_string ...... String the line from the source file
27
+ #
28
+ # Output:
29
+ # an Array(String) of size 2 where
30
+ # .first is the fake module_name
31
+ # .last is the replacement string that defines the module variable
32
+ #
33
+ def replacement_for_module_line(line_number, a_string)
34
+ parts = a_string.split(" ")
35
+
36
+ if parts.size < 3
37
+ error_syntax(line_number, a_string)
38
+ exit(1)
39
+ end
40
+
41
+ module_name = parts[1]
42
+ path_to_module = parts[2..].join(" ")
43
+
44
+ unless File.exists?(path_to_module)
45
+ error_file_does_not_exist(line_number, a_string)
46
+ exit(1)
47
+ end
48
+
49
+ return [module_name, "module_#{module_name} := \"#{path_to_module}\""]
50
+ end
@@ -15,4 +15,12 @@ end
15
15
 
16
16
  class String
17
17
  alias_method :starts_with?, :start_with?
18
+ alias_method :ends_with?, :end_with?
19
+ alias_method :includes?, :include?
20
+ end
21
+
22
+ class File
23
+ class << self
24
+ alias_method :read_lines, :readlines
25
+ end
18
26
  end
data/lib/justprep.rb CHANGED
@@ -13,6 +13,11 @@
13
13
  # JUSTPREP_FILENAME_IN ... main.just
14
14
  # JUSTPREP_FILENAME_OUT ... justfile
15
15
  # JUSTPREP_KEYWORDS ... 'import include require with'
16
+ # JUSTPREP_MODULE_KEYWORD . 'module'
17
+ #
18
+ # NOTE:
19
+ # JUSTPREP_KEYWORDS ** CANNOT ** include the value for
20
+ # JUSTPREP_MODULE_KEYWORD
16
21
  #
17
22
 
18
23
  IMPLEMENTATION = "Ruby"
@@ -34,37 +39,36 @@ load COMMON_DIR + "expand_file_path.crb"
34
39
  load COMMON_DIR + "handle_command_line_parameters.crb"
35
40
  load COMMON_DIR + "just_find_it.crb"
36
41
  load COMMON_DIR + "usage.crb"
42
+ load COMMON_DIR + "generate_module_recipes.crb"
43
+ load COMMON_DIR + "replacement_for_module_line.crb"
44
+ load COMMON_DIR + "include_content_from.crb"
37
45
 
38
46
  class Justprep
47
+ attr_accessor :module_names
48
+
39
49
  def initialize
40
50
  handle_command_line_parameters # may terminate the process
51
+ @module_names = []
52
+ end
53
+
54
+
55
+ # Main function called from executable
56
+ def execute
57
+ if JUSTPREP_KEYWORDS.includes?(JUSTPREP_MODULE_KEYWORD)
58
+ STDERR.puts
59
+ STDERR.puts "ERROR: Environment Variable Configuration Problem"
60
+ STDERR.puts " JUSTPREP_KEYWORDS cannot include the same value"
61
+ STDERR.puts " as the JUSTPREP_MODULE_KEYWORD"
62
+ STDERR.puts
63
+ exit(1)
41
64
  end
42
65
 
43
-
44
- # single-level inclusion
45
- def include_content_from(out_file, module_filename)
46
- module_file = File.open(module_filename, "r")
47
-
48
- out_file.puts "\n# >>> #{module_filename}"
49
-
50
- module_file.readlines.each do |m_line|
51
- out_file.write m_line
52
- end
53
-
54
- out_file.puts "# <<< #{module_filename}\n"
55
-
56
- return nil
57
- end
58
-
59
-
60
- # Main function called from executable
61
- def execute
62
66
  in_filename = just_find_it
63
67
 
64
68
  if in_filename.nil?
65
- STDERR.puts "WARNING: JUSTPREP_FILENAME_IN Not Found: #{JUSTPREP_FILENAME_IN}"
66
- exit(0)
67
- end
69
+ STDERR.puts "WARNING: JUSTPREP_FILENAME_IN Not Found: #{JUSTPREP_FILENAME_IN}"
70
+ exit(0)
71
+ end
68
72
 
69
73
  out_filename = File.dirname(in_filename) + "/" + JUSTPREP_FILENAME_OUT
70
74
 
@@ -81,7 +85,7 @@ class Justprep
81
85
  if 0 == parts.size
82
86
  out_file.puts
83
87
  next
84
- end
88
+ end
85
89
 
86
90
  # NOTE: Leading spaces are not allowed. The keywords
87
91
  # MUST be complete left-justified.
@@ -101,16 +105,22 @@ class Justprep
101
105
  module_filenames.each do |module_filename|
102
106
  if File.exist?(module_filename)
103
107
  include_content_from(out_file, module_filename)
104
- else
108
+ else
105
109
  error_file_does_not_exist(line_number, a_line)
106
- exit(1)
107
- end
110
+ exit(1)
111
+ end
108
112
  end
113
+ elsif JUSTPREP_MODULE_KEYWORD == parts.first.downcase
114
+ result_array = replacement_for_module_line(line_number, a_line)
115
+ @module_names << result_array.first
116
+ out_file.puts result_array.last
109
117
  else
110
118
  out_file.puts a_line
111
119
  end
112
120
  end # in_file.readlines ...
113
121
 
122
+ out_file.puts generate_module_recipes(@module_names)
123
+
114
124
  out_file.close
115
- end # def execute
125
+ end # def
116
126
  end # class Justprep
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: justprep
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.2
4
+ version: 1.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dewayne VanHoozer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-06-10 00:00:00.000000000 Z
11
+ date: 2022-06-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bump
@@ -53,8 +53,11 @@ files:
53
53
  - lib/justprep/common/constants.crb
54
54
  - lib/justprep/common/error_messages.crb
55
55
  - lib/justprep/common/expand_file_path.crb
56
+ - lib/justprep/common/generate_module_recipes.crb
56
57
  - lib/justprep/common/handle_command_line_parameters.crb
58
+ - lib/justprep/common/include_content_from.crb
57
59
  - lib/justprep/common/just_find_it.crb
60
+ - lib/justprep/common/replacement_for_module_line.crb
58
61
  - lib/justprep/common/usage.crb
59
62
  - lib/justprep/crystal_methods.rb
60
63
  - lib/justprep/version.rb
@@ -79,7 +82,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
79
82
  - !ruby/object:Gem::Version
80
83
  version: '0'
81
84
  requirements: []
82
- rubygems_version: 3.3.15
85
+ rubygems_version: 3.3.16
83
86
  signing_key:
84
87
  specification_version: 4
85
88
  summary: A pre-processor for the 'just' command line utility