gloo-lang 1.3.1 → 1.4.0

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: 4841953991280e59438ad214524e7455f56f32ac40c32fe8dd098c50356fdda9
4
- data.tar.gz: afee2eab8f28fa8c623b055aa1ecf2180de8d64f01db39573b011192e029a8d9
3
+ metadata.gz: d531b63b5915a6b08b376c0363e3077df486261991e3db9b505ff141d1245b64
4
+ data.tar.gz: f2b6bc778beac2fe00e846ea85376b2519e21cd824036ca18832592c134add90
5
5
  SHA512:
6
- metadata.gz: cd8fd626bccda5ef52a36ade7b80dca1ceb725491ee06d17c51a889e879fbeedfd23205104b2ed7d1415ec473b960643dbf64a7ec364efbe2142a76c261e69f4
7
- data.tar.gz: 49f3ec4f75fabff9cba8e743e8d6db5694639b543516488e15830bd28f3cc698da7b1ce42a601f4c868467f0e80eaa18c296747528e781c16170130068f170d8
6
+ metadata.gz: 888622b3913bff08e64a3621c93d1af29bd73076992bc50de1cc39daf2b925744c66ceaf2ef1b3eb67ffa780c93a7b50ae9c2a3e768127756a33a996b67d2789
7
+ data.tar.gz: c5c0a5bdb099ad613d7e70367ecd320a428e2b129c70fe75472ea5779170e91181fecf81245ae294a04a561b2425ceb5ad782c5630682ff629d5d1075aed43d8
data/lib/VERSION CHANGED
@@ -1 +1 @@
1
- 1.3.1
1
+ 1.4.0
@@ -0,0 +1,21 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 2023 Eric Crane. All rights reserved.
3
+ #
4
+ # Conversion tool: String to Date.
5
+ #
6
+ require 'chronic'
7
+
8
+ module GlooLang
9
+ module Convert
10
+ class StringToDate
11
+
12
+ #
13
+ # Convert the given string value to date.
14
+ #
15
+ def convert( value )
16
+ return Chronic.parse( value )
17
+ end
18
+
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 2023 Eric Crane. All rights reserved.
3
+ #
4
+ # Conversion tool: String to Time.
5
+ #
6
+ require 'chronic'
7
+
8
+ module GlooLang
9
+ module Convert
10
+ class StringToTime
11
+
12
+ #
13
+ # Convert the given string value to time.
14
+ #
15
+ def convert( value )
16
+ return Chronic.parse( value )
17
+ end
18
+
19
+ end
20
+ end
21
+ end
@@ -12,6 +12,7 @@ module GlooLang
12
12
  ROOT = 'root'.freeze
13
13
  IT = 'it'.freeze
14
14
  ERROR = 'error'.freeze
15
+ CONTEXT = '@'.freeze
15
16
 
16
17
  attr_reader :src, :elements
17
18
 
@@ -124,6 +125,21 @@ module GlooLang
124
125
  return @elements.count > 1
125
126
  end
126
127
 
128
+ #
129
+ # Does the path start with the context?
130
+ #
131
+ def includes_context?
132
+ return @src.start_with?( "#{CONTEXT}." )
133
+ end
134
+
135
+ #
136
+ # Expand the context so we have the full path.
137
+ #
138
+ def expand_context
139
+ # return unless @engine.heap.context
140
+ self.set_to( "#{@engine.heap.context}#{@src[1..-1]}" )
141
+ end
142
+
127
143
  #
128
144
  # Get the parent that contains the object referenced.
129
145
  #
@@ -180,6 +196,10 @@ module GlooLang
180
196
  Here.expand_here( @engine, self )
181
197
  end
182
198
 
199
+ if self.includes_context?
200
+ expand_context
201
+ end
202
+
183
203
  parent = self.get_parent
184
204
  return nil unless parent
185
205
 
@@ -10,6 +10,7 @@ module GlooLang
10
10
 
11
11
  KEYWORD = 'date'.freeze
12
12
  KEYWORD_SHORT = 'date'.freeze
13
+ DEFAULT_FORMAT = '%Y.%m.%d'.freeze
13
14
 
14
15
  #
15
16
  # The name of the object type.
@@ -25,6 +26,21 @@ module GlooLang
25
26
  return KEYWORD_SHORT
26
27
  end
27
28
 
29
+ #
30
+ # Set the value with any necessary type conversions.
31
+ #
32
+ def set_value( new_value )
33
+ if DtTools.is_dt_type? new_value
34
+ self.value = new_value
35
+ else
36
+ self.value = @engine.converter.convert( new_value, 'Date', nil )
37
+ end
38
+
39
+ if DtTools.is_dt_type? self.value
40
+ self.value = self.value.strftime( DEFAULT_FORMAT )
41
+ end
42
+ end
43
+
28
44
  # ---------------------------------------------------------------------
29
45
  # Messages
30
46
  # ---------------------------------------------------------------------
@@ -40,9 +56,8 @@ module GlooLang
40
56
  # Set to the current date.
41
57
  #
42
58
  def msg_now
43
- t = DateTime.now.strftime( '%Y.%m.%d' )
44
- self.value = t
45
- @engine.heap.it.set_to t
59
+ self.set_value( DateTime.now )
60
+ @engine.heap.it.set_to self.value
46
61
  end
47
62
 
48
63
  end
@@ -3,6 +3,7 @@
3
3
  #
4
4
  # A Date and Time object.
5
5
  #
6
+ require 'active_support/all'
6
7
 
7
8
  module GlooLang
8
9
  module Objs
@@ -10,6 +11,7 @@ module GlooLang
10
11
 
11
12
  KEYWORD = 'datetime'.freeze
12
13
  KEYWORD_SHORT = 'dt'.freeze
14
+ DEFAULT_FORMAT = '%Y.%m.%d %I:%M:%S %P'.freeze
13
15
 
14
16
  #
15
17
  # The name of the object type.
@@ -29,14 +31,17 @@ module GlooLang
29
31
  # Set the value with any necessary type conversions.
30
32
  #
31
33
  def set_value( new_value )
32
- unless new_value.is_a? DateTime
34
+ if DtTools.is_dt_type? new_value
35
+ self.value = new_value
36
+ else
33
37
  self.value = @engine.converter.convert( new_value, 'DateTime', nil )
34
- return
35
38
  end
36
39
 
37
- self.value = new_value
40
+ if DtTools.is_dt_type? self.value
41
+ self.value = self.value.strftime( DEFAULT_FORMAT )
42
+ end
38
43
  end
39
-
44
+
40
45
  # ---------------------------------------------------------------------
41
46
  # Messages
42
47
  # ---------------------------------------------------------------------
@@ -45,16 +50,69 @@ module GlooLang
45
50
  # Get a list of message names that this object receives.
46
51
  #
47
52
  def self.messages
48
- return super + %w[now]
53
+ return super + %w[now is_today is_future is_past is_yesterday is_tomorrow is_this_week]
54
+ end
55
+
56
+ #
57
+ # Tell the datetime to check if it is today.
58
+ #
59
+ def msg_is_today
60
+ today = DtTools.is_today?( self.value )
61
+ @engine.heap.it.set_to today
62
+ return today
63
+ end
64
+
65
+ #
66
+ # Tell the datetime to check if it is in the future.
67
+ #
68
+ def msg_is_future
69
+ today = DtTools.is_future?( self.value )
70
+ @engine.heap.it.set_to today
71
+ return today
72
+ end
73
+
74
+ #
75
+ # Tell the datetime to check if it is in the past.
76
+ #
77
+ def msg_is_past
78
+ today = DtTools.is_past?( self.value )
79
+ @engine.heap.it.set_to today
80
+ return today
81
+ end
82
+
83
+ #
84
+ # Tell the datetime to check if it is yesterday.
85
+ #
86
+ def msg_is_yesterday
87
+ today = DtTools.is_yesterday?( self.value )
88
+ @engine.heap.it.set_to today
89
+ return today
90
+ end
91
+
92
+ #
93
+ # Tell the datetime to check if it is tomorrow.
94
+ #
95
+ def msg_is_tomorrow
96
+ today = DtTools.is_tomorrow?( self.value )
97
+ @engine.heap.it.set_to today
98
+ return today
99
+ end
100
+
101
+ #
102
+ # Tell the datetime to check if it is this week.
103
+ #
104
+ def msg_is_this_week
105
+ today = DtTools.is_this_week?( self.value )
106
+ @engine.heap.it.set_to today
107
+ return today
49
108
  end
50
109
 
51
110
  #
52
111
  # Set to the current date and time.
53
112
  #
54
113
  def msg_now
55
- t = DateTime.now.strftime( '%Y.%m.%d %I:%M:%S %P' )
56
- self.value = t
57
- @engine.heap.it.set_to t
114
+ self.set_value( DateTime.now )
115
+ @engine.heap.it.set_to self.value
58
116
  end
59
117
 
60
118
  end
@@ -0,0 +1,100 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 2020 Eric Crane. All rights reserved.
3
+ #
4
+ # A Date and Time object.
5
+ #
6
+
7
+ class DtTools
8
+
9
+ # ---------------------------------------------------------------------
10
+ # Type helpers
11
+ # ---------------------------------------------------------------------
12
+
13
+ #
14
+ # Is the given object a base Date Time object?
15
+ # True for DateTime and Time
16
+ #
17
+ def self.is_dt_type? obj
18
+ return true if obj.is_a? ::DateTime
19
+ return true if obj.is_a? ::Time
20
+ return false
21
+ end
22
+
23
+ # ---------------------------------------------------------------------
24
+ # Language helpers
25
+ # ---------------------------------------------------------------------
26
+
27
+ #
28
+ # Get the beginning of the week.
29
+ #
30
+ def self.beginning_of_week
31
+ return Time.now.beginning_of_week( start_day = :sunday )
32
+ end
33
+
34
+ #
35
+ # Is the date in the next 10 days?
36
+ #
37
+ def self.in_next_ten_days?( dt )
38
+ return false if DtTools.is_past?( dt )
39
+ dt < 10.days.from_now.end_of_day
40
+ end
41
+
42
+ #
43
+ # Is the date in the past?
44
+ #
45
+ def self.is_past?( dt )
46
+ dt < Time.now.beginning_of_day
47
+ end
48
+
49
+ #
50
+ # Is the date in the future?
51
+ #
52
+ def self.is_future?( dt )
53
+ dt > Time.now.end_of_day
54
+ end
55
+
56
+ #
57
+ # Is the given date today?
58
+ #
59
+ def self.is_today?( dt )
60
+ return false if dt.blank?
61
+ dt = Chronic.parse( dt ) if dt.is_a? String
62
+ return false if dt <= ::Time.now.beginning_of_day
63
+ return false if dt >= ::Time.now.end_of_day
64
+ return true
65
+ end
66
+
67
+ #
68
+ # Is the given date tomorrow?
69
+ #
70
+ def self.is_tomorrow?( dt )
71
+ return false if dt.blank?
72
+ dt = Chronic.parse( dt ) if dt.is_a? String
73
+ return false if dt <= ( ::Time.now.beginning_of_day + 1.day )
74
+ return false if dt >= ( ::Time.now.end_of_day + 1.day )
75
+ return true
76
+ end
77
+
78
+ #
79
+ # Is the given date yesterday?
80
+ #
81
+ def self.is_yesterday?( dt )
82
+ return false if dt.blank?
83
+ dt = Chronic.parse( dt ) if dt.is_a? String
84
+ return false if dt <= ( ::Time.now.beginning_of_day - 1.day )
85
+ return false if dt >= ( ::Time.now.end_of_day - 1.day )
86
+ return true
87
+ end
88
+
89
+ #
90
+ # Is the given date this week?
91
+ #
92
+ def self.is_this_week?( dt )
93
+ return false if dt.blank?
94
+ dt = Chronic.parse( dt ) if dt.is_a?( String )
95
+ return false if dt <= ::Time.now.beginning_of_week( start_day = :sunday )
96
+ return false if dt >= ::Time.now.end_of_week( start_day = :sunday )
97
+ return true
98
+ end
99
+
100
+ end
@@ -10,6 +10,7 @@ module GlooLang
10
10
 
11
11
  KEYWORD = 'time'.freeze
12
12
  KEYWORD_SHORT = 'time'.freeze
13
+ DEFAULT_FORMAT = '%I:%M:%S %P'.freeze
13
14
 
14
15
  #
15
16
  # The name of the object type.
@@ -25,6 +26,21 @@ module GlooLang
25
26
  return KEYWORD_SHORT
26
27
  end
27
28
 
29
+ #
30
+ # Set the value with any necessary type conversions.
31
+ #
32
+ def set_value( new_value )
33
+ if DtTools.is_dt_type? new_value
34
+ self.value = new_value
35
+ else
36
+ self.value = @engine.converter.convert( new_value, 'Time', nil )
37
+ end
38
+
39
+ if DtTools.is_dt_type? self.value
40
+ self.value = self.value.strftime( DEFAULT_FORMAT )
41
+ end
42
+ end
43
+
28
44
  # ---------------------------------------------------------------------
29
45
  # Messages
30
46
  # ---------------------------------------------------------------------
@@ -40,9 +56,8 @@ module GlooLang
40
56
  # Set to the current time.
41
57
  #
42
58
  def msg_now
43
- t = DateTime.now.strftime( '%I:%M:%S %P' )
44
- self.value = t
45
- @engine.heap.it.set_to t
59
+ self.set_value( DateTime.now )
60
+ @engine.heap.it.set_to self.value
46
61
  end
47
62
 
48
63
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gloo-lang
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Crane
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-11-09 00:00:00.000000000 Z
11
+ date: 2023-04-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -214,9 +214,11 @@ files:
214
214
  - lib/gloo_lang/app/platform.rb
215
215
  - lib/gloo_lang/app/settings.rb
216
216
  - lib/gloo_lang/convert/converter.rb
217
+ - lib/gloo_lang/convert/string_to_date.rb
217
218
  - lib/gloo_lang/convert/string_to_datetime.rb
218
219
  - lib/gloo_lang/convert/string_to_decimal.rb
219
220
  - lib/gloo_lang/convert/string_to_integer.rb
221
+ - lib/gloo_lang/convert/string_to_time.rb
220
222
  - lib/gloo_lang/core/baseo.rb
221
223
  - lib/gloo_lang/core/dictionary.rb
222
224
  - lib/gloo_lang/core/error.rb
@@ -264,6 +266,7 @@ files:
264
266
  - lib/gloo_lang/objs/data/table.rb
265
267
  - lib/gloo_lang/objs/dt/date.rb
266
268
  - lib/gloo_lang/objs/dt/datetime.rb
269
+ - lib/gloo_lang/objs/dt/dt_tools.rb
267
270
  - lib/gloo_lang/objs/dt/time.rb
268
271
  - lib/gloo_lang/objs/ror/erb.rb
269
272
  - lib/gloo_lang/objs/ror/eval.rb