pakyow-data 1.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +0 -0
  3. data/LICENSE +4 -0
  4. data/README.md +29 -0
  5. data/lib/pakyow/data/adapters/abstract.rb +58 -0
  6. data/lib/pakyow/data/adapters/sql/commands.rb +58 -0
  7. data/lib/pakyow/data/adapters/sql/dataset_methods.rb +29 -0
  8. data/lib/pakyow/data/adapters/sql/differ.rb +76 -0
  9. data/lib/pakyow/data/adapters/sql/migrator/adapter_methods.rb +95 -0
  10. data/lib/pakyow/data/adapters/sql/migrator.rb +181 -0
  11. data/lib/pakyow/data/adapters/sql/migrators/automator.rb +49 -0
  12. data/lib/pakyow/data/adapters/sql/migrators/finalizer.rb +96 -0
  13. data/lib/pakyow/data/adapters/sql/runner.rb +49 -0
  14. data/lib/pakyow/data/adapters/sql/source_extension.rb +31 -0
  15. data/lib/pakyow/data/adapters/sql/types.rb +50 -0
  16. data/lib/pakyow/data/adapters/sql.rb +247 -0
  17. data/lib/pakyow/data/behavior/config.rb +28 -0
  18. data/lib/pakyow/data/behavior/lookup.rb +75 -0
  19. data/lib/pakyow/data/behavior/serialization.rb +40 -0
  20. data/lib/pakyow/data/connection.rb +103 -0
  21. data/lib/pakyow/data/container.rb +273 -0
  22. data/lib/pakyow/data/errors.rb +169 -0
  23. data/lib/pakyow/data/framework.rb +42 -0
  24. data/lib/pakyow/data/helpers.rb +11 -0
  25. data/lib/pakyow/data/lookup.rb +85 -0
  26. data/lib/pakyow/data/migrator.rb +182 -0
  27. data/lib/pakyow/data/object.rb +98 -0
  28. data/lib/pakyow/data/proxy.rb +262 -0
  29. data/lib/pakyow/data/result.rb +53 -0
  30. data/lib/pakyow/data/sources/abstract.rb +82 -0
  31. data/lib/pakyow/data/sources/ephemeral.rb +72 -0
  32. data/lib/pakyow/data/sources/relational/association.rb +43 -0
  33. data/lib/pakyow/data/sources/relational/associations/belongs_to.rb +47 -0
  34. data/lib/pakyow/data/sources/relational/associations/has_many.rb +54 -0
  35. data/lib/pakyow/data/sources/relational/associations/has_one.rb +54 -0
  36. data/lib/pakyow/data/sources/relational/associations/through.rb +67 -0
  37. data/lib/pakyow/data/sources/relational/command.rb +531 -0
  38. data/lib/pakyow/data/sources/relational/migrator.rb +101 -0
  39. data/lib/pakyow/data/sources/relational.rb +587 -0
  40. data/lib/pakyow/data/subscribers/adapters/memory.rb +153 -0
  41. data/lib/pakyow/data/subscribers/adapters/redis/pipeliner.rb +45 -0
  42. data/lib/pakyow/data/subscribers/adapters/redis/scripts/_shared.lua +73 -0
  43. data/lib/pakyow/data/subscribers/adapters/redis/scripts/expire.lua +16 -0
  44. data/lib/pakyow/data/subscribers/adapters/redis/scripts/persist.lua +15 -0
  45. data/lib/pakyow/data/subscribers/adapters/redis/scripts/register.lua +37 -0
  46. data/lib/pakyow/data/subscribers/adapters/redis.rb +209 -0
  47. data/lib/pakyow/data/subscribers.rb +148 -0
  48. data/lib/pakyow/data/tasks/bootstrap.rake +18 -0
  49. data/lib/pakyow/data/tasks/create.rake +22 -0
  50. data/lib/pakyow/data/tasks/drop.rake +32 -0
  51. data/lib/pakyow/data/tasks/finalize.rake +56 -0
  52. data/lib/pakyow/data/tasks/migrate.rake +24 -0
  53. data/lib/pakyow/data/tasks/reset.rake +18 -0
  54. data/lib/pakyow/data/types.rb +37 -0
  55. data/lib/pakyow/data.rb +27 -0
  56. data/lib/pakyow/environment/data/auto_migrate.rb +31 -0
  57. data/lib/pakyow/environment/data/config.rb +54 -0
  58. data/lib/pakyow/environment/data/connections.rb +76 -0
  59. data/lib/pakyow/environment/data/memory_db.rb +23 -0
  60. data/lib/pakyow/validations/unique.rb +26 -0
  61. metadata +186 -0
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "pakyow/data/migrator"
4
+
5
+ namespace :db do
6
+ desc "Bootstrap a database"
7
+ option :adapter, "The adapter to migrate"
8
+ option :connection, "The connection to migrate"
9
+ task :bootstrap, [:adapter, :connection] do |_, args|
10
+ %w[
11
+ db:create
12
+ db:migrate
13
+ ].each do |task|
14
+ Pakyow.logger.info "[db:bootstrap] running: #{task}"
15
+ Rake::Task[task].invoke(args[:adapter], args[:connection])
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "pakyow/data/migrator"
4
+
5
+ namespace :db do
6
+ desc "Create a database"
7
+ option :adapter, "The adapter to migrate"
8
+ option :connection, "The connection to migrate"
9
+ task :create, [:adapter, :connection] do |_, args|
10
+ unless Pakyow.booted?
11
+ Pakyow.boot(unsafe: true)
12
+ end
13
+
14
+ migrator = Pakyow::Data::Migrator.connect_global(
15
+ adapter: args[:adapter],
16
+ connection: args[:connection]
17
+ )
18
+
19
+ migrator.create!
20
+ migrator.disconnect!
21
+ end
22
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "pakyow/data/migrator"
4
+
5
+ namespace :db do
6
+ desc "Drop a database"
7
+ option :adapter, "The adapter to migrate"
8
+ option :connection, "The connection to migrate"
9
+ task :drop, [:adapter, :connection] do |_, args|
10
+ unless Pakyow.booted?
11
+ Pakyow.boot(unsafe: true)
12
+ end
13
+
14
+ begin
15
+ if connection = Pakyow.connection(args[:adapter], args[:connection])
16
+ connection.disconnect
17
+ end
18
+ # rubocop:disable Lint/HandleExceptions
19
+ rescue ArgumentError
20
+ # catch the case where the connection doesn't exist
21
+ end
22
+ # rubocop:enable Lint/HandleExceptions
23
+
24
+ migrator = Pakyow::Data::Migrator.connect_global(
25
+ adapter: args[:adapter],
26
+ connection: args[:connection]
27
+ )
28
+
29
+ migrator.drop!
30
+ migrator.disconnect!
31
+ end
32
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "pakyow/data/migrator"
4
+
5
+ namespace :db do
6
+ desc "Finalize a database"
7
+ option :adapter, "The adapter to migrate"
8
+ option :connection, "The connection to migrate"
9
+ task :finalize, [:adapter, :connection] do |_, args|
10
+ unless Pakyow.booted?
11
+ Pakyow.boot(unsafe: true)
12
+ end
13
+
14
+ opts = {
15
+ adapter: args[:adapter],
16
+ connection: args[:connection],
17
+ connection_overrides: {
18
+ path: -> (connection_path) {
19
+ "#{connection_path}-migrator"
20
+ }
21
+ }
22
+ }
23
+
24
+ # Use a global connection for creating the database.
25
+ #
26
+ global_migrator = Pakyow::Data::Migrator.connect_global(opts)
27
+
28
+ # Create the migrator database unless it exists.
29
+ #
30
+ global_migrator.create!
31
+
32
+ # Use a normal migrator for migrating.
33
+ #
34
+ migrator = Pakyow::Data::Migrator.connect(opts)
35
+
36
+ # Run the existing migrations on it.
37
+ #
38
+ migrator.migrate!
39
+
40
+ # Create migrations for unmigrated schema.
41
+ #
42
+ migrator.finalize!
43
+
44
+ # Disconnect.
45
+ #
46
+ migrator.disconnect!
47
+
48
+ # Drop the migrator database.
49
+ #
50
+ global_migrator.drop!
51
+
52
+ # Disconnect the migrator database.
53
+ #
54
+ global_migrator.disconnect!
55
+ end
56
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "pakyow/data/migrator"
4
+
5
+ namespace :db do
6
+ desc "Migrate a database"
7
+ option :adapter, "The adapter to migrate"
8
+ option :connection, "The connection to migrate"
9
+ task :migrate, [:adapter, :connection] do |_, args|
10
+ Pakyow.config.data.auto_migrate = false
11
+
12
+ unless Pakyow.booted?
13
+ Pakyow.boot(unsafe: true)
14
+ end
15
+
16
+ migrator = Pakyow::Data::Migrator.connect(
17
+ adapter: args[:adapter],
18
+ connection: args[:connection]
19
+ )
20
+
21
+ migrator.migrate!
22
+ migrator.disconnect!
23
+ end
24
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "pakyow/data/migrator"
4
+
5
+ namespace :db do
6
+ desc "Reset a database"
7
+ option :adapter, "The adapter to migrate"
8
+ option :connection, "The connection to migrate"
9
+ task :reset, [:adapter, :connection] do |_, args|
10
+ %w[
11
+ db:drop
12
+ db:bootstrap
13
+ ].each do |task|
14
+ Pakyow.logger.info "[db:reset] running: #{task}"
15
+ Rake::Task[task].invoke(args[:adapter], args[:connection])
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dry-types"
4
+
5
+ module Pakyow
6
+ module Data
7
+ module Types
8
+ include Dry.Types(default: :nominal)
9
+
10
+ MAPPING = {
11
+ boolean: Bool.meta(mapping: :boolean),
12
+ date: Date.meta(mapping: :date),
13
+ datetime: DateTime.meta(mapping: :datetime),
14
+ decimal: Coercible::Decimal.meta(mapping: :decimal),
15
+ float: Coercible::Float.meta(mapping: :float),
16
+ integer: Coercible::Integer.meta(mapping: :integer),
17
+ string: Coercible::String.meta(mapping: :string),
18
+ time: Time.meta(mapping: :time)
19
+ }.freeze
20
+
21
+ def self.type_for(type, additional_types = {})
22
+ if type.is_a?(Dry::Types::Type)
23
+ type
24
+ else
25
+ type = type.to_sym
26
+ additional_types.to_h.fetch(type) {
27
+ MAPPING.fetch(type)
28
+ }
29
+ end
30
+ rescue KeyError => error
31
+ raise UnknownType.build(error, type: type, context: {
32
+ type: type, types: MAPPING.keys
33
+ })
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "pakyow"
4
+ require "pakyow/routing"
5
+
6
+ require "pakyow/data/connection"
7
+
8
+ Pakyow::Data::Connection.register_adapter :sql
9
+
10
+ require "pakyow/data/errors"
11
+ require "pakyow/data/framework"
12
+
13
+ require "pakyow/environment/data/auto_migrate"
14
+ require "pakyow/environment/data/config"
15
+ require "pakyow/environment/data/connections"
16
+ require "pakyow/environment/data/memory_db"
17
+
18
+ require "pakyow/validations/unique"
19
+
20
+ module Pakyow
21
+ config.tasks.paths << File.expand_path("../data/tasks", __FILE__)
22
+
23
+ include Environment::Data::AutoMigrate
24
+ include Environment::Data::Config
25
+ include Environment::Data::Connections
26
+ include Environment::Data::MemoryDB
27
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "pakyow/support/extension"
4
+
5
+ module Pakyow
6
+ module Environment
7
+ module Data
8
+ module AutoMigrate
9
+ extend Support::Extension
10
+
11
+ apply_extension do
12
+ after "boot" do
13
+ if Pakyow.config.data.auto_migrate || Pakyow.config.data.auto_migrate_always.any?
14
+ require "pakyow/data/migrator"
15
+
16
+ @data_connections.values.flat_map(&:values)
17
+ .select(&:connected?)
18
+ .select(&:auto_migrate?)
19
+ .select { |connection|
20
+ Pakyow.config.data.auto_migrate || Pakyow.config.data.auto_migrate_always.include?(connection.name)
21
+ }.each do |auto_migratable_connection|
22
+ migrator = Pakyow::Data::Migrator.new(auto_migratable_connection)
23
+ migrator.auto_migrate!
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "pakyow/support/extension"
4
+
5
+ module Pakyow
6
+ module Environment
7
+ module Data
8
+ module Config
9
+ extend Support::Extension
10
+
11
+ apply_extension do
12
+ on "configure" do
13
+ # We have to define these in a before configure hook since new types could be added.
14
+ #
15
+ Pakyow.config.data.connections.instance_eval do
16
+ Pakyow::Data::Connection.adapter_types.each do |type|
17
+ setting type, {}
18
+ end
19
+ end
20
+ end
21
+
22
+ configurable :data do
23
+ setting :default_adapter, :sql
24
+ setting :default_connection, :default
25
+
26
+ setting :silent, true
27
+ setting :auto_migrate, true
28
+ setting :auto_migrate_always, [:memory]
29
+ setting :migration_path, "./database/migrations"
30
+
31
+ defaults :production do
32
+ setting :auto_migrate, false
33
+ end
34
+
35
+ configurable :subscriptions do
36
+ setting :adapter, :memory
37
+ setting :adapter_settings, {}
38
+
39
+ defaults :production do
40
+ setting :adapter, :redis
41
+ setting :adapter_settings do
42
+ Pakyow.config.redis.to_h
43
+ end
44
+ end
45
+ end
46
+
47
+ configurable :connections do
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "pakyow/support/extension"
4
+
5
+ require "pakyow/data/connection"
6
+
7
+ module Pakyow
8
+ module Environment
9
+ module Data
10
+ module Connections
11
+ extend Support::Extension
12
+
13
+ apply_extension do
14
+ class_state :data_connections, default: {}
15
+
16
+ class << self
17
+ # @api private
18
+ def connection(adapter, connection)
19
+ adapter ||= Pakyow.config.data.default_adapter
20
+ connection ||= Pakyow.config.data.default_connection
21
+ unless connection_instance = Pakyow.data_connections.dig(adapter.to_sym, connection.to_sym)
22
+ # TODO: see if this bubbles up to a level the user can see (e.g. specify in the source)
23
+ # okay, this is used to fetch a connection through the cli... maybe see if we can reuse when finding the connection for a source too
24
+ #
25
+ raise ArgumentError, "`#{connection}' is not a known database connection for the #{adapter} adapter"
26
+ end
27
+
28
+ connection_instance
29
+ end
30
+ end
31
+
32
+ on "boot", "boot.data.connections" do
33
+ # Disconnect any existing connections (e.g. booted twice for some reason).
34
+ #
35
+ @data_connections.values.flat_map(&:values).each(&:disconnect)
36
+
37
+ # Create new connections.
38
+ #
39
+ @data_connections = Pakyow::Data::Connection.adapter_types.each_with_object({}) { |connection_type, connections|
40
+ connections[connection_type] = Pakyow.config.data.connections.public_send(connection_type).each_with_object({}) { |(connection_name, connection_string), adapter_connections|
41
+ extra_options = {}
42
+
43
+ unless Pakyow.config.data.silent
44
+ extra_options[:logger] = Pakyow.logger
45
+ end
46
+
47
+ connection = Pakyow::Data::Connection.new(
48
+ string: connection_string,
49
+ type: connection_type,
50
+ name: connection_name,
51
+ **extra_options
52
+ )
53
+
54
+ if connection.failed?
55
+ raise connection.failure
56
+ else
57
+ adapter_connections[connection_name] = connection
58
+ end
59
+ }
60
+ }
61
+
62
+ # Register a prelaunch task to migrate every migratable connection.
63
+ #
64
+ @data_connections.each do |adapter, connections|
65
+ connections.each do |connection_name, connection|
66
+ if connection.migratable? && connection_name != :memory
67
+ config.tasks.prelaunch << ["db:migrate", { adapter: adapter, connection: connection_name }]
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "pakyow/support/extension"
4
+
5
+ module Pakyow
6
+ module Environment
7
+ module Data
8
+ # Configures an in-memory sqlite database.
9
+ #
10
+ module MemoryDB
11
+ extend Support::Extension
12
+
13
+ apply_extension do
14
+ after "configure" do
15
+ if defined?(SQLite3)
16
+ config.data.connections.sql[:memory] = "sqlite::memory"
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "pakyow/validator"
4
+
5
+ module Pakyow
6
+ module Validations
7
+ # Validates that the value is unique within its data source.
8
+ #
9
+ # @api public
10
+ module Unique
11
+ def self.name
12
+ :unique
13
+ end
14
+
15
+ def self.message(**)
16
+ "must be unique"
17
+ end
18
+
19
+ def self.valid?(value, source:, **options)
20
+ options[:context].app.data.public_send(source).public_send(:"by_#{options[:key]}", value).count == 0
21
+ end
22
+ end
23
+
24
+ Validator.register_validation(Unique)
25
+ end
26
+ end
metadata ADDED
@@ -0,0 +1,186 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pakyow-data
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0.rc1
5
+ platform: ruby
6
+ authors:
7
+ - Bryan Powell
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-07-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: pakyow-core
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 1.0.0.rc1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 1.0.0.rc1
27
+ - !ruby/object:Gem::Dependency
28
+ name: pakyow-support
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: 1.0.0.rc1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 1.0.0.rc1
41
+ - !ruby/object:Gem::Dependency
42
+ name: concurrent-ruby
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.1'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: connection_pool
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.2'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.2'
69
+ - !ruby/object:Gem::Dependency
70
+ name: dry-types
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: sequel
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '5.20'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '5.20'
97
+ description: Data persistence layer for Pakyow
98
+ email: bryan@metabahn.com
99
+ executables: []
100
+ extensions: []
101
+ extra_rdoc_files: []
102
+ files:
103
+ - CHANGELOG.md
104
+ - LICENSE
105
+ - README.md
106
+ - lib/pakyow/data.rb
107
+ - lib/pakyow/data/adapters/abstract.rb
108
+ - lib/pakyow/data/adapters/sql.rb
109
+ - lib/pakyow/data/adapters/sql/commands.rb
110
+ - lib/pakyow/data/adapters/sql/dataset_methods.rb
111
+ - lib/pakyow/data/adapters/sql/differ.rb
112
+ - lib/pakyow/data/adapters/sql/migrator.rb
113
+ - lib/pakyow/data/adapters/sql/migrator/adapter_methods.rb
114
+ - lib/pakyow/data/adapters/sql/migrators/automator.rb
115
+ - lib/pakyow/data/adapters/sql/migrators/finalizer.rb
116
+ - lib/pakyow/data/adapters/sql/runner.rb
117
+ - lib/pakyow/data/adapters/sql/source_extension.rb
118
+ - lib/pakyow/data/adapters/sql/types.rb
119
+ - lib/pakyow/data/behavior/config.rb
120
+ - lib/pakyow/data/behavior/lookup.rb
121
+ - lib/pakyow/data/behavior/serialization.rb
122
+ - lib/pakyow/data/connection.rb
123
+ - lib/pakyow/data/container.rb
124
+ - lib/pakyow/data/errors.rb
125
+ - lib/pakyow/data/framework.rb
126
+ - lib/pakyow/data/helpers.rb
127
+ - lib/pakyow/data/lookup.rb
128
+ - lib/pakyow/data/migrator.rb
129
+ - lib/pakyow/data/object.rb
130
+ - lib/pakyow/data/proxy.rb
131
+ - lib/pakyow/data/result.rb
132
+ - lib/pakyow/data/sources/abstract.rb
133
+ - lib/pakyow/data/sources/ephemeral.rb
134
+ - lib/pakyow/data/sources/relational.rb
135
+ - lib/pakyow/data/sources/relational/association.rb
136
+ - lib/pakyow/data/sources/relational/associations/belongs_to.rb
137
+ - lib/pakyow/data/sources/relational/associations/has_many.rb
138
+ - lib/pakyow/data/sources/relational/associations/has_one.rb
139
+ - lib/pakyow/data/sources/relational/associations/through.rb
140
+ - lib/pakyow/data/sources/relational/command.rb
141
+ - lib/pakyow/data/sources/relational/migrator.rb
142
+ - lib/pakyow/data/subscribers.rb
143
+ - lib/pakyow/data/subscribers/adapters/memory.rb
144
+ - lib/pakyow/data/subscribers/adapters/redis.rb
145
+ - lib/pakyow/data/subscribers/adapters/redis/pipeliner.rb
146
+ - lib/pakyow/data/subscribers/adapters/redis/scripts/_shared.lua
147
+ - lib/pakyow/data/subscribers/adapters/redis/scripts/expire.lua
148
+ - lib/pakyow/data/subscribers/adapters/redis/scripts/persist.lua
149
+ - lib/pakyow/data/subscribers/adapters/redis/scripts/register.lua
150
+ - lib/pakyow/data/tasks/bootstrap.rake
151
+ - lib/pakyow/data/tasks/create.rake
152
+ - lib/pakyow/data/tasks/drop.rake
153
+ - lib/pakyow/data/tasks/finalize.rake
154
+ - lib/pakyow/data/tasks/migrate.rake
155
+ - lib/pakyow/data/tasks/reset.rake
156
+ - lib/pakyow/data/types.rb
157
+ - lib/pakyow/environment/data/auto_migrate.rb
158
+ - lib/pakyow/environment/data/config.rb
159
+ - lib/pakyow/environment/data/connections.rb
160
+ - lib/pakyow/environment/data/memory_db.rb
161
+ - lib/pakyow/validations/unique.rb
162
+ homepage: https://pakyow.org
163
+ licenses:
164
+ - LGPL-3.0
165
+ metadata: {}
166
+ post_install_message:
167
+ rdoc_options: []
168
+ require_paths:
169
+ - lib
170
+ required_ruby_version: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - ">="
173
+ - !ruby/object:Gem::Version
174
+ version: 2.5.0
175
+ required_rubygems_version: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - ">"
178
+ - !ruby/object:Gem::Version
179
+ version: 1.3.1
180
+ requirements: []
181
+ rubyforge_project:
182
+ rubygems_version: 2.7.6
183
+ signing_key:
184
+ specification_version: 4
185
+ summary: Pakyow Data
186
+ test_files: []