code-ruby 0.7.7 → 0.7.8

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: 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