language-ruby 0.5.6 → 0.6.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 (194) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -4
  3. data/language-ruby.gemspec +3 -3
  4. data/lib/language/atom/any.rb +8 -0
  5. data/lib/language/atom/repeat.rb +15 -0
  6. data/lib/language/atom.rb +25 -42
  7. data/lib/language/output.rb +13 -11
  8. data/lib/language/parser/absent/present.rb +2 -0
  9. data/lib/language/parser/absent.rb +2 -0
  10. data/lib/language/parser/end_of_input.rb +2 -0
  11. data/lib/language/parser/interuption.rb +2 -0
  12. data/lib/language/parser/not_end_of_input.rb +2 -0
  13. data/lib/language/parser/str/not_found.rb +2 -0
  14. data/lib/language/parser/str.rb +2 -0
  15. data/lib/language/parser.rb +10 -10
  16. data/lib/language/version.rb +3 -0
  17. data/lib/language-ruby.rb +0 -5
  18. data/lib/language.rb +9 -7
  19. data/spec/spec_helper.rb +1 -6
  20. metadata +7 -221
  21. data/.cherry.js +0 -21
  22. data/.editorconfig +0 -9
  23. data/.github/workflows/rspec.yml +0 -14
  24. data/.gitignore +0 -2
  25. data/.prettierrc +0 -3
  26. data/.rspec +0 -1
  27. data/.tool-versions +0 -1
  28. data/CHANGELOG.md +0 -55
  29. data/Gemfile.lock +0 -49
  30. data/LICENSE +0 -7
  31. data/README.md +0 -103
  32. data/TODO +0 -17
  33. data/bin/code +0 -76
  34. data/bin/format +0 -3
  35. data/bin/publish +0 -19
  36. data/bin/template +0 -85
  37. data/bin/test +0 -17
  38. data/code-ruby.gemspec +0 -17
  39. data/docs/class.code +0 -9
  40. data/docs/euler/1.template +0 -10
  41. data/docs/euler/2.template +0 -16
  42. data/docs/euler/3.template +0 -16
  43. data/docs/euler/4.template +0 -10
  44. data/docs/euler/5.template +0 -13
  45. data/docs/fibonnaci.template +0 -14
  46. data/docs/meetup.code +0 -12
  47. data/docs/precedence.template +0 -36
  48. data/docs/rain.code +0 -22
  49. data/docs/slack.code +0 -17
  50. data/docs/stripe.code +0 -7
  51. data/docs/twitter.code +0 -9
  52. data/lib/code/error.rb +0 -18
  53. data/lib/code/node/base_10.rb +0 -29
  54. data/lib/code/node/base_16.rb +0 -13
  55. data/lib/code/node/base_2.rb +0 -13
  56. data/lib/code/node/base_8.rb +0 -13
  57. data/lib/code/node/boolean.rb +0 -22
  58. data/lib/code/node/call.rb +0 -47
  59. data/lib/code/node/call_argument.rb +0 -21
  60. data/lib/code/node/chained_call.rb +0 -23
  61. data/lib/code/node/code.rb +0 -20
  62. data/lib/code/node/decimal.rb +0 -26
  63. data/lib/code/node/dictionnary.rb +0 -33
  64. data/lib/code/node/equal.rb +0 -34
  65. data/lib/code/node/function.rb +0 -20
  66. data/lib/code/node/function_parameter.rb +0 -31
  67. data/lib/code/node/if.rb +0 -59
  68. data/lib/code/node/if_modifier.rb +0 -47
  69. data/lib/code/node/list.rb +0 -16
  70. data/lib/code/node/negation.rb +0 -15
  71. data/lib/code/node/not.rb +0 -15
  72. data/lib/code/node/nothing.rb +0 -12
  73. data/lib/code/node/number.rb +0 -25
  74. data/lib/code/node/operation.rb +0 -38
  75. data/lib/code/node/power.rb +0 -20
  76. data/lib/code/node/rescue.rb +0 -17
  77. data/lib/code/node/splat.rb +0 -15
  78. data/lib/code/node/statement.rb +0 -59
  79. data/lib/code/node/string.rb +0 -53
  80. data/lib/code/node/ternary.rb +0 -24
  81. data/lib/code/node/unary_minus.rb +0 -15
  82. data/lib/code/node/while.rb +0 -35
  83. data/lib/code/node.rb +0 -13
  84. data/lib/code/object/argument.rb +0 -32
  85. data/lib/code/object/boolean.rb +0 -27
  86. data/lib/code/object/decimal.rb +0 -162
  87. data/lib/code/object/dictionnary.rb +0 -96
  88. data/lib/code/object/function.rb +0 -64
  89. data/lib/code/object/global.rb +0 -42
  90. data/lib/code/object/integer.rb +0 -221
  91. data/lib/code/object/list.rb +0 -207
  92. data/lib/code/object/nothing.rb +0 -23
  93. data/lib/code/object/number.rb +0 -6
  94. data/lib/code/object/range.rb +0 -146
  95. data/lib/code/object/ruby_function.rb +0 -31
  96. data/lib/code/object/string.rb +0 -102
  97. data/lib/code/object.rb +0 -197
  98. data/lib/code/parser/addition.rb +0 -21
  99. data/lib/code/parser/and_operator.rb +0 -17
  100. data/lib/code/parser/bitwise_and.rb +0 -17
  101. data/lib/code/parser/bitwise_or.rb +0 -21
  102. data/lib/code/parser/boolean.rb +0 -17
  103. data/lib/code/parser/call.rb +0 -122
  104. data/lib/code/parser/chained_call.rb +0 -47
  105. data/lib/code/parser/class.rb +0 -45
  106. data/lib/code/parser/code.rb +0 -25
  107. data/lib/code/parser/dictionnary.rb +0 -67
  108. data/lib/code/parser/equal.rb +0 -94
  109. data/lib/code/parser/equality.rb +0 -35
  110. data/lib/code/parser/equality_lower.rb +0 -9
  111. data/lib/code/parser/function.rb +0 -85
  112. data/lib/code/parser/greater.rb +0 -25
  113. data/lib/code/parser/group.rb +0 -22
  114. data/lib/code/parser/if.rb +0 -63
  115. data/lib/code/parser/if_modifier.rb +0 -55
  116. data/lib/code/parser/list.rb +0 -42
  117. data/lib/code/parser/multiplication.rb +0 -25
  118. data/lib/code/parser/name.rb +0 -107
  119. data/lib/code/parser/negation.rb +0 -30
  120. data/lib/code/parser/not_keyword.rb +0 -23
  121. data/lib/code/parser/nothing.rb +0 -22
  122. data/lib/code/parser/number.rb +0 -154
  123. data/lib/code/parser/operation.rb +0 -35
  124. data/lib/code/parser/or_keyword.rb +0 -21
  125. data/lib/code/parser/or_operator.rb +0 -17
  126. data/lib/code/parser/power.rb +0 -43
  127. data/lib/code/parser/range.rb +0 -17
  128. data/lib/code/parser/rescue.rb +0 -39
  129. data/lib/code/parser/shift.rb +0 -21
  130. data/lib/code/parser/splat.rb +0 -31
  131. data/lib/code/parser/statement.rb +0 -9
  132. data/lib/code/parser/string.rb +0 -78
  133. data/lib/code/parser/ternary.rb +0 -46
  134. data/lib/code/parser/unary_minus.rb +0 -31
  135. data/lib/code/parser/while.rb +0 -36
  136. data/lib/code/parser/whitespace.rb +0 -49
  137. data/lib/code/parser.rb +0 -19
  138. data/lib/code/ruby.rb +0 -174
  139. data/lib/code-ruby.rb +0 -10
  140. data/lib/code.rb +0 -47
  141. data/lib/template/node/code_part.rb +0 -13
  142. data/lib/template/node/part.rb +0 -19
  143. data/lib/template/node/template.rb +0 -15
  144. data/lib/template/node/text_part.rb +0 -13
  145. data/lib/template/node.rb +0 -4
  146. data/lib/template/parser/template.rb +0 -39
  147. data/lib/template/parser.rb +0 -19
  148. data/lib/template/version.rb +0 -3
  149. data/lib/template-ruby.rb +0 -10
  150. data/lib/template.rb +0 -50
  151. data/spec/code/addition_spec.rb +0 -13
  152. data/spec/code/and_operator_spec.rb +0 -13
  153. data/spec/code/bitwise_and_spec.rb +0 -13
  154. data/spec/code/bitwise_or_spec.rb +0 -13
  155. data/spec/code/boolean_spec.rb +0 -13
  156. data/spec/code/call_spec.rb +0 -21
  157. data/spec/code/chained_call_spec.rb +0 -16
  158. data/spec/code/code_spec.rb +0 -29
  159. data/spec/code/dictionnary_spec.rb +0 -17
  160. data/spec/code/equal_spec.rb +0 -26
  161. data/spec/code/equality_spec.rb +0 -13
  162. data/spec/code/function_spec.rb +0 -18
  163. data/spec/code/greater_spec.rb +0 -18
  164. data/spec/code/group_spec.rb +0 -12
  165. data/spec/code/if_modifier_spec.rb +0 -20
  166. data/spec/code/if_spec.rb +0 -25
  167. data/spec/code/list_spec.rb +0 -19
  168. data/spec/code/multiplication_spec.rb +0 -18
  169. data/spec/code/negation_spec.rb +0 -20
  170. data/spec/code/not_keyword_spec.rb +0 -13
  171. data/spec/code/nothing_spec.rb +0 -17
  172. data/spec/code/number_spec.rb +0 -22
  173. data/spec/code/or_keyword_spec.rb +0 -17
  174. data/spec/code/or_operator_spec.rb +0 -16
  175. data/spec/code/parser/boolean_spec.rb +0 -16
  176. data/spec/code/parser/call_spec.rb +0 -26
  177. data/spec/code/parser/chained_call.rb +0 -17
  178. data/spec/code/parser/dictionnary_spec.rb +0 -18
  179. data/spec/code/parser/function_spec.rb +0 -16
  180. data/spec/code/parser/group_spec.rb +0 -18
  181. data/spec/code/parser/list_spec.rb +0 -18
  182. data/spec/code/parser/number_spec.rb +0 -12
  183. data/spec/code/parser/string_spec.rb +0 -21
  184. data/spec/code/parser_spec.rb +0 -23
  185. data/spec/code/power_spec.rb +0 -13
  186. data/spec/code/range_spec.rb +0 -16
  187. data/spec/code/rescue_spec.rb +0 -13
  188. data/spec/code/shift_spec.rb +0 -13
  189. data/spec/code/splat_spec.rb +0 -13
  190. data/spec/code/string_spec.rb +0 -27
  191. data/spec/code/ternary_spec.rb +0 -18
  192. data/spec/code/unary_minus_spec.rb +0 -13
  193. data/spec/code/while_spec.rb +0 -18
  194. data/template-ruby.gemspec +0 -19
@@ -1,21 +0,0 @@
1
- class Code
2
- class Parser
3
- class Shift < Operation
4
- def statement
5
- ::Code::Parser::Addition
6
- end
7
-
8
- def greater
9
- str(">")
10
- end
11
-
12
- def lesser
13
- str("<")
14
- end
15
-
16
- def operator
17
- (greater << greater) | (lesser << lesser)
18
- end
19
- end
20
- end
21
- end
@@ -1,31 +0,0 @@
1
- class Code
2
- class Parser
3
- class Splat < Language
4
- def statement
5
- ::Code::Parser::Class
6
- end
7
-
8
- def splat
9
- ::Code::Parser::Splat
10
- end
11
-
12
- def whitespace
13
- ::Code::Parser::Whitespace
14
- end
15
-
16
- def whitespace?
17
- whitespace.maybe
18
- end
19
-
20
- def ampersand
21
- str("&")
22
- end
23
-
24
- def root
25
- (ampersand.aka(:operator) << whitespace? << splat.aka(:right)).aka(
26
- :splat
27
- ) | statement
28
- end
29
- end
30
- end
31
- end
@@ -1,9 +0,0 @@
1
- class Code
2
- class Parser
3
- class Statement < Language
4
- def root
5
- ::Code::Parser::Equality
6
- end
7
- end
8
- end
9
- end
@@ -1,78 +0,0 @@
1
- class Code
2
- class Parser
3
- class String < Language
4
- def code
5
- ::Code::Parser::Code
6
- end
7
-
8
- def name
9
- ::Code::Parser::Name
10
- end
11
-
12
- def single_quote
13
- str("'")
14
- end
15
-
16
- def double_quote
17
- str('"')
18
- end
19
-
20
- def backslash
21
- str("\\")
22
- end
23
-
24
- def opening_curly_bracket
25
- str("{")
26
- end
27
-
28
- def closing_curly_bracket
29
- str("}")
30
- end
31
-
32
- def colon
33
- str(":")
34
- end
35
-
36
- def code_part
37
- opening_curly_bracket << code << closing_curly_bracket.maybe
38
- end
39
-
40
- def single_quoted_text_part
41
- (
42
- backslash.ignore << opening_curly_bracket |
43
- backslash.ignore << single_quote |
44
- single_quote.absent << opening_curly_bracket.absent << any
45
- ).repeat(1)
46
- end
47
-
48
- def double_quoted_text_part
49
- (
50
- backslash.ignore << opening_curly_bracket |
51
- backslash.ignore << double_quote |
52
- double_quote.absent << opening_curly_bracket.absent << any
53
- ).repeat(1)
54
- end
55
-
56
- def single_quoted_string
57
- single_quote.ignore <<
58
- (code_part.aka(:code) | single_quoted_text_part.aka(:text)).repeat <<
59
- single_quote.ignore.maybe
60
- end
61
-
62
- def double_quoted_string
63
- double_quote.ignore <<
64
- (code_part.aka(:code) | double_quoted_text_part.aka(:text)).repeat <<
65
- double_quote.ignore.maybe
66
- end
67
-
68
- def symbol
69
- (colon.ignore << name).aka(:text).repeat(1, 1)
70
- end
71
-
72
- def root
73
- (single_quoted_string | double_quoted_string | symbol).aka(:string) |
74
- ::Code::Parser::Number
75
- end
76
- end
77
- end
78
- end
@@ -1,46 +0,0 @@
1
- class Code
2
- class Parser
3
- class Ternary < Language
4
- def statement
5
- ::Code::Parser::Range
6
- end
7
-
8
- def ternary
9
- ::Code::Parser::Ternary
10
- end
11
-
12
- def whitespace
13
- ::Code::Parser::Whitespace
14
- end
15
-
16
- def whitespace?
17
- whitespace.maybe
18
- end
19
-
20
- def question_mark
21
- str("?")
22
- end
23
-
24
- def colon
25
- str(":")
26
- end
27
-
28
- def root
29
- (
30
- statement.aka(:left) <<
31
- (
32
- whitespace? << question_mark << whitespace? <<
33
- ternary.aka(:middle) <<
34
- (
35
- whitespace? << colon << whitespace? << ternary.aka(:right)
36
- ).maybe
37
- ).maybe
38
- )
39
- .aka(:ternary)
40
- .then do |output|
41
- output[:ternary][:middle] ? output : output[:ternary][:left]
42
- end
43
- end
44
- end
45
- end
46
- end
@@ -1,31 +0,0 @@
1
- class Code
2
- class Parser
3
- class UnaryMinus < Language
4
- def unary_minus
5
- ::Code::Parser::UnaryMinus
6
- end
7
-
8
- def whitespace
9
- ::Code::Parser::Whitespace
10
- end
11
-
12
- def whitespace?
13
- whitespace.maybe
14
- end
15
-
16
- def minus
17
- str("-")
18
- end
19
-
20
- def operator
21
- minus
22
- end
23
-
24
- def root
25
- (operator.aka(:operator) << whitespace? << unary_minus.aka(:right)).aka(
26
- :unary_minus
27
- ) | ::Code::Parser::Power
28
- end
29
- end
30
- end
31
- end
@@ -1,36 +0,0 @@
1
- class Code
2
- class Parser
3
- class While < Language
4
- def statement
5
- ::Code::Parser::If
6
- end
7
-
8
- def whitespace
9
- ::Code::Parser::Whitespace
10
- end
11
-
12
- def code
13
- ::Code::Parser::Code
14
- end
15
-
16
- def while_keyword
17
- str("while")
18
- end
19
-
20
- def until_keyword
21
- str("until")
22
- end
23
-
24
- def end_keyword
25
- str("end")
26
- end
27
-
28
- def root
29
- (
30
- (while_keyword | until_keyword).aka(:operator) << whitespace <<
31
- statement.aka(:statement) << code.aka(:body) << end_keyword.maybe
32
- ).aka(:while) | statement
33
- end
34
- end
35
- end
36
- end
@@ -1,49 +0,0 @@
1
- class Code
2
- class Parser
3
- class Whitespace < Language
4
- def space
5
- str(" ")
6
- end
7
-
8
- def newline
9
- str("\n")
10
- end
11
-
12
- def hashtag
13
- str("#")
14
- end
15
-
16
- def slash
17
- str("/")
18
- end
19
-
20
- def asterisk
21
- str("*")
22
- end
23
-
24
- def hash_comment
25
- hashtag << (newline.absent << any).repeat << newline.maybe
26
- end
27
-
28
- def double_slash_comment
29
- slash << slash << (newline.absent << any).repeat << newline.maybe
30
- end
31
-
32
- def multi_line_comment
33
- slash << asterisk << ((asterisk << slash).absent << any).repeat <<
34
- asterisk.maybe << slash.maybe
35
- end
36
-
37
- def without_newline
38
- (space | multi_line_comment).repeat(1)
39
- end
40
-
41
- def root
42
- (
43
- space | newline | hash_comment | double_slash_comment |
44
- multi_line_comment
45
- ).repeat(1)
46
- end
47
- end
48
- end
49
- end
data/lib/code/parser.rb DELETED
@@ -1,19 +0,0 @@
1
- class Code
2
- class Parser
3
- def initialize(input)
4
- @input = input
5
- end
6
-
7
- def self.parse(input)
8
- new(input).parse
9
- end
10
-
11
- def parse
12
- ::Code::Parser::Code.parse(input)
13
- end
14
-
15
- private
16
-
17
- attr_reader :input
18
- end
19
- end
data/lib/code/ruby.rb DELETED
@@ -1,174 +0,0 @@
1
- class Code
2
- class Ruby
3
- def initialize(raw = {})
4
- @raw = raw
5
- end
6
-
7
- def self.to_code(raw)
8
- new(raw).to_code
9
- end
10
-
11
- def self.from_code(raw)
12
- new(raw).from_code
13
- end
14
-
15
- def to_code
16
- if code?
17
- raw
18
- elsif nil?
19
- ::Code::Object::Nothing.new
20
- elsif true?
21
- ::Code::Object::Boolean.new(raw)
22
- elsif false?
23
- ::Code::Object::Boolean.new(raw)
24
- elsif string?
25
- ::Code::Object::String.new(raw)
26
- elsif symbol?
27
- ::Code::Object::String.new(raw.to_s)
28
- elsif integer?
29
- ::Code::Object::Integer.new(raw)
30
- elsif float?
31
- ::Code::Object::Decimal.new(raw.to_s)
32
- elsif big_decimal?
33
- ::Code::Object::Decimal.new(raw)
34
- elsif hash?
35
- ::Code::Object::Dictionnary.new(
36
- raw
37
- .map do |key, value|
38
- [::Code::Ruby.to_code(key), ::Code::Ruby.to_code(value)]
39
- end
40
- .to_h
41
- )
42
- elsif array?
43
- ::Code::Object::List.new(
44
- raw.map { |element| ::Code::Ruby.to_code(element) }
45
- )
46
- elsif proc?
47
- ::Code::Object::RubyFunction.new(raw)
48
- else
49
- raise "Unsupported class #{raw.class} for Ruby to Code conversion"
50
- end
51
- end
52
-
53
- def from_code
54
- if code?
55
- if code_nothing?
56
- raw.raw
57
- elsif code_boolean?
58
- raw.raw
59
- elsif code_decimal?
60
- raw.raw
61
- elsif code_integer?
62
- raw.raw
63
- elsif code_nothing?
64
- raw.raw
65
- elsif code_range?
66
- raw.raw
67
- elsif code_string?
68
- raw.raw
69
- elsif code_dictionnary?
70
- raw
71
- .raw
72
- .map do |key, value|
73
- [::Code::Ruby.from_code(key), ::Code::Ruby.from_code(value)]
74
- end
75
- .to_h
76
- elsif code_list?
77
- raw.raw.map { |element| ::Code::Ruby.from_code(element) }
78
- else
79
- raise "Unsupported class #{raw.class} for Code to Ruby conversion"
80
- end
81
- else
82
- raw
83
- end
84
- end
85
-
86
- private
87
-
88
- attr_reader :raw
89
-
90
- def code?
91
- raw.is_a?(::Code::Object)
92
- end
93
-
94
- def nil?
95
- raw.is_a?(::NilClass)
96
- end
97
-
98
- def true?
99
- raw.is_a?(::TrueClass)
100
- end
101
-
102
- def false?
103
- raw.is_a?(::FalseClass)
104
- end
105
-
106
- def hash?
107
- raw.is_a?(::Hash)
108
- end
109
-
110
- def array?
111
- raw.is_a?(::Array)
112
- end
113
-
114
- def string?
115
- raw.is_a?(::String)
116
- end
117
-
118
- def symbol?
119
- raw.is_a?(::Symbol)
120
- end
121
-
122
- def integer?
123
- raw.is_a?(::Integer)
124
- end
125
-
126
- def float?
127
- raw.is_a?(::Float)
128
- end
129
-
130
- def big_decimal?
131
- raw.is_a?(::BigDecimal)
132
- end
133
-
134
- def proc?
135
- raw.is_a?(::Proc)
136
- end
137
-
138
- def code_nothing?
139
- raw.is_a?(::Code::Object::Nothing)
140
- end
141
-
142
- def code_boolean?
143
- raw.is_a?(::Code::Object::Boolean)
144
- end
145
-
146
- def code_decimal?
147
- raw.is_a?(::Code::Object::Decimal)
148
- end
149
-
150
- def code_integer?
151
- raw.is_a?(::Code::Object::Integer)
152
- end
153
-
154
- def code_nothing?
155
- raw.is_a?(::Code::Object::Nothing)
156
- end
157
-
158
- def code_range?
159
- raw.is_a?(::Code::Object::Range)
160
- end
161
-
162
- def code_string?
163
- raw.is_a?(::Code::Object::String)
164
- end
165
-
166
- def code_dictionnary?
167
- raw.is_a?(::Code::Object::Dictionnary)
168
- end
169
-
170
- def code_list?
171
- raw.is_a?(::Code::Object::List)
172
- end
173
- end
174
- end
data/lib/code-ruby.rb DELETED
@@ -1,10 +0,0 @@
1
- require "bigdecimal"
2
- require "stringio"
3
- require "timeout"
4
- require "zeitwerk"
5
-
6
- loader = Zeitwerk::Loader.for_gem(warn_on_extra_files: false)
7
- loader.ignore("#{__dir__}/template-ruby.rb")
8
- loader.ignore("#{__dir__}/code-ruby.rb")
9
- loader.ignore("#{__dir__}/language-ruby.rb")
10
- loader.setup
data/lib/code.rb DELETED
@@ -1,47 +0,0 @@
1
- class Code
2
- EMPTY_STRING = ""
3
- GLOBALS = %i[io context object]
4
- DEFAULT_TIMEOUT = Template::DEFAULT_TIMEOUT
5
-
6
- def initialize(input, io: StringIO.new, timeout: DEFAULT_TIMEOUT, ruby: {})
7
- @input = input
8
- @parsed = Timeout.timeout(timeout) { ::Code::Parser.parse(@input).to_raw }
9
- @io = io
10
- @timeout = timeout || DEFAULT_TIMEOUT
11
- @ruby = ::Code::Ruby.to_code(ruby || {})
12
- end
13
-
14
- def self.evaluate(
15
- input,
16
- context = "",
17
- io: StringIO.new,
18
- timeout: DEFAULT_TIMEOUT,
19
- ruby: {}
20
- )
21
- new(input, io: io, timeout: timeout, ruby: ruby).evaluate(context)
22
- end
23
-
24
- def evaluate(context = "")
25
- Timeout.timeout(timeout) do
26
- if context != EMPTY_STRING
27
- context = ::Code.evaluate(context, timeout: timeout, io: io, ruby: ruby)
28
- else
29
- context = ::Code::Object::Dictionnary.new
30
- end
31
-
32
- if !context.is_a?(::Code::Object::Dictionnary)
33
- raise ::Code::Error::IncompatibleContext.new(
34
- "context must be a dictionnary"
35
- )
36
- end
37
-
38
- context = context.merge(ruby)
39
-
40
- ::Code::Node::Code.new(parsed).evaluate(context: context, io: io)
41
- end
42
- end
43
-
44
- private
45
-
46
- attr_reader :input, :parsed, :timeout, :io, :ruby
47
- end
@@ -1,13 +0,0 @@
1
- class Template
2
- class Node
3
- class CodePart < Node
4
- def initialize(code)
5
- @code = ::Code::Node::Code.new(code)
6
- end
7
-
8
- def evaluate(**args)
9
- @code.evaluate(**args)
10
- end
11
- end
12
- end
13
- end
@@ -1,19 +0,0 @@
1
- class Template
2
- class Node
3
- class Part < Node
4
- def initialize(part)
5
- if part.key?(:text)
6
- @part = ::Template::Node::TextPart.new(part[:text])
7
- elsif part.key?(:code)
8
- @part = ::Template::Node::CodePart.new(part[:code])
9
- else
10
- raise NotImplementedError.new(part.inspect)
11
- end
12
- end
13
-
14
- def evaluate(**args)
15
- @part.evaluate(**args)
16
- end
17
- end
18
- end
19
- end
@@ -1,15 +0,0 @@
1
- class Template
2
- class Node
3
- class Template < Node
4
- def initialize(parts)
5
- @parts = parts.map { |part| ::Template::Node::Part.new(part) }
6
- end
7
-
8
- def evaluate(**args)
9
- io = args.fetch(:io)
10
-
11
- @parts.each { |part| io.print(part.evaluate(**args)) }
12
- end
13
- end
14
- end
15
- end
@@ -1,13 +0,0 @@
1
- class Template
2
- class Node
3
- class TextPart < Node
4
- def initialize(text)
5
- @text = text
6
- end
7
-
8
- def evaluate(**args)
9
- ::Code::Object::String.new(@text.to_s)
10
- end
11
- end
12
- end
13
- end
data/lib/template/node.rb DELETED
@@ -1,4 +0,0 @@
1
- class Template
2
- class Node < ::Code::Node
3
- end
4
- end
@@ -1,39 +0,0 @@
1
- class Template
2
- class Parser
3
- class Template < Language
4
- def code
5
- ::Code::Parser::Code
6
- end
7
-
8
- def opening_curly_bracket
9
- str("{")
10
- end
11
-
12
- def closing_curly_bracket
13
- str("}")
14
- end
15
-
16
- def backslash
17
- str("\\")
18
- end
19
-
20
- def code_part
21
- opening_curly_bracket << code << (closing_curly_bracket | any.absent)
22
- end
23
-
24
- def text_character
25
- (backslash.ignore << opening_curly_bracket) |
26
- (opening_curly_bracket.absent << any)
27
- end
28
-
29
- def text_part
30
- text_character.repeat(1)
31
- end
32
-
33
- def root
34
- (code_part.aka(:code) | text_part.aka(:text)).repeat |
35
- str("").aka(:text).repeat(1, 1)
36
- end
37
- end
38
- end
39
- end
@@ -1,19 +0,0 @@
1
- class Template
2
- class Parser
3
- def initialize(input)
4
- @input = input
5
- end
6
-
7
- def self.parse(input)
8
- new(input).parse
9
- end
10
-
11
- def parse
12
- ::Template::Parser::Template.parse(input)
13
- end
14
-
15
- private
16
-
17
- attr_reader :input
18
- end
19
- end
@@ -1,3 +0,0 @@
1
- require_relative "../template"
2
-
3
- Template::Version = Gem::Version.new("0.5.6")