Class: ApiKeys::Helpers::ExpirationOptions
- Inherits:
-
Object
- Object
- ApiKeys::Helpers::ExpirationOptions
- Defined in:
- lib/api_keys/helpers/expiration_options.rb
Overview
Helper for handling API key expiration presets.
Provides a consistent set of expiration options for use in forms, and parsing logic to convert preset strings to actual dates.
Constant Summary collapse
- DEFAULT_PRESETS =
Default preset options with human-readable labels
[ { label: "No Expiration", value: "no_expiration", days: nil }, { label: "7 days", value: "7_days", days: 7 }, { label: "30 days", value: "30_days", days: 30 }, { label: "60 days", value: "60_days", days: 60 }, { label: "90 days", value: "90_days", days: 90 }, { label: "1 year", value: "365_days", days: 365 } ].freeze
Class Method Summary collapse
-
.default_value ⇒ String
Returns the default preset value (useful for form defaults).
-
.for_select(include_no_expiration: true, presets: nil) ⇒ Array<Array>
Returns options suitable for a Rails select helper.
-
.parse(preset) ⇒ ActiveSupport::TimeWithZone?
Parse an expiration preset string into an actual datetime.
Class Method Details
.default_value ⇒ String
Returns the default preset value (useful for form defaults)
90 91 92 |
# File 'lib/api_keys/helpers/expiration_options.rb', line 90 def default_value "no_expiration" end |
.for_select(include_no_expiration: true, presets: nil) ⇒ Array<Array>
Returns options suitable for a Rails select helper.
49 50 51 52 53 54 55 56 57 |
# File 'lib/api_keys/helpers/expiration_options.rb', line 49 def for_select(include_no_expiration: true, presets: nil) = if presets build_custom_presets(presets, include_no_expiration) else filter_default_presets(include_no_expiration) end .map { |opt| [opt[:label], opt[:value]] } end |
.parse(preset) ⇒ ActiveSupport::TimeWithZone?
Parse an expiration preset string into an actual datetime.
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/api_keys/helpers/expiration_options.rb', line 70 def parse(preset) return nil if preset.blank? || preset == "no_expiration" # Try to extract days from the preset string (e.g., "30_days" => 30) if preset =~ /\A(\d+)_days?\z/ days = ::Regexp.last_match(1).to_i # Reasonable max: ~10 years to prevent overflow issues return days.days.from_now if days.positive? && days <= 3650 end # Check against known presets known = DEFAULT_PRESETS.find { |p| p[:value] == preset } return known[:days].days.from_now if known && known[:days] nil end |