Module: LogBrew::Validation
- Defined in:
- lib/logbrew.rb
Class Method Summary collapse
- .normalize_metric_description(value) ⇒ Object
- .numeric_nan?(value) ⇒ Boolean
- .read(attributes, key) ⇒ Object
- .require_allowed_value(label, value, allowed_values) ⇒ Object
- .require_finite_number(label, value) ⇒ Object
- .require_metadata(metadata) ⇒ Object
- .require_non_empty(label, value) ⇒ Object
- .require_timestamp(timestamp) ⇒ Object
- .timestamp_error(timestamp) ⇒ Object
Class Method Details
.normalize_metric_description(value) ⇒ Object
796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 |
# File 'lib/logbrew.rb', line 796 def normalize_metric_description(value) unless value.is_a?(String) && value.valid_encoding? raise SdkError.new( "validation_error", "metric description must be a non-blank string of at most 1024 non-control characters" ) end normalized = value.strip invalid = normalized.each_codepoint.any? do |character| character <= 0x1f || (character >= 0x7f && character <= 0x9f) || character == 0x2028 || character == 0x2029 end if normalized.empty? || normalized.each_codepoint.count > 1024 || invalid raise SdkError.new( "validation_error", "metric description must be a non-blank string of at most 1024 non-control characters" ) end normalized end |
.numeric_nan?(value) ⇒ Boolean
826 827 828 |
# File 'lib/logbrew.rb', line 826 def numeric_nan?(value) value.is_a?(Float) && (value.nan? || value.infinite?) end |
.read(attributes, key) ⇒ Object
816 817 818 819 820 |
# File 'lib/logbrew.rb', line 816 def read(attributes, key) return nil unless attributes.is_a?(Hash) attributes[key] || attributes[key.to_sym] end |
.require_allowed_value(label, value, allowed_values) ⇒ Object
746 747 748 749 750 751 |
# File 'lib/logbrew.rb', line 746 def require_allowed_value(label, value, allowed_values) require_non_empty(label, value) return if allowed_values.include?(value) raise SdkError.new("validation_error", "#{label} must be one of: #{allowed_values.join(', ')}") end |
.require_finite_number(label, value) ⇒ Object
787 788 789 790 791 792 793 794 |
# File 'lib/logbrew.rb', line 787 def require_finite_number(label, value) unless value.is_a?(Integer) || value.is_a?(Float) raise SdkError.new("validation_error", "#{label} must be a finite number") end raise SdkError.new("validation_error", "#{label} must be a finite number") if numeric_nan?(value) value end |
.require_metadata(metadata) ⇒ Object
767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 |
# File 'lib/logbrew.rb', line 767 def () return nil if .nil? raise SdkError.new("validation_error", "metadata must be an object") unless .is_a?(Hash) .each_with_object({}) do |(key, value), copied| normalized_key = key.to_s require_non_empty("metadata key", normalized_key) unless value.nil? || value.is_a?(String) || value.is_a?(Integer) || value.is_a?(Float) || value == true || value == false raise SdkError.new( "validation_error", "metadata value for #{normalized_key} must be a string, number, boolean, or null" ) end raise SdkError.new("validation_error", "metadata value for #{normalized_key} must be finite") if numeric_nan?(value) copied[normalized_key] = value end end |
.require_non_empty(label, value) ⇒ Object
740 741 742 743 744 |
# File 'lib/logbrew.rb', line 740 def require_non_empty(label, value) return if value.is_a?(String) && value.valid_encoding? && !value.strip.empty? raise SdkError.new("validation_error", "#{label} must be non-empty") end |
.require_timestamp(timestamp) ⇒ Object
753 754 755 756 757 758 759 760 761 762 763 764 765 |
# File 'lib/logbrew.rb', line 753 def () require_non_empty("timestamp", ) return if .end_with?("Z") time_parts = .split("T", 2) raise () if time_parts.length < 2 time_portion = time_parts[1] return if time_portion.include?("+") return if time_portion.rindex("-") && time_portion.rindex("-").positive? raise () end |