thot 1.0.0 → 1.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7a6bb1b17f33806eecd83ba7697b0e66a311772fdf0b368cfc307bddf6c74ee3
4
- data.tar.gz: 12cba548403a8cf9ab2edee54a7a8f4567bd612367b798a3138468c185462b59
3
+ metadata.gz: 66b39148b6f0d21ab8174c953757815943eda80b28000caba1dbdd7821d12ef2
4
+ data.tar.gz: 5a904474b751660d49e77f1c835490b3c945dda97dc49f9d16c427db9664ecdf
5
5
  SHA512:
6
- metadata.gz: 73592234300f96931e105eab69a0dfa71b6817e23e12736485c1529b8105af86fe8765a585b80b2ca950a206661e78f8d625433de8c98b9d054b97cb94ac43e4
7
- data.tar.gz: 22236a2db50ad40e55761e24068788a8b17f6356bff00050b6b40263f708c3015979a35e6e4e9c3c4b54341f9a7d4df2088c2b8836dc04822c3051dbc7e5cd39
6
+ metadata.gz: 42cb44934894d02699bcd17c3ba22c7d32b2b1effe5d4e19acdc1e6c9662c4fb623103742de2f54d375cbfbcac47086d17ffb4ca2b2771ea34cc13159be020f4
7
+ data.tar.gz: 77c8256484294a9e089a2b7320bdf02382600ffd62e26b4e8967843d91710ad3a23dca2d4cce7b127e49b2126ce0150544604455aaaea727cc975a3d85dc52dd
data/README.md CHANGED
@@ -18,9 +18,150 @@ Or install it yourself as:
18
18
 
19
19
  $ gem install thot
20
20
 
21
+
22
+ ## Principe
23
+
24
+ Thot is a simple templating tool, with :
25
+ - a template including token, like : %%TOKEN_NAME%% => Token MUST be in uppercase
26
+ - a hash of data (symbols as keys) corresponding, like : <pre>{token_name: 'value'}</pre>
27
+ It could generate an output.
28
+
29
+ ### Usecase
30
+
31
+ - with data : <pre>{name: 'Romain'}</pre>
32
+ - and template content : "Hello %%NAME%% !"
33
+
34
+ Thot simply generate :
35
+ 'Hello Romain !'
36
+
37
+ ### Advanced usecase
38
+
39
+ - with data : <pre>{firstname: 'romain', name: 'georges', nickname: 'zaidyur'}</pre>
40
+ - and template content : "Hello %%FIRSTNAME.capitalize%% %%NAME.upcase%% your nickname is : %%NICKNAME.reverse.capitalize%% !"
41
+
42
+ Thot generate :
43
+ "Hello Romain GEORGES your nickname is : Ruydiaz !"
44
+
45
+
46
+ Thot actually supports String to String piped filters :
47
+ - filters must be stacked seperated by '.'
48
+ - filters must be in lowercase
49
+ - filters must be String instance methods returning a String (Modifier)
50
+
51
+ Note : Your could monkey patch String or use Refinment for implementing our own filters.
52
+
53
+
21
54
  ## Usage
22
55
 
23
- TODO: Write usage instructions here
56
+ Thot is already a library for you usage and a CLI.
57
+
58
+ ### Ruby Library usage
59
+
60
+ you could use Thot in your Ruby code :
61
+
62
+ #### Strict mode and accessor input
63
+
64
+ Note : Considering 'template.txt' with : 'Hello %%NAME !!'
65
+ Note : in strict mode if the Tokens in template file don't match exactly the given token list, Thot raise an exception.
66
+
67
+ ```ruby
68
+ require 'thot'
69
+ include Thot
70
+ template = Template::new list_token: [:name] , template_file: './template.txt'
71
+ template.name = 'Romain'
72
+ puts template.output
73
+ ````
74
+
75
+ return
76
+
77
+ Hello Romain !!
78
+
79
+
80
+ #### Strict mode false with accesor input and template_content
81
+
82
+ ```ruby
83
+ require 'thot'
84
+ include Thot
85
+ template = Template::new list_token: [:name, :surname] , template_content: 'Hello %%NAME !!'
86
+ template.name = 'Romain'
87
+ puts template.output
88
+ ````
89
+
90
+ return
91
+
92
+ Hello Romain !!
93
+
94
+ #### Strict mode false with map input and template_content
95
+
96
+ ```ruby
97
+ require 'thot'
98
+ include Thot
99
+ template = Template::new list_token: [:name, :surname] , template_content: 'Hello %%NAME !!'
100
+ template.map {name: 'Romain', surname: 'Georges' }
101
+ puts template.output
102
+ ````
103
+
104
+ return
105
+
106
+ Hello Romain !!
107
+
108
+
109
+
110
+ ### CLI usage
111
+
112
+ Thot come with a CLI for templating :
113
+ - reading from STDIN or list files arguments
114
+ - getting values from variables file by argument [MANDATORY] --env-var-file FILENAME
115
+ - display output on STDOUT
116
+ - verbose mode on STDERR if -v options.
117
+
118
+ Note : CLI work only strict mode false, you could have unused keys in datas.
119
+
120
+ #### Pre-requisites
121
+
122
+ * a file 'template.txt' with : "Hello %%NAME%% !!"
123
+ * a variables file with lines, like :
124
+ ```
125
+ key=value
126
+ key = value
127
+ key = value
128
+ # comments and other lines are ignored
129
+ ```
130
+
131
+ sample, env.test:
132
+
133
+ ```
134
+ name=Romain
135
+ ```
136
+
137
+ In the same path
138
+
139
+ #### STDIN from echo
140
+
141
+ ```
142
+ $ echo "Hello %%NAME%% !!" |thot -e env.test
143
+ ```
144
+
145
+ #### STDIN from input
146
+
147
+ ```
148
+ $ thot -e env.test < template.txt
149
+ ```
150
+
151
+ #### Files list
152
+
153
+ ```
154
+ $ thot -e env.test template1.txt template2.txt
155
+ ```
156
+
157
+ #### Typical usage
158
+
159
+ ```
160
+ $ thot -e env.test < template.txt > output.txt
161
+ ```
162
+
163
+ ###
164
+
24
165
 
25
166
  ## Development
26
167
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.0
1
+ 1.0.1
data/exe/thot ADDED
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env ruby
2
+
3
+
4
+ require 'optparse'
5
+ require 'thot'
6
+ require 'thot/cli'
7
+
8
+ options = {}
9
+ OptionParser.new do |opts|
10
+ opts.banner = "Usage: example.rb [options]"
11
+ opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
12
+ options[:verbose] = v
13
+ end
14
+ opts.on("-eFILENAME", "--env-var-file=FILENAME", "[MANDATORY] Environment variables file (key=value pairs by line)") do |file|
15
+ options[:env_var_file] = file
16
+ end
17
+ end.parse!
18
+
19
+ list_input = ARGV.dup
20
+ ARGV.clear
21
+
22
+
23
+ include Thot
24
+
25
+ cli = CLI::new options: options, list_templates_file: list_input
26
+ cli.generate
27
+
28
+
29
+
30
+
31
+
32
+
33
+
data/lib/thot/cli.rb ADDED
@@ -0,0 +1,62 @@
1
+ module Thot
2
+ class CLI
3
+
4
+ def initialize(options: , list_templates_file: nil )
5
+ @list_templates_file = list_templates_file
6
+ @options = options
7
+ getting_data
8
+ getting_content
9
+ end
10
+
11
+
12
+ def generate
13
+ template = Template::new(list_token: @data.keys, template_content: @content, strict: false)
14
+ template.map @data
15
+ STDERR.puts "Generating output" if @options[:verbose]
16
+ puts template.output
17
+ end
18
+
19
+ private
20
+
21
+ def getting_data
22
+ if @options[:env_var_file] then
23
+ STDERR.puts "Environment file given : #{@options[:env_var_file]}" if @options[:verbose]
24
+ @data = read_evt_file(@options[:env_var_file])
25
+ else
26
+ raise "Environment variables file argument missing, (--env-var-file) "
27
+ end
28
+ end
29
+
30
+ def getting_content
31
+ if @list_templates_file.empty?
32
+ STDERR.puts "Reading content from STDIN" if @options[:verbose]
33
+ @content = ARGF.readlines.join
34
+ else
35
+ STDERR.puts "Reading content from file(s) : #{@list_templates_file}" if @options[:verbose]
36
+ @list_templates_file.each do |item|
37
+ if File::exist? item
38
+ @content.concat(File::readlines(item)).join
39
+ else
40
+ raise "file not found #{item}"
41
+ end
42
+ end
43
+ end
44
+ end
45
+
46
+ def read_evt_file(file)
47
+ res = {}
48
+ if File::exist? file
49
+ content = File::readlines(file)
50
+ else
51
+ raise "Environment variables file not found #{file}"
52
+ end
53
+ content.each do |line|
54
+ next if line =~ /#/
55
+ key,value = line.split('=')
56
+ res[key.strip.to_sym] = value.strip if value
57
+ end
58
+ return res
59
+ end
60
+
61
+ end
62
+ end
data/lib/thot.rb CHANGED
@@ -17,16 +17,24 @@ module Thot
17
17
  attr_reader :content
18
18
 
19
19
  # constructor : generate the pseudo accessor for template Class from token list
20
- def initialize(template_file: , list_token: , strict: true)
20
+ def initialize(template_file: nil, list_token: , strict: true, template_content: nil)
21
21
 
22
22
  @result = ""
23
- @template_file = template_file
24
- raise NoTemplateFile::new('No template file found') unless File::exist?(@template_file)
25
- begin
26
- @content = IO::readlines(@template_file).join.chomp
27
- rescue
28
- raise NoTemplateFile::new('No template file found')
23
+ if template_file
24
+ @template_file = template_file
25
+ raise NoTemplateFile::new('No template file found') unless File::exist?(@template_file)
26
+ begin
27
+ @content = IO::readlines(@template_file).join.chomp
28
+ rescue
29
+ raise NoTemplateFile::new('Template file read error')
30
+ end
31
+ elsif template_content
32
+ @content = template_content
33
+ else
34
+ raise NoTemplateFile::new('No template file found or template content')
29
35
  end
36
+
37
+
30
38
  token_from_template = @content.scan(/%%(\w+)%%/).flatten.uniq.map{ |item| item.downcase.to_sym}
31
39
  begin
32
40
  @list_token = list_token
data/samples/.env.prod ADDED
@@ -0,0 +1,3 @@
1
+ # test
2
+ name=romain
3
+ surname = georges
@@ -0,0 +1 @@
1
+ Hello %%NAME.capitalize%% %%SURNAME.upcase%% !!
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: thot
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Romain GEORGES
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-10-16 00:00:00.000000000 Z
11
+ date: 2022-10-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -125,7 +125,8 @@ dependencies:
125
125
  description: the simpliest way to template in Ruby and command
126
126
  email:
127
127
  - gems@ultragreen.net
128
- executables: []
128
+ executables:
129
+ - thot
129
130
  extensions: []
130
131
  extra_rdoc_files: []
131
132
  files:
@@ -139,8 +140,12 @@ files:
139
140
  - VERSION
140
141
  - bin/console
141
142
  - bin/setup
143
+ - exe/thot
142
144
  - lib/thot.rb
145
+ - lib/thot/cli.rb
143
146
  - lib/thot/version.rb
147
+ - samples/.env.prod
148
+ - samples/template.txt
144
149
  - thot.gemspec
145
150
  - ultragreen_roodi_coding_convention.yml
146
151
  homepage: https://github.com/Ultragreen/thot
@@ -148,7 +153,7 @@ licenses:
148
153
  - MIT
149
154
  metadata:
150
155
  homepage_uri: https://github.com/Ultragreen/thot
151
- post_install_message:
156
+ post_install_message:
152
157
  rdoc_options: []
153
158
  require_paths:
154
159
  - lib
@@ -163,8 +168,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
163
168
  - !ruby/object:Gem::Version
164
169
  version: '0'
165
170
  requirements: []
166
- rubygems_version: 3.2.3
167
- signing_key:
171
+ rubygems_version: 3.1.2
172
+ signing_key:
168
173
  specification_version: 4
169
174
  summary: THe Operative Templating
170
175
  test_files: []