db_schema-definitions 0.1.1 → 0.2.rc1
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 +5 -5
- data/.travis.yml +4 -4
- data/lib/db_schema/definitions/awesome_print.rb +159 -0
- data/lib/db_schema/definitions/field/base.rb +14 -15
- data/lib/db_schema/definitions/field/serial.rb +17 -0
- data/lib/db_schema/definitions/field.rb +1 -0
- data/lib/db_schema/definitions/index.rb +9 -2
- data/lib/db_schema/definitions/table.rb +8 -0
- data/lib/db_schema/definitions/version.rb +1 -1
- data/lib/db_schema/definitions.rb +1 -0
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: '09c3d434a88ffdce3c3011e34bec258ffec9c663c55adaa98626df50522cbf75'
|
4
|
+
data.tar.gz: c9e426e1f905e4570623e34a32f9538774d4315b0fb196e84c09c32dc252ce56
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b795076bd8068230f48cca952b0343ef32a9eaf982e499cacdbe2cc197c8f9400dc9af9bd366abe89bdb44c3d69ed60de995495b7d6bb8902cbfd430f447be72
|
7
|
+
data.tar.gz: 181ee3609987fa55dc902b3288870e9ee2be7ff85c029ff0ebcece488fe962ccaf6e713699d2cade997d3ea1a23b954d85ccad15eb84b2c720f8d82071ae041d
|
data/.travis.yml
CHANGED
@@ -0,0 +1,159 @@
|
|
1
|
+
begin
|
2
|
+
require 'awesome_print'
|
3
|
+
rescue LoadError
|
4
|
+
end
|
5
|
+
|
6
|
+
if defined?(AwesomePrint)
|
7
|
+
module AwesomePrint
|
8
|
+
module DbSchema
|
9
|
+
module Definitions
|
10
|
+
def self.included(base)
|
11
|
+
base.send :alias_method, :cast_without_dbschema_definitions, :cast
|
12
|
+
base.send :alias_method, :cast, :cast_with_dbschema_definitions
|
13
|
+
end
|
14
|
+
|
15
|
+
def cast_with_dbschema_definitions(object, type)
|
16
|
+
case object
|
17
|
+
when ::DbSchema::Definitions::Schema
|
18
|
+
:dbschema_definitions_schema
|
19
|
+
when ::DbSchema::Definitions::NullTable,
|
20
|
+
::DbSchema::Definitions::NullField,
|
21
|
+
::DbSchema::Definitions::NullIndex,
|
22
|
+
::DbSchema::Definitions::NullCheckConstraint,
|
23
|
+
::DbSchema::Definitions::NullForeignKey,
|
24
|
+
::DbSchema::Definitions::NullEnum
|
25
|
+
:dbschema_definitions_null_object
|
26
|
+
when ::DbSchema::Definitions::Table
|
27
|
+
:dbschema_definitions_table
|
28
|
+
when ::DbSchema::Definitions::Field::Base
|
29
|
+
:dbschema_definitions_field
|
30
|
+
when ::DbSchema::Definitions::Index
|
31
|
+
:dbschema_definitions_index
|
32
|
+
when ::DbSchema::Definitions::Index::Column
|
33
|
+
:dbschema_definitions_index_column
|
34
|
+
when ::DbSchema::Definitions::CheckConstraint
|
35
|
+
:dbschema_definitions_check_constraint
|
36
|
+
when ::DbSchema::Definitions::ForeignKey
|
37
|
+
:dbschema_definitions_foreign_key
|
38
|
+
when ::DbSchema::Definitions::Enum
|
39
|
+
:dbschema_definitions_enum
|
40
|
+
when ::DbSchema::Definitions::Extension
|
41
|
+
:dbschema_definitions_extension
|
42
|
+
else
|
43
|
+
cast_without_dbschema_definitions(object, type)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
def awesome_dbschema_definitions_schema(schema)
|
49
|
+
data = ["tables: #{schema.tables.ai}"]
|
50
|
+
data << "enums: #{schema.enums.ai}" if schema.enums.any?
|
51
|
+
data << "extensions: #{schema.extensions.ai}" if schema.extensions.any?
|
52
|
+
|
53
|
+
data_string = data.join(', ')
|
54
|
+
"#<DbSchema::Definitions::Schema #{data_string}>"
|
55
|
+
end
|
56
|
+
|
57
|
+
def awesome_dbschema_definitions_null_object(object)
|
58
|
+
"#<#{object.class}>"
|
59
|
+
end
|
60
|
+
|
61
|
+
def awesome_dbschema_definitions_table(table)
|
62
|
+
data = ["fields: #{table.fields.ai}"]
|
63
|
+
data << "indexes: #{table.indexes.ai}" if table.indexes.any?
|
64
|
+
data << "checks: #{table.checks.ai}" if table.checks.any?
|
65
|
+
data << "foreign_keys: #{table.foreign_keys.ai}" if table.foreign_keys.any?
|
66
|
+
|
67
|
+
data_string = indent_lines(data.join(', '))
|
68
|
+
"#<DbSchema::Definitions::Table #{table.name.ai} #{data_string}>"
|
69
|
+
end
|
70
|
+
|
71
|
+
def awesome_dbschema_definitions_field(field)
|
72
|
+
options = field.options.map do |k, v|
|
73
|
+
key = colorize("#{k}:", :symbol)
|
74
|
+
|
75
|
+
if (k == :default) && v.is_a?(Symbol)
|
76
|
+
"#{key} #{colorize(v.to_s, :string)}"
|
77
|
+
else
|
78
|
+
"#{key} #{v.ai}"
|
79
|
+
end
|
80
|
+
end.unshift(nil).join(', ')
|
81
|
+
|
82
|
+
if field.custom?
|
83
|
+
"#<DbSchema::Definitions::Field::Custom (#{field.type.ai}) #{field.name.ai}#{options}>"
|
84
|
+
else
|
85
|
+
"#<#{field.class} #{field.name.ai}#{options}>"
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def awesome_dbschema_definitions_index(index)
|
90
|
+
columns = format_dbschema_fields(index.columns)
|
91
|
+
using = ' using ' + colorize(index.type.to_s, :symbol) unless index.btree?
|
92
|
+
|
93
|
+
data = [nil]
|
94
|
+
data << colorize('primary key', :nilclass) if index.primary?
|
95
|
+
data << colorize('unique', :nilclass) if index.unique?
|
96
|
+
data << colorize('condition: ', :symbol) + index.condition.ai unless index.condition.nil?
|
97
|
+
|
98
|
+
"#<#{index.class} #{index.name.ai} on #{columns}#{using}#{data.join(', ')}>"
|
99
|
+
end
|
100
|
+
|
101
|
+
def awesome_dbschema_definitions_index_column(column)
|
102
|
+
data = [column.name.ai]
|
103
|
+
|
104
|
+
if column.desc?
|
105
|
+
data << colorize('desc', :nilclass)
|
106
|
+
data << colorize('nulls last', :symbol) if column.nulls == :last
|
107
|
+
else
|
108
|
+
data << colorize('nulls first', :symbol) if column.nulls == :first
|
109
|
+
end
|
110
|
+
|
111
|
+
data.join(' ')
|
112
|
+
end
|
113
|
+
|
114
|
+
def awesome_dbschema_definitions_check_constraint(check)
|
115
|
+
"#<#{check.class} #{check.name.ai} #{check.condition.ai}>"
|
116
|
+
end
|
117
|
+
|
118
|
+
def awesome_dbschema_definitions_foreign_key(fkey)
|
119
|
+
fields = format_dbschema_fields(fkey.fields)
|
120
|
+
references = "#{colorize('references', :class)} #{fkey.table.ai}"
|
121
|
+
references << ' ' + format_dbschema_fields(fkey.keys) unless fkey.references_primary_key?
|
122
|
+
|
123
|
+
data = [nil]
|
124
|
+
data << colorize("on_update:", :symbol) + " #{fkey.on_update.ai}" unless fkey.on_update == :no_action
|
125
|
+
data << colorize("on_delete:", :symbol) + " #{fkey.on_delete.ai}" unless fkey.on_delete == :no_action
|
126
|
+
data << colorize('deferrable', :nilclass) if fkey.deferrable?
|
127
|
+
|
128
|
+
"#<#{fkey.class} #{fkey.name.ai} on #{fields} #{references}#{data.join(', ')}>"
|
129
|
+
end
|
130
|
+
|
131
|
+
def awesome_dbschema_definitions_enum(enum)
|
132
|
+
values = enum.values.map do |value|
|
133
|
+
colorize(value.to_s, :string)
|
134
|
+
end.join(', ')
|
135
|
+
|
136
|
+
"#<#{enum.class} #{enum.name.ai} (#{values})>"
|
137
|
+
end
|
138
|
+
|
139
|
+
def awesome_dbschema_definitions_extension(extension)
|
140
|
+
"#<#{extension.class} #{extension.name.ai}>"
|
141
|
+
end
|
142
|
+
|
143
|
+
def format_dbschema_fields(fields)
|
144
|
+
if fields.one?
|
145
|
+
fields.first.ai
|
146
|
+
else
|
147
|
+
'[' + fields.map(&:ai).join(', ') + ']'
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
def indent_lines(text, indent_level = 4)
|
152
|
+
text.gsub(/(?<!\A)^/, ' ' * indent_level)
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
AwesomePrint::Formatter.send(:include, AwesomePrint::DbSchema::Definitions)
|
159
|
+
end
|
@@ -2,23 +2,18 @@ module DbSchema
|
|
2
2
|
module Definitions
|
3
3
|
module Field
|
4
4
|
class Base
|
5
|
-
include Dry::Equalizer(:name, :type, :
|
5
|
+
include Dry::Equalizer(:name, :type, :options)
|
6
6
|
attr_reader :name, :default
|
7
7
|
|
8
|
-
def initialize(name,
|
9
|
-
@name
|
10
|
-
@
|
11
|
-
@
|
12
|
-
@
|
13
|
-
@attributes = attributes
|
14
|
-
end
|
15
|
-
|
16
|
-
def primary_key?
|
17
|
-
@primary_key
|
8
|
+
def initialize(name, null: true, default: nil, **attributes)
|
9
|
+
@name = name
|
10
|
+
@null = null
|
11
|
+
@default = default
|
12
|
+
@attributes = attributes
|
18
13
|
end
|
19
14
|
|
20
15
|
def null?
|
21
|
-
|
16
|
+
@null
|
22
17
|
end
|
23
18
|
|
24
19
|
def default_is_expression?
|
@@ -57,15 +52,19 @@ module DbSchema
|
|
57
52
|
end
|
58
53
|
|
59
54
|
def with_type(new_type)
|
60
|
-
Field.build(name, new_type, **options
|
55
|
+
Field.build(name, new_type, **options)
|
61
56
|
end
|
62
57
|
|
63
58
|
def with_attribute(attr_name, attr_value)
|
64
|
-
Field.build(name, type, **options,
|
59
|
+
Field.build(name, type, **options, attr_name => attr_value)
|
60
|
+
end
|
61
|
+
|
62
|
+
def with_null(null)
|
63
|
+
Field.build(name, type, **options, null: null)
|
65
64
|
end
|
66
65
|
|
67
66
|
def with_default(new_default)
|
68
|
-
Field.build(name, type, **options,
|
67
|
+
Field.build(name, type, **options, default: new_default)
|
69
68
|
end
|
70
69
|
|
71
70
|
class << self
|
@@ -1,17 +1,22 @@
|
|
1
1
|
module DbSchema
|
2
2
|
module Definitions
|
3
3
|
class Index
|
4
|
-
include Dry::Equalizer(:name, :columns, :unique?, :type, :condition)
|
4
|
+
include Dry::Equalizer(:name, :columns, :primary?, :unique?, :type, :condition)
|
5
5
|
attr_reader :name, :columns, :type, :condition
|
6
6
|
|
7
|
-
def initialize(name:, columns:, unique: false, type: :btree, condition: nil)
|
7
|
+
def initialize(name:, columns:, primary: false, unique: false, type: :btree, condition: nil)
|
8
8
|
@name = name.to_sym
|
9
9
|
@columns = columns
|
10
|
+
@primary = primary
|
10
11
|
@unique = unique
|
11
12
|
@type = type
|
12
13
|
@condition = condition
|
13
14
|
end
|
14
15
|
|
16
|
+
def primary?
|
17
|
+
@primary
|
18
|
+
end
|
19
|
+
|
15
20
|
def unique?
|
16
21
|
@unique
|
17
22
|
end
|
@@ -36,6 +41,7 @@ module DbSchema
|
|
36
41
|
Index.new(
|
37
42
|
name: new_name,
|
38
43
|
columns: columns,
|
44
|
+
primary: primary?,
|
39
45
|
unique: unique?,
|
40
46
|
type: type,
|
41
47
|
condition: condition
|
@@ -46,6 +52,7 @@ module DbSchema
|
|
46
52
|
Index.new(
|
47
53
|
name: name,
|
48
54
|
columns: columns,
|
55
|
+
primary: primary?,
|
49
56
|
unique: unique?,
|
50
57
|
type: type,
|
51
58
|
condition: new_condition
|
@@ -47,6 +47,14 @@ module DbSchema
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
+
def primary_key
|
51
|
+
indexes.find(&:primary?) || NullIndex.new
|
52
|
+
end
|
53
|
+
|
54
|
+
def has_primary_key?
|
55
|
+
!primary_key.is_a?(NullIndex)
|
56
|
+
end
|
57
|
+
|
50
58
|
def check(check_name)
|
51
59
|
checks.find { |check| check.name == check_name } || NullCheckConstraint.new
|
52
60
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: db_schema-definitions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.rc1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vsevolod Romashov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-02-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-equalizer
|
@@ -156,6 +156,7 @@ files:
|
|
156
156
|
- bin/setup
|
157
157
|
- db_schema-definitions.gemspec
|
158
158
|
- lib/db_schema/definitions.rb
|
159
|
+
- lib/db_schema/definitions/awesome_print.rb
|
159
160
|
- lib/db_schema/definitions/check_constraint.rb
|
160
161
|
- lib/db_schema/definitions/enum.rb
|
161
162
|
- lib/db_schema/definitions/extension.rb
|
@@ -181,6 +182,7 @@ files:
|
|
181
182
|
- lib/db_schema/definitions/field/network.rb
|
182
183
|
- lib/db_schema/definitions/field/numeric.rb
|
183
184
|
- lib/db_schema/definitions/field/range.rb
|
185
|
+
- lib/db_schema/definitions/field/serial.rb
|
184
186
|
- lib/db_schema/definitions/field/text_search.rb
|
185
187
|
- lib/db_schema/definitions/field/uuid.rb
|
186
188
|
- lib/db_schema/definitions/foreign_key.rb
|
@@ -206,12 +208,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
206
208
|
version: '0'
|
207
209
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
208
210
|
requirements:
|
209
|
-
- - "
|
211
|
+
- - ">"
|
210
212
|
- !ruby/object:Gem::Version
|
211
|
-
version:
|
213
|
+
version: 1.3.1
|
212
214
|
requirements: []
|
213
|
-
|
214
|
-
rubygems_version: 2.6.13
|
215
|
+
rubygems_version: 3.0.1
|
215
216
|
signing_key:
|
216
217
|
specification_version: 4
|
217
218
|
summary: Database object definitions for DbSchema
|