template-ruby 0.2.3 → 0.3.0

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