code-ruby 0.8.3 → 0.8.4
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.lock +1 -1
- data/lib/code/object/time.rb +35 -0
- data/lib/code/version.rb +1 -1
- data/spec/code_spec.rb +110 -101
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f5dda57442d7fc50b08ceb9998021e623f226a0b8de3cdaf58fecd05d0ba3a30
|
4
|
+
data.tar.gz: bead8ebd992882ea955f10d24e10f110a5c9955926e0e4850cddbcb4e3afe34c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 136c900a7f0efab8fbf2ada6bc90c018689f5545b350b1b3b77c19e07ebd2eb18addb6852a12ede8c7bb692ad48af341c9decab8740b26d92fd5f45ec2a5ffa6
|
7
|
+
data.tar.gz: 24881df454cb5e179265232a37c45a1d1322ed0606ed3caf82fc56ee3526df1b3dc3c1f06301f5887e48b5da65e2b01b9c4e8424c703ab47923325c3b5ee1d6f
|
data/Gemfile.lock
CHANGED
data/lib/code/object/time.rb
CHANGED
@@ -19,6 +19,9 @@ class Code
|
|
19
19
|
operator = args.fetch(:operator, nil)
|
20
20
|
|
21
21
|
case operator.to_s
|
22
|
+
when "now"
|
23
|
+
sig(args)
|
24
|
+
code_now
|
22
25
|
when "tomorrow"
|
23
26
|
sig(args)
|
24
27
|
code_tomorrow
|
@@ -32,6 +35,38 @@ class Code
|
|
32
35
|
new(::Time.zone.tomorrow.beginning_of_day)
|
33
36
|
end
|
34
37
|
|
38
|
+
def self.code_now
|
39
|
+
::Time.zone ||= DEFAULT_ZONE
|
40
|
+
new(::Time.zone.now.beginning_of_day)
|
41
|
+
end
|
42
|
+
|
43
|
+
def call(**args)
|
44
|
+
operator = args.fetch(:operator, nil)
|
45
|
+
arguments = args.fetch(:arguments, [])
|
46
|
+
value = arguments.first&.value
|
47
|
+
|
48
|
+
case operator.to_s
|
49
|
+
when "after?"
|
50
|
+
sig(args) { Time.maybe }
|
51
|
+
code_after?(value)
|
52
|
+
when "before?"
|
53
|
+
sig(args) { Time.maybe }
|
54
|
+
code_before?(value)
|
55
|
+
else
|
56
|
+
super
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def code_after?(other)
|
61
|
+
other ||= Time.code_now
|
62
|
+
Boolean.new(raw.after?(other.raw))
|
63
|
+
end
|
64
|
+
|
65
|
+
def code_before?(other)
|
66
|
+
other ||= Time.code_now
|
67
|
+
Boolean.new(raw.before?(other.raw))
|
68
|
+
end
|
69
|
+
|
35
70
|
def inspect
|
36
71
|
to_s
|
37
72
|
end
|
data/lib/code/version.rb
CHANGED
data/spec/code_spec.rb
CHANGED
@@ -4,17 +4,6 @@ require "spec_helper"
|
|
4
4
|
|
5
5
|
RSpec.describe Code do
|
6
6
|
[
|
7
|
-
%w[9975×14÷8 17456.25],
|
8
|
-
["\r\n", "nothing"],
|
9
|
-
["1 + 1", "2"],
|
10
|
-
["a = 1", "1"],
|
11
|
-
["a = 1 b = 2 c = a + b c", "3"],
|
12
|
-
["a = 1 a += 1 a", "2"],
|
13
|
-
["a = b = c = 1 a + b + c", "3"],
|
14
|
-
["3.times {}", "3"],
|
15
|
-
["a = 1 3.times { a += 1 } a", "4"],
|
16
|
-
['user = {} user[:name] = "Dorian" user[:name]', ":Dorian"],
|
17
|
-
['user = {} user.name = "Dorian" user.name', ":Dorian"],
|
18
7
|
[
|
19
8
|
"user = { name: :Dorian, age: 31 } user.delete_if(String) user.keys",
|
20
9
|
'["age"]'
|
@@ -23,116 +12,136 @@ RSpec.describe Code do
|
|
23
12
|
"(user = { name: :Dorian, age: 31 }).transform_values { user.name }.age",
|
24
13
|
":Dorian"
|
25
14
|
],
|
15
|
+
%w[!!1 true],
|
16
|
+
%w[!!true true],
|
17
|
+
%w[!false true],
|
18
|
+
%w["" ''],
|
19
|
+
%w["Hello".downcase :hello],
|
20
|
+
%w['' ""],
|
21
|
+
%w[+1 1],
|
22
|
+
%w[+1.0 1.0],
|
23
|
+
%w[+true true],
|
24
|
+
%w[--1 1],
|
25
|
+
%w[--1.0 1.0],
|
26
|
+
%w[-1 -1],
|
27
|
+
%w[-1.0 -1.0],
|
28
|
+
%w[0 0],
|
29
|
+
%w[0b10 2],
|
30
|
+
%w[0o10 8],
|
31
|
+
%w[0x10 16],
|
32
|
+
%w[1.0e1 10.0],
|
33
|
+
%w[1.1 1.1],
|
34
|
+
%w[10e1.0 100.0],
|
35
|
+
%w[1e1 10],
|
36
|
+
%w[9975×14÷8 17456.25],
|
37
|
+
%w[:Hello.include?(:H) true],
|
38
|
+
%w[:admin? :admin?],
|
39
|
+
%w[:hello :hello],
|
40
|
+
%w[:update!.to_string :update!],
|
41
|
+
%w[false false],
|
42
|
+
%w[true true],
|
43
|
+
%w[{} {}],
|
44
|
+
["'Hello Dorian'", '"Hello Dorian"'],
|
45
|
+
["'Hello \\{name}'", ':Hello + " \\{name}"'],
|
46
|
+
["'Hello {1}'", '"Hello 1"'],
|
47
|
+
["(true false)", "false"],
|
26
48
|
["1 & 1", "1"],
|
27
|
-
["
|
28
|
-
["
|
29
|
-
["1
|
49
|
+
["1 + 1", "2"],
|
50
|
+
["1 < 2", "true"],
|
51
|
+
["1 << 1", "2"],
|
52
|
+
["1 <= 1", "true"],
|
53
|
+
["1 == 1 and 2 == 2", "true"],
|
54
|
+
["1 == 1", "true"],
|
55
|
+
["1 > 2", "false"],
|
56
|
+
["1 >= 1", "true"],
|
57
|
+
["1 >> 1", "0"],
|
30
58
|
["1 ^ 2", "3"],
|
31
|
-
|
32
|
-
|
59
|
+
["1 | 2", "3"],
|
60
|
+
["1.day.ago.after?(1.day.from_now)", 'false'],
|
61
|
+
["1.day.ago.before?(1.day.from_now)", 'true'],
|
62
|
+
["1.day.from_now.after?(1.day.ago)", 'true'],
|
63
|
+
["1.day.from_now.before?(1.day.ago)", 'false'],
|
64
|
+
["1.day.ago.after?", 'false'],
|
65
|
+
["1.day.ago.before?", 'true'],
|
66
|
+
["1.day.from_now.after?", "true"],
|
67
|
+
["1.day.from_now.before?", "false"],
|
68
|
+
["2 * 3 + 2", "8"],
|
69
|
+
["2 * 3", "6"],
|
70
|
+
["2 ** 3 ** 2", "512"],
|
71
|
+
["2 ** 3", "8"],
|
72
|
+
["2 + 2 * 3", "8"],
|
73
|
+
["2 / 4", "0.5"],
|
74
|
+
["3.times {}", "3"],
|
75
|
+
["4 % 3", "1"],
|
76
|
+
["[,,].include?(4)", "false"],
|
77
|
+
["[,].include?(4)", "false"],
|
78
|
+
["[1, 2, 3, \n ].include?(4)", "false"],
|
79
|
+
["[1, 2, 3,].include?(4)", "false"],
|
80
|
+
["[1, 2, 3]", "[1, 2, 3]"],
|
81
|
+
["[1, 2, 3].include?(2)", "true"],
|
82
|
+
["[1, 2, 3].include?(4)", "false"],
|
33
83
|
["[1, 2, 3].select { |n| n.even? }", "[2]"],
|
34
84
|
["[1, 2, 3].select { |n| n.even? }.select { |n| n.odd? }", "[]"],
|
35
|
-
|
36
|
-
["
|
37
|
-
[
|
38
|
-
["
|
85
|
+
["[1, 2].map(&:to_string)", "[:1, :2]"],
|
86
|
+
["[1, 2].map(&:to_string)", '["1", "2"]'],
|
87
|
+
["[1, 2].map(&:to_string)", '["1", "2"]'],
|
88
|
+
["[1].each do end", "[1]"],
|
89
|
+
["[[true]]", "[[true]]"],
|
90
|
+
["[]", "[]"],
|
91
|
+
["\r\n", "nothing"],
|
92
|
+
["a = 0\nuntil a > 10 a += 1 end a", "11"],
|
93
|
+
["a = 0\nwhile a < 10 a += 1 end a", "10"],
|
94
|
+
["a = 1 3.times { a += 1 } a", "4"],
|
95
|
+
["a = 1 a *= 2 a", "2"],
|
96
|
+
["a = 1 a += 1 a", "2"],
|
39
97
|
["a = 1 a += 1 a", "2"],
|
40
98
|
["a = 1 a -= 1 a", "0"],
|
41
|
-
["a = 1 a *= 2 a", "2"],
|
42
99
|
["a = 1 a /= 2 a", "0.5"],
|
43
|
-
["a = 10 a %= 2 a", "0"],
|
44
|
-
["a = 1 a >>= 1 a", "0"],
|
45
100
|
["a = 1 a <<= 1 a", "2"],
|
46
|
-
["a = 1 a
|
101
|
+
["a = 1 a >>= 1 a", "0"],
|
47
102
|
["a = 1 a ^= 2 a", "3"],
|
48
|
-
["a =
|
103
|
+
["a = 1 a |= 2 a", "3"],
|
104
|
+
["a = 1 a", "1"],
|
105
|
+
["a = 1 b = 2 c = a + b c", "3"],
|
106
|
+
["a = 1", "1"],
|
107
|
+
["a = 10 a %= 2 a", "0"],
|
108
|
+
["a = b = c = 1 a + b + c", "3"],
|
49
109
|
["a = false a &&= true a", "false"],
|
50
|
-
["
|
51
|
-
["
|
52
|
-
["1
|
53
|
-
["
|
54
|
-
["
|
55
|
-
["1 >= 1", "true"],
|
56
|
-
["(true false)", "false"],
|
57
|
-
["if true 1", "1"],
|
58
|
-
["unless false 1", "1"],
|
59
|
-
["if false 1", "nothing"],
|
60
|
-
["unless true 1", "nothing"],
|
110
|
+
["a = false a ||= true a", "true"],
|
111
|
+
["a rescue :oops", ":oops"],
|
112
|
+
["false ? 1 : 2", "2"],
|
113
|
+
["false ? 1", ""],
|
114
|
+
["false || false", "false"],
|
61
115
|
["if false 1 else 2", "2"],
|
62
|
-
["if false 1 elsif true 2", "2"],
|
63
|
-
["if false 1 elsif false 2", "nothing"],
|
64
|
-
["if false 1 else if true 2", "2"],
|
65
116
|
["if false 1 else if false 2", "nothing"],
|
117
|
+
["if false 1 else if true 2", "2"],
|
66
118
|
["if false 1 else unless false 2", "2"],
|
67
119
|
["if false 1 else unless true 2", "nothing"],
|
68
|
-
["
|
69
|
-
["
|
70
|
-
["
|
71
|
-
["
|
72
|
-
["[1, 2, 3,].include?(4)", "false"],
|
73
|
-
["[1, 2, 3, \n ].include?(4)", "false"],
|
74
|
-
["[1].each do end", "[1]"],
|
75
|
-
["[,].include?(4)", "false"],
|
76
|
-
["[,,].include?(4)", "false"],
|
77
|
-
["[[true]]", "[[true]]"],
|
78
|
-
["2 * 3", "6"],
|
79
|
-
["2 * 3 + 2", "8"],
|
80
|
-
["2 + 2 * 3", "8"],
|
81
|
-
["2 / 4", "0.5"],
|
82
|
-
["4 % 3", "1"],
|
83
|
-
%w[!false true],
|
84
|
-
%w[!!true true],
|
85
|
-
%w[!!1 true],
|
86
|
-
%w[+1 1],
|
87
|
-
%w[+1.0 1.0],
|
88
|
-
%w[+true true],
|
89
|
-
["not true", "false"],
|
120
|
+
["if false 1 elsif false 2", "nothing"],
|
121
|
+
["if false 1 elsif true 2", "2"],
|
122
|
+
["if false 1", "nothing"],
|
123
|
+
["if true 1", "1"],
|
90
124
|
["not not false", "false"],
|
91
|
-
|
92
|
-
%w[1.1 1.1],
|
93
|
-
%w[0x10 16],
|
94
|
-
%w[0o10 8],
|
95
|
-
%w[0b10 2],
|
96
|
-
%w[1e1 10],
|
97
|
-
%w[1.0e1 10.0],
|
98
|
-
%w[10e1.0 100.0],
|
99
|
-
["true or false", "true"],
|
100
|
-
["true and false", "false"],
|
125
|
+
["not true", "false"],
|
101
126
|
["random = 1 random", "1"],
|
127
|
+
["true && false", "false"],
|
128
|
+
["true && true", "true"],
|
129
|
+
["true ? 1 : 2", "1"],
|
130
|
+
["true ? 1", "1"],
|
131
|
+
["true and false", "false"],
|
132
|
+
["true or false", "true"],
|
102
133
|
["true || false", "true"],
|
103
|
-
["false
|
104
|
-
["
|
105
|
-
["
|
106
|
-
["
|
107
|
-
["
|
108
|
-
%w['' ""],
|
109
|
-
%w["" ''],
|
110
|
-
%w[:hello :hello],
|
111
|
-
%w[:admin? :admin?],
|
112
|
-
%w[:update!.to_string :update!],
|
113
|
-
["'Hello Dorian'", '"Hello Dorian"'],
|
134
|
+
["unless false 1", "1"],
|
135
|
+
["unless true 1", "nothing"],
|
136
|
+
["until true", "nothing"],
|
137
|
+
["while false", "nothing"],
|
138
|
+
["{ a: 1, b: 2, c: 3 }", '{"a" => 1, "b" => 2, "c" => 3}'],
|
114
139
|
['"Hello Dorian"', '"Hello Dorian"'],
|
115
|
-
["'Hello \\{name}'", ':Hello + " \\{name}"'],
|
116
140
|
['"Hello \\{name}"', '"Hello \\{" + "name}"'],
|
117
|
-
["'Hello {1}'", '"Hello 1"'],
|
118
141
|
['"Hello {1}"', '"Hello 1"'],
|
119
|
-
|
120
|
-
|
121
|
-
["
|
122
|
-
["false ? 1", ""],
|
123
|
-
["true ? 1 : 2", "1"],
|
124
|
-
["false ? 1 : 2", "2"],
|
125
|
-
%w[-1 -1],
|
126
|
-
%w[--1 1],
|
127
|
-
%w[-1.0 -1.0],
|
128
|
-
%w[--1.0 1.0],
|
129
|
-
["while false", "nothing"],
|
130
|
-
["a = 0\nwhile a < 10 a += 1 end a", "10"],
|
131
|
-
["until true", "nothing"],
|
132
|
-
["a = 0\nuntil a > 10 a += 1 end a", "11"],
|
133
|
-
["1 >> 1", "0"],
|
134
|
-
["1 << 1", "2"],
|
135
|
-
["[1, 2].map(&:to_string)", '["1", "2"]']
|
142
|
+
['user = {} user.name = "Dorian" user.name', ":Dorian"],
|
143
|
+
['user = {} user[:name] = "Dorian" user[:name]', ":Dorian"],
|
144
|
+
['{ "first_name": "Dorian" }', '{"first_name" => "Dorian"}'],
|
136
145
|
].each do |input, expected|
|
137
146
|
it "#{input} == #{expected}" do
|
138
147
|
expect(Code.evaluate(input)).to eq(Code.evaluate(expected))
|