thot 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
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: []