code-ruby 0.7.8 → 0.8.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5bbad84793e5bbf2f414b6f151f528534f7925ae62182cb101afb3d4c3d79ef0
4
- data.tar.gz: 76759f9e4dc4ac0a1abce13727d003930cd498933ffabe83b8b83334850e5af1
3
+ metadata.gz: 53530542bdf5a824a43456c8a1d16ef187c0e040f614d797caf0316d821611fc
4
+ data.tar.gz: 7c21efbe6de1846a76ee403a59c9c1e90f0259af2523d4bbbee21759a6bf99c6
5
5
  SHA512:
6
- metadata.gz: e2058ad57bcd88790c5b7201c3509df3fc3ff876db19a53811a7db679e5687ff95800df13cecdc114dbd4ec4b3cec4b36c3778a7800f1568ba251f6b770a5fd9
7
- data.tar.gz: 7628080cb943ae6169e4e859849fecabe8b4ddc0ac938cdd81f34a689938d6caf3bfd56c0f3d25a76088a6f18789b1309bc80e94ca99922882733bc9ab6b6abc
6
+ metadata.gz: 85ea6c55e13230861d8d6c3aa8a80dca114c382edcf9a2c2781e7fbb74d924027756e47b418a4ce69e05d63f93ca1957fe086aa62d831ec8226f52fba4b805fd
7
+ data.tar.gz: afa54fcd58082f980d7dc72d4cfd06c61a73f26aeb88700e8d87928ebaeb02c3c4b42d08c9bcb0284807e2f795f4d30ebe20d5a7e3b892b3bdf5235cfb418747
@@ -9,18 +9,16 @@ class Code
9
9
  @raw = raw
10
10
  end
11
11
 
12
- def call(**args)
13
- operator = args.fetch(:operator, nil)
12
+ def call(...)
13
+ raw.call(...)
14
+ end
15
+
16
+ def to_s
17
+ raw.name
18
+ end
14
19
 
15
- if raw == Time && operator.to_s == "tomorrow"
16
- sig(args)
17
- Time.code_tomorrow
18
- elsif raw == Date && operator.to_s == "tomorrow"
19
- sig(args)
20
- Date.code_tomorrow
21
- else
22
- super
23
- end
20
+ def inspect
21
+ to_s
24
22
  end
25
23
 
26
24
  def self.name
@@ -13,6 +13,18 @@ class Code
13
13
  "Date"
14
14
  end
15
15
 
16
+ def self.call(**args)
17
+ operator = args.fetch(:operator, nil)
18
+
19
+ case operator.to_s
20
+ when "tomorrow"
21
+ sig(args)
22
+ code_tomorrow
23
+ else
24
+ super
25
+ end
26
+ end
27
+
16
28
  def self.code_tomorrow
17
29
  ::Time.zone ||= Time::DEFAULT_ZONE
18
30
  new(::Time.zone.tomorrow)
@@ -15,6 +15,18 @@ class Code
15
15
  "Time"
16
16
  end
17
17
 
18
+ def self.call(**args)
19
+ operator = args.fetch(:operator, nil)
20
+
21
+ case operator.to_s
22
+ when "tomorrow"
23
+ sig(args)
24
+ code_tomorrow
25
+ else
26
+ super
27
+ end
28
+ end
29
+
18
30
  def self.code_tomorrow
19
31
  ::Time.zone ||= DEFAULT_ZONE
20
32
  new(::Time.zone.tomorrow.beginning_of_day)
data/lib/code/object.rb CHANGED
@@ -18,6 +18,147 @@ class Code
18
18
  Type::Or.new(self, other)
19
19
  end
20
20
 
21
+ def self.sig(args, &block)
22
+ Type::Sig.sig(args, object: self, &block)
23
+ end
24
+
25
+ def self.call(**args)
26
+ operator = args.fetch(:operator, nil)
27
+ arguments = args.fetch(:arguments, [])
28
+ value = arguments.first&.value
29
+
30
+ case operator.to_s
31
+ when "!", "not"
32
+ sig(args)
33
+ code_exclamation_point
34
+ when "!=", "different"
35
+ sig(args) { Object }
36
+ code_different(value)
37
+ when "&&", "and"
38
+ sig(args) { Object }
39
+ code_and_operator(value)
40
+ when "+", "self"
41
+ sig(args)
42
+ code_self
43
+ when "..", "inclusive_range"
44
+ sig(args) { Object }
45
+ code_inclusive_range(value)
46
+ when "...", "exclusive_range"
47
+ sig(args) { Object }
48
+ code_exclusive_range(value)
49
+ when "==", "equal"
50
+ sig(args) { Object }
51
+ code_equal_equal(value)
52
+ when "===", "strict_equal"
53
+ sig(args) { Object }
54
+ code_equal_equal_equal(value)
55
+ when "falsy?"
56
+ sig(args)
57
+ Boolean.new(falsy?)
58
+ when "to_string"
59
+ sig(args)
60
+ code_to_string
61
+ when "truthy?"
62
+ sig(args)
63
+ Boolean.new(truthy?)
64
+ when "||", "or"
65
+ sig(args) { Object }
66
+ code_or_operator(value)
67
+ when /=$/
68
+ sig(args) { Object }
69
+
70
+ if operator == "="
71
+ context = args[:context]
72
+ context.code_set(self, value)
73
+ else
74
+ context = args[:context].lookup!(self)
75
+ context.code_set(
76
+ self,
77
+ context.code_fetch(self).call(
78
+ **args,
79
+ operator: operator[..-2],
80
+ arguments: [Argument.new(value)]
81
+ )
82
+ )
83
+ end
84
+
85
+ context.code_fetch(self)
86
+ else
87
+ raise(
88
+ Code::Error::Undefined,
89
+ "#{operator} not defined on #{inspect}:Class"
90
+ )
91
+ end
92
+ end
93
+
94
+ def self.code_and_operator(other)
95
+ truthy? ? other : self
96
+ end
97
+
98
+ def self.code_different(other)
99
+ Boolean.new(self != other)
100
+ end
101
+
102
+ def self.code_equal_equal(other)
103
+ Boolean.new(self == other)
104
+ end
105
+
106
+ def self.code_exclamation_point
107
+ Boolean.new(falsy?)
108
+ end
109
+
110
+ def self.code_exclusive_range(value)
111
+ Range.new(self, value, exclude_end: true)
112
+ end
113
+
114
+ def self.code_inclusive_range(value)
115
+ Range.new(self, value, exclude_end: false)
116
+ end
117
+
118
+ def self.code_or_operator(other)
119
+ truthy? ? self : other
120
+ end
121
+
122
+ def self.code_self
123
+ self
124
+ end
125
+
126
+ def self.code_equal_equal_equal(other)
127
+ Boolean.new(self === other)
128
+ end
129
+
130
+ def self.code_to_string
131
+ String.new(to_s)
132
+ end
133
+
134
+ def self.falsy?
135
+ !truthy?
136
+ end
137
+
138
+ def self.multi_fetch(hash, *keys)
139
+ keys.map { |key| [key, hash.fetch(key)] }.to_h
140
+ end
141
+
142
+ def self.sig(args, &block)
143
+ Type::Sig.sig(args, object: self, &block)
144
+ end
145
+
146
+ def self.name
147
+ raise NotImplementedError, "name"
148
+ end
149
+
150
+ def self.to_s
151
+ name
152
+ end
153
+
154
+ def self.inspect
155
+ to_s
156
+ end
157
+
158
+ def self.truthy?
159
+ true
160
+ end
161
+
21
162
  def <=>(other)
22
163
  if respond_to?(:raw)
23
164
  raw <=> (other.respond_to?(:raw) ? other.raw : other)
@@ -117,7 +258,7 @@ class Code
117
258
  end
118
259
 
119
260
  def code_exclamation_point
120
- truthy? ? Object::Boolean.new(false) : Object::Boolean.new(true)
261
+ Boolean.new(falsy?)
121
262
  end
122
263
 
123
264
  def code_exclusive_range(value)
@@ -168,6 +309,10 @@ class Code
168
309
  raise NotImplementedError, "#{self.class.name}#to_s"
169
310
  end
170
311
 
312
+ def inspect
313
+ to_s
314
+ end
315
+
171
316
  def truthy?
172
317
  true
173
318
  end
data/lib/code/version.rb CHANGED
@@ -2,4 +2,4 @@
2
2
 
3
3
  require_relative "../code"
4
4
 
5
- Code::Version = Gem::Version.new("0.7.8")
5
+ Code::Version = Gem::Version.new("0.8.1")
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: code-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.8
4
+ version: 0.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dorian Marié
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-02-13 00:00:00.000000000 Z
11
+ date: 2024-02-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bigdecimal