pg_conn 0.53.0 → 0.55.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/pg_conn/version.rb +1 -1
  3. data/lib/pg_conn.rb +19 -11
  4. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1cb9d0b1d54fde802259ccfd4ec387b2942a419b947bdea25f86d51f8bd2189e
4
- data.tar.gz: 9b1e0771a76e492d0bd3df41e894f6e3671432c9b4e44e4d394877c182d6ee6f
3
+ metadata.gz: c7a478850b588c635e78fd50cac46e52665ece96fc538eb467eb2bf88fe6d6d7
4
+ data.tar.gz: 8882d70f0289f8b3cdec8c9e3135513788eb09416a0ceb5ad763849f71324d95
5
5
  SHA512:
6
- metadata.gz: 3f75322ccb05a002854210384e08dca377933c9c46dd561d0dc0848f7134590fc72c9beb28dad53023a4725080132c0303db08a8a8f541e4512205f2f68a7fdb
7
- data.tar.gz: 28b911dd19feb70ea7430b074052d6b43c11e4b1fe6653c6c49a0de89837c3c1ecc59a714c5823d226b2163e7460fad47e15af5a06988d8830342c4fe7d20d1e
6
+ metadata.gz: 5c3709874689cbfadf194fde8e4dd1d956ab0456ab205fd70064b680aa5dcebc161e11e5f3441237f502bf2c4df7cafa5a9a9b6608df42cd21ddc75848062c64
7
+ data.tar.gz: b791c4afaefddc8286abf836abdbb6e92657bb5139bc377be032f174a6d2888dc774c8f8fd3c8643c6ca9f98f920d3f747d3163380c2fa85569a373ac30e45f0
@@ -1,3 +1,3 @@
1
1
  module PgConn
2
- VERSION = "0.53.0"
2
+ VERSION = "0.55.0"
3
3
  end
data/lib/pg_conn.rb CHANGED
@@ -686,23 +686,31 @@ module PgConn
686
686
  r.each.to_a.map(&:to_h)
687
687
  end
688
688
 
689
- # Return a record as a OpenStruct object. It is an error if the query
690
- # returns more than one record. It blows up if a column name is not a valid
691
- # ruby symbol
692
- def struct(*query)
693
- OpenStruct.new(**record(parse_query *query))
689
+ # Return a record as a OpenStruct object or as a :klass object if present.
690
+ # It is an error if the query returns more than one record and it blows up
691
+ # if a column name is not a valid ruby symbol. The :klass argument should
692
+ # be a class derived from OpenStruct. Eg.
693
+ #
694
+ # class Person
695
+ # def name = first_name + " " + last_name
696
+ # end
697
+ # person = db.struct "persons", 42, klass: Person
698
+ # puts person.name => "Alice Brock"
699
+ #
700
+ def struct(*query, klass: OpenStruct)
701
+ klass.new(**record(parse_query *query))
694
702
  end
695
703
 
696
704
  # Like #struct but returns nil if no record was found
697
- def struct?(*query)
705
+ def struct?(*query, klass: OpenStruct)
698
706
  args = record?(parse_query *query)
699
707
  return nil if args.nil?
700
- OpenStruct.new(**args)
708
+ klass.new(**args)
701
709
  end
702
710
 
703
711
  # Return an array of OpenStruct objects
704
- def structs(*query)
705
- records(parse_query *query).map { |record| OpenStruct.new(**record) }
712
+ def structs(*query, klass: OpenStruct)
713
+ records(parse_query *query).map { |record| klass.new(**record) }
706
714
  end
707
715
 
708
716
  # Return a hash from the record id column to record (hash from column name
@@ -739,7 +747,7 @@ module PgConn
739
747
  # of the record. If the :key_column option is defined it will be used
740
748
  # instead of id as the key. It is an error if the id field value is not
741
749
  # unique
742
- def set(*query, key_column: :id)
750
+ def set(*query, key_column: :id, klass: OpenStruct)
743
751
  key_column = key_column.to_sym
744
752
  keys = {}
745
753
  r = pg_exec(parse_query *query)
@@ -750,7 +758,7 @@ module PgConn
750
758
  end
751
759
  h = {}
752
760
  for i in 0...r.ntuples
753
- struct = OpenStruct.new(**r[i])
761
+ struct = klass.new(**r[i])
754
762
  key = struct.send(key_column)
755
763
  !h.key?(key) or raise Error, "Duplicate key: #{key.inspect}"
756
764
  h[key] = struct
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pg_conn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.53.0
4
+ version: 0.55.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Claus Rasmussen