Class: Gloo::Objs::Datetime
- Inherits:
-
Core::Obj
- Object
- Core::Baseo
- Core::Obj
- Gloo::Objs::Datetime
- Defined in:
- lib/gloo/objs/dt/datetime.rb
Constant Summary collapse
- KEYWORD =
'datetime'.freeze
- KEYWORD_SHORT =
'dt'.freeze
- DEFAULT_FORMAT =
'%Y.%m.%d %I:%M:%S %P'.freeze
Constants inherited from Core::Baseo
Core::Baseo::NOT_IMPLEMENTED_ERR
Instance Attribute Summary
Attributes inherited from Core::Obj
Attributes inherited from Core::Baseo
Class Method Summary collapse
-
.doc_data ⇒ Object
Get the object's documentation data.
-
.messages ⇒ Object
Get a list of message names that this object receives.
-
.short_typename ⇒ Object
The short name of the object type.
-
.typename ⇒ Object
The name of the object type.
Instance Method Summary collapse
-
#msg_add ⇒ Object
Add the given modifier to the date.
-
#msg_begin_day ⇒ Object
Set the value to the beginning of the day.
-
#msg_begin_month ⇒ Object
Set the value to the beginning of the month.
-
#msg_begin_week ⇒ Object
Set the value to the beginning of the week.
-
#msg_begin_year ⇒ Object
Set the value to the beginning of the year.
-
#msg_end_day ⇒ Object
Set the value to the end of the day.
-
#msg_end_month ⇒ Object
Set the value to the end of the month.
-
#msg_end_week ⇒ Object
Set the value to the end of the week.
-
#msg_end_year ⇒ Object
Set the value to the end of the year.
-
#msg_format ⇒ Object
Format the date and time.
-
#msg_is_future ⇒ Object
Tell the datetime to check if it is in the future.
-
#msg_is_past ⇒ Object
Tell the datetime to check if it is in the past.
-
#msg_is_this_week ⇒ Object
Tell the datetime to check if it is this week.
-
#msg_is_today ⇒ Object
Tell the datetime to check if it is today.
-
#msg_is_tomorrow ⇒ Object
Tell the datetime to check if it is tomorrow.
-
#msg_is_yesterday ⇒ Object
Tell the datetime to check if it is yesterday.
-
#msg_now ⇒ Object
Set to the current date and time.
-
#msg_sub ⇒ Object
Subtract the given modifier from the date.
-
#set_value(new_value) ⇒ Object
Set the value with any necessary type conversions.
-
#sql_value ⇒ Object
Value for a SQL query.
Methods inherited from Core::Obj
#add_child, #add_children_on_create?, #add_default_children, can_create?, #can_receive_message?, #child_count, #child_index, #contains_child?, #delete_children, #dispatch, #display_value, #find_add_child, #find_child, #find_child_resolve_alias, #find_child_value, help, inherited, #initialize, #is_alias?, #is_container?, #is_function?, #msg_blank?, #msg_contains?, #msg_reload, #msg_responds_to?, #msg_unload, #multiline_value?, #pn, #remove_child, #render, #root?, #send_message, #set_parent, #type_display, #value_display, #value_is_array?, #value_is_blank?, #value_string?
Methods inherited from Core::Baseo
Constructor Details
This class inherits a constructor from Gloo::Core::Obj
Class Method Details
.doc_data ⇒ Object
Get the object's documentation data.
259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 |
# File 'lib/gloo/objs/dt/datetime.rb', line 259 def self.doc_data { :name => KEYWORD, :shortcut => KEYWORD_SHORT, :description => 'A reference to a date and time. The default ' \ "format is: #{DEFAULT_FORMAT}. Note that you can put a " \ 'datetime into a date or time object. You can also put a ' \ 'Chronic phrase into the datetime.', :messages => [ 'now — Set to the current system date and time.', 'add ({amount}) — Add the amount to the date. The amount will be in the form of "1 day" or "3 hours".', 'sub ({amount}) — Subtract the amount from the date. The amount will be in the form of "1 day" or "2 weeks".', 'is_today — Is the datetime today? It will be true or false.', 'is_past — Is the datetime in the past? It will be true or false.', 'is_future — Is the datetime in the future? It will be true or false.', 'is_yesterday — Is the datetime yesterday? It will be true or false.', 'is_tomorrow — Is the datetime tomorrow? It will be true or false.', 'is_this_week — Is the datetime during this week? It will be true or false.', 'begin_day — Set the datetime to the start of the day.', 'end_day — Set the datetime to the end of the day.', 'begin_week — Set the datetime to the start of the week.', 'end_week — Set the datetime to the end of the week.', 'begin_month — Set the datetime to the start of the month.', 'end_month — Set the datetime to the end of the month.', 'begin_year — Set the datetime to the start of the year.', 'end_year — Set the datetime to the end of the year.', 'format ({fmt}) — Format the date and time using a strftime-style format string. Default if none given: %Y-%m-%d %H:%M:%S. It will have the formatted string.' ], :examples => <<~EXAMPLES.strip # # Show the current date and time. # dt [can] : d [datetime] : on_load [script] : tell dt.d to now show dt.d next [script] : put '1 week from now' into dt.d EXAMPLES } end |
.messages ⇒ Object
Get a list of message names that this object receives.
61 62 63 64 65 66 |
# File 'lib/gloo/objs/dt/datetime.rb', line 61 def self. return super + %w[now add sub is_today is_future is_past is_yesterday is_tomorrow is_this_week begin_day end_day begin_week end_week begin_month end_month begin_year end_year format] end |
.short_typename ⇒ Object
The short name of the object type.
26 27 28 |
# File 'lib/gloo/objs/dt/datetime.rb', line 26 def self.short_typename return KEYWORD_SHORT end |
.typename ⇒ Object
The name of the object type.
19 20 21 |
# File 'lib/gloo/objs/dt/datetime.rb', line 19 def self.typename return KEYWORD end |
Instance Method Details
#msg_add ⇒ Object
Add the given modifier to the date.
71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/gloo/objs/dt/datetime.rb', line 71 def msg_add modifier = "1 day" if @params&.token_count&.positive? expr = Gloo::Expr::Expression.new( @engine, @params.tokens ) data = expr.evaluate modifier = data end dt = Chronic.parse( self.value ) new_value = DtTools.add( dt, modifier ) self.set_value( new_value ) @engine.heap.it.set_to self.value end |
#msg_begin_day ⇒ Object
Set the value to the beginning of the day.
158 159 160 161 162 |
# File 'lib/gloo/objs/dt/datetime.rb', line 158 def msg_begin_day dt = self.value.to_time.beginning_of_day self.set_value dt @engine.heap.it.set_to dt end |
#msg_begin_month ⇒ Object
Set the value to the beginning of the month.
104 105 106 107 108 |
# File 'lib/gloo/objs/dt/datetime.rb', line 104 def msg_begin_month dt = self.value.to_time.beginning_of_month self.set_value dt @engine.heap.it.set_to dt end |
#msg_begin_week ⇒ Object
Set the value to the beginning of the week.
140 141 142 143 144 |
# File 'lib/gloo/objs/dt/datetime.rb', line 140 def msg_begin_week dt = self.value.to_time.beginning_of_week( start_day = :sunday ) self.set_value dt @engine.heap.it.set_to dt end |
#msg_begin_year ⇒ Object
Set the value to the beginning of the year.
122 123 124 125 126 |
# File 'lib/gloo/objs/dt/datetime.rb', line 122 def msg_begin_year dt = self.value.to_time.beginning_of_year self.set_value dt @engine.heap.it.set_to dt end |
#msg_end_day ⇒ Object
Set the value to the end of the day.
167 168 169 170 171 |
# File 'lib/gloo/objs/dt/datetime.rb', line 167 def msg_end_day dt = self.value.to_time.end_of_day self.set_value dt @engine.heap.it.set_to dt end |
#msg_end_month ⇒ Object
Set the value to the end of the month.
113 114 115 116 117 |
# File 'lib/gloo/objs/dt/datetime.rb', line 113 def msg_end_month dt = self.value.to_time.end_of_month self.set_value dt @engine.heap.it.set_to dt end |
#msg_end_week ⇒ Object
Set the value to the end of the week.
149 150 151 152 153 |
# File 'lib/gloo/objs/dt/datetime.rb', line 149 def msg_end_week dt = self.value.to_time.end_of_week( start_day = :sunday ) self.set_value dt @engine.heap.it.set_to dt end |
#msg_end_year ⇒ Object
Set the value to the end of the year.
131 132 133 134 135 |
# File 'lib/gloo/objs/dt/datetime.rb', line 131 def msg_end_year dt = self.value.to_time.end_of_year self.set_value dt @engine.heap.it.set_to dt end |
#msg_format ⇒ Object
Format the date and time.
241 242 243 244 245 246 247 248 249 250 |
# File 'lib/gloo/objs/dt/datetime.rb', line 241 def msg_format format = "%Y-%m-%d %H:%M:%S" if @params&.token_count&.positive? expr = Gloo::Expr::Expression.new( @engine, @params.tokens ) data = expr.evaluate format = data end dt = Chronic.parse( self.value ) @engine.heap.it.set_to dt.strftime( format ) end |
#msg_is_future ⇒ Object
Tell the datetime to check if it is in the future.
186 187 188 189 190 |
# File 'lib/gloo/objs/dt/datetime.rb', line 186 def msg_is_future today = DtTools.is_future?( self.value ) @engine.heap.it.set_to today return today end |
#msg_is_past ⇒ Object
Tell the datetime to check if it is in the past.
195 196 197 198 199 |
# File 'lib/gloo/objs/dt/datetime.rb', line 195 def msg_is_past today = DtTools.is_past?( self.value ) @engine.heap.it.set_to today return today end |
#msg_is_this_week ⇒ Object
Tell the datetime to check if it is this week.
222 223 224 225 226 |
# File 'lib/gloo/objs/dt/datetime.rb', line 222 def msg_is_this_week today = DtTools.is_this_week?( self.value ) @engine.heap.it.set_to today return today end |
#msg_is_today ⇒ Object
Tell the datetime to check if it is today.
177 178 179 180 181 |
# File 'lib/gloo/objs/dt/datetime.rb', line 177 def msg_is_today today = DtTools.is_today?( self.value ) @engine.heap.it.set_to today return today end |
#msg_is_tomorrow ⇒ Object
Tell the datetime to check if it is tomorrow.
213 214 215 216 217 |
# File 'lib/gloo/objs/dt/datetime.rb', line 213 def msg_is_tomorrow today = DtTools.is_tomorrow?( self.value ) @engine.heap.it.set_to today return today end |
#msg_is_yesterday ⇒ Object
Tell the datetime to check if it is yesterday.
204 205 206 207 208 |
# File 'lib/gloo/objs/dt/datetime.rb', line 204 def msg_is_yesterday today = DtTools.is_yesterday?( self.value ) @engine.heap.it.set_to today return today end |
#msg_now ⇒ Object
Set to the current date and time.
231 232 233 234 |
# File 'lib/gloo/objs/dt/datetime.rb', line 231 def msg_now self.set_value( DateTime.now ) @engine.heap.it.set_to self.value end |
#msg_sub ⇒ Object
Subtract the given modifier from the date.
88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/gloo/objs/dt/datetime.rb', line 88 def msg_sub modifier = "1 day" if @params&.token_count&.positive? expr = Gloo::Expr::Expression.new( @engine, @params.tokens ) data = expr.evaluate modifier = data end dt = Chronic.parse( self.value ) self.set_value( DtTools.sub( dt, modifier ) ) @engine.heap.it.set_to self.value end |
#set_value(new_value) ⇒ Object
Set the value with any necessary type conversions.
33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/gloo/objs/dt/datetime.rb', line 33 def set_value( new_value ) if DtTools.is_dt_type? new_value self.value = new_value else self.value = @engine.converter.convert( new_value, 'DateTime', nil ) end if DtTools.is_dt_type? self.value self.value = self.value.strftime( DEFAULT_FORMAT ) end end |
#sql_value ⇒ Object
Value for a SQL query.
48 49 50 51 52 |
# File 'lib/gloo/objs/dt/datetime.rb', line 48 def sql_value return nil if self.value.blank? return Chronic.parse( self.value ) end |