db_schema-definitions 0.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 +7 -0
- data/.gitignore +12 -0
- data/.rspec +3 -0
- data/.travis.yml +7 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +4 -0
- data/Guardfile +15 -0
- data/LICENSE.txt +21 -0
- data/README.md +56 -0
- data/Rakefile +6 -0
- data/bin/console +10 -0
- data/bin/setup +6 -0
- data/db_schema-definitions.gemspec +31 -0
- data/lib/db_schema/definitions.rb +11 -0
- data/lib/db_schema/definitions/check_constraint.rb +17 -0
- data/lib/db_schema/definitions/enum.rb +23 -0
- data/lib/db_schema/definitions/extension.rb +12 -0
- data/lib/db_schema/definitions/field.rb +47 -0
- data/lib/db_schema/definitions/field/array.rb +30 -0
- data/lib/db_schema/definitions/field/base.rb +104 -0
- data/lib/db_schema/definitions/field/binary.rb +9 -0
- data/lib/db_schema/definitions/field/bit_string.rb +15 -0
- data/lib/db_schema/definitions/field/boolean.rb +9 -0
- data/lib/db_schema/definitions/field/character.rb +19 -0
- data/lib/db_schema/definitions/field/custom.rb +32 -0
- data/lib/db_schema/definitions/field/datetime.rb +30 -0
- data/lib/db_schema/definitions/field/extensions/chkpass.rb +9 -0
- data/lib/db_schema/definitions/field/extensions/citext.rb +9 -0
- data/lib/db_schema/definitions/field/extensions/cube.rb +9 -0
- data/lib/db_schema/definitions/field/extensions/hstore.rb +9 -0
- data/lib/db_schema/definitions/field/extensions/isn.rb +37 -0
- data/lib/db_schema/definitions/field/extensions/ltree.rb +9 -0
- data/lib/db_schema/definitions/field/extensions/seg.rb +9 -0
- data/lib/db_schema/definitions/field/geometric.rb +33 -0
- data/lib/db_schema/definitions/field/json.rb +13 -0
- data/lib/db_schema/definitions/field/monetary.rb +9 -0
- data/lib/db_schema/definitions/field/network.rb +17 -0
- data/lib/db_schema/definitions/field/numeric.rb +30 -0
- data/lib/db_schema/definitions/field/range.rb +29 -0
- data/lib/db_schema/definitions/field/text_search.rb +13 -0
- data/lib/db_schema/definitions/field/uuid.rb +9 -0
- data/lib/db_schema/definitions/foreign_key.rb +44 -0
- data/lib/db_schema/definitions/index.rb +56 -0
- data/lib/db_schema/definitions/index/column.rb +32 -0
- data/lib/db_schema/definitions/index/expression.rb +19 -0
- data/lib/db_schema/definitions/index/table_field.rb +19 -0
- data/lib/db_schema/definitions/schema.rb +36 -0
- data/lib/db_schema/definitions/table.rb +120 -0
- data/lib/db_schema/definitions/version.rb +5 -0
- metadata +218 -0
@@ -0,0 +1,19 @@
|
|
1
|
+
module DbSchema
|
2
|
+
module Definitions
|
3
|
+
module Field
|
4
|
+
class Char < Base
|
5
|
+
register :char, :character
|
6
|
+
attributes length: 1
|
7
|
+
end
|
8
|
+
|
9
|
+
class Varchar < Base
|
10
|
+
register :varchar, :'character varying'
|
11
|
+
attributes :length
|
12
|
+
end
|
13
|
+
|
14
|
+
class Text < Base
|
15
|
+
register :text
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module DbSchema
|
2
|
+
module Definitions
|
3
|
+
module Field
|
4
|
+
class Custom < Base
|
5
|
+
class << self
|
6
|
+
def class_for(type_name)
|
7
|
+
raise ArgumentError if type_name.nil?
|
8
|
+
|
9
|
+
custom_types[type_name] ||= Class.new(self) do
|
10
|
+
define_method :type do
|
11
|
+
type_name
|
12
|
+
end
|
13
|
+
|
14
|
+
define_singleton_method :type do
|
15
|
+
type_name
|
16
|
+
end
|
17
|
+
|
18
|
+
define_method :custom? do
|
19
|
+
true
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
def custom_types
|
26
|
+
@custom_types ||= {}
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module DbSchema
|
2
|
+
module Definitions
|
3
|
+
module Field
|
4
|
+
class Timestamp < Base
|
5
|
+
register :timestamp, :'timestamp without time zone'
|
6
|
+
end
|
7
|
+
|
8
|
+
class Timestamptz < Base
|
9
|
+
register :timestamptz, :'timestamp with time zone'
|
10
|
+
end
|
11
|
+
|
12
|
+
class Date < Base
|
13
|
+
register :date
|
14
|
+
end
|
15
|
+
|
16
|
+
class Time < Base
|
17
|
+
register :time, :'time without time zone'
|
18
|
+
end
|
19
|
+
|
20
|
+
class Timetz < Base
|
21
|
+
register :timetz, :'time with time zone'
|
22
|
+
end
|
23
|
+
|
24
|
+
class Interval < Base
|
25
|
+
register :interval
|
26
|
+
attributes :fields
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module DbSchema
|
2
|
+
module Definitions
|
3
|
+
module Field
|
4
|
+
class EAN13 < Base
|
5
|
+
register :ean13
|
6
|
+
end
|
7
|
+
|
8
|
+
class ISBN13 < Base
|
9
|
+
register :isbn13
|
10
|
+
end
|
11
|
+
|
12
|
+
class ISMN13 < Base
|
13
|
+
register :ismn13
|
14
|
+
end
|
15
|
+
|
16
|
+
class ISSN13 < Base
|
17
|
+
register :issn13
|
18
|
+
end
|
19
|
+
|
20
|
+
class ISBN < Base
|
21
|
+
register :isbn
|
22
|
+
end
|
23
|
+
|
24
|
+
class ISMN < Base
|
25
|
+
register :ismn
|
26
|
+
end
|
27
|
+
|
28
|
+
class ISSN < Base
|
29
|
+
register :issn
|
30
|
+
end
|
31
|
+
|
32
|
+
class UPC < Base
|
33
|
+
register :upc
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module DbSchema
|
2
|
+
module Definitions
|
3
|
+
module Field
|
4
|
+
class Point < Base
|
5
|
+
register :point
|
6
|
+
end
|
7
|
+
|
8
|
+
class Line < Base
|
9
|
+
register :line
|
10
|
+
end
|
11
|
+
|
12
|
+
class Lseg < Base
|
13
|
+
register :lseg
|
14
|
+
end
|
15
|
+
|
16
|
+
class Box < Base
|
17
|
+
register :box
|
18
|
+
end
|
19
|
+
|
20
|
+
class Path < Base
|
21
|
+
register :path
|
22
|
+
end
|
23
|
+
|
24
|
+
class Polygon < Base
|
25
|
+
register :polygon
|
26
|
+
end
|
27
|
+
|
28
|
+
class Circle < Base
|
29
|
+
register :circle
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module DbSchema
|
2
|
+
module Definitions
|
3
|
+
module Field
|
4
|
+
class SmallInt < Base
|
5
|
+
register :smallint
|
6
|
+
end
|
7
|
+
|
8
|
+
class Integer < Base
|
9
|
+
register :integer
|
10
|
+
end
|
11
|
+
|
12
|
+
class BigInt < Base
|
13
|
+
register :bigint
|
14
|
+
end
|
15
|
+
|
16
|
+
class Numeric < Base
|
17
|
+
register :numeric, :decimal
|
18
|
+
attributes :precision, :scale
|
19
|
+
end
|
20
|
+
|
21
|
+
class Real < Base
|
22
|
+
register :real
|
23
|
+
end
|
24
|
+
|
25
|
+
class DoublePrecision < Base
|
26
|
+
register :'double precision', :float
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module DbSchema
|
2
|
+
module Definitions
|
3
|
+
module Field
|
4
|
+
class Int4Range < Base
|
5
|
+
register :int4range
|
6
|
+
end
|
7
|
+
|
8
|
+
class Int8Range < Base
|
9
|
+
register :int8range
|
10
|
+
end
|
11
|
+
|
12
|
+
class NumRange < Base
|
13
|
+
register :numrange
|
14
|
+
end
|
15
|
+
|
16
|
+
class TsRange < Base
|
17
|
+
register :tsrange
|
18
|
+
end
|
19
|
+
|
20
|
+
class TsTzRange < Base
|
21
|
+
register :tstzrange
|
22
|
+
end
|
23
|
+
|
24
|
+
class DateRange < Base
|
25
|
+
register :daterange
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module DbSchema
|
2
|
+
module Definitions
|
3
|
+
class ForeignKey
|
4
|
+
include Dry::Equalizer(:name, :fields, :table, :keys, :on_update, :on_delete, :deferrable?)
|
5
|
+
attr_reader :name, :fields, :table, :keys, :on_update, :on_delete
|
6
|
+
|
7
|
+
def initialize(name:, fields:, table:, keys: [], on_update: :no_action, on_delete: :no_action, deferrable: false)
|
8
|
+
@name = name
|
9
|
+
@fields = fields
|
10
|
+
@table = table
|
11
|
+
@keys = keys
|
12
|
+
@on_update = on_update
|
13
|
+
@on_delete = on_delete
|
14
|
+
@deferrable = deferrable
|
15
|
+
end
|
16
|
+
|
17
|
+
def references_primary_key?
|
18
|
+
keys.empty?
|
19
|
+
end
|
20
|
+
|
21
|
+
def deferrable?
|
22
|
+
@deferrable
|
23
|
+
end
|
24
|
+
|
25
|
+
def options
|
26
|
+
{
|
27
|
+
deferrable: deferrable?,
|
28
|
+
name: name,
|
29
|
+
on_delete: on_delete,
|
30
|
+
on_update: on_update
|
31
|
+
}.tap do |options|
|
32
|
+
options[:key] = keys unless references_primary_key?
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
class NullForeignKey < ForeignKey
|
38
|
+
def initialize
|
39
|
+
@fields = []
|
40
|
+
@keys = []
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|