pg_funcall 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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