template-ruby 0.2.3 → 0.3.0

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 (54) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rspec.yml +14 -0
  3. data/CHANGELOG.md +20 -0
  4. data/Gemfile +2 -1
  5. data/Gemfile.lock +6 -1
  6. data/LICENSE +7 -0
  7. data/README.md +98 -5
  8. data/bin/code +51 -0
  9. data/bin/template +9 -5
  10. data/code-ruby.gemspec +22 -0
  11. data/docs/euler/4.template +0 -1
  12. data/docs/fibonnaci.template +14 -0
  13. data/docs/precedence.template +6 -31
  14. data/lib/code/node/code.rb +7 -1
  15. data/lib/code/node/list.rb +7 -7
  16. data/lib/code/node/name.rb +6 -1
  17. data/lib/code/node/string.rb +11 -6
  18. data/lib/code/node/string_characters.rb +13 -0
  19. data/lib/code/node/string_component.rb +23 -0
  20. data/lib/code/node/string_interpolation.rb +13 -0
  21. data/lib/code/object/argument.rb +1 -1
  22. data/lib/code/object/decimal.rb +22 -1
  23. data/lib/code/object/dictionnary.rb +24 -0
  24. data/lib/code/object/function.rb +2 -1
  25. data/lib/code/object/integer.rb +18 -20
  26. data/lib/code/object/list.rb +4 -0
  27. data/lib/code/object/string.rb +10 -2
  28. data/lib/code/object.rb +7 -0
  29. data/lib/code/parser/and_operator.rb +4 -4
  30. data/lib/code/parser/call.rb +3 -3
  31. data/lib/code/parser/code.rb +3 -4
  32. data/lib/code/parser/defined.rb +2 -2
  33. data/lib/code/parser/dictionnary.rb +1 -1
  34. data/lib/code/parser/equality.rb +4 -4
  35. data/lib/code/parser/function.rb +3 -2
  36. data/lib/code/parser/group.rb +1 -1
  37. data/lib/code/parser/if.rb +3 -3
  38. data/lib/code/parser/list.rb +1 -1
  39. data/lib/code/parser/not_keyword.rb +2 -2
  40. data/lib/code/parser/statement.rb +1 -1
  41. data/lib/code/parser/string.rb +19 -4
  42. data/lib/code/parser/ternary.rb +3 -3
  43. data/lib/code-ruby.rb +12 -0
  44. data/lib/code.rb +10 -10
  45. data/lib/template/version.rb +3 -0
  46. data/lib/template-ruby.rb +3 -1
  47. data/lib/template.rb +21 -11
  48. data/spec/code/error/type_error_spec.rb +0 -2
  49. data/spec/code/parser/dictionnary_spec.rb +5 -32
  50. data/spec/code/parser/string_spec.rb +15 -16
  51. data/spec/code_spec.rb +13 -0
  52. data/spec/template_spec.rb +6 -0
  53. data/template-ruby.gemspec +3 -2
  54. metadata +15 -4
@@ -4,26 +4,25 @@ RSpec.describe Code::Parser::String do
4
4
  subject { described_class.new.parse(input) }
5
5
 
6
6
  [
7
- ["'hello'", { string: "hello" }],
8
- ['"hello"', { string: "hello" }],
9
- ["''", { string: "" }],
10
- ['""', { string: "" }],
11
- ["'\\''", { string: "'" }],
12
- ['"\\t"', { string: "\\t" }],
13
- ["'\\r'", { string: "\\r" }],
14
- ['"\\b\\f\\n\\r\\t"', { string: "\\b\\f\\n\\r\\t" }],
15
- ['"\\uABCG"', { string: "uABCG" }],
16
- [
17
- "'\\u0123\\u4567\\u89aA\\ubBcC\\UdDeE\\ufFfF'",
18
- { string: "\\u0123\\u4567\\u89aA\\ubBcC\\UdDeE\\ufFfF" },
19
- ],
20
- [":asc", { string: "asc" }],
21
- ].each do |(input, expected)|
7
+ "'hello'",
8
+ '"hello"',
9
+ "''",
10
+ '""',
11
+ "'\\''",
12
+ '"\\t"',
13
+ "'\\r'",
14
+ '"\\b\\f\\n\\r\\t"',
15
+ '"\\uABCG"',
16
+ "'\\u0123\\u4567\\u89aA\\ubBcC\\UdDeE\\ufFfF'",
17
+ ":asc",
18
+ "'1 + 1 = {1 + 1}'",
19
+ "'a + b = {'{'a'}{'b'}'}'"
20
+ ].each do |input|
22
21
  context input.inspect do
23
22
  let(:input) { input }
24
23
 
25
24
  it "succeeds" do
26
- expect(subject).to eq(expected)
25
+ expect { subject }.to_not raise_error
27
26
  end
28
27
  end
29
28
  end
data/spec/code_spec.rb CHANGED
@@ -95,6 +95,19 @@ RSpec.describe Code do
95
95
  ["until true end", ""],
96
96
  ["until true\nend", ""],
97
97
  %w[("Good".."Bad").first Good],
98
+ ['"Dorian " * 2', "Dorian Dorian "],
99
+ ["while false end == nothing", "true"],
100
+ ['"1 + 1 = {1 + 1}"', "1 + 1 = 2"],
101
+ ["'1 + 1 = {1 + 1}'", "1 + 1 = 2"],
102
+ ["{}.to_string + [].to_string", "{}[]"],
103
+ ["'a' + 1", "a1"],
104
+ ["'a' + 1.0", "a1.0"],
105
+ ["1 + 'a'", "1a"],
106
+ ["1.0 + 'a'", "1.0a"],
107
+ ["1 << 1", "2"],
108
+ ["1.0 << 1", "2"],
109
+ ["1 << 1.0", "2"],
110
+ ["1.0 << 1.0", "2"],
98
111
  ].each do |(input, expected)|
99
112
  context input.inspect do
100
113
  let(:input) { input }
@@ -12,7 +12,13 @@ RSpec.describe Template do
12
12
  '{ user: { first_name: "Dorian" } }',
13
13
  "Hello Dorian",
14
14
  ],
15
+ [
16
+ "{add(1, 2)",
17
+ 'add = (a, b) => { a + b } { add: context(:add) }',
18
+ "3",
19
+ ],
15
20
  ["Hello {", "", "Hello "],
21
+ ["{{a: 1}.each { |k, v| print(k) } nothing", "", "a"],
16
22
  ["", "", ""],
17
23
  ].each do |(input, input_context, expected)|
18
24
  context "#{input.inspect} #{input_context.inspect}" do
@@ -1,8 +1,8 @@
1
- require_relative "lib/template-ruby"
1
+ require_relative "lib/template/version"
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "template-ruby"
5
- s.version = ::Template::VERSION
5
+ s.version = ::Template::Version
6
6
  s.summary = "A templating programming language"
7
7
  s.description =
8
8
  'Like "Hello {name}" with {name: "Dorian"} gives "Hello Dorian"'
@@ -13,6 +13,7 @@ Gem::Specification.new do |s|
13
13
  s.require_paths = ["lib"]
14
14
  s.homepage = "https://github.com/dorianmariefr/template-ruby"
15
15
  s.license = "MIT"
16
+ s.executables = "template"
16
17
 
17
18
  s.add_dependency "activesupport", "~> 7"
18
19
  s.add_dependency "parslet", "~> 2"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: template-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dorian Marié
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-08-31 00:00:00.000000000 Z
11
+ date: 2022-10-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -82,25 +82,32 @@ dependencies:
82
82
  version: '3'
83
83
  description: 'Like "Hello {name}" with {name: "Dorian"} gives "Hello Dorian"'
84
84
  email: dorian@dorianmarie.fr
85
- executables: []
85
+ executables:
86
+ - template
86
87
  extensions: []
87
88
  extra_rdoc_files: []
88
89
  files:
89
90
  - ".editorconfig"
91
+ - ".github/workflows/rspec.yml"
90
92
  - ".gitignore"
91
93
  - ".prettierrc"
92
94
  - ".rspec"
93
95
  - CHANGELOG.md
94
96
  - Gemfile
95
97
  - Gemfile.lock
98
+ - LICENSE
96
99
  - README.md
100
+ - bin/code
97
101
  - bin/template
102
+ - code-ruby.gemspec
98
103
  - docs/euler/1.template
99
104
  - docs/euler/2.template
100
105
  - docs/euler/3.template
101
106
  - docs/euler/4.template
102
107
  - docs/euler/5.template
108
+ - docs/fibonnaci.template
103
109
  - docs/precedence.template
110
+ - lib/code-ruby.rb
104
111
  - lib/code.rb
105
112
  - lib/code/error.rb
106
113
  - lib/code/node.rb
@@ -142,6 +149,9 @@ files:
142
149
  - lib/code/node/rescue.rb
143
150
  - lib/code/node/statement.rb
144
151
  - lib/code/node/string.rb
152
+ - lib/code/node/string_characters.rb
153
+ - lib/code/node/string_component.rb
154
+ - lib/code/node/string_interpolation.rb
145
155
  - lib/code/node/ternary.rb
146
156
  - lib/code/node/unary_minus.rb
147
157
  - lib/code/node/while.rb
@@ -201,6 +211,7 @@ files:
201
211
  - lib/template/node/text_part.rb
202
212
  - lib/template/parser.rb
203
213
  - lib/template/parser/template.rb
214
+ - lib/template/version.rb
204
215
  - spec/call_spec.rb
205
216
  - spec/code/error/type_error_spec.rb
206
217
  - spec/code/parser/boolean_spec.rb
@@ -237,7 +248,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
237
248
  - !ruby/object:Gem::Version
238
249
  version: '0'
239
250
  requirements: []
240
- rubygems_version: 3.3.18
251
+ rubygems_version: 3.3.7
241
252
  signing_key:
242
253
  specification_version: 4
243
254
  summary: A templating programming language