module ActiveRecord::ConnectionAdapters::SQLServer::Type::TimeValueFractional

Private Instance Methods

apply_seconds_precision(value) click to toggle source
# File lib/active_record/connection_adapters/sqlserver/type/time_value_fractional.rb, line 10
def apply_seconds_precision(value)
  return value if !value.respond_to?(fractional_property) || value.send(fractional_property).zero?

  value.change fractional_property => seconds_precision(value)
end
fractional_digits() click to toggle source
# File lib/active_record/connection_adapters/sqlserver/type/time_value_fractional.rb, line 36
def fractional_digits
  6
end
fractional_operator() click to toggle source
# File lib/active_record/connection_adapters/sqlserver/type/time_value_fractional.rb, line 40
def fractional_operator
  10**fractional_digits
end
fractional_precision() click to toggle source
# File lib/active_record/connection_adapters/sqlserver/type/time_value_fractional.rb, line 44
def fractional_precision
  0.00333
end
fractional_property() click to toggle source
# File lib/active_record/connection_adapters/sqlserver/type/time_value_fractional.rb, line 32
def fractional_property
  :usec
end
fractional_scale() click to toggle source
# File lib/active_record/connection_adapters/sqlserver/type/time_value_fractional.rb, line 48
def fractional_scale
  3
end
quote_fractional(value) click to toggle source
# File lib/active_record/connection_adapters/sqlserver/type/time_value_fractional.rb, line 24
def quote_fractional(value)
  return 0 if fractional_scale == 0

  frac_seconds = seconds_precision(value)
  seconds = (frac_seconds.to_f / fractional_operator.to_f).round(fractional_scale)
  seconds.to_d.to_s.split(".").last.to(fractional_scale - 1)
end
seconds_precision(value) click to toggle source
# File lib/active_record/connection_adapters/sqlserver/type/time_value_fractional.rb, line 16
def seconds_precision(value)
  return 0 if fractional_scale == 0

  seconds = value.send(fractional_property).to_f / fractional_operator.to_f
  seconds = ((seconds * (1 / fractional_precision)).round / (1 / fractional_precision)).round(fractional_scale)
  (seconds * fractional_operator).round(0).to_i
end