class PhcStringFormat::PhcString
Parser for parsing PHC-string-format.
Public Class Methods
create(id:, version: nil, params: nil, salt: nil, hash: nil, hint: {})
click to toggle source
# File lib/phc_string_format/phc_string.rb, line 28 def self.create(id:, version: nil, params: nil, salt: nil, hash: nil, hint: {}) PhcString.new \ id, (Parameters.to_s(v: version) if version), (Parameters.to_s(params) if params), hint.dig(:salt, :encoding) == '7bit' ? salt : B64.encode(salt), B64.encode(hash) end
new(id, version_string, params_string, encoded_salt, encoded_hash)
click to toggle source
# File lib/phc_string_format/phc_string.rb, line 58 def initialize(id, version_string, params_string, encoded_salt, encoded_hash) @id = id @version_string = version_string @params_string = params_string @encoded_salt = encoded_salt @encoded_hash = encoded_hash self.class.do_validate self end
parse(string)
click to toggle source
# File lib/phc_string_format/phc_string.rb, line 8 def self.parse(string) string ||= '' PhcString.new(*split(string)) rescue StandardError => exception raise ParseError, exception.message end
Private Class Methods
split(string)
click to toggle source
:reek: DuplicateMethodCall { allow_calls: ['elements.shift', 'elements.first'] }
# File lib/phc_string_format/phc_string.rb, line 16 def self.split(string) elements = string.split(/\$/, 6) elements.shift [ elements.shift, (elements.shift if (elements.first || '').start_with?('v=')), (elements.shift if (elements.first || '').include?('=')), elements.shift, elements.shift ] end
Public Instance Methods
==(other)
click to toggle source
# File lib/phc_string_format/phc_string.rb, line 92 def ==(other) instance_variable_values = other.instance_variables.map { |name| other.instance_variable_get(name) } instance_variable_values == instance_variables.map { |name| instance_variable_get(name) } end
to_h(pick: nil, hint: {})
click to toggle source
# File lib/phc_string_format/phc_string.rb, line 78 def to_h(pick: nil, hint: {}) pick ||= %i[id version params salt hash] { id: (@id if pick.include?(:id)), version: (Parameters.to_h(@version_string)['v'] if pick.include?(:version)), params: (Parameters.to_h(@params_string) if pick.include?(:params)), salt: if pick.include?(:salt) hint.dig(:salt, :encoding) == '7bit' ? @encoded_salt : B64.decode(@encoded_salt) end, hash: (B64.decode(@encoded_hash) if pick.include?(:hash)) }.select { |_, value| value } end
to_s()
click to toggle source
# File lib/phc_string_format/phc_string.rb, line 68 def to_s '$' + [ @id, @version_string, @params_string, @encoded_salt, @encoded_hash ].compact.join('$') end
Private Instance Methods
validate_params_string()
click to toggle source
# File lib/phc_string_format/phc_string.rb, line 99 def validate_params_string !@params_string || !@params_string.empty? && @params_string.split(',').all? \ { |param| param =~ %r{\A[a-z0-9-]{1,32}=[a-zA-Z0-9/+.-]+\z} } end
validate_salt_and_hash()
click to toggle source
# File lib/phc_string_format/phc_string.rb, line 104 def validate_salt_and_hash @encoded_salt || !@encoded_hash end