pg_graph 0.1.0 → 0.1.3

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,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3a1200417e14fc1e9dae71d0243e78da8a1ee4be0a3929b0a0c118dd46bacd98
4
- data.tar.gz: 4e8fd62d6ea2846966bb4c7f0f2ec2109eb8ba777d9585616d52794eb7f28e5f
3
+ metadata.gz: 49b8ffc6fb32516ede1d4f33e9c4b4cf06d3966a279eebd3a137959c6da5e37c
4
+ data.tar.gz: b08ba8c452e083f1ae581387bc88bc9acea229a0e416b6f935d10e453753e2e9
5
5
  SHA512:
6
- metadata.gz: d06d31762eeb3497b7cac9770766635bb2385b5025325037d839145c9d044bb6f477898aaa9c96d5f51183cd389b65d164e515eb90548f505f790b654aaffdb1
7
- data.tar.gz: fc2fddb0fd4291713d9b646ba369176cc5956bc3e326aff51b36535bb9ec0d564ef0592788e05474e62ac0b69f038b41db652ca5b1717e5caf73628ffb4234c8
6
+ metadata.gz: 7def3f805b7404546af5cdc8d524d14d177e2619b077baeadc513f94b5559d09a8cf7764269e2323acc8944e17132f9db559db4c518cc3f55246c6ad95105cab
7
+ data.tar.gz: 32e6f9e13430873f529ef91a2a350407abe7bdf6588fa45b2781a566466d8e7dca3276f6af91c7b56007c1a8b709f1de83fae82cda156dc576bc7565113fb224
data/Gemfile CHANGED
@@ -3,5 +3,3 @@ source "https://rubygems.org"
3
3
  # Specify your gem's dependencies in pg_graph.gemspec
4
4
  gemspec
5
5
 
6
- gem "rake", "~> 12.0"
7
- gem "rspec", "~> 3.0"
data/exe/pg_graph CHANGED
@@ -6,8 +6,24 @@ require "pg_graph/timer.rb"
6
6
 
7
7
  include ShellOpts
8
8
 
9
- PROGRAM = File.basename($PROGRAM_NAME)
10
9
  SPEC = %(
10
+ @ Load, dump, and clean databases
11
+
12
+ pg_graph is a utility that uses the PgGraph module to load, dump, or clean a
13
+ database. It uses a variety of formats that can be executed by psql(1)
14
+ ('psql') or by the Postgres library exec() call ('exec', 'sql'). It can also
15
+ read and write Yaml data ('yaml') that is useful for exchanging data with
16
+ other programs
17
+
18
+ Note that when you're loading or dumping data in one of the SQL formats,
19
+ you're almost always better off using postgres' own tools
20
+ (pg_dump/pg_restore/pg_sql), except in the special case when the data
21
+ contains circular foreign-key constraints and you don't have superuser
22
+ privileges
23
+
24
+ The dump command can also write the type of the database in yaml format. This
25
+ is the default
26
+
11
27
  -m,meta=EFILE @ Load meta data from YAML file
12
28
  Make pg_graph loads its meta data in YAML format from FILE instead of
13
29
  querying the database
@@ -22,15 +38,25 @@ SPEC = %(
22
38
  -f,format=FORMAT:sql,exec,psql,yaml
23
39
  Input/output format. Can be one of 'sql', 'exec', 'psql', or 'yaml' (default)
24
40
 
41
+ The 'psql' format is meant to be fed to the psql(1) command and contains
42
+ psql(1) meta-commands to silence the output and to terminate on any error.
43
+ The 'sql' format expects the database triggers to have been disabled
44
+ beforehand while the 'exec' format includes statements to disble triggers.
45
+ The 'exec' format also resets serials
46
+
47
+ The yaml format only contains the data and can be loaded by pg_graph.
48
+ Triggers will be disabled while loading and ID's restored afterwards
49
+
25
50
  -k,kind=KIND:meta,type,data
26
51
  Output kind. Can be one of 'meta', 'type' (the default), or 'data'
27
52
 
28
53
  -t,time
29
- Emit timings for process
54
+ Emit timings for process
30
55
 
31
- load! -- [FILE] DATABASE
56
+ load! -- DATABASE [FILE]
32
57
  Loads data into the database. The file format is determined by the file's
33
- extension but can also be set explicitly using the --format option.
58
+ extension but can also be set explicitly using the --format option. Reads
59
+ from standard input if FILE is missing
34
60
 
35
61
  dump! -- DATABASE
36
62
  Dumps data on standard output. Default is to dump the type system in yaml
@@ -66,15 +92,9 @@ opts, args = ShellOpts::ShellOpts.process(SPEC, ARGV)
66
92
  timing = opts.time?
67
93
  timer = Timer::Timer.new
68
94
 
69
- # Process options
70
- meta = opts.meta
71
- reflections = opts.reflections
72
- kind = opts.kind || "type"
73
- format = opts.format || "yaml"
74
-
75
95
  case opts.subcommand || :dump!
76
96
  when :load!
77
- database = args.expect(-1)
97
+ database = args.extract(1)
78
98
  file = args.expect(0..1) || "/dev/stdin"
79
99
 
80
100
  if opts.format?
@@ -112,7 +132,7 @@ case opts.subcommand || :dump!
112
132
  when :dump!
113
133
  database = args.expect(1)
114
134
 
115
- case kind
135
+ case opts.kind || "type"
116
136
  when "meta"
117
137
  connection = timer.time("connect") { PgConn.new(database) if !opts.meta? }
118
138
  meta = timer.time("meta") { opts.meta? ? PgMeta.load_file(opts.meta) : PgMeta.new(connection) }
@@ -124,7 +144,7 @@ case opts.subcommand || :dump!
124
144
  connection, type = load_type(timer, opts, database)
125
145
  data = timer.time("instantiate") { type.instantiate(connection) }
126
146
  timer.time("dump") {
127
- case format
147
+ case opts.format || "yaml"
128
148
  when "sql"; puts data.to_sql
129
149
  when "exec"; puts data.to_exec_sql
130
150
  when "psql"; puts data.to_psql_sql
data/lib/data/data.rb CHANGED
@@ -160,7 +160,7 @@ module PgGraph::Data
160
160
  def write(connection, ids: {}, delete: :all)
161
161
  constrain connection, PgConn
162
162
  constrain ids, String => Integer
163
- connection.exec(to_exec_sql(ids: ids, delete: :all))
163
+ connection.exec(to_exec_sql(ids: ids, delete: delete))
164
164
  self
165
165
  end
166
166
 
@@ -86,7 +86,8 @@ module PgGraph
86
86
  case name
87
87
  when "character varying", "varchar", "text", "uuid"; String
88
88
  when "smallint", "integer", "int4", "int2"; Integer
89
- when "double precision", "float8", "numeric"; Float
89
+ when "double precision", "real"; Float
90
+ when "numeric", "decimal"; BigDecimal
90
91
  when "bool", "boolean"; Boolean
91
92
  when "json"; Hash
92
93
  when "bytea"; String
@@ -97,7 +98,7 @@ module PgGraph
97
98
  end
98
99
  end
99
100
 
100
- SUPPORTED_RUBY_CLASSES = [String, Integer, Float, Boolean, Hash, Time, NilClass, Array]
101
+ SUPPORTED_RUBY_CLASSES = [String, Integer, Float, BigDecimal, Boolean, Hash, Time, NilClass, Array]
101
102
  end
102
103
 
103
104
  def self.inflector() @inflector ||= Inflector.new end
@@ -1,3 +1,3 @@
1
1
  module PgGraph
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.3"
3
3
  end
data/pg_graph.gemspec CHANGED
@@ -28,12 +28,16 @@ Gem::Specification.new do |spec|
28
28
  spec.add_dependency "constrain"
29
29
  spec.add_dependency "developer_exceptions"
30
30
  spec.add_dependency "dry-inflector"
31
- spec.add_dependency "hash_tree", "= 0.1.1"
32
31
  spec.add_dependency "indented_io"
33
- spec.add_dependency "shellopts", "2.0.6"
34
32
 
35
- spec.add_dependency "pg_conn", "= 0.2.1"
36
- spec.add_dependency "pg_meta", "0.1.0"
33
+ spec.add_dependency "hash_tree"
34
+ spec.add_dependency "shellopts", "~> 2.0.9"
35
+ spec.add_dependency "pg_conn"
36
+ spec.add_dependency "pg_meta"
37
+
38
+ spec.add_development_dependency "rake"
39
+ spec.add_development_dependency "rspec"
40
+ spec.add_development_dependency "simplecov"
37
41
 
38
42
  # Also un-comment in spec/spec_helper to use simplecov
39
43
  # spec.add_development_dependency "simplecov"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pg_graph
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Claus Rasmussen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-03-02 00:00:00.000000000 Z
11
+ date: 2022-04-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: boolean
@@ -67,21 +67,21 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: hash_tree
70
+ name: indented_io
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: 0.1.1
75
+ version: '0'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '='
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: 0.1.1
82
+ version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: indented_io
84
+ name: hash_tree
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
@@ -98,44 +98,86 @@ dependencies:
98
98
  name: shellopts
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - '='
101
+ - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 2.0.6
103
+ version: 2.0.9
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - '='
108
+ - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 2.0.6
110
+ version: 2.0.9
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: pg_conn
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - '='
115
+ - - ">="
116
116
  - !ruby/object:Gem::Version
117
- version: 0.2.1
117
+ version: '0'
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - '='
122
+ - - ">="
123
123
  - !ruby/object:Gem::Version
124
- version: 0.2.1
124
+ version: '0'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: pg_meta
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - '='
129
+ - - ">="
130
130
  - !ruby/object:Gem::Version
131
- version: 0.1.0
131
+ version: '0'
132
132
  type: :runtime
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - '='
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rake
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: rspec
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
137
165
  - !ruby/object:Gem::Version
138
- version: 0.1.0
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: simplecov
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
139
181
  description: dwpg_graph gem
140
182
  email:
141
183
  - claus.l.rasmussen@gmail.com
@@ -198,7 +240,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
198
240
  - !ruby/object:Gem::Version
199
241
  version: '0'
200
242
  requirements: []
201
- rubygems_version: 3.2.26
243
+ rubygems_version: 3.1.4
202
244
  signing_key:
203
245
  specification_version: 4
204
246
  summary: Create graph type model of database