pg_funcall 0.1.0 → 0.1.1

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.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MzIxZDQ2YzkwNTc2MTZjMjNmMWRlNjY2M2M0YmE4YWUyY2Q5MTZiZQ==
4
+ NTZmYzA2NzhiMGI5NTc1OTVhZDJmOWI3MjdmMzc1OTA1ZThmZDgzYQ==
5
5
  data.tar.gz: !binary |-
6
- M2I5OGY2NWI3ZmZhZmQzNjdkNzI5ZjQ3ZmIyZGExZTc3MmEzM2Q5Mw==
6
+ ZjFkN2I1ODI5ZmY3ODJhODg5ZmUyZjJlYWU3YzdiZjU2ZTNhNDRlZA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZDhmYzEwYzc1MzIxMjJjODcxZGM5ZGRjOTkyNmY4ZmIxNzlmY2U2Y2YzNzM3
10
- OWNiNTJhZWJjMDYwNWZmN2RkNzBmMTVlM2Q1ODk1ZmM4NzRkMjVhMjU5Mzcx
11
- NmQxN2QxY2U5NWUzYmM3NzdhNDkxNDg0NTkzOTdhYzUyYzYzNTI=
9
+ OGEyNjg1N2Y0MWNhZjY5NDJjZjc5MDEzN2FkMmRhYmY2ODYxZTY1ZDM3NzIw
10
+ ZmUyOWNjMzJmNDkwOTEzMDA0N2FmMzZhZGY4OGFmMzU5MjM1MjkyZmMzMmYy
11
+ MWIxOTI2NDdhODM5MjE0NzA0MWM5ZGFlMmE0ODA5NmJjNTE5Njc=
12
12
  data.tar.gz: !binary |-
13
- YjAxZDQyODNmZjczMzk3NzkxZmQ3NGVlN2FkZDk1Y2I1YTQ2M2VjZjQxNTNl
14
- NDBlZmEzNzczNTMzZjcwZWIyNjgwMDFiNzUyMmFiZjk4ZjNjMTViODhjYTMy
15
- ODkwMTk4Njc3NzEyMDg2MTQ1NGM4NGVhOWI1YTQ1ZjMyOTc3ZjY=
13
+ MWRhZjY2YWVmZTRlY2NjMTJkYzZhMWMyYWYzZDA3ZmJlMzVkNzNjYWJiZTkw
14
+ ODE3ZDdiNjY1Y2FkY2Q2ZjU2ZGY4MWNjZmE0YjM1ZWIwZWY4MWYzYjM0MzI5
15
+ Zjk2YTRhYjg5MzFhZDAwODgyNTIzYzA5MTYzMmQwYmViMjY1ODg=
data/.gitignore CHANGED
@@ -1,3 +1,5 @@
1
- /vendor
1
+ /tmp
2
2
  /coverage
3
3
  /gemfiles/.bundle
4
+ /pkg
5
+ /vendor
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- pg_funcall (0.1.0)
4
+ pg_funcall (0.1.1)
5
5
  activerecord (>= 4.0.0)
6
6
  ipaddr_extensions
7
7
  pg (>= 0.17.0)
@@ -1,6 +1,9 @@
1
1
  require 'ipaddr'
2
2
  require 'ipaddr_extensions'
3
3
 
4
+ #
5
+ # TODO: we probably shouldn't do go around monkey-patching like this.
6
+ #
4
7
  class IPAddr
5
8
  def prefixlen
6
9
  mask = @mask_addr
@@ -1,149 +1,151 @@
1
- class PgFuncall::TypeInfo
2
- attr_accessor :ar_type
3
- attr_accessor :array_type
4
- attr_accessor :element_type
5
-
6
- def initialize(row, ar_type = nil)
7
- @row = {}
8
- # copy and convert int-looking things to int along the way
9
- row.each do |key, val|
10
- @row[key] =
11
- (val && val.respond_to?(:match) && val.match(/^-?\d+$/)) ? val.to_i : val
1
+ class PgFuncall
2
+ class TypeInfo
3
+ attr_accessor :ar_type
4
+ attr_accessor :array_type
5
+ attr_accessor :element_type
6
+
7
+ def initialize(row, ar_type = nil)
8
+ @row = {}
9
+ # copy and convert int-looking things to int along the way
10
+ row.each do |key, val|
11
+ @row[key] =
12
+ (val && val.respond_to?(:match) && val.match(/^-?\d+$/)) ? val.to_i : val
13
+ end
14
+ @row.freeze
15
+ @ar_type = ar_type
12
16
  end
13
- @row.freeze
14
- @ar_type = ar_type
15
- end
16
17
 
17
- # TODO: replace this to not use ar_type
18
- def cast_from_database(value)
19
- @ar_type.respond_to?(:type_cast_from_database) ?
20
- @ar_type.type_cast_from_database(value) :
21
- @ar_type.type_cast(value)
22
- end
18
+ # TODO: replace this to not use ar_type
19
+ def cast_from_database(value)
20
+ @ar_type.respond_to?(:type_cast_from_database) ?
21
+ @ar_type.type_cast_from_database(value) :
22
+ @ar_type.type_cast(value)
23
+ end
23
24
 
25
+ #
26
+ # Represent a Ruby object in a string form to be passed as a parameter
27
+ # within a descriptor hash, rather than substituted into a string-form
28
+ # query.
24
29
  #
25
- # Represent a Ruby object in a string form to be passed as a parameter
26
- # within a descriptor hash, rather than substituted into a string-form
27
- # query.
28
- #
29
- def _format_param_for_descriptor(param, type=nil)
30
- return param.value if param.is_a?(PgFuncall::Literal)
31
-
32
- case param
33
- when PgFuncall::TypedArray
34
- _format_param_for_descriptor(param.value, param.type + "[]")
35
- when PgFuncall::Typed
36
- _format_param_for_descriptor(param.value, param.type)
37
- when PgFuncall::PGTyped
38
- param.respond_to?(:__pg_value) ?
39
- param.__pg_value :
40
- _format_param_for_descriptor(param, type)
41
- when TrueClass
42
- 'true'
43
- when FalseClass
44
- 'false'
45
- when String
46
- if type == 'bytea' || param.encoding == Encoding::BINARY
47
- '\x' + param.unpack('C*').map {|x| sprintf("%02X", x)}.join("")
48
- else
49
- param
50
- end
51
- when Array
52
- "{" + param.map {|p| _format_param_for_descriptor(p)}.join(",") + "}"
53
- when IPAddr
54
- param.to_cidr_string
55
- when Range
56
- last_char = param.exclude_end? ? ')' : ']'
57
- case type
58
- when 'tsrange', 'tstzrange'
59
- "[#{param.first.utc},#{param.last.utc}#{last_char}"
30
+ def _format_param_for_descriptor(param, type=nil)
31
+ return param.value if param.is_a?(PgFuncall::Literal)
32
+
33
+ case param
34
+ when PgFuncall::TypedArray
35
+ _format_param_for_descriptor(param.value, param.type + "[]")
36
+ when PgFuncall::Typed
37
+ _format_param_for_descriptor(param.value, param.type)
38
+ when PgFuncall::PGTyped
39
+ param.respond_to?(:__pg_value) ?
40
+ param.__pg_value :
41
+ _format_param_for_descriptor(param, type)
42
+ when TrueClass
43
+ 'true'
44
+ when FalseClass
45
+ 'false'
46
+ when String
47
+ if type == 'bytea' || param.encoding == Encoding::BINARY
48
+ '\x' + param.unpack('C*').map {|x| sprintf("%02X", x)}.join("")
60
49
  else
61
- "[#{param.first},#{param.last}#{last_char}"
62
- end
63
- when Set
64
- _format_param_for_descriptor(param.to_a)
65
- when Hash
66
- param.map do |k,v|
67
- "#{k} => #{v}"
68
- end.join(',')
69
- else
70
- ActiveRecord::Base.connection.quote(param)
50
+ param
51
+ end
52
+ when Array
53
+ "{" + param.map {|p| _format_param_for_descriptor(p)}.join(",") + "}"
54
+ when IPAddr
55
+ param.to_cidr_string
56
+ when Range
57
+ last_char = param.exclude_end? ? ')' : ']'
58
+ case type
59
+ when 'tsrange', 'tstzrange'
60
+ "[#{param.first.utc},#{param.last.utc}#{last_char}"
61
+ else
62
+ "[#{param.first},#{param.last}#{last_char}"
63
+ end
64
+ when Set
65
+ _format_param_for_descriptor(param.to_a)
66
+ when Hash
67
+ param.map do |k,v|
68
+ "#{k} => #{v}"
69
+ end.join(',')
70
+ else
71
+ ActiveRecord::Base.connection.quote(param)
72
+ end
71
73
  end
72
- end
73
74
 
74
- # TODO: replace this to not use ar_type
75
- def cast_to_database(value)
76
- @ar_type.respond_to?(:type_cast_for_database) ?
77
- @ar_type.type_cast_for_database(value).to_s :
78
- _format_param_for_descriptor(value, name)
79
- end
75
+ # TODO: replace this to not use ar_type
76
+ def cast_to_database(value)
77
+ @ar_type.respond_to?(:type_cast_for_database) ?
78
+ @ar_type.type_cast_for_database(value).to_s :
79
+ _format_param_for_descriptor(value, name)
80
+ end
80
81
 
81
- def name
82
- @row['typname']
83
- end
82
+ def name
83
+ @row['typname']
84
+ end
84
85
 
85
- def namespace
86
- @row['nspname']
87
- end
86
+ def namespace
87
+ @row['nspname']
88
+ end
88
89
 
89
- #
90
- # Don't fully qualify base types -- this is pretty, but is it wise?
91
- #
92
- def fqname
93
- namespace == 'pg_catalog' ?
94
- name :
95
- namespace + '.' + name
96
- end
90
+ #
91
+ # Don't fully qualify base types -- this is pretty, but is it wise?
92
+ #
93
+ def fqname
94
+ namespace == 'pg_catalog' ?
95
+ name :
96
+ namespace + '.' + name
97
+ end
97
98
 
98
- def oid
99
- @row['oid']
100
- end
99
+ def oid
100
+ @row['oid']
101
+ end
101
102
 
102
- def category
103
- @row['typcategory']
104
- end
103
+ def category
104
+ @row['typcategory']
105
+ end
105
106
 
106
- def temporal?
107
- datetime? || timespan?
108
- end
107
+ def temporal?
108
+ datetime? || timespan?
109
+ end
109
110
 
110
- CATEGORY_MAP =
111
- {'A' => 'array',
112
- 'B' => 'boolean',
113
- 'C' => 'composite',
114
- 'D' => 'datetime',
115
- 'E' => 'enum',
116
- 'G' => 'geometric',
117
- 'I' => 'network_address',
118
- 'N' => 'numeric',
119
- 'P' => 'pseudotype',
120
- 'S' => 'string',
121
- 'T' => 'timespan',
122
- 'U' => 'user_defined',
123
- 'V' => 'bit_string',
124
- 'X' => 'unknown'
125
- }
126
-
127
- CATEGORY_MAP.each do |typ, name|
128
- define_method("#{name}?") do
129
- category == typ
111
+ CATEGORY_MAP =
112
+ {'A' => 'array',
113
+ 'B' => 'boolean',
114
+ 'C' => 'composite',
115
+ 'D' => 'datetime',
116
+ 'E' => 'enum',
117
+ 'G' => 'geometric',
118
+ 'I' => 'network_address',
119
+ 'N' => 'numeric',
120
+ 'P' => 'pseudotype',
121
+ 'S' => 'string',
122
+ 'T' => 'timespan',
123
+ 'U' => 'user_defined',
124
+ 'V' => 'bit_string',
125
+ 'X' => 'unknown'
126
+ }
127
+
128
+ CATEGORY_MAP.each do |typ, name|
129
+ define_method("#{name}?") do
130
+ category == typ
131
+ end
130
132
  end
131
- end
132
133
 
133
- def category_name
134
- CATEGORY_MAP[category]
135
- end
134
+ def category_name
135
+ CATEGORY_MAP[category]
136
+ end
136
137
 
137
- def element_type_oid
138
- raise "Can only call on array" unless array?
139
- @row['typelem']
140
- end
138
+ def element_type_oid
139
+ raise "Can only call on array" unless array?
140
+ @row['typelem']
141
+ end
141
142
 
142
- def array_type_oid
143
- @row['typarray']
144
- end
143
+ def array_type_oid
144
+ @row['typarray']
145
+ end
145
146
 
146
- def [](element)
147
- @row[element.to_s]
147
+ def [](element)
148
+ @row[element.to_s]
149
+ end
148
150
  end
149
151
  end
@@ -1,3 +1,3 @@
1
1
  class PgFuncall
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pg_funcall
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Sanders