Class: ReactOnRailsPro::LicenseValidator
- Inherits:
-
Object
- Object
- ReactOnRailsPro::LicenseValidator
- Defined in:
- lib/react_on_rails_pro/license_validator.rb,
sig/react_on_rails_pro/license_validator.rbs
Overview
Validates React on Rails Pro licenses. This class only determines license status - it does NOT log. All logging is handled by Engine.log_license_status for environment-aware messaging. rubocop:disable Metrics/ClassLength
Constant Summary collapse
- VALID_PLANS =
Valid license plan types
%w[paid startup nonprofit education oss partner].freeze
- ATTRIBUTION_REQUIRED_PLANS =
Recognized plans, all of which require product-level attribution
VALID_PLANS- LICENSE_MUTEX =
Mutex for thread-safe license status initialization. Using a constant eliminates the race condition that would exist with @mutex ||= Mutex.new See: https://bugs.ruby-lang.org/issues/20875
Mutex.new
- ENV_LICENSE_CACHE_KEY =
Explicit tokens receive distinct cache keys so later application configuration cannot reuse ENV/default metadata. The ENV/default path intentionally retains one process-lifetime key and the existing reset-required semantics.
Object.new.freeze
Class Method Summary collapse
-
.attribution_required? ⇒ Boolean
Returns whether attribution is required for this license.
-
.license_expiration ⇒ Time?
Returns the license expiration time if available.
-
.license_info ⇒ license_info_hash
Returns license information for use in helpers and components.
-
.license_organization ⇒ String?
Returns the organization name from the license if available.
-
.license_plan ⇒ String?
Returns the license plan type if available.
-
.license_status ⇒ license_status
Returns the current license status (never raises, never logs) Thread-safe: uses Mutex to prevent race conditions during initialization.
-
.reset! ⇒ void
Resets all cached state (primarily for testing).
Class Method Details
.attribution_required? ⇒ Boolean
Returns whether attribution is required for this license
79 80 81 |
# File 'lib/react_on_rails_pro/license_validator.rb', line 79 def attribution_required? fetch_cached_license_value(:@attribution_required) { determine_attribution_required } end |
.license_expiration ⇒ Time?
Returns the license expiration time if available
59 60 61 |
# File 'lib/react_on_rails_pro/license_validator.rb', line 59 def license_expiration fetch_cached_license_value(:@license_expiration) { determine_license_expiration } end |
.license_info ⇒ license_info_hash
Returns license information for use in helpers and components
85 86 87 88 89 90 91 92 93 |
# File 'lib/react_on_rails_pro/license_validator.rb', line 85 def license_info { org: license_organization, plan: license_plan, status: license_status, attribution_required: attribution_required?, expiration: license_expiration } end |
.license_organization ⇒ String?
Returns the organization name from the license if available
65 66 67 |
# File 'lib/react_on_rails_pro/license_validator.rb', line 65 def license_organization fetch_cached_license_value(:@license_organization) { determine_license_organization } end |
.license_plan ⇒ String?
Returns the license plan type if available
71 72 73 |
# File 'lib/react_on_rails_pro/license_validator.rb', line 71 def license_plan fetch_cached_license_value(:@license_plan) { determine_license_plan } end |
.license_status ⇒ license_status
Returns the current license status (never raises, never logs) Thread-safe: uses Mutex to prevent race conditions during initialization
53 54 55 |
# File 'lib/react_on_rails_pro/license_validator.rb', line 53 def license_status fetch_cached_license_value(:@license_status) { determine_license_status } end |
.reset! ⇒ void
This method returns an undefined value.
Resets all cached state (primarily for testing)
96 97 98 99 100 101 102 103 104 |
# File 'lib/react_on_rails_pro/license_validator.rb', line 96 def reset! LICENSE_MUTEX.synchronize do remove_instance_variable(:@license_status) if defined?(@license_status) remove_instance_variable(:@license_expiration) if defined?(@license_expiration) remove_instance_variable(:@license_organization) if defined?(@license_organization) remove_instance_variable(:@license_plan) if defined?(@license_plan) remove_instance_variable(:@attribution_required) if defined?(@attribution_required) end end |