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
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
99 100 101 102 103 104 105 106 107 |
# File 'lib/react_on_rails_pro/license_validator.rb', line 99 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
61 62 63 64 65 66 67 68 69 |
# File 'lib/react_on_rails_pro/license_validator.rb', line 61 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
111 112 113 114 115 116 117 118 119 |
# File 'lib/react_on_rails_pro/license_validator.rb', line 111 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
73 74 75 76 77 78 79 80 81 |
# File 'lib/react_on_rails_pro/license_validator.rb', line 73 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
85 86 87 88 89 90 91 92 93 |
# File 'lib/react_on_rails_pro/license_validator.rb', line 85 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
48 49 50 51 52 53 54 55 56 57 |
# File 'lib/react_on_rails_pro/license_validator.rb', line 48 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)
122 123 124 125 126 127 128 129 130 |
# File 'lib/react_on_rails_pro/license_validator.rb', line 122 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 |