code-ruby 0.7.7 → 0.7.8

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d84bcfcb9ae6cbd546334c89b2aefd5a0b70bf4da537d0fe646c5f2a8030c4a3
4
- data.tar.gz: d9894a0ee1a9c80fa1744b4b29c3b8065c6dedd310558d0f4210f252f5f330a2
3
+ metadata.gz: 5bbad84793e5bbf2f414b6f151f528534f7925ae62182cb101afb3d4c3d79ef0
4
+ data.tar.gz: 76759f9e4dc4ac0a1abce13727d003930cd498933ffabe83b8b83334850e5af1
5
5
  SHA512:
6
- metadata.gz: f18605e6c94eccb892d45d09dddb06cf4f5fba5f2f1f30df077687812424ea97c0fde6c3c53f80bc075dfc362864307d17ef354ed5f45997c9ccc42faeb44658
7
- data.tar.gz: 1333842f223896c4bff55a2359034420631680bfe6d2563458b1dc6546e95e7c1d50b42b577396866f3770592bc574b616aaf48d32acda843d80997a4179bb09
6
+ metadata.gz: e2058ad57bcd88790c5b7201c3509df3fc3ff876db19a53811a7db679e5687ff95800df13cecdc114dbd4ec4b3cec4b36c3778a7800f1568ba251f6b770a5fd9
7
+ data.tar.gz: 7628080cb943ae6169e4e859849fecabe8b4ddc0ac938cdd81f34a689938d6caf3bfd56c0f3d25a76088a6f18789b1309bc80e94ca99922882733bc9ab6b6abc
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- code-ruby (0.7.6)
4
+ code-ruby (0.7.8)
5
5
  activesupport (~> 7)
6
6
  bigdecimal (~> 3)
7
7
  language-ruby (~> 0)
@@ -9,6 +9,20 @@ class Code
9
9
  @raw = raw
10
10
  end
11
11
 
12
+ def call(**args)
13
+ operator = args.fetch(:operator, nil)
14
+
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
24
+ end
25
+
12
26
  def self.name
13
27
  "Class"
14
28
  end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Code
4
+ class Object
5
+ class Date < Object
6
+ attr_reader :raw
7
+
8
+ def initialize(date)
9
+ @raw = date
10
+ end
11
+
12
+ def self.name
13
+ "Date"
14
+ end
15
+
16
+ def self.code_tomorrow
17
+ ::Time.zone ||= Time::DEFAULT_ZONE
18
+ new(::Time.zone.tomorrow)
19
+ end
20
+
21
+ def inspect
22
+ to_s
23
+ end
24
+
25
+ def to_s
26
+ raw.to_s
27
+ end
28
+ end
29
+ end
30
+ end
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "active_support/core_ext/numeric/time"
4
-
5
3
  class Code
6
4
  class Object
7
5
  class Duration < Object
@@ -22,6 +22,9 @@ class Code
22
22
  when "Class"
23
23
  sig(args) { Object.maybe }
24
24
  value ? value.code_to_class : Class.new(Class)
25
+ when "Date"
26
+ sig(args) { Object.maybe }
27
+ value ? value.code_to_date : Class.new(Date)
25
28
  when "Decimal"
26
29
  sig(args) { Object.maybe }
27
30
  value ? value.code_to_decimal : Class.new(Decimal)
@@ -55,6 +58,9 @@ class Code
55
58
  when "String"
56
59
  sig(args) { Object.maybe }
57
60
  value ? value.code_to_string : Class.new(String)
61
+ when "Time"
62
+ sig(args) { Object.maybe }
63
+ value ? value.code_to_time : Class.new(Time)
58
64
  when "context"
59
65
  sig(args) { String.maybe }
60
66
  value ? context.code_get(value) || Nothing.new : context
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "active_support/core_ext/numeric/time"
4
-
5
3
  class Code
6
4
  class Object
7
5
  class Integer < Number
@@ -3,6 +3,8 @@
3
3
  class Code
4
4
  class Object
5
5
  class Time < Object
6
+ DEFAULT_ZONE = "Etc/UTC"
7
+
6
8
  attr_reader :raw
7
9
 
8
10
  def initialize(time)
@@ -13,6 +15,11 @@ class Code
13
15
  "Time"
14
16
  end
15
17
 
18
+ def self.code_tomorrow
19
+ ::Time.zone ||= DEFAULT_ZONE
20
+ new(::Time.zone.tomorrow.beginning_of_day)
21
+ end
22
+
16
23
  def inspect
17
24
  to_s
18
25
  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.7")
5
+ Code::Version = Gem::Version.new("0.7.8")
data/lib/code-ruby.rb CHANGED
@@ -6,6 +6,8 @@ require "timeout"
6
6
  require "zeitwerk"
7
7
  require "language-ruby"
8
8
  require "active_support"
9
+ require "active_support/core_ext/numeric/time"
10
+ require "active_support/core_ext/date/conversions"
9
11
 
10
12
  loader = Zeitwerk::Loader.for_gem(warn_on_extra_files: false)
11
13
  loader.ignore("#{__dir__}/code-ruby.rb")
data/spec/code_spec.rb CHANGED
@@ -190,7 +190,11 @@ RSpec.describe Code do
190
190
  ).to eq(Code.evaluate("[:Hello]"))
191
191
  end
192
192
 
193
- it "works with time" do
194
- Code.evaluate("1.hour.from_now")
193
+ [
194
+ "1.hour.from_now",
195
+ "Time.tomorrow",
196
+ "Date.tomorrow"
197
+ ].each do |input|
198
+ it(input) { Code.evaluate(input) }
195
199
  end
196
200
  end
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.7
4
+ version: 0.7.8
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-12 00:00:00.000000000 Z
11
+ date: 2024-02-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bigdecimal
@@ -118,6 +118,7 @@ files:
118
118
  - lib/code/object/boolean.rb
119
119
  - lib/code/object/class.rb
120
120
  - lib/code/object/context.rb
121
+ - lib/code/object/date.rb
121
122
  - lib/code/object/decimal.rb
122
123
  - lib/code/object/dictionary.rb
123
124
  - lib/code/object/duration.rb