pakyow-data 1.0.0.rc3 → 1.0.0.rc4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/pakyow/data/adapters/{abstract.rb → base.rb} +1 -1
- data/lib/pakyow/data/adapters/sql/commands.rb +3 -3
- data/lib/pakyow/data/adapters/sql.rb +2 -2
- data/lib/pakyow/data/container.rb +1 -1
- data/lib/pakyow/data/proxy.rb +25 -5
- data/lib/pakyow/data/result.rb +3 -0
- data/lib/pakyow/data/sources/{abstract.rb → base.rb} +1 -1
- data/lib/pakyow/data/sources/ephemeral.rb +2 -2
- data/lib/pakyow/data/sources/relational/command.rb +14 -13
- data/lib/pakyow/data/sources/relational.rb +10 -10
- data/lib/pakyow/data/subscribers/adapters/redis.rb +3 -2
- data/lib/pakyow/data/subscribers.rb +43 -11
- data/lib/pakyow/validations/unique.rb +14 -6
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 89ef7f94e6abbe68bb389a5c560d9eba58ce4452bdad141c7b16a0a0f8e8dcd7
|
4
|
+
data.tar.gz: 316e9f4896f4027323ae60700d8ce1d90e1146618fc1c7653089f72c2607fc23
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 331a2fbc87996b350a1d06ff1087d15f5a6b98d9a20e29fa12c05e95cc8291c410282f2c0a0d646cc81874bfd7de4dcac4bbf6843cc04bb16c9eae924e123276
|
7
|
+
data.tar.gz: 7816ae161a6d96d19dabdf0356792a2b17c69d6ea6cd6de2f6876b99143a67c27044d7a3703904a8135a87506a55e82655d0cf9c8dfd1cf94372e7b29555df6a
|
@@ -8,7 +8,7 @@ module Pakyow
|
|
8
8
|
extend Support::Extension
|
9
9
|
|
10
10
|
apply_extension do
|
11
|
-
command :create,
|
11
|
+
command :create, creates: true do |values|
|
12
12
|
begin
|
13
13
|
inserted_return_value = insert(values)
|
14
14
|
if self.class.primary_key_field
|
@@ -27,7 +27,7 @@ module Pakyow
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
command :update,
|
30
|
+
command :update, updates: true do |values|
|
31
31
|
__getobj__.select(self.class.primary_key_field).map { |result|
|
32
32
|
result[self.class.primary_key_field]
|
33
33
|
}.tap do
|
@@ -43,7 +43,7 @@ module Pakyow
|
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
|
-
command :delete, provides_dataset: false,
|
46
|
+
command :delete, provides_dataset: false, deletes: true do
|
47
47
|
begin
|
48
48
|
delete
|
49
49
|
rescue Sequel::ForeignKeyConstraintViolation => error
|
@@ -6,13 +6,13 @@ require "pakyow/support/extension"
|
|
6
6
|
|
7
7
|
require "pakyow/support/core_refinements/string/normalization"
|
8
8
|
|
9
|
-
require "pakyow/data/adapters/
|
9
|
+
require "pakyow/data/adapters/base"
|
10
10
|
|
11
11
|
module Pakyow
|
12
12
|
module Data
|
13
13
|
module Adapters
|
14
14
|
# @api private
|
15
|
-
class Sql <
|
15
|
+
class Sql < Base
|
16
16
|
require "pakyow/data/adapters/sql/commands"
|
17
17
|
require "pakyow/data/adapters/sql/dataset_methods"
|
18
18
|
require "pakyow/data/adapters/sql/migrator"
|
@@ -91,7 +91,7 @@ module Pakyow
|
|
91
91
|
|
92
92
|
unless joining_source
|
93
93
|
joining_source = source.ancestors.find { |ancestor|
|
94
|
-
ancestor != source && ancestor.ancestors.include?(Sources::
|
94
|
+
ancestor != source && ancestor.ancestors.include?(Sources::Base)
|
95
95
|
}.make(
|
96
96
|
joining_source_name,
|
97
97
|
adapter: source.adapter,
|
data/lib/pakyow/data/proxy.rb
CHANGED
@@ -125,7 +125,7 @@ module Pakyow
|
|
125
125
|
subscriptions = []
|
126
126
|
|
127
127
|
if subscribable?
|
128
|
-
|
128
|
+
subscription = {
|
129
129
|
source: @source.source_name,
|
130
130
|
ephemeral: @source.is_a?(Sources::Ephemeral),
|
131
131
|
handler: handler,
|
@@ -134,6 +134,10 @@ module Pakyow
|
|
134
134
|
proxy: self
|
135
135
|
}
|
136
136
|
|
137
|
+
unless subscriptions.include?(subscription)
|
138
|
+
subscriptions << subscription
|
139
|
+
end
|
140
|
+
|
137
141
|
@nested_proxies.each do |related_proxy|
|
138
142
|
subscriptions.concat(
|
139
143
|
related_proxy.subscribe_related(
|
@@ -154,7 +158,7 @@ module Pakyow
|
|
154
158
|
|
155
159
|
if association = parent_source.class.find_association_to_source(@source)
|
156
160
|
parent_source.each do |parent_result|
|
157
|
-
|
161
|
+
subscription = {
|
158
162
|
source: @source.source_name,
|
159
163
|
handler: handler,
|
160
164
|
payload: payload,
|
@@ -163,6 +167,10 @@ module Pakyow
|
|
163
167
|
),
|
164
168
|
proxy: serialized_proxy
|
165
169
|
}
|
170
|
+
|
171
|
+
unless subscriptions.include?(subscription)
|
172
|
+
subscriptions << subscription
|
173
|
+
end
|
166
174
|
end
|
167
175
|
else
|
168
176
|
Pakyow.logger.error "tried to subscribe a related source, but we don't know how it's related"
|
@@ -226,9 +234,21 @@ module Pakyow
|
|
226
234
|
# Populate argument qualifications with argument values.
|
227
235
|
#
|
228
236
|
qualifications_for_proxied_call.each do |qualification_key, qualification_value|
|
229
|
-
|
230
|
-
|
231
|
-
|
237
|
+
if qualification_value.to_s.start_with?("__arg")
|
238
|
+
arg_number = qualification_value.to_s.gsub(/[^0-9]/, "").to_i
|
239
|
+
|
240
|
+
arg_value = proxied_call[1][arg_number]
|
241
|
+
arg_value = case arg_value
|
242
|
+
when Array
|
243
|
+
arg_value.map { |each_value|
|
244
|
+
@source.class.attributes[qualification_key][each_value]
|
245
|
+
}
|
246
|
+
else
|
247
|
+
@source.class.attributes[qualification_key][arg_value]
|
248
|
+
end
|
249
|
+
|
250
|
+
qualifications_for_proxied_call[qualification_key] = arg_value
|
251
|
+
end
|
232
252
|
end
|
233
253
|
|
234
254
|
qualifications.merge(qualifications_for_proxied_call)
|
data/lib/pakyow/data/result.rb
CHANGED
@@ -5,6 +5,9 @@ require "delegate"
|
|
5
5
|
module Pakyow
|
6
6
|
module Data
|
7
7
|
class Result < SimpleDelegator
|
8
|
+
# @api private
|
9
|
+
attr_reader :__proxy
|
10
|
+
|
8
11
|
def initialize(result, proxy, originating_method: nil, originating_args: [])
|
9
12
|
@__proxy = proxy
|
10
13
|
@originating_method = originating_method
|
@@ -5,12 +5,12 @@ require "securerandom"
|
|
5
5
|
|
6
6
|
require "pakyow/support/core_refinements/array/ensurable"
|
7
7
|
|
8
|
-
require "pakyow/data/sources/
|
8
|
+
require "pakyow/data/sources/base"
|
9
9
|
|
10
10
|
module Pakyow
|
11
11
|
module Data
|
12
12
|
module Sources
|
13
|
-
class Ephemeral <
|
13
|
+
class Ephemeral < Base
|
14
14
|
using Support::Refinements::Array::Ensurable
|
15
15
|
attr_reader :type, :qualifications
|
16
16
|
|
@@ -12,8 +12,8 @@ module Pakyow
|
|
12
12
|
using Support::DeepDup
|
13
13
|
using Support::Refinements::Array::Ensurable
|
14
14
|
|
15
|
-
def initialize(name, block:, source:, provides_dataset:,
|
16
|
-
@name, @block, @source, @provides_dataset, @
|
15
|
+
def initialize(name, block:, source:, provides_dataset:, creates:, updates:, deletes:)
|
16
|
+
@name, @block, @source, @provides_dataset, @creates, @updates, @deletes = name, block, source, provides_dataset, creates, updates, deletes
|
17
17
|
end
|
18
18
|
|
19
19
|
def call(values = {})
|
@@ -24,7 +24,7 @@ module Pakyow
|
|
24
24
|
#
|
25
25
|
@source.class.attributes.each do |attribute_name, attribute|
|
26
26
|
if attribute.meta[:required]
|
27
|
-
if @
|
27
|
+
if @creates && !values.include?(attribute_name)
|
28
28
|
raise NotNullViolation.new_with_message(attribute: attribute_name)
|
29
29
|
end
|
30
30
|
|
@@ -66,7 +66,7 @@ module Pakyow
|
|
66
66
|
# Update timestamp fields.
|
67
67
|
#
|
68
68
|
if timestamp_fields = @source.class.timestamp_fields
|
69
|
-
if @
|
69
|
+
if @creates
|
70
70
|
timestamp_fields.values.each do |timestamp_field|
|
71
71
|
final_values[timestamp_field] = Time.now
|
72
72
|
end
|
@@ -77,7 +77,7 @@ module Pakyow
|
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|
80
|
-
if @
|
80
|
+
if @creates
|
81
81
|
# Set default values.
|
82
82
|
#
|
83
83
|
@source.class.attributes.each do |attribute_name, attribute|
|
@@ -102,7 +102,7 @@ module Pakyow
|
|
102
102
|
case association_value
|
103
103
|
when Proxy
|
104
104
|
if association_value.source.class == association.associated_source
|
105
|
-
if association.result_type == :one && (association_value.count > 1 || (@
|
105
|
+
if association.result_type == :one && (association_value.count > 1 || (@updates && @source.count > 1))
|
106
106
|
raise ConstraintViolation.new_with_message(
|
107
107
|
:associate_multiple,
|
108
108
|
association: association.name
|
@@ -244,20 +244,20 @@ module Pakyow
|
|
244
244
|
end
|
245
245
|
end
|
246
246
|
|
247
|
-
original_dataset = if @
|
247
|
+
original_dataset = if @updates
|
248
248
|
# Hold on to the original values so we can update them locally.
|
249
249
|
@source.dup.to_a
|
250
250
|
else
|
251
251
|
nil
|
252
252
|
end
|
253
253
|
|
254
|
-
unless @provides_dataset || @
|
254
|
+
unless @provides_dataset || @updates
|
255
255
|
# Cache the result prior to running the command.
|
256
256
|
@source.to_a
|
257
257
|
end
|
258
258
|
|
259
259
|
@source.transaction do
|
260
|
-
if @
|
260
|
+
if @deletes
|
261
261
|
@source.class.associations.values.flatten.select(&:dependents?).each do |association|
|
262
262
|
dependent_values = @source.class.container.connection.adapter.restrict_to_attribute(
|
263
263
|
@source.class.primary_key_field, @source
|
@@ -326,12 +326,13 @@ module Pakyow
|
|
326
326
|
end
|
327
327
|
end
|
328
328
|
|
329
|
-
if @
|
329
|
+
if @creates || @updates
|
330
330
|
# Ensure that has_one associations only have one associated object.
|
331
331
|
#
|
332
332
|
@source.class.associations[:belongs_to].flat_map { |belongs_to_association|
|
333
333
|
belongs_to_association.associated_source.associations[:has_one].select { |has_one_association|
|
334
|
-
has_one_association.
|
334
|
+
has_one_association.associated_source == @source.class &&
|
335
|
+
has_one_association.associated_query_field == belongs_to_association.query_field
|
335
336
|
}
|
336
337
|
}.each do |association|
|
337
338
|
value = final_values.dig(
|
@@ -354,7 +355,7 @@ module Pakyow
|
|
354
355
|
|
355
356
|
command_result = @source.instance_exec(final_values, &@block)
|
356
357
|
|
357
|
-
final_result = if @
|
358
|
+
final_result = if @updates
|
358
359
|
# For updates, we fetch the values prior to performing the update and
|
359
360
|
# return a source containing locally updated values. This lets us see
|
360
361
|
# the original values but prevents us from fetching twice.
|
@@ -382,7 +383,7 @@ module Pakyow
|
|
382
383
|
@source
|
383
384
|
end
|
384
385
|
|
385
|
-
if @
|
386
|
+
if @creates || @updates
|
386
387
|
# Update records associated with the data we just changed.
|
387
388
|
#
|
388
389
|
future_associated_changes.each do |association, association_value|
|
@@ -4,7 +4,7 @@ require "pakyow/support/makeable"
|
|
4
4
|
require "pakyow/support/class_state"
|
5
5
|
require "pakyow/support/inflector"
|
6
6
|
|
7
|
-
require "pakyow/data/sources/
|
7
|
+
require "pakyow/data/sources/base"
|
8
8
|
|
9
9
|
module Pakyow
|
10
10
|
module Data
|
@@ -54,7 +54,7 @@ module Pakyow
|
|
54
54
|
# data.posts.by_id(1).first
|
55
55
|
# => #<Pakyow::Data::Object @values={:id => 1, :title => "foo", :created_at => "2018-11-30 10:55:05 -0800", :updated_at => "2018-11-30 10:55:05 -0800"}>
|
56
56
|
#
|
57
|
-
class Relational < Sources::
|
57
|
+
class Relational < Sources::Base
|
58
58
|
require "pakyow/data/sources/relational/associations/belongs_to"
|
59
59
|
require "pakyow/data/sources/relational/associations/has_many"
|
60
60
|
require "pakyow/data/sources/relational/associations/has_one"
|
@@ -188,9 +188,9 @@ module Pakyow
|
|
188
188
|
block: command[:block],
|
189
189
|
source: self,
|
190
190
|
provides_dataset: command[:provides_dataset],
|
191
|
-
|
192
|
-
|
193
|
-
|
191
|
+
creates: command[:creates],
|
192
|
+
updates: command[:updates],
|
193
|
+
deletes: command[:deletes]
|
194
194
|
)
|
195
195
|
else
|
196
196
|
raise(
|
@@ -418,20 +418,20 @@ module Pakyow
|
|
418
418
|
class_state :timestamp_fields
|
419
419
|
class_state :primary_key_field
|
420
420
|
class_state :attributes, default: {}
|
421
|
-
class_state :qualifications, default: {},
|
421
|
+
class_state :qualifications, default: {}, reader: false
|
422
422
|
class_state :associations, default: { belongs_to: [], has_many: [], has_one: [] }
|
423
423
|
class_state :commands, default: {}
|
424
424
|
|
425
425
|
class << self
|
426
426
|
attr_reader :name, :adapter, :connection
|
427
427
|
|
428
|
-
def command(command_name, provides_dataset: true,
|
428
|
+
def command(command_name, provides_dataset: true, creates: false, updates: false, deletes: false, &block)
|
429
429
|
@commands[command_name] = {
|
430
430
|
block: block,
|
431
431
|
provides_dataset: provides_dataset,
|
432
|
-
|
433
|
-
|
434
|
-
|
432
|
+
creates: creates,
|
433
|
+
updates: updates,
|
434
|
+
deletes: deletes
|
435
435
|
}
|
436
436
|
end
|
437
437
|
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "digest/sha1"
|
4
|
+
require "zlib"
|
4
5
|
|
5
6
|
require "redis"
|
6
7
|
require "concurrent/timer_task"
|
@@ -20,7 +21,7 @@ module Pakyow
|
|
20
21
|
class Redis
|
21
22
|
class << self
|
22
23
|
def stringify_subscription(subscription)
|
23
|
-
Marshal.dump(subscription)
|
24
|
+
Zlib::Deflate.deflate(Marshal.dump(subscription))
|
24
25
|
end
|
25
26
|
|
26
27
|
def generate_subscription_id(subscription_string)
|
@@ -154,7 +155,7 @@ module Pakyow
|
|
154
155
|
key_subscription_id(subscription_id)
|
155
156
|
}).zip(subscription_ids).map { |subscription_string, subscription_id|
|
156
157
|
begin
|
157
|
-
Marshal.restore(subscription_string).tap do |subscription|
|
158
|
+
Marshal.restore(Zlib::Inflate.inflate(subscription_string)).tap do |subscription|
|
158
159
|
subscription[:id] = subscription_id
|
159
160
|
end
|
160
161
|
rescue TypeError
|
@@ -56,19 +56,45 @@ module Pakyow
|
|
56
56
|
end
|
57
57
|
|
58
58
|
def did_mutate(source_name, changed_values = nil, result_source = nil)
|
59
|
-
@executor
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
59
|
+
@executor.post(source_name, changed_values, result_source, Pakyow.logger.target) do |source_name, changed_values, result_source, logger|
|
60
|
+
logger.internal {
|
61
|
+
"[Pakyow::Data::Subscribers] did mutate #{source_name}"
|
62
|
+
}
|
63
|
+
|
64
|
+
subscriptions = @adapter.subscriptions_for_source(source_name)
|
65
|
+
|
66
|
+
logger.internal {
|
67
|
+
"[Pakyow::Data::Subscribers] fetched #{subscriptions.count} subscriptions"
|
68
|
+
}
|
69
|
+
|
70
|
+
subscriptions.uniq { |subscription|
|
71
|
+
subscription.dig(:payload, :id) || subscription
|
72
|
+
}.select { |subscription|
|
73
|
+
process?(subscription, changed_values, result_source)
|
74
|
+
}.each do |subscription|
|
75
|
+
if subscription[:version] == @app.config.data.subscriptions.version
|
76
|
+
begin
|
77
|
+
logger.internal {
|
78
|
+
"[Pakyow::Data::Subscribers] processing subscription #{subscription[:id]}"
|
79
|
+
}
|
80
|
+
|
65
81
|
process(subscription, result_source)
|
82
|
+
|
83
|
+
logger.internal {
|
84
|
+
"[Pakyow::Data::Subscribers] finished processing subscription #{subscription[:id]}"
|
85
|
+
}
|
86
|
+
rescue => error
|
87
|
+
logger.error {
|
88
|
+
"[Pakyow::Data::Subscribers] did_mutate failed: #{error}"
|
89
|
+
}
|
66
90
|
end
|
67
91
|
end
|
68
|
-
rescue => error
|
69
|
-
Pakyow.logger.error "[Pakyow::Data::Subscribers] did_mutate failed: #{error}"
|
70
92
|
end
|
71
|
-
|
93
|
+
|
94
|
+
logger.internal {
|
95
|
+
"[Pakyow::Data::Subscribers] finished mutate for #{source_name}"
|
96
|
+
}
|
97
|
+
end
|
72
98
|
end
|
73
99
|
|
74
100
|
def unsubscribe(subscriber)
|
@@ -134,13 +160,19 @@ module Pakyow
|
|
134
160
|
QUALIFIABLE_TYPES = [Hash, Support::IndifferentHash].freeze
|
135
161
|
def qualified?(qualifications, changed_values, changed_results, original_results)
|
136
162
|
qualifications.all? do |key, value|
|
137
|
-
(
|
163
|
+
(
|
164
|
+
QUALIFIABLE_TYPES.include?(changed_values.class) && (
|
165
|
+
(
|
166
|
+
value.is_a?(Array) && value.include?(changed_values.to_h[key])
|
167
|
+
) || changed_values.to_h[key] == value
|
168
|
+
)
|
169
|
+
) || qualified_result?(key, value, changed_results, original_results)
|
138
170
|
end
|
139
171
|
end
|
140
172
|
|
141
173
|
def qualified_result?(key, value, changed_results, original_results)
|
142
174
|
original_results.concat(changed_results).any? do |result|
|
143
|
-
result[key] == value
|
175
|
+
(value.is_a?(Array) && value.include?(result[key])) || result[key] == value
|
144
176
|
end
|
145
177
|
end
|
146
178
|
end
|
@@ -7,19 +7,27 @@ module Pakyow
|
|
7
7
|
# Validates that the value is unique within its data source.
|
8
8
|
#
|
9
9
|
module Unique
|
10
|
-
def self.name
|
11
|
-
:unique
|
12
|
-
end
|
13
|
-
|
14
10
|
def self.message(**)
|
15
11
|
"must be unique"
|
16
12
|
end
|
17
13
|
|
18
14
|
def self.valid?(value, source:, **options)
|
19
|
-
options[:context].app.data.public_send(source).public_send(:"by_#{options[:key]}", value)
|
15
|
+
query = options[:context].app.data.public_send(source).public_send(:"by_#{options[:key]}", value)
|
16
|
+
|
17
|
+
if updating = options[:updating]
|
18
|
+
if updating.is_a?(Data::Result)
|
19
|
+
query.count == 0 || query.any? { |result|
|
20
|
+
result[updating.__proxy.source.class.primary_key_field] == updating[updating.__proxy.source.class.primary_key_field]
|
21
|
+
}
|
22
|
+
else
|
23
|
+
raise ArgumentError, "Expected `#{updating.class}' to be a `Pakyow::Data::Result'"
|
24
|
+
end
|
25
|
+
else
|
26
|
+
query.count == 0
|
27
|
+
end
|
20
28
|
end
|
21
29
|
end
|
22
30
|
|
23
|
-
Validator.register_validation(Unique)
|
31
|
+
Validator.register_validation(Unique, :unique)
|
24
32
|
end
|
25
33
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pakyow-data
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.
|
4
|
+
version: 1.0.0.rc4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bryan Powell
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-07-
|
11
|
+
date: 2019-07-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pakyow-core
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.0.0.
|
19
|
+
version: 1.0.0.rc4
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 1.0.0.
|
26
|
+
version: 1.0.0.rc4
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: pakyow-support
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1.0.0.
|
33
|
+
version: 1.0.0.rc4
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 1.0.0.
|
40
|
+
version: 1.0.0.rc4
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: concurrent-ruby
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -118,7 +118,7 @@ files:
|
|
118
118
|
- LICENSE
|
119
119
|
- README.md
|
120
120
|
- lib/pakyow/data.rb
|
121
|
-
- lib/pakyow/data/adapters/
|
121
|
+
- lib/pakyow/data/adapters/base.rb
|
122
122
|
- lib/pakyow/data/adapters/sql.rb
|
123
123
|
- lib/pakyow/data/adapters/sql/commands.rb
|
124
124
|
- lib/pakyow/data/adapters/sql/dataset_methods.rb
|
@@ -143,7 +143,7 @@ files:
|
|
143
143
|
- lib/pakyow/data/object.rb
|
144
144
|
- lib/pakyow/data/proxy.rb
|
145
145
|
- lib/pakyow/data/result.rb
|
146
|
-
- lib/pakyow/data/sources/
|
146
|
+
- lib/pakyow/data/sources/base.rb
|
147
147
|
- lib/pakyow/data/sources/ephemeral.rb
|
148
148
|
- lib/pakyow/data/sources/relational.rb
|
149
149
|
- lib/pakyow/data/sources/relational/association.rb
|