code-ruby 0.7.6 → 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: 64c95ed04939ffd5a6ef493a612ecd1e6b8d877d84be3d3f5bf3420a91642651
4
- data.tar.gz: e8b9314d611e70a621f003ddf70d1e848a34dd479c907701c7bbddfdba7c136c
3
+ metadata.gz: 5bbad84793e5bbf2f414b6f151f528534f7925ae62182cb101afb3d4c3d79ef0
4
+ data.tar.gz: 76759f9e4dc4ac0a1abce13727d003930cd498933ffabe83b8b83334850e5af1
5
5
  SHA512:
6
- metadata.gz: f4fd860c6788054132fab89667660dde0907f816cc9c07d251569a3599b1504a23b620145173243cc2d2e0f22cd35bedec8e695bd589b195de22adf6ee12ddbc
7
- data.tar.gz: 627970ecc40ebc5831be9a099fab08d8372564fd036baa247ae1b953ffa693feda02da7c9d23dbbe217afd57ec807184ecb40f75a59cdd97aab97ff897ee44dd
6
+ metadata.gz: e2058ad57bcd88790c5b7201c3509df3fc3ff876db19a53811a7db679e5687ff95800df13cecdc114dbd4ec4b3cec4b36c3778a7800f1568ba251f6b770a5fd9
7
+ data.tar.gz: 7628080cb943ae6169e4e859849fecabe8b4ddc0ac938cdd81f34a689938d6caf3bfd56c0f3d25a76088a6f18789b1309bc80e94ca99922882733bc9ab6b6abc
data/Gemfile.lock CHANGED
@@ -1,7 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- code-ruby (0.7.3)
4
+ code-ruby (0.7.8)
5
+ activesupport (~> 7)
5
6
  bigdecimal (~> 3)
6
7
  language-ruby (~> 0)
7
8
  zeitwerk (~> 2)
@@ -9,10 +10,29 @@ PATH
9
10
  GEM
10
11
  remote: https://rubygems.org/
11
12
  specs:
13
+ activesupport (7.1.3)
14
+ base64
15
+ bigdecimal
16
+ concurrent-ruby (~> 1.0, >= 1.0.2)
17
+ connection_pool (>= 2.2.5)
18
+ drb
19
+ i18n (>= 1.6, < 2)
20
+ minitest (>= 5.1)
21
+ mutex_m
22
+ tzinfo (~> 2.0)
23
+ base64 (0.2.0)
12
24
  bigdecimal (3.1.6)
25
+ concurrent-ruby (1.2.3)
26
+ connection_pool (2.4.1)
13
27
  diff-lcs (1.5.1)
28
+ drb (2.2.0)
29
+ ruby2_keywords
30
+ i18n (1.14.1)
31
+ concurrent-ruby (~> 1.0)
14
32
  language-ruby (0.6.2)
15
33
  zeitwerk (~> 2)
34
+ minitest (5.22.2)
35
+ mutex_m (0.2.0)
16
36
  rspec (3.13.0)
17
37
  rspec-core (~> 3.13.0)
18
38
  rspec-expectations (~> 3.13.0)
@@ -27,6 +47,9 @@ GEM
27
47
  rspec-support (~> 3.13.0)
28
48
  rspec-support (3.13.0)
29
49
  ruby-prof (1.7.0)
50
+ ruby2_keywords (0.0.5)
51
+ tzinfo (2.0.6)
52
+ concurrent-ruby (~> 1.0)
30
53
  zeitwerk (2.6.13)
31
54
 
32
55
  PLATFORMS
data/code-ruby.gemspec CHANGED
@@ -18,5 +18,6 @@ Gem::Specification.new do |s|
18
18
 
19
19
  s.add_dependency "bigdecimal", "~> 3"
20
20
  s.add_dependency "language-ruby", "~> 0"
21
+ s.add_dependency "activesupport", "~> 7"
21
22
  s.add_dependency "zeitwerk", "~> 2"
22
23
  end
@@ -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
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Code
4
+ class Object
5
+ class Duration < Object
6
+ attr_reader :raw
7
+
8
+ def initialize(duration)
9
+ @raw = duration
10
+ end
11
+
12
+ def self.name
13
+ "Duration"
14
+ end
15
+
16
+ def call(**args)
17
+ operator = args.fetch(:operator, nil)
18
+
19
+ case operator.to_s
20
+ when "from_now"
21
+ sig(args)
22
+ code_from_now
23
+ else
24
+ super
25
+ end
26
+ end
27
+
28
+ def code_from_now
29
+ Time.new(raw.from_now)
30
+ end
31
+
32
+ def inspect
33
+ to_s
34
+ end
35
+
36
+ def to_s
37
+ raw.to_s
38
+ end
39
+ end
40
+ end
41
+ end
@@ -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
@@ -103,6 +103,9 @@ class Code
103
103
  when "four?"
104
104
  sig(args)
105
105
  code_four?
106
+ when "hour", "hours"
107
+ sig(args)
108
+ code_hours
106
109
  when "increment!"
107
110
  sig(args) { Integer.maybe }
108
111
  code_increment!(value)
@@ -382,6 +385,10 @@ class Code
382
385
  Boolean.new(raw.zero?)
383
386
  end
384
387
 
388
+ def code_hours
389
+ Duration.new(raw.hours)
390
+ end
391
+
385
392
  def inspect
386
393
  to_s
387
394
  end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Code
4
+ class Object
5
+ class Time < Object
6
+ DEFAULT_ZONE = "Etc/UTC"
7
+
8
+ attr_reader :raw
9
+
10
+ def initialize(time)
11
+ @raw = time
12
+ end
13
+
14
+ def self.name
15
+ "Time"
16
+ end
17
+
18
+ def self.code_tomorrow
19
+ ::Time.zone ||= DEFAULT_ZONE
20
+ new(::Time.zone.tomorrow.beginning_of_day)
21
+ end
22
+
23
+ def inspect
24
+ to_s
25
+ end
26
+
27
+ def to_s
28
+ raw.to_s
29
+ end
30
+ end
31
+ end
32
+ 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.6")
5
+ Code::Version = Gem::Version.new("0.7.8")
data/lib/code-ruby.rb CHANGED
@@ -5,6 +5,9 @@ require "stringio"
5
5
  require "timeout"
6
6
  require "zeitwerk"
7
7
  require "language-ruby"
8
+ require "active_support"
9
+ require "active_support/core_ext/numeric/time"
10
+ require "active_support/core_ext/date/conversions"
8
11
 
9
12
  loader = Zeitwerk::Loader.for_gem(warn_on_extra_files: false)
10
13
  loader.ignore("#{__dir__}/code-ruby.rb")
data/spec/code_spec.rb CHANGED
@@ -189,4 +189,12 @@ RSpec.describe Code do
189
189
  )
190
190
  ).to eq(Code.evaluate("[:Hello]"))
191
191
  end
192
+
193
+ [
194
+ "1.hour.from_now",
195
+ "Time.tomorrow",
196
+ "Date.tomorrow"
197
+ ].each do |input|
198
+ it(input) { Code.evaluate(input) }
199
+ end
192
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.6
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
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: activesupport
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '7'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '7'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: zeitwerk
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -104,8 +118,10 @@ files:
104
118
  - lib/code/object/boolean.rb
105
119
  - lib/code/object/class.rb
106
120
  - lib/code/object/context.rb
121
+ - lib/code/object/date.rb
107
122
  - lib/code/object/decimal.rb
108
123
  - lib/code/object/dictionary.rb
124
+ - lib/code/object/duration.rb
109
125
  - lib/code/object/function.rb
110
126
  - lib/code/object/global.rb
111
127
  - lib/code/object/identifier_list.rb
@@ -116,6 +132,7 @@ files:
116
132
  - lib/code/object/range.rb
117
133
  - lib/code/object/ruby_function.rb
118
134
  - lib/code/object/string.rb
135
+ - lib/code/object/time.rb
119
136
  - lib/code/parser.rb
120
137
  - lib/code/parser/addition.rb
121
138
  - lib/code/parser/and_operator.rb