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 =
Plans that require attribution by default
%w[startup oss].freeze
- 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
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
113 114 115 116 117 118 119 120 121 |
# File 'lib/react_on_rails_pro/license_validator.rb', line 113 def attribution_required? return @attribution_required if defined?(@attribution_required) LICENSE_MUTEX.synchronize do return @attribution_required if defined?(@attribution_required) @attribution_required = determine_attribution_required end end |
.license_expiration ⇒ Time?
Returns the license expiration time if available
73 74 75 76 77 78 79 80 81 |
# File 'lib/react_on_rails_pro/license_validator.rb', line 73 def license_expiration return @license_expiration if defined?(@license_expiration) LICENSE_MUTEX.synchronize do return @license_expiration if defined?(@license_expiration) @license_expiration = determine_license_expiration end end |
.license_info ⇒ license_info_hash
Returns license information for use in helpers and components
125 126 127 128 129 130 131 132 133 |
# File 'lib/react_on_rails_pro/license_validator.rb', line 125 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
85 86 87 88 89 90 91 92 93 |
# File 'lib/react_on_rails_pro/license_validator.rb', line 85 def license_organization return @license_organization if defined?(@license_organization) LICENSE_MUTEX.synchronize do return @license_organization if defined?(@license_organization) @license_organization = determine_license_organization end end |
.license_plan ⇒ String?
Returns the license plan type if available
97 98 99 100 101 102 103 104 105 |
# File 'lib/react_on_rails_pro/license_validator.rb', line 97 def license_plan return @license_plan if defined?(@license_plan) LICENSE_MUTEX.synchronize do return @license_plan if defined?(@license_plan) @license_plan = determine_license_plan end end |
.license_status ⇒ license_status
Returns the current license status (never raises, never logs) Thread-safe: uses Mutex to prevent race conditions during initialization
60 61 62 63 64 65 66 67 68 69 |
# File 'lib/react_on_rails_pro/license_validator.rb', line 60 def license_status return @license_status if defined?(@license_status) LICENSE_MUTEX.synchronize do # Double-check pattern: another thread may have set it while we waited return @license_status if defined?(@license_status) @license_status = determine_license_status end end |
.reset! ⇒ void
This method returns an undefined value.
Resets all cached state (primarily for testing)
136 137 138 139 140 141 142 143 144 |
# File 'lib/react_on_rails_pro/license_validator.rb', line 136 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 |