sinja-sequel 0.1.6 → 0.1.7
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 +4 -4
- data/README.md +2 -1
- data/lib/sinja/sequel.rb +8 -11
- data/lib/sinja/sequel/core.rb +29 -3
- data/lib/sinja/sequel/helpers.rb +2 -9
- data/lib/sinja/sequel/pagination.rb +6 -3
- data/lib/sinja/sequel/version.rb +1 -1
- data/sinja-sequel.gemspec +1 -1
- metadata +13 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 32bb578a115bf6a9131d63b7cad0c4a88c4a39a8
|
4
|
+
data.tar.gz: f24e404c4e24ded1f117b044c6c2240fb7b5d27e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: af4a7ad263d1a02a67f2c91f7775c5237e40b1d996043180226251968d1d7e57cfb64a01dc83befa535df9193c709fdc7a81a8322571fa39d6920944403ed730
|
7
|
+
data.tar.gz: 0bad99425681c3625a336c0c605246c008fe8c060894d24d291f863dbf00529c24ed36b5b41d11f55426029dc9626f6a505bc487945b8a8759cc0fbf8ffe145c
|
data/README.md
CHANGED
@@ -261,7 +261,8 @@ class MyApp < Sinatra::Base
|
|
261
261
|
end
|
262
262
|
```
|
263
263
|
|
264
|
-
**Note that registering the extension will automatically include Helpers
|
264
|
+
**Note that registering the extension will automatically include Helpers and
|
265
|
+
prepend Core!**
|
265
266
|
|
266
267
|
After registering the extension, the `resource`, `has_many`, and `has_one` DSL
|
267
268
|
keywords will generate basic action helpers.
|
data/lib/sinja/sequel.rb
CHANGED
@@ -9,20 +9,20 @@ module Sinja
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def resource(res, try_convert=:to_i, **opts, &block)
|
12
|
+
klass = opts.fetch(:class) { res.to_s.classify.constantize }
|
13
|
+
|
12
14
|
super(res, **opts) do
|
13
15
|
register Resource
|
14
16
|
|
15
17
|
helpers do
|
16
|
-
|
18
|
+
define_method(:default_dataset) do
|
17
19
|
klass.dataset
|
18
20
|
end
|
19
21
|
|
20
|
-
|
21
|
-
class_for_type(data[:type])
|
22
|
-
end
|
22
|
+
alias_method :dataset, :default_dataset
|
23
23
|
|
24
24
|
define_method(:find) do |id|
|
25
|
-
dataset.with_pk(
|
25
|
+
dataset.with_pk(proc(&try_convert).(id))
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
@@ -37,10 +37,7 @@ module Sinja
|
|
37
37
|
end
|
38
38
|
|
39
39
|
create do |attr|
|
40
|
-
|
41
|
-
tmp.set(attr)
|
42
|
-
tmp.save(:validate=>false)
|
43
|
-
next_pk tmp
|
40
|
+
next_pk klass.new(attr)
|
44
41
|
end
|
45
42
|
|
46
43
|
update do |attr|
|
@@ -65,12 +62,12 @@ module Sinja
|
|
65
62
|
|
66
63
|
prune(:sideload_on=>:update) do
|
67
64
|
resource.send("#{rel}=", nil)
|
68
|
-
resource.save_changes
|
65
|
+
resource.save_changes(:validate=>!sideloaded?)
|
69
66
|
end
|
70
67
|
|
71
68
|
graft(:sideload_on=>%i[create update]) do |rio|
|
72
69
|
klass = resource.class.association_reflection(rel).associated_class
|
73
|
-
resource.send("#{rel}=", klass.with_pk!(rio[:id]
|
70
|
+
resource.send("#{rel}=", klass.with_pk!(proc(&try_convert).(rio[:id])))
|
74
71
|
resource.save_changes(:validate=>!sideloaded?)
|
75
72
|
end
|
76
73
|
|
data/lib/sinja/sequel/core.rb
CHANGED
@@ -11,11 +11,22 @@ module Sinja
|
|
11
11
|
extend Forwardable
|
12
12
|
|
13
13
|
def self.prepended(base)
|
14
|
-
base.sinja do |c|
|
14
|
+
base.sinja.configure do |c|
|
15
15
|
c.conflict_exceptions << ::Sequel::ConstraintViolation
|
16
16
|
c.not_found_exceptions << ::Sequel::NoMatchingRow
|
17
17
|
c.validation_exceptions << ::Sequel::ValidationFailed
|
18
18
|
c.validation_formatter = proc do |e|
|
19
|
+
e.errors.keys.each do |column|
|
20
|
+
if assocs = e.model.class.autoreloading_associations[column]
|
21
|
+
# copy errors attached to a FK column to the relevant association
|
22
|
+
assocs.each do |assoc|
|
23
|
+
e.errors[assoc] = e.errors[column]
|
24
|
+
end
|
25
|
+
|
26
|
+
e.errors.delete(column)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
19
30
|
typeof = e.model.class.associations
|
20
31
|
.map { |k| [k, :relationships] }.to_h
|
21
32
|
.tap { |h| h.default = :attributes }
|
@@ -42,17 +53,32 @@ module Sinja
|
|
42
53
|
|
43
54
|
def_delegator :database, :transaction
|
44
55
|
|
45
|
-
define_method :filter,
|
56
|
+
define_method :filter, &:where
|
46
57
|
|
47
58
|
def sort(collection, fields)
|
48
59
|
collection.order(*fields.map { |k, v| ::Sequel.send(v, k) })
|
49
60
|
end
|
50
61
|
|
51
|
-
define_method :finalize,
|
62
|
+
define_method :finalize, &:all
|
52
63
|
|
53
64
|
def validate!
|
54
65
|
raise ::Sequel::ValidationFailed, resource unless resource.valid?
|
55
66
|
end
|
67
|
+
|
68
|
+
def after_create
|
69
|
+
resource.save(:validate=>false)
|
70
|
+
resource.pk
|
71
|
+
end
|
72
|
+
|
73
|
+
def serialize_linkage(*, **options)
|
74
|
+
options[:skip_collection_check] = true
|
75
|
+
super
|
76
|
+
end
|
77
|
+
|
78
|
+
def serialize_model(*, **options)
|
79
|
+
options[:skip_collection_check] = true
|
80
|
+
super
|
81
|
+
end
|
56
82
|
end
|
57
83
|
end
|
58
84
|
end
|
data/lib/sinja/sequel/helpers.rb
CHANGED
@@ -1,6 +1,4 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require 'active_support/inflector'
|
3
|
-
|
4
2
|
require 'sinja/sequel/core'
|
5
3
|
|
6
4
|
module Sinja
|
@@ -10,11 +8,6 @@ module Sinja
|
|
10
8
|
base.prepend(Core)
|
11
9
|
end
|
12
10
|
|
13
|
-
def class_for_type(type)
|
14
|
-
@klass ||= {}
|
15
|
-
@klass[type] ||= type.underscore.classify.constantize
|
16
|
-
end
|
17
|
-
|
18
11
|
def next_pk(resource, opts={})
|
19
12
|
[resource.pk, resource, opts]
|
20
13
|
end
|
@@ -33,7 +26,7 @@ module Sinja
|
|
33
26
|
klass = dataset.association_reflection.associated_class
|
34
27
|
|
35
28
|
# does not / will not work with composite primary keys
|
36
|
-
new_ids = rios.map { |rio| rio[:id]
|
29
|
+
new_ids = rios.map { |rio| proc(&try_convert).(rio[:id]) }
|
37
30
|
transaction do
|
38
31
|
resource.lock!
|
39
32
|
old_ids = dataset.select_map(klass.primary_key)
|
@@ -81,7 +74,7 @@ module Sinja
|
|
81
74
|
dataset = resource.send("#{association}_dataset")
|
82
75
|
klass = dataset.association_reflection.associated_class
|
83
76
|
# does not / will not work with composite primary keys
|
84
|
-
rios.map { |rio| rio[:id]
|
77
|
+
rios.map { |rio| proc(&try_convert).(rio[:id]) }
|
85
78
|
.send(operator, dataset.select_map(klass.primary_key))
|
86
79
|
.each { |id| yield klass.with_pk!(id) }
|
87
80
|
end
|
@@ -3,7 +3,7 @@ module Sinja
|
|
3
3
|
module Sequel
|
4
4
|
module Pagination
|
5
5
|
def self.prepended(base)
|
6
|
-
base.sinja { |c| c.page_using = {
|
6
|
+
base.sinja.configure { |c| c.page_using = {
|
7
7
|
:number=>1,
|
8
8
|
:size=>10,
|
9
9
|
:record_count=>nil
|
@@ -15,10 +15,13 @@ module Sinja
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def page(collection, opts)
|
18
|
-
collection
|
18
|
+
return collection, {} unless collection.respond_to?(:paginate) ||
|
19
|
+
collection.respond_to?(:dataset) && (collection = collection.dataset).respond_to?(:paginate)
|
19
20
|
|
20
21
|
opts = settings._sinja.page_using.merge(opts)
|
21
|
-
collection = collection.paginate
|
22
|
+
collection = collection.paginate \
|
23
|
+
opts[:number].to_i,
|
24
|
+
opts[:size].to_i,
|
22
25
|
(opts[:record_count].to_i if opts[:record_count])
|
23
26
|
|
24
27
|
# Attributes common to all pagination links
|
data/lib/sinja/sequel/version.rb
CHANGED
data/sinja-sequel.gemspec
CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.required_ruby_version = '>= 2.3.0'
|
22
22
|
|
23
|
-
spec.add_dependency 'sequel', '
|
23
|
+
spec.add_dependency 'sequel', '>= 4.49', '< 6'
|
24
24
|
spec.add_dependency 'sinja', '~> 1.2'
|
25
25
|
|
26
26
|
spec.add_development_dependency 'bundler', '~> 1.11'
|
metadata
CHANGED
@@ -1,29 +1,35 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sinja-sequel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Pastore
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-10-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sequel
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.49'
|
20
|
+
- - "<"
|
18
21
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
22
|
+
version: '6'
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
|
-
- - "
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '4.49'
|
30
|
+
- - "<"
|
25
31
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
32
|
+
version: '6'
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: sinja
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -122,7 +128,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
122
128
|
version: '0'
|
123
129
|
requirements: []
|
124
130
|
rubyforge_project:
|
125
|
-
rubygems_version: 2.6.
|
131
|
+
rubygems_version: 2.6.13
|
126
132
|
signing_key:
|
127
133
|
specification_version: 4
|
128
134
|
summary: Sequel-specific Helpers and DSL for Sinja
|