Skip to content

Instantly share code, notes, and snippets.

@daniloisr
Created December 16, 2022 21:34
Show Gist options
  • Save daniloisr/c4d725d64997a44d96b8e65a1906d920 to your computer and use it in GitHub Desktop.
Save daniloisr/c4d725d64997a44d96b8e65a1906d920 to your computer and use it in GitHub Desktop.
require 'bundler/inline'
gemfile do
source 'https://rubygems.org'
gem 'activerecord'
gem 'pg'
gem 'benchmark-ips'
gem 'oj'
end
require 'active_record'
require 'logger'
pg_opts = {adapter: "postgresql", username: 'postgres', password: 'postgres', database: "appt_time_range_bench"}
begin
ActiveRecord::Base.establish_connection(pg_opts.except(:database))
ActiveRecord::Base.connection.create_database(pg_opts[:database])
puts "Database #{pg_opts[:database]} was created."
rescue => e
puts e
puts "Database #{pg_opts[:database]} already exists.\n"
end
ActiveRecord::Base.establish_connection(pg_opts)
ActiveRecord::Base.logger = Logger.new(STDOUT)
begin
ActiveRecord::Schema.define do
create_table :appts, force: true do |t|
t.tstzrange :time_range
end
end
rescue PG::DuplicateTable, ActiveRecord::StatementInvalid
nil
end
class Appt < ActiveRecord::Base
end
x = Appt.new(time_range: 1.hour.from_now..2.hours.from_now)
opts = { mode: :rails }
puts "time_range: #{x.time_range} (#{x.time_range.class})"
dump = Oj.dump(x, opts)
puts dump
loaded = Oj.load(dump, opts)
puts "loaded: #{loaded} (#{loaded['time_range'].class})"
y = Appt.new(loaded)
puts "time_range: #{x.time_range} (#{x.time_range.class})"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment