Ruby: Как использовать дату активной поддержки в vanilla ruby?

Я пишу сценарий Ruby, который включает сравнение дат.

Чтобы сохранить читабельность, я бы хотел сделать что-то вроде 1.day.ago. Я думал, что это будет так же просто, как добавить gem 'activesupport' в мой gemfile и потребовать require 'active_support'. Но это не работает.

Я пошел дальше:

require "active_support/core_ext/date/calculations"
require "active_support/core_ext/integer/time"
require "active_support/core_ext/time"

Но я не совсем там:

1.day.ago
#NameError: uninitialized constant ActiveSupport::IsolatedExecutionState
#
#      ::ActiveSupport::IsolatedExecutionState[:time_zone] || zone_default

…Я не уверен, что еще мне нужно. Как использовать все методы даты/времени активной записи в моем ванильном рубиновом скрипте?

Я подозреваю, что вам нужно gem 'activesupport' (исходя из ошибки, которую вы получаете), но исправление обезьяны не применяется к классу Integer просто путем включения драгоценного камня. Какую ошибку вы получаете, когда используете полный гем?

Narfanator 21.02.2023 20:16

Да, исправление обезьяны не применяется. Требовать только active_support Я получаю сообщение об ошибке: NoMethodError: undefined method month' for 1:Integer`

user3574603 21.02.2023 20:59
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
3
2
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам просто нужно включить ActiveSupport::IsolatedExecutionState например.

# This is not needed because active_support/core_ext/integer/time already requires it
#   require "active_support/core_ext/date/calculations" 
# This is not really needed either as almost all of it will 
# be required by the requirements in active_support/core_ext/integer/time  
#   require "active_support/core_ext/time" 
require "active_support/core_ext/integer/time"
require "active_support/isolated_execution_state.rb"

1.day.ago
#=> 2023-02-20 19:18:49.686473704 +0000

Почему это не требуется в «active_support/core_ext/time/zones», я не могу сказать, поскольку мне кажется, что это должно быть, чтобы избежать этой проблемы.

Если вы действительно хотите включить все activesupport, вы были очень близки, однако на самом деле требуется оператор require 'active_support/all' Содержимое этого файла просто:

require "active_support"
require "active_support/time"
require "active_support/core_ext"

Другие вопросы по теме