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.
- checksums.yaml +4 -4
- data/Gemfile +1 -4
- data/language-ruby.gemspec +3 -3
- data/lib/language/atom/any.rb +8 -0
- data/lib/language/atom/repeat.rb +15 -0
- data/lib/language/atom.rb +25 -42
- data/lib/language/output.rb +13 -11
- data/lib/language/parser/absent/present.rb +2 -0
- data/lib/language/parser/absent.rb +2 -0
- data/lib/language/parser/end_of_input.rb +2 -0
- data/lib/language/parser/interuption.rb +2 -0
- data/lib/language/parser/not_end_of_input.rb +2 -0
- data/lib/language/parser/str/not_found.rb +2 -0
- data/lib/language/parser/str.rb +2 -0
- data/lib/language/parser.rb +10 -10
- data/lib/language/version.rb +3 -0
- data/lib/language-ruby.rb +0 -5
- data/lib/language.rb +9 -7
- data/spec/spec_helper.rb +1 -6
- metadata +7 -221
- data/.cherry.js +0 -21
- data/.editorconfig +0 -9
- data/.github/workflows/rspec.yml +0 -14
- data/.gitignore +0 -2
- data/.prettierrc +0 -3
- data/.rspec +0 -1
- data/.tool-versions +0 -1
- data/CHANGELOG.md +0 -55
- data/Gemfile.lock +0 -49
- data/LICENSE +0 -7
- data/README.md +0 -103
- data/TODO +0 -17
- data/bin/code +0 -76
- data/bin/format +0 -3
- data/bin/publish +0 -19
- data/bin/template +0 -85
- data/bin/test +0 -17
- data/code-ruby.gemspec +0 -17
- data/docs/class.code +0 -9
- data/docs/euler/1.template +0 -10
- data/docs/euler/2.template +0 -16
- data/docs/euler/3.template +0 -16
- data/docs/euler/4.template +0 -10
- data/docs/euler/5.template +0 -13
- data/docs/fibonnaci.template +0 -14
- data/docs/meetup.code +0 -12
- data/docs/precedence.template +0 -36
- data/docs/rain.code +0 -22
- data/docs/slack.code +0 -17
- data/docs/stripe.code +0 -7
- data/docs/twitter.code +0 -9
- data/lib/code/error.rb +0 -18
- data/lib/code/node/base_10.rb +0 -29
- data/lib/code/node/base_16.rb +0 -13
- data/lib/code/node/base_2.rb +0 -13
- data/lib/code/node/base_8.rb +0 -13
- data/lib/code/node/boolean.rb +0 -22
- data/lib/code/node/call.rb +0 -47
- data/lib/code/node/call_argument.rb +0 -21
- data/lib/code/node/chained_call.rb +0 -23
- data/lib/code/node/code.rb +0 -20
- data/lib/code/node/decimal.rb +0 -26
- data/lib/code/node/dictionnary.rb +0 -33
- data/lib/code/node/equal.rb +0 -34
- data/lib/code/node/function.rb +0 -20
- data/lib/code/node/function_parameter.rb +0 -31
- data/lib/code/node/if.rb +0 -59
- data/lib/code/node/if_modifier.rb +0 -47
- data/lib/code/node/list.rb +0 -16
- data/lib/code/node/negation.rb +0 -15
- data/lib/code/node/not.rb +0 -15
- data/lib/code/node/nothing.rb +0 -12
- data/lib/code/node/number.rb +0 -25
- data/lib/code/node/operation.rb +0 -38
- data/lib/code/node/power.rb +0 -20
- data/lib/code/node/rescue.rb +0 -17
- data/lib/code/node/splat.rb +0 -15
- data/lib/code/node/statement.rb +0 -59
- data/lib/code/node/string.rb +0 -53
- data/lib/code/node/ternary.rb +0 -24
- data/lib/code/node/unary_minus.rb +0 -15
- data/lib/code/node/while.rb +0 -35
- data/lib/code/node.rb +0 -13
- data/lib/code/object/argument.rb +0 -32
- data/lib/code/object/boolean.rb +0 -27
- data/lib/code/object/decimal.rb +0 -162
- data/lib/code/object/dictionnary.rb +0 -96
- data/lib/code/object/function.rb +0 -64
- data/lib/code/object/global.rb +0 -42
- data/lib/code/object/integer.rb +0 -221
- data/lib/code/object/list.rb +0 -207
- data/lib/code/object/nothing.rb +0 -23
- data/lib/code/object/number.rb +0 -6
- data/lib/code/object/range.rb +0 -146
- data/lib/code/object/ruby_function.rb +0 -31
- data/lib/code/object/string.rb +0 -102
- data/lib/code/object.rb +0 -197
- data/lib/code/parser/addition.rb +0 -21
- data/lib/code/parser/and_operator.rb +0 -17
- data/lib/code/parser/bitwise_and.rb +0 -17
- data/lib/code/parser/bitwise_or.rb +0 -21
- data/lib/code/parser/boolean.rb +0 -17
- data/lib/code/parser/call.rb +0 -122
- data/lib/code/parser/chained_call.rb +0 -47
- data/lib/code/parser/class.rb +0 -45
- data/lib/code/parser/code.rb +0 -25
- data/lib/code/parser/dictionnary.rb +0 -67
- data/lib/code/parser/equal.rb +0 -94
- data/lib/code/parser/equality.rb +0 -35
- data/lib/code/parser/equality_lower.rb +0 -9
- data/lib/code/parser/function.rb +0 -85
- data/lib/code/parser/greater.rb +0 -25
- data/lib/code/parser/group.rb +0 -22
- data/lib/code/parser/if.rb +0 -63
- data/lib/code/parser/if_modifier.rb +0 -55
- data/lib/code/parser/list.rb +0 -42
- data/lib/code/parser/multiplication.rb +0 -25
- data/lib/code/parser/name.rb +0 -107
- data/lib/code/parser/negation.rb +0 -30
- data/lib/code/parser/not_keyword.rb +0 -23
- data/lib/code/parser/nothing.rb +0 -22
- data/lib/code/parser/number.rb +0 -154
- data/lib/code/parser/operation.rb +0 -35
- data/lib/code/parser/or_keyword.rb +0 -21
- data/lib/code/parser/or_operator.rb +0 -17
- data/lib/code/parser/power.rb +0 -43
- data/lib/code/parser/range.rb +0 -17
- data/lib/code/parser/rescue.rb +0 -39
- data/lib/code/parser/shift.rb +0 -21
- data/lib/code/parser/splat.rb +0 -31
- data/lib/code/parser/statement.rb +0 -9
- data/lib/code/parser/string.rb +0 -78
- data/lib/code/parser/ternary.rb +0 -46
- data/lib/code/parser/unary_minus.rb +0 -31
- data/lib/code/parser/while.rb +0 -36
- data/lib/code/parser/whitespace.rb +0 -49
- data/lib/code/parser.rb +0 -19
- data/lib/code/ruby.rb +0 -174
- data/lib/code-ruby.rb +0 -10
- data/lib/code.rb +0 -47
- data/lib/template/node/code_part.rb +0 -13
- data/lib/template/node/part.rb +0 -19
- data/lib/template/node/template.rb +0 -15
- data/lib/template/node/text_part.rb +0 -13
- data/lib/template/node.rb +0 -4
- data/lib/template/parser/template.rb +0 -39
- data/lib/template/parser.rb +0 -19
- data/lib/template/version.rb +0 -3
- data/lib/template-ruby.rb +0 -10
- data/lib/template.rb +0 -50
- data/spec/code/addition_spec.rb +0 -13
- data/spec/code/and_operator_spec.rb +0 -13
- data/spec/code/bitwise_and_spec.rb +0 -13
- data/spec/code/bitwise_or_spec.rb +0 -13
- data/spec/code/boolean_spec.rb +0 -13
- data/spec/code/call_spec.rb +0 -21
- data/spec/code/chained_call_spec.rb +0 -16
- data/spec/code/code_spec.rb +0 -29
- data/spec/code/dictionnary_spec.rb +0 -17
- data/spec/code/equal_spec.rb +0 -26
- data/spec/code/equality_spec.rb +0 -13
- data/spec/code/function_spec.rb +0 -18
- data/spec/code/greater_spec.rb +0 -18
- data/spec/code/group_spec.rb +0 -12
- data/spec/code/if_modifier_spec.rb +0 -20
- data/spec/code/if_spec.rb +0 -25
- data/spec/code/list_spec.rb +0 -19
- data/spec/code/multiplication_spec.rb +0 -18
- data/spec/code/negation_spec.rb +0 -20
- data/spec/code/not_keyword_spec.rb +0 -13
- data/spec/code/nothing_spec.rb +0 -17
- data/spec/code/number_spec.rb +0 -22
- data/spec/code/or_keyword_spec.rb +0 -17
- data/spec/code/or_operator_spec.rb +0 -16
- data/spec/code/parser/boolean_spec.rb +0 -16
- data/spec/code/parser/call_spec.rb +0 -26
- data/spec/code/parser/chained_call.rb +0 -17
- data/spec/code/parser/dictionnary_spec.rb +0 -18
- data/spec/code/parser/function_spec.rb +0 -16
- data/spec/code/parser/group_spec.rb +0 -18
- data/spec/code/parser/list_spec.rb +0 -18
- data/spec/code/parser/number_spec.rb +0 -12
- data/spec/code/parser/string_spec.rb +0 -21
- data/spec/code/parser_spec.rb +0 -23
- data/spec/code/power_spec.rb +0 -13
- data/spec/code/range_spec.rb +0 -16
- data/spec/code/rescue_spec.rb +0 -13
- data/spec/code/shift_spec.rb +0 -13
- data/spec/code/splat_spec.rb +0 -13
- data/spec/code/string_spec.rb +0 -27
- data/spec/code/ternary_spec.rb +0 -18
- data/spec/code/unary_minus_spec.rb +0 -13
- data/spec/code/while_spec.rb +0 -18
- data/template-ruby.gemspec +0 -19
data/lib/code/parser/shift.rb
DELETED
@@ -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
|
data/lib/code/parser/splat.rb
DELETED
@@ -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
|
data/lib/code/parser/string.rb
DELETED
@@ -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
|
data/lib/code/parser/ternary.rb
DELETED
@@ -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
|
data/lib/code/parser/while.rb
DELETED
@@ -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
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
|
data/lib/template/node/part.rb
DELETED
@@ -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
|
data/lib/template/node.rb
DELETED
@@ -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
|
data/lib/template/parser.rb
DELETED
@@ -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
|
data/lib/template/version.rb
DELETED