pg 0.18.1-x64-mingw32 → 0.18.2-x64-mingw32
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 +4 -4
- data/ChangeLog +368 -316
- data/History.rdoc +16 -0
- data/README.rdoc +1 -1
- data/Rakefile.cross +5 -0
- data/ext/extconf.rb +4 -1
- data/ext/pg.c +2 -2
- data/ext/pg.h +10 -0
- data/ext/pg_connection.c +11 -39
- data/ext/pg_result.c +3 -3
- data/ext/pg_text_decoder.c +6 -9
- data/ext/pg_text_encoder.c +36 -39
- data/ext/pg_type_map_by_mri_type.c +1 -1
- data/ext/pg_type_map_in_ruby.c +3 -6
- data/ext/util.c +1 -1
- data/ext/util.h +1 -1
- data/lib/2.0/pg_ext.so +0 -0
- data/lib/2.1/pg_ext.so +0 -0
- data/lib/2.2/pg_ext.so +0 -0
- data/lib/pg.rb +1 -1
- data/lib/pg/connection.rb +37 -27
- data/lib/pg/text_decoder.rb +2 -2
- data/lib/x64-mingw32/libpq.dll +0 -0
- data/spec/pg/connection_spec.rb +82 -6
- data/spec/pg/type_spec.rb +53 -30
- metadata +15 -64
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- metadata.gz.sig +0 -2
data/lib/2.0/pg_ext.so
CHANGED
Binary file
|
data/lib/2.1/pg_ext.so
CHANGED
Binary file
|
data/lib/2.2/pg_ext.so
CHANGED
Binary file
|
data/lib/pg.rb
CHANGED
data/lib/pg/connection.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require 'pg' unless defined?( PG )
|
4
|
+
require 'uri'
|
4
5
|
|
5
6
|
# The PostgreSQL connection class. The interface for this class is based on
|
6
7
|
# {libpq}[http://www.postgresql.org/docs/9.2/interactive/libpq.html], the C
|
@@ -34,46 +35,55 @@ class PG::Connection
|
|
34
35
|
def self::parse_connect_args( *args )
|
35
36
|
return '' if args.empty?
|
36
37
|
|
37
|
-
|
38
|
-
|
39
|
-
|
38
|
+
hash_arg = args.last.is_a?( Hash ) ? args.pop : {}
|
39
|
+
option_string = ''
|
40
|
+
options = {}
|
40
41
|
|
41
42
|
# Parameter 'fallback_application_name' was introduced in PostgreSQL 9.0
|
42
43
|
# together with PQescapeLiteral().
|
43
|
-
if PG::Connection.instance_methods.find{|m| m.to_sym == :escape_literal }
|
44
|
-
|
45
|
-
appname = PG::Connection.quote_connstr( appname )
|
46
|
-
connopts = ["fallback_application_name=#{appname}"]
|
47
|
-
else
|
48
|
-
connopts = []
|
44
|
+
if PG::Connection.instance_methods.find {|m| m.to_sym == :escape_literal }
|
45
|
+
options[:fallback_application_name] = $0.sub( /^(.{30}).{4,}(.{30})$/ ){ $1+"..."+$2 }
|
49
46
|
end
|
50
47
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
48
|
+
if args.length == 1
|
49
|
+
case args.first
|
50
|
+
when URI, URI.regexp
|
51
|
+
uri = URI(args.first)
|
52
|
+
options.merge!( Hash[URI.decode_www_form( uri.query )] ) if uri.query
|
53
|
+
when /=/
|
54
|
+
# Option string style
|
55
|
+
option_string = args.first.to_s
|
56
|
+
else
|
57
|
+
# Positional parameters
|
58
|
+
options[CONNECT_ARGUMENT_ORDER.first.to_sym] = args.first
|
56
59
|
end
|
57
|
-
end
|
58
|
-
|
59
|
-
# Option string style
|
60
|
-
if args.length == 1 && args.first.to_s.index( '=' )
|
61
|
-
connopts.unshift( args.first )
|
62
|
-
|
63
|
-
# Append positional parameters
|
64
60
|
else
|
65
|
-
|
66
|
-
|
61
|
+
max = CONNECT_ARGUMENT_ORDER.length
|
62
|
+
raise ArgumentError,
|
63
|
+
"Extra positional parameter %d: %p" % [ max + 1, args[max] ] if args.length > max
|
67
64
|
|
68
|
-
|
69
|
-
|
70
|
-
connopts.push( "%s=%s" % [key, PG::Connection.quote_connstr(val.to_s)] )
|
65
|
+
CONNECT_ARGUMENT_ORDER.zip( args ) do |(k,v)|
|
66
|
+
options[ k.to_sym ] = v if v
|
71
67
|
end
|
72
68
|
end
|
73
69
|
|
74
|
-
|
70
|
+
options.merge!( hash_arg )
|
71
|
+
|
72
|
+
if uri
|
73
|
+
uri.host = nil if options[:host]
|
74
|
+
uri.port = nil if options[:port]
|
75
|
+
uri.user = nil if options[:user]
|
76
|
+
uri.password = nil if options[:password]
|
77
|
+
uri.path = '' if options[:dbname]
|
78
|
+
uri.query = URI.encode_www_form( options )
|
79
|
+
return uri.to_s.sub( /^#{uri.scheme}:(?!\/\/)/, "#{uri.scheme}://" )
|
80
|
+
else
|
81
|
+
option_string += ' ' unless option_string.empty? && options.empty?
|
82
|
+
return option_string + options.map { |k,v| "#{k}=#{quote_connstr(v)}" }.join( ' ' )
|
83
|
+
end
|
75
84
|
end
|
76
85
|
|
86
|
+
|
77
87
|
# call-seq:
|
78
88
|
# conn.copy_data( sql ) {|sql_result| ... } -> PG::Result
|
79
89
|
#
|
data/lib/pg/text_decoder.rb
CHANGED
@@ -27,11 +27,11 @@ module PG
|
|
27
27
|
end
|
28
28
|
|
29
29
|
class TimestampWithTimeZone < SimpleDecoder
|
30
|
-
ISO_DATETIME_WITH_TIMEZONE = /\A(\d{4})-(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d)(\.\d+)?([-\+]\d\d)\z/
|
30
|
+
ISO_DATETIME_WITH_TIMEZONE = /\A(\d{4})-(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d)(\.\d+)?([-\+]\d\d):?(\d\d)?:?(\d\d)?\z/
|
31
31
|
|
32
32
|
def decode(string, tuple=nil, field=nil)
|
33
33
|
if string =~ ISO_DATETIME_WITH_TIMEZONE
|
34
|
-
Time.new $1.to_i, $2.to_i, $3.to_i, $4.to_i, $5.to_i, "#{$6}#{$7}".to_r, "#{$8}
|
34
|
+
Time.new $1.to_i, $2.to_i, $3.to_i, $4.to_i, $5.to_i, "#{$6}#{$7}".to_r, "#{$8}:#{$9 || '00'}:#{$10 || '00'}"
|
35
35
|
else
|
36
36
|
string
|
37
37
|
end
|
data/lib/x64-mingw32/libpq.dll
CHANGED
Binary file
|
data/spec/pg/connection_spec.rb
CHANGED
@@ -45,6 +45,14 @@ describe PG::Connection do
|
|
45
45
|
expect( optstring ).to match( /(^|\s)user='jrandom'/ )
|
46
46
|
end
|
47
47
|
|
48
|
+
it "can create a connection option string from an option string and a hash" do
|
49
|
+
optstring = described_class.parse_connect_args( 'dbname=original', :user => 'jrandom' )
|
50
|
+
|
51
|
+
expect( optstring ).to be_a( String )
|
52
|
+
expect( optstring ).to match( /(^|\s)dbname=original/ )
|
53
|
+
expect( optstring ).to match( /(^|\s)user='jrandom'/ )
|
54
|
+
end
|
55
|
+
|
48
56
|
it "escapes single quotes and backslashes in connection parameters" do
|
49
57
|
expect(
|
50
58
|
described_class.parse_connect_args( "DB 'browser' \\" )
|
@@ -52,18 +60,72 @@ describe PG::Connection do
|
|
52
60
|
|
53
61
|
end
|
54
62
|
|
63
|
+
let(:uri) { 'postgresql://user:pass@pgsql.example.com:222/db01?sslmode=require' }
|
64
|
+
|
65
|
+
it "can connect using a URI" do
|
66
|
+
string = described_class.parse_connect_args( uri )
|
67
|
+
|
68
|
+
expect( string ).to be_a( String )
|
69
|
+
expect( string ).to match( %r{^postgresql://user:pass@pgsql.example.com:222/db01\?} )
|
70
|
+
expect( string ).to match( %r{\?.*sslmode=require} )
|
71
|
+
|
72
|
+
string = described_class.parse_connect_args( URI.parse(uri) )
|
73
|
+
|
74
|
+
expect( string ).to be_a( String )
|
75
|
+
expect( string ).to match( %r{^postgresql://user:pass@pgsql.example.com:222/db01\?} )
|
76
|
+
expect( string ).to match( %r{\?.*sslmode=require} )
|
77
|
+
end
|
78
|
+
|
79
|
+
it "can create a connection URI from a URI and a hash" do
|
80
|
+
string = described_class.parse_connect_args( uri, :connect_timeout => 2 )
|
81
|
+
|
82
|
+
expect( string ).to be_a( String )
|
83
|
+
expect( string ).to match( %r{^postgresql://user:pass@pgsql.example.com:222/db01\?} )
|
84
|
+
expect( string ).to match( %r{\?.*sslmode=require} )
|
85
|
+
expect( string ).to match( %r{\?.*connect_timeout=2} )
|
86
|
+
|
87
|
+
string = described_class.parse_connect_args( uri,
|
88
|
+
:user => 'a',
|
89
|
+
:password => 'b',
|
90
|
+
:host => 'localhost',
|
91
|
+
:port => 555,
|
92
|
+
:dbname => 'x' )
|
93
|
+
|
94
|
+
expect( string ).to be_a( String )
|
95
|
+
expect( string ).to match( %r{^postgresql://\?} )
|
96
|
+
expect( string ).to match( %r{\?.*user=a} )
|
97
|
+
expect( string ).to match( %r{\?.*password=b} )
|
98
|
+
expect( string ).to match( %r{\?.*host=localhost} )
|
99
|
+
expect( string ).to match( %r{\?.*port=555} )
|
100
|
+
expect( string ).to match( %r{\?.*dbname=x} )
|
101
|
+
end
|
102
|
+
|
103
|
+
it "can create a connection URI with a non-standard domain socket directory" do
|
104
|
+
string = described_class.parse_connect_args( 'postgresql://%2Fvar%2Flib%2Fpostgresql/dbname' )
|
105
|
+
|
106
|
+
expect( string ).to be_a( String )
|
107
|
+
expect( string ).to match( %r{^postgresql://%2Fvar%2Flib%2Fpostgresql/dbname} )
|
108
|
+
|
109
|
+
string = described_class.
|
110
|
+
parse_connect_args( 'postgresql:///dbname', :host => '/var/lib/postgresql' )
|
111
|
+
|
112
|
+
expect( string ).to be_a( String )
|
113
|
+
expect( string ).to match( %r{^postgresql:///dbname\?} )
|
114
|
+
expect( string ).to match( %r{\?.*host=%2Fvar%2Flib%2Fpostgresql} )
|
115
|
+
end
|
116
|
+
|
55
117
|
it "connects with defaults if no connection parameters are given" do
|
56
118
|
expect( described_class.parse_connect_args ).to eq( '' )
|
57
119
|
end
|
58
120
|
|
59
121
|
it "connects successfully with connection string" do
|
60
|
-
tmpconn = described_class.connect(@conninfo)
|
122
|
+
tmpconn = described_class.connect( @conninfo )
|
61
123
|
expect( tmpconn.status ).to eq( PG::CONNECTION_OK )
|
62
124
|
tmpconn.finish
|
63
125
|
end
|
64
126
|
|
65
127
|
it "connects using 7 arguments converted to strings" do
|
66
|
-
tmpconn = described_class.connect('localhost', @port, nil, nil, :test, nil, nil)
|
128
|
+
tmpconn = described_class.connect( 'localhost', @port, nil, nil, :test, nil, nil )
|
67
129
|
expect( tmpconn.status ).to eq( PG::CONNECTION_OK )
|
68
130
|
tmpconn.finish
|
69
131
|
end
|
@@ -89,8 +151,13 @@ describe PG::Connection do
|
|
89
151
|
|
90
152
|
it "raises an exception when connecting with an invalid number of arguments" do
|
91
153
|
expect {
|
92
|
-
described_class.connect( 1, 2, 3, 4, 5, 6, 7, 'extra' )
|
93
|
-
}.to raise_error
|
154
|
+
described_class.connect( 1, 2, 3, 4, 5, 6, 7, 'the-extra-arg' )
|
155
|
+
}.to raise_error do |error|
|
156
|
+
expect( error ).to be_an( ArgumentError )
|
157
|
+
expect( error.message ).to match( /extra positional parameter/i )
|
158
|
+
expect( error.message ).to match( /8/ )
|
159
|
+
expect( error.message ).to match( /the-extra-arg/ )
|
160
|
+
end
|
94
161
|
end
|
95
162
|
|
96
163
|
it "can connect asynchronously", :socket_io do
|
@@ -162,8 +229,6 @@ describe PG::Connection do
|
|
162
229
|
expect( @conn.user ).to be_a_kind_of( String )
|
163
230
|
expect( @conn.pass ).to eq( "" )
|
164
231
|
expect( @conn.host ).to eq( "localhost" )
|
165
|
-
# TODO: Not sure why libpq returns a NULL ptr instead of "127.0.0.1"
|
166
|
-
expect( @conn.hostaddr ).to eq( nil ) if @conn.server_version >= 9_04_00
|
167
232
|
expect( @conn.port ).to eq( 54321 )
|
168
233
|
expect( @conn.tty ).to eq( "" )
|
169
234
|
expect( @conn.options ).to eq( "" )
|
@@ -1128,9 +1193,20 @@ describe PG::Connection do
|
|
1128
1193
|
expect( escaped.encoding ).to eq( Encoding::ISO8859_1 )
|
1129
1194
|
expect( escaped ).to eq( "\"string to\"" )
|
1130
1195
|
end
|
1196
|
+
end
|
1131
1197
|
|
1198
|
+
it "can quote bigger strings with quote_ident" do
|
1199
|
+
original = "'01234567\"" * 100
|
1200
|
+
escaped = described_class.quote_ident( original + "\0afterzero" )
|
1201
|
+
expect( escaped ).to eq( "\"" + original.gsub("\"", "\"\"") + "\"" )
|
1132
1202
|
end
|
1133
1203
|
|
1204
|
+
it "can quote Arrays with quote_ident" do
|
1205
|
+
original = "'01234567\""
|
1206
|
+
escaped = described_class.quote_ident( [original]*3 )
|
1207
|
+
expected = ["\"" + original.gsub("\"", "\"\"") + "\""] * 3
|
1208
|
+
expect( escaped ).to eq( expected.join(".") )
|
1209
|
+
end
|
1134
1210
|
|
1135
1211
|
describe "Ruby 1.9.x default_internal encoding" do
|
1136
1212
|
|
data/spec/pg/type_spec.rb
CHANGED
@@ -15,6 +15,8 @@ describe "PG::Type derivations" do
|
|
15
15
|
let!(:textdec_string) { PG::TextDecoder::String.new }
|
16
16
|
let!(:textenc_timestamp) { PG::TextEncoder::TimestampWithoutTimeZone.new }
|
17
17
|
let!(:textdec_timestamp) { PG::TextDecoder::TimestampWithoutTimeZone.new }
|
18
|
+
let!(:textenc_timestamptz) { PG::TextEncoder::TimestampWithTimeZone.new }
|
19
|
+
let!(:textdec_timestamptz) { PG::TextDecoder::TimestampWithTimeZone.new }
|
18
20
|
let!(:textenc_bytea) { PG::TextEncoder::Bytea.new }
|
19
21
|
let!(:textdec_bytea) { PG::TextDecoder::Bytea.new }
|
20
22
|
let!(:binaryenc_int2) { PG::BinaryEncoder::Int2.new }
|
@@ -85,6 +87,48 @@ describe "PG::Type derivations" do
|
|
85
87
|
expect( textdec_bytea.decode("\\377\\000") ).to eq( "\xff\0".b )
|
86
88
|
end
|
87
89
|
|
90
|
+
context 'timestamps' do
|
91
|
+
it 'decodes timestamps without timezone' do
|
92
|
+
expect( textdec_timestamp.decode('2016-01-02 23:23:59.123456') ).
|
93
|
+
to be_within(0.000001).of( Time.new(2016,01,02, 23, 23, 59.123456) )
|
94
|
+
end
|
95
|
+
it 'decodes timestamps with hour timezone' do
|
96
|
+
expect( textdec_timestamptz.decode('2015-01-26 17:26:42.691511-04') ).
|
97
|
+
to be_within(0.000001).of( Time.new(2015,01,26, 17, 26, 42.691511, "-04:00") )
|
98
|
+
expect( textdec_timestamptz.decode('2015-01-26 17:26:42.691511+10') ).
|
99
|
+
to be_within(0.000001).of( Time.new(2015,01,26, 17, 26, 42.691511, "+10:00") )
|
100
|
+
end
|
101
|
+
it 'decodes timestamps with hour:minute timezone' do
|
102
|
+
expect( textdec_timestamptz.decode('2015-01-26 17:26:42.691511-04:15') ).
|
103
|
+
to be_within(0.000001).of( Time.new(2015,01,26, 17, 26, 42.691511, "-04:15") )
|
104
|
+
expect( textdec_timestamptz.decode('2015-01-26 17:26:42.691511-0430') ).
|
105
|
+
to be_within(0.000001).of( Time.new(2015,01,26, 17, 26, 42.691511, "-04:30") )
|
106
|
+
expect( textdec_timestamptz.decode('2015-01-26 17:26:42.691511+10:45') ).
|
107
|
+
to be_within(0.000001).of( Time.new(2015,01,26, 17, 26, 42.691511, "+10:45") )
|
108
|
+
end
|
109
|
+
it 'decodes timestamps with hour:minute:sec timezone' do
|
110
|
+
# SET TIME ZONE 'Europe/Dublin'; -- Was UTC−00:25:21 until 1916
|
111
|
+
# SELECT '1900-01-01'::timestamptz;
|
112
|
+
# -- "1900-01-01 00:00:00-00:25:21"
|
113
|
+
expect( textdec_timestamptz.decode('1916-01-01 00:00:00-00:25:21') ).
|
114
|
+
to be_within(0.000001).of( Time.new(1916, 1, 1, 0, 0, 0, "-00:25:21") )
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
context 'identifier quotation' do
|
119
|
+
it 'should build an array out of an quoted identifier string' do
|
120
|
+
quoted_type = PG::TextDecoder::Identifier.new
|
121
|
+
expect( quoted_type.decode(%["A.".".B"]) ).to eq( ["A.", ".B"] )
|
122
|
+
expect( quoted_type.decode(%["'A"".""B'"]) ).to eq( ['\'A"."B\''] )
|
123
|
+
end
|
124
|
+
|
125
|
+
it 'should split unquoted identifier string' do
|
126
|
+
quoted_type = PG::TextDecoder::Identifier.new
|
127
|
+
expect( quoted_type.decode(%[a.b]) ).to eq( ['a','b'] )
|
128
|
+
expect( quoted_type.decode(%[a]) ).to eq( ['a'] )
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
88
132
|
it "should raise when decode method is called with wrong args" do
|
89
133
|
expect{ textdec_int.decode() }.to raise_error(ArgumentError)
|
90
134
|
expect{ textdec_int.decode("123", 2, 3, 4) }.to raise_error(ArgumentError)
|
@@ -156,6 +200,15 @@ describe "PG::Type derivations" do
|
|
156
200
|
expect( textenc_bytea.encode("\x00\x01\x02\x03\xef".b) ).to eq( "\\x00010203ef" )
|
157
201
|
end
|
158
202
|
|
203
|
+
context 'identifier quotation' do
|
204
|
+
it 'should quote and escape identifier' do
|
205
|
+
quoted_type = PG::TextEncoder::Identifier.new
|
206
|
+
expect( quoted_type.encode(['schema','table','col']) ).to eq( %["schema"."table"."col"] )
|
207
|
+
expect( quoted_type.encode(['A.','.B']) ).to eq( %["A.".".B"] )
|
208
|
+
expect( quoted_type.encode(%['A"."B']) ).to eq( %["'A"".""B'"] )
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
159
212
|
it "should encode with ruby encoder" do
|
160
213
|
expect( intenc_incrementer.encode(3) ).to eq( "4 " )
|
161
214
|
end
|
@@ -347,20 +400,6 @@ describe "PG::Type derivations" do
|
|
347
400
|
array_type = PG::TextDecoder::Array.new elements_type: nil
|
348
401
|
expect( array_type.decode(%[{3,4}]) ).to eq( ['3','4'] )
|
349
402
|
end
|
350
|
-
|
351
|
-
context 'identifier quotation' do
|
352
|
-
it 'should build an array out of an quoted identifier string' do
|
353
|
-
quoted_type = PG::TextDecoder::Identifier.new elements_type: textdec_string
|
354
|
-
expect( quoted_type.decode(%["A.".".B"]) ).to eq( ["A.", ".B"] )
|
355
|
-
expect( quoted_type.decode(%["'A"".""B'"]) ).to eq( ['\'A"."B\''] )
|
356
|
-
end
|
357
|
-
|
358
|
-
it 'should split unquoted identifier string' do
|
359
|
-
quoted_type = PG::TextDecoder::Identifier.new elements_type: textdec_string
|
360
|
-
expect( quoted_type.decode(%[a.b]) ).to eq( ['a','b'] )
|
361
|
-
expect( quoted_type.decode(%[a]) ).to eq( ['a'] )
|
362
|
-
end
|
363
|
-
end
|
364
403
|
end
|
365
404
|
|
366
405
|
describe '#encode' do
|
@@ -422,22 +461,6 @@ describe "PG::Type derivations" do
|
|
422
461
|
expect( textenc_float_array.encode(1234) ).to eq( "1234" )
|
423
462
|
end
|
424
463
|
|
425
|
-
context 'identifier quotation' do
|
426
|
-
it 'should quote and escape identifier' do
|
427
|
-
quoted_type = PG::TextEncoder::Identifier.new elements_type: textenc_string
|
428
|
-
expect( quoted_type.encode(['schema','table','col']) ).to eq( %["schema"."table"."col"] )
|
429
|
-
expect( quoted_type.encode(['A.','.B']) ).to eq( %["A.".".B"] )
|
430
|
-
expect( quoted_type.encode(%['A"."B']) ).to eq( %["'A"".""B'"] )
|
431
|
-
end
|
432
|
-
|
433
|
-
it 'shouldn\'t quote or escape identifier if requested to not do' do
|
434
|
-
quoted_type = PG::TextEncoder::Identifier.new elements_type: textenc_string,
|
435
|
-
needs_quotation: false
|
436
|
-
expect( quoted_type.encode(['a','b']) ).to eq( %[a.b] )
|
437
|
-
expect( quoted_type.encode(%[a.b]) ).to eq( %[a.b] )
|
438
|
-
end
|
439
|
-
end
|
440
|
-
|
441
464
|
context 'literal quotation' do
|
442
465
|
it 'should quote and escape literals' do
|
443
466
|
quoted_type = PG::TextEncoder::QuotedLiteral.new elements_type: textenc_string_array
|
metadata
CHANGED
@@ -1,121 +1,72 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.18.
|
4
|
+
version: 0.18.2
|
5
5
|
platform: x64-mingw32
|
6
6
|
authors:
|
7
7
|
- Michael Granger
|
8
8
|
- Lars Kanis
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
|
-
cert_chain:
|
12
|
-
-
|
13
|
-
-----BEGIN CERTIFICATE-----
|
14
|
-
MIIDLjCCAhagAwIBAgIBAjANBgkqhkiG9w0BAQUFADA9MQ4wDAYDVQQDDAVrYW5p
|
15
|
-
czEXMBUGCgmSJomT8ixkARkWB2NvbWNhcmQxEjAQBgoJkiaJk/IsZAEZFgJkZTAe
|
16
|
-
Fw0xNDAyMjYwOTMzMDBaFw0xNTAyMjYwOTMzMDBaMD0xDjAMBgNVBAMMBWthbmlz
|
17
|
-
MRcwFQYKCZImiZPyLGQBGRYHY29tY2FyZDESMBAGCgmSJomT8ixkARkWAmRlMIIB
|
18
|
-
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApop+rNmg35bzRugZ21VMGqI6
|
19
|
-
HGzPLO4VHYncWn/xmgPU/ZMcZdfj6MzIaZJ/czXyt4eHpBk1r8QOV3gBXnRXEjVW
|
20
|
-
9xi+EdVOkTV2/AVFKThcbTAQGiF/bT1n2M+B1GTybRzMg6hyhOJeGPqIhLfJEpxn
|
21
|
-
lJi4+ENAVT4MpqHEAGB8yFoPC0GqiOHQsdHxQV3P3c2OZqG+yJey74QtwA2tLcLn
|
22
|
-
Q53c63+VLGsOjODl1yPn/2ejyq8qWu6ahfTxiIlSar2UbwtaQGBDFdb2CXgEufXT
|
23
|
-
L7oaPxlmj+Q2oLOfOnInd2Oxop59HoJCQPsg8f921J43NCQGA8VHK6paxIRDLQID
|
24
|
-
AQABozkwNzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUvgTdT7fe
|
25
|
-
x17ugO3IOsjEJwW7KP4wDQYJKoZIhvcNAQEFBQADggEBAFmIAhRT0awqLQN9e4Uv
|
26
|
-
ZEk+jUWv4zkb+TWiKFJXlwjPyjGbZY9gVfOwAwMibYOK/t/+57ZzW3d0L12OUwvo
|
27
|
-
on84NVvYtIr1/iskJFWFkMoIquAFCdi9p68stSPMQK2XcrJJuRot29fJtropsZBa
|
28
|
-
2cpaNd/sRYdK4oep2usdKifA1lI0hIkPb3r5nLfwG2lAqBH7WZsUICHcTgR0VEbG
|
29
|
-
z9Ug5qQp9Uz73xC9YdGvGiuOX53LYobHAR4MWi2xxDlHI+ER8mRz0eY2FUuNu/Wj
|
30
|
-
GrqF74zpLl7/KFdHC8VmzwZS18hvDjxeLVuVI2gIGnBInqnlqv05g/l4/1pISh5j
|
31
|
-
dS4=
|
32
|
-
-----END CERTIFICATE-----
|
33
|
-
date: 2015-01-06 00:00:00.000000000 Z
|
11
|
+
cert_chain: []
|
12
|
+
date: 2015-05-15 00:00:00.000000000 Z
|
34
13
|
dependencies:
|
35
14
|
- !ruby/object:Gem::Dependency
|
36
|
-
name:
|
37
|
-
requirement: !ruby/object:Gem::Requirement
|
38
|
-
requirements:
|
39
|
-
- - "~>"
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
version: '1.4'
|
42
|
-
type: :development
|
43
|
-
prerelease: false
|
44
|
-
version_requirements: !ruby/object:Gem::Requirement
|
45
|
-
requirements:
|
46
|
-
- - "~>"
|
47
|
-
- !ruby/object:Gem::Version
|
48
|
-
version: '1.4'
|
49
|
-
- !ruby/object:Gem::Dependency
|
50
|
-
name: hoe-deveiate
|
51
|
-
requirement: !ruby/object:Gem::Requirement
|
52
|
-
requirements:
|
53
|
-
- - "~>"
|
54
|
-
- !ruby/object:Gem::Version
|
55
|
-
version: '0.6'
|
56
|
-
type: :development
|
57
|
-
prerelease: false
|
58
|
-
version_requirements: !ruby/object:Gem::Requirement
|
59
|
-
requirements:
|
60
|
-
- - "~>"
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
version: '0.6'
|
63
|
-
- !ruby/object:Gem::Dependency
|
64
|
-
name: hoe-highline
|
15
|
+
name: rdoc
|
65
16
|
requirement: !ruby/object:Gem::Requirement
|
66
17
|
requirements:
|
67
18
|
- - "~>"
|
68
19
|
- !ruby/object:Gem::Version
|
69
|
-
version: '0
|
20
|
+
version: '4.0'
|
70
21
|
type: :development
|
71
22
|
prerelease: false
|
72
23
|
version_requirements: !ruby/object:Gem::Requirement
|
73
24
|
requirements:
|
74
25
|
- - "~>"
|
75
26
|
- !ruby/object:Gem::Version
|
76
|
-
version: '0
|
27
|
+
version: '4.0'
|
77
28
|
- !ruby/object:Gem::Dependency
|
78
|
-
name:
|
29
|
+
name: rake-compiler
|
79
30
|
requirement: !ruby/object:Gem::Requirement
|
80
31
|
requirements:
|
81
32
|
- - "~>"
|
82
33
|
- !ruby/object:Gem::Version
|
83
|
-
version: '
|
34
|
+
version: '0.9'
|
84
35
|
type: :development
|
85
36
|
prerelease: false
|
86
37
|
version_requirements: !ruby/object:Gem::Requirement
|
87
38
|
requirements:
|
88
39
|
- - "~>"
|
89
40
|
- !ruby/object:Gem::Version
|
90
|
-
version: '
|
41
|
+
version: '0.9'
|
91
42
|
- !ruby/object:Gem::Dependency
|
92
|
-
name:
|
43
|
+
name: hoe
|
93
44
|
requirement: !ruby/object:Gem::Requirement
|
94
45
|
requirements:
|
95
46
|
- - "~>"
|
96
47
|
- !ruby/object:Gem::Version
|
97
|
-
version: '
|
48
|
+
version: '3.12'
|
98
49
|
type: :development
|
99
50
|
prerelease: false
|
100
51
|
version_requirements: !ruby/object:Gem::Requirement
|
101
52
|
requirements:
|
102
53
|
- - "~>"
|
103
54
|
- !ruby/object:Gem::Version
|
104
|
-
version: '
|
55
|
+
version: '3.12'
|
105
56
|
- !ruby/object:Gem::Dependency
|
106
|
-
name: hoe
|
57
|
+
name: hoe-deveiate
|
107
58
|
requirement: !ruby/object:Gem::Requirement
|
108
59
|
requirements:
|
109
60
|
- - "~>"
|
110
61
|
- !ruby/object:Gem::Version
|
111
|
-
version: '
|
62
|
+
version: '0.6'
|
112
63
|
type: :development
|
113
64
|
prerelease: false
|
114
65
|
version_requirements: !ruby/object:Gem::Requirement
|
115
66
|
requirements:
|
116
67
|
- - "~>"
|
117
68
|
- !ruby/object:Gem::Version
|
118
|
-
version: '
|
69
|
+
version: '0.6'
|
119
70
|
- !ruby/object:Gem::Dependency
|
120
71
|
name: hoe-bundler
|
121
72
|
requirement: !ruby/object:Gem::Requirement
|