sinja-sequel 0.1.1 → 0.1.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: df1760457e554a3c32e7986732018fbf8aba0ebc
4
- data.tar.gz: 527006ae41bc69e3c17382eeb262f1154e54b1f8
3
+ metadata.gz: 9b6983191193091edf129496e971949a02941748
4
+ data.tar.gz: 1f88be88d7d6366362543c054c2607cf4e8eb81d
5
5
  SHA512:
6
- metadata.gz: 0576ac7375b2b40101dabf6c098e119f8356f4f84495f07f1cc6aec73356ce5c09912991f82c6247612ca352ca670abdcad7fce354032104372e546ba09755d3
7
- data.tar.gz: f3e3fcfa3ee266d870e520991dcabf9a3402823e90d5db0d85093282278c0e7ab4d993895ad7ac603fd4b88af396588f185dfb6a9fbad85c54b67f00c52d4b58
6
+ metadata.gz: 64489f2281df7b119dbe0d2fc8d727dec44ff785bc9c45faa2d38b1176a165ddf36b84523ee4de18be14209376b2188209d828183660ba73e71c549dfbc64a2c
7
+ data.tar.gz: 9965fd332e77a4823a822e70e9377a51af27c872bafb70aa3773c261edf60e417e2d5b78cad295cde981f93d3963fe0e8eccd47fb05c7f66386111d914332931
data/README.md CHANGED
@@ -33,6 +33,7 @@ out. Testers and community contributions welcome!
33
33
  - [`remove_present`](#remove_present)
34
34
  - [`add_remove`](#add_remove)
35
35
  - [Extension](#extension)
36
+ - [Pagination](#pagination)
36
37
  - [Development](#development)
37
38
  - [Contributing](#contributing)
38
39
  - [License](#license)
@@ -112,6 +113,10 @@ class MyApp < Sinatra::Base
112
113
  helpers do
113
114
  prepend Sinja::Sequel::Core
114
115
  end
116
+
117
+ # ..
118
+
119
+ freeze_jsonapi
115
120
  end
116
121
  ```
117
122
 
@@ -162,6 +167,10 @@ class MyApp < Sinatra::Base
162
167
  register Sinja
163
168
 
164
169
  helpers Sinja::Sequel::Helpers
170
+
171
+ # ..
172
+
173
+ freeze_jsonapi
165
174
  end
166
175
  ```
167
176
 
@@ -234,6 +243,10 @@ require 'sinja/sequel'
234
243
  class MyApp < Sinatra::Base
235
244
  register Sinja
236
245
  register Sinja::Sequel
246
+
247
+ # ..
248
+
249
+ freeze_jsonapi
237
250
  end
238
251
  ```
239
252
 
@@ -255,6 +268,66 @@ These action helpers can be subsequently overridden, customized by setting
255
268
  action helper options (i.e. `:roles`) and/or defining `before_<action>` hooks,
256
269
  or removed entirely with `remove_<action>`.
257
270
 
271
+ Given a database connection and Foo, Bar, and Qux models and serializers,
272
+ here's an example "classic"-style application using the extension:
273
+
274
+ ```ruby
275
+ require 'sinatra/jsonapi/sequel'
276
+
277
+ resource :foos do
278
+ has_many :bars
279
+ has_one :qux
280
+ end
281
+
282
+ resource :bars do
283
+ has_one :foo
284
+ end
285
+
286
+ resource :quxes do
287
+ has_many :foos
288
+ end
289
+
290
+ freeze_jsonapi
291
+ ```
292
+
293
+ Pretty neat, huh?
294
+
295
+ ### Pagination
296
+
297
+ Sinja::Sequel uses the first Sequel database to determine whether or not to
298
+ enable pagination. If (and only if!) you have _multiple_ databases in your
299
+ application and only _some_ support pagination, you _may_ need to prepend
300
+ [Sinja::Sequel::Pagination](/lib/sinja/sequel/pagination.rb) after prepending
301
+ Core, including Helpers, or registering Sinja:
302
+
303
+ ```ruby
304
+ require 'sinja'
305
+ require 'sinja/sequel'
306
+ require 'sinja/sequel/pagination'
307
+
308
+ DB = Sequel.connect ENV['DB_URL']
309
+
310
+ OTHER_DB = Sequel.connect ENV['OTHER_DB_URL']
311
+ OTHER_DB.extension :pagination
312
+
313
+ class MyApp < Sinatra::Base
314
+ register Sinja
315
+ register Sinja::Sequel
316
+
317
+ helpers do
318
+ prepend Sinja::Sequel::Pagination
319
+
320
+ def database
321
+ OTHER_DB
322
+ end
323
+ end
324
+
325
+ # ..
326
+
327
+ freeze_jsonapi
328
+ end
329
+ ```
330
+
258
331
  ## Development
259
332
 
260
333
  After checking out the repo, run `bin/setup` to install dependencies. Then, run
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
- require 'sinja/sequel'
3
2
  require 'sinatra/jsonapi'
3
+ require 'sinja/sequel'
4
4
 
5
5
  module Sinatra
6
6
  register JSONAPI::Sequel
@@ -2,6 +2,8 @@
2
2
  require 'forwardable'
3
3
  require 'sequel'
4
4
 
5
+ require_relative 'pagination'
6
+
5
7
  module Sinja
6
8
  module Sequel
7
9
  module Core
@@ -15,7 +17,7 @@ module Sinja
15
17
  c.validation_formatter = ->(e) { e.errors.keys.zip(e.errors.full_messages) }
16
18
  end
17
19
 
18
- base.prepend Pagination if ::Sequel::Database::EXTENSIONS.key?(:pagination)
20
+ base.prepend Pagination if ::Sequel::Model.db.dataset.respond_to?(:paginate)
19
21
  end
20
22
 
21
23
  def self.included(_)
@@ -38,43 +40,5 @@ module Sinja
38
40
  raise ::Sequel::ValidationFailed, resource unless resource.valid?
39
41
  end
40
42
  end
41
-
42
- module Pagination
43
- def self.prepended(base)
44
- base.sinja { |c| c.page_using = {
45
- :number=>1,
46
- :size=>10,
47
- :record_count=>nil
48
- }}
49
- end
50
-
51
- def self.included(_)
52
- abort "You must `prepend' Sinja::Sequel::Pagination, not `include' it!"
53
- end
54
-
55
- def page(collection, opts)
56
- collection = collection.dataset unless collection.respond_to?(:paginate)
57
-
58
- opts = settings._sinja.page_using.merge(opts)
59
- collection = collection.paginate opts[:number].to_i, opts[:size].to_i,
60
- (opts[:record_count].to_i if opts[:record_count])
61
-
62
- # Attributes common to all pagination links
63
- base = {
64
- :size=>collection.page_size,
65
- :record_count=>collection.pagination_record_count
66
- }
67
-
68
- pagination = {
69
- :first=>base.merge(:number=>1),
70
- :self=>base.merge(:number=>collection.current_page),
71
- :last=>base.merge(:number=>collection.page_count)
72
- }
73
- pagination[:next] = base.merge(:number=>collection.next_page) if collection.next_page
74
- pagination[:prev] = base.merge(:number=>collection.prev_page) if collection.prev_page
75
-
76
- return collection, pagination
77
- end
78
- end
79
43
  end
80
44
  end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+ module Sinja
3
+ module Sequel
4
+ module Pagination
5
+ def self.prepended(base)
6
+ base.sinja { |c| c.page_using = {
7
+ :number=>1,
8
+ :size=>10,
9
+ :record_count=>nil
10
+ }}
11
+ end
12
+
13
+ def self.included(_)
14
+ abort "You must `prepend' Sinja::Sequel::Pagination, not `include' it!"
15
+ end
16
+
17
+ def page(collection, opts)
18
+ collection = collection.dataset unless collection.respond_to?(:paginate)
19
+
20
+ opts = settings._sinja.page_using.merge(opts)
21
+ collection = collection.paginate opts[:number].to_i, opts[:size].to_i,
22
+ (opts[:record_count].to_i if opts[:record_count])
23
+
24
+ # Attributes common to all pagination links
25
+ base = {
26
+ :size=>collection.page_size,
27
+ :record_count=>collection.pagination_record_count
28
+ }
29
+
30
+ pagination = {
31
+ :first=>base.merge(:number=>1),
32
+ :self=>base.merge(:number=>collection.current_page),
33
+ :last=>base.merge(:number=>collection.page_count)
34
+ }
35
+ pagination[:next] = base.merge(:number=>collection.next_page) if collection.next_page
36
+ pagination[:prev] = base.merge(:number=>collection.prev_page) if collection.prev_page
37
+
38
+ return collection, pagination
39
+ end
40
+ end
41
+ end
42
+ end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  module Sinja
3
3
  module Sequel
4
- VERSION = '0.1.1'
4
+ VERSION = '0.1.2'
5
5
  end
6
6
  end
data/lib/sinja/sequel.rb CHANGED
@@ -15,19 +15,23 @@ module Sinja
15
15
  register Resource
16
16
 
17
17
  helpers do
18
+ def dataset
19
+ klass.dataset
20
+ end
21
+
18
22
  def find(id)
19
- klass[id.send(try_convert)]
23
+ dataset[id.send(try_convert)]
20
24
  end
21
25
  end
22
26
 
23
27
  show
24
28
 
25
29
  show_many do |ids|
26
- klass.where(klass.primary_key=>ids.map(&try_convert)).all
30
+ dataset.where(klass.primary_key=>ids.map!(&try_convert)).all
27
31
  end
28
32
 
29
33
  index do
30
- klass.dataset
34
+ dataset
31
35
  end
32
36
 
33
37
  create do |attr|
data/sinja-sequel.gemspec CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.required_ruby_version = '>= 2.3.0'
22
22
 
23
23
  spec.add_dependency 'sequel', '~> 4.0'
24
- spec.add_dependency 'sinja', '>= 1.2.0.pre2', '< 2'
24
+ spec.add_dependency 'sinja', '~> 1.2'
25
25
 
26
26
  spec.add_development_dependency 'bundler', '~> 1.11'
27
27
  spec.add_development_dependency 'minitest', '~> 5.9'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sinja-sequel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Pastore
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-15 00:00:00.000000000 Z
11
+ date: 2016-12-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sequel
@@ -28,22 +28,16 @@ dependencies:
28
28
  name: sinja
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: 1.2.0.pre2
34
- - - "<"
31
+ - - "~>"
35
32
  - !ruby/object:Gem::Version
36
- version: '2'
33
+ version: '1.2'
37
34
  type: :runtime
38
35
  prerelease: false
39
36
  version_requirements: !ruby/object:Gem::Requirement
40
37
  requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- version: 1.2.0.pre2
44
- - - "<"
38
+ - - "~>"
45
39
  - !ruby/object:Gem::Version
46
- version: '2'
40
+ version: '1.2'
47
41
  - !ruby/object:Gem::Dependency
48
42
  name: bundler
49
43
  requirement: !ruby/object:Gem::Requirement
@@ -105,6 +99,7 @@ files:
105
99
  - lib/sinja/sequel.rb
106
100
  - lib/sinja/sequel/core.rb
107
101
  - lib/sinja/sequel/helpers.rb
102
+ - lib/sinja/sequel/pagination.rb
108
103
  - lib/sinja/sequel/version.rb
109
104
  - sinja-sequel.gemspec
110
105
  homepage: https://github.com/mwpastore/sinja-sequel