sinja-sequel 0.1.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1f7b795742fcfdbe13930f92bd6946f3de0d89ed
4
+ data.tar.gz: c12983f2a42794564b744ecfef193c84f6ef064e
5
+ SHA512:
6
+ metadata.gz: d619607435ab470cef5837a7603d0b60845ef346133962d1332f9a29d1eb48961a959449c865f94b7fb179909d10a2a0935c0401490801ee7ffdf6d2cb7b4f24
7
+ data.tar.gz: 129a26fe0d65b9a69c886c010202229bb6a11603aee4348e119c2ef71372dbdf7c69bae15ee10fc3c2066f9049e75750374a384ef4bf7ab563eb0841de36213d
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+ gem 'sinja', :require=>false, :path=>'../..'
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2016 Mike Pastore
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,274 @@
1
+ # Sinja::Sequel
2
+
3
+ <!--
4
+ Title: Sinja::Sequel
5
+ Description: Sequel-specific Helpers and DSL for Sinja
6
+ Author: Mike Pastore
7
+ Keywords: Ruby, Sinatra, Sinatra::JSONAPI, Sinja, Sequel
8
+ -->
9
+
10
+ [![Gem Version](https://badge.fury.io/rb/sinja-sequel.svg)](https://badge.fury.io/rb/sinja-sequel)
11
+
12
+ Sinja::Sequel configures your [Sinja][1] application to work with [Sequel][2]
13
+ out of the box, and provides additional helpers to greatly simplify the process
14
+ of writing the more complex action helpers (specifically `replace`, `merge`,
15
+ and `subtract`). An optional extension enhances Sinja's DSL to generate basic
16
+ action helpers that can be overridden, customized, or removed.
17
+
18
+ The core configuration and helpers are in pretty good shape (Sinja uses them in
19
+ its [demo app][3] and test suite), but the extension could use some fleshing
20
+ out. Testers and community contributions welcome!
21
+
22
+ <!-- START doctoc generated TOC please keep comment here to allow auto update -->
23
+ <!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
24
+
25
+
26
+ - [Installation](#installation)
27
+ - [Usage](#usage)
28
+ - [Core](#core)
29
+ - [Helpers](#helpers)
30
+ - [`next_pk`](#next_pk)
31
+ - [`add_missing`](#add_missing)
32
+ - [`remove_present`](#remove_present)
33
+ - [`add_remove`](#add_remove)
34
+ - [Extension](#extension)
35
+ - [Development](#development)
36
+ - [Contributing](#contributing)
37
+ - [License](#license)
38
+
39
+ <!-- END doctoc generated TOC please keep comment here to allow auto update -->
40
+
41
+ ## Installation
42
+
43
+ Add this line to your application's Gemfile:
44
+
45
+ ```ruby
46
+ gem 'sinja-sequel'
47
+ ```
48
+
49
+ And then execute:
50
+
51
+ ```sh
52
+ $ bundle
53
+ ```
54
+
55
+ Or install it yourself as:
56
+
57
+ ```sh
58
+ $ gem install sinja-sequel
59
+ ```
60
+
61
+ ## Usage
62
+
63
+ Always return Sequel datasets (instead of arrays of objects) from your `index`
64
+ (e.g. `Foo.dataset`) and `fetch` (e.g. `resource.bars_dataset`) action
65
+ helpers. The `finalize` helper, described below, will ensure they are
66
+ "rasterized" before being passed to [JSONAPI::Serializers][5].
67
+
68
+ You'll want to enable Sequel's `:tactical_eager_loading` plugin for the best
69
+ performance with JSONAPI::Serializers. I've [seen][6] it reduce complex
70
+ serializations by a factor of 100 (i.e. quite literally one query instead of
71
+ 100).
72
+
73
+ If you want to use client-generated IDs, enable the `:update_primary_key`
74
+ plugin on the model and call `unrestrict_primary_key` in the model definition
75
+ to allow mass assignment (e.g. with `Sequel::Model#set_fields`).
76
+
77
+ If your model has foreign keys and you want to enforce a non-nullable
78
+ constraint at the application level, consider enabling the
79
+ `:validation_helpers` plugin on the model and using `validates_not_null` in
80
+ conjuction with the `validate!` helper described below:
81
+
82
+ ```ruby
83
+ class Bar < Sequel::Model
84
+ plugin :validation_helpers
85
+
86
+ def validate
87
+ super
88
+ validates_not_null :foo
89
+ end
90
+ end
91
+ ```
92
+
93
+ See "Avoding Null Foreign Keys" in the [Sinja][1] documentation for more
94
+ information.
95
+
96
+ Finally, enable the `:pagination` extension on your connection (before
97
+ prepending Core) to enable pagination!
98
+
99
+ ### Core
100
+
101
+ Prepend [Sinja::Sequel::Core](/extensions/sequel/lib/sinja/sequel/core.rb)
102
+ after registering Sinja:
103
+
104
+ ```ruby
105
+ require 'sinja'
106
+ require 'sinja/sequel/core'
107
+
108
+ class MyApp < Sinatra::Base
109
+ register Sinja
110
+
111
+ helpers do
112
+ prepend Sinja::Sequel::Core
113
+ end
114
+ end
115
+ ```
116
+
117
+ Note that you must use `prepend` (instead of including Sinja::Sequel::Core like
118
+ a normal module of Sinatra helpers) in order to ensure that the included
119
+ methods take precedence over Sinja's method stubs (e.g. `transaction`).
120
+ [This][4] will hopefully be fixed in a future version of Sinatra.
121
+
122
+ Prepending Core does the following to your application:
123
+
124
+ * Configures `conflict_`, `not_found_`, and `validation_exceptions`, and
125
+ `validation_formatter`.
126
+ * Defines a `database` helper that delegates to `Sequel::Model.db`.
127
+ * Defines a `transaction` helper that delegates to `database.transaction`.
128
+ * Defines a `validate!` helper that raises an error if `resource` is invalid
129
+ after a `create` or `update` action helper invocation.
130
+ * Defines a simple equality-based `filter` helper that passes the filter params
131
+ to `Sequel::Dataset#where`.
132
+ * Defines a `sort` helper that applies `Sequel.asc` and `Sequel.desc` to the
133
+ sort terms and passes them to `Sequel::Dataset#order`.
134
+ * Defines a `finalize` helper that simply calls `Sequel::Dataset#all`.
135
+
136
+ If the `:pagination` Sequel extension is loaded, it also does the following:
137
+
138
+ * Configures `page_using` for page number- and size-based pagination, with an
139
+ additional record count parameter to avoid repetitive `SELECT COUNT` queries
140
+ while paging.
141
+ * Defines a `page` helper that calls `Sequel::Dataset#paginate` and computes a
142
+ hash of page params that Sinja will use to construct the root pagination
143
+ links and add to the root metadata of the response.
144
+
145
+ You may override any of the installed helpers by defining your own. Please see
146
+ the [Sinja][1] documentation for more information about Sinja hooks and
147
+ configurables, and the [Sequel][2] documentation for more information about
148
+ Sequel plugins and features.
149
+
150
+ ### Helpers
151
+
152
+ Include
153
+ [Sinja::Sequel::Helpers](/extensions/sequel/lib/sinja/sequel/helpers.rb) after
154
+ registering Sinja:
155
+
156
+ ```ruby
157
+ require 'sinja'
158
+ require 'sinja/sequel/helpers'
159
+
160
+ class MyApp < Sinatra::Base
161
+ register Sinja
162
+
163
+ helpers Sinja::Sequel::Helpers
164
+ end
165
+ ```
166
+
167
+ This is the most common use-case. **Note that including Helpers will
168
+ automatically prepend Core!**
169
+
170
+ #### `next_pk`
171
+
172
+ A convenience method to always return the primary key of the resource and the
173
+ resource from your `create` action helpers. Simply use it instead of `next`!
174
+
175
+ ```ruby
176
+ create do |attr|
177
+ next_pk Foo.create(attr)
178
+ end
179
+ ```
180
+
181
+ #### `add_missing`
182
+
183
+ Take the key of a Sequel \*_to_many association and an array of resource
184
+ identifier objects and add the "missing" records to the collection. Makes
185
+ writing your `merge` action helpers a breeze!
186
+
187
+ ```ruby
188
+ has_many :bars do
189
+ merge do |rios|
190
+ add_missing(:bars, rios)
191
+ end
192
+ end
193
+ ```
194
+
195
+ It will try to cast the ID of each resource identifier object by sending it the
196
+ `:to_i` method; pass in a third argument to specify a different method (e.g. if
197
+ the primary key of the `bars` table is a `varchar`, pass in `:to_s` instead).
198
+
199
+ This helper also takes an optional block that can be used to filter
200
+ subresources during processing. Simply return a truthy or falsey value from the
201
+ block (or raise an error to abort the entire transaction):
202
+
203
+ ```ruby
204
+ has_many :bars do
205
+ merge do |rios|
206
+ add_missing(:bars, rios) do |bar|
207
+ role?(:admin) || bar.owner == resource.owner
208
+ end
209
+ end
210
+ end
211
+ ```
212
+
213
+ #### `remove_present`
214
+
215
+ Like `add_missing`, but removes the "present" records from the collection.
216
+ Makes writing your `subtract` action helpers a breeze!
217
+
218
+ #### `add_remove`
219
+
220
+ Like `add_missing` and `remove_present`, but performs an efficient delta
221
+ operation on the collection. Makes writing your `replace` action helpers a
222
+ breeze!
223
+
224
+ ### Extension
225
+
226
+ Register [Sinja::Sequel](/extensions/sequel/lib/sinja/sequel.rb) after
227
+ registering Sinja:
228
+
229
+ ```ruby
230
+ require 'sinja'
231
+ require 'sinja/sequel'
232
+
233
+ class MyApp < Sinatra::Base
234
+ register Sinja
235
+ register Sinja::Sequel
236
+ end
237
+ ```
238
+
239
+ **Note that registering the extension will automatically include Helpers!**
240
+
241
+ After registering the extension, the `resource`, `has_many`, and `has_one` DSL
242
+ keywords will generate basic action helpers. The default `create` action helper
243
+ does not support client-generated IDs. These action helpers can be subsequently
244
+ overridden, customized by setting action helper options (i.e. `:roles`) and/or
245
+ defining `before_<action>` hooks, or removed entirely with `remove_<action>`.
246
+
247
+ ## Development
248
+
249
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run
250
+ `rake spec` to run the tests. You can also run `bin/console` for an interactive
251
+ prompt that will allow you to experiment.
252
+
253
+ To install this gem onto your local machine, run `bundle exec rake install`. To
254
+ release a new version, update the version number in `version.rb`, and then run
255
+ `bundle exec rake release`, which will create a git tag for the version, push
256
+ git commits and tags, and push the `.gem` file to
257
+ [rubygems.org](https://rubygems.org).
258
+
259
+ ## Contributing
260
+
261
+ Bug reports and pull requests are welcome on GitHub at
262
+ https://github.com/mwpastore/sinja.
263
+
264
+ ## License
265
+
266
+ The gem is available as open source under the terms of the [MIT
267
+ License](http://opensource.org/licenses/MIT).
268
+
269
+ [1]: https://github.com/mwpastore/sinja
270
+ [2]: http://sequel.jeremyevans.net
271
+ [3]: https://github.com/mwpastore/sinja/tree/master/demo-app
272
+ [4]: https://github.com/sinatra/sinatra/issues/1213
273
+ [5]: https://github.com/fotinakis/jsonapi-serializers
274
+ [6]: https://github.com/fotinakis/jsonapi-serializers/pull/31#issuecomment-148193366
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+ require 'bundler/gem_tasks'
3
+ require 'rake/testtask'
4
+
5
+ Rake::TestTask.new do |t|
6
+ t.test_files = FileList[File.expand_path('test/**/*_test.rb', __dir__)]
7
+ t.warning = false
8
+ end
9
+
10
+ task default: :test
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'sinja-sequel'
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require 'pry'
11
+ # Pry.start
12
+
13
+ require 'irb'
14
+ IRB.start
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+ require 'sinja/sequel'
3
+ require 'sinatra/jsonapi'
4
+
5
+ module Sinatra
6
+ register JSONAPI::Sequel
7
+ end
@@ -0,0 +1,2 @@
1
+ # frozen_string_literal: true
2
+ require 'sinja/sequel'
@@ -0,0 +1,110 @@
1
+ # frozen_string_literal: true
2
+ require 'sinja/sequel/helpers'
3
+ require 'sinja/sequel/version'
4
+
5
+ module Sinja
6
+ module Sequel
7
+ def self.registered(app)
8
+ app.helpers Helpers
9
+ end
10
+
11
+ def resource(res, try_convert=:to_i, &block)
12
+ klass = res.to_s.classify.constantize
13
+
14
+ super(res) do
15
+ register Resource
16
+
17
+ helpers do
18
+ def find(id)
19
+ klass[id.send(try_convert)]
20
+ end
21
+ end
22
+
23
+ show
24
+
25
+ show_many do |ids|
26
+ klass.where(klass.primary_key=>ids.map(&try_convert)).all
27
+ end
28
+
29
+ index do
30
+ klass.dataset
31
+ end
32
+
33
+ create do |attr|
34
+ tmp = klass.new
35
+ if respond_to?(:settable_fields)
36
+ tmp.set_fields(attr, settable_fields)
37
+ else
38
+ tmp.set(attr)
39
+ end
40
+ tmp.save(:validate=>false)
41
+ next_pk tmp
42
+ end
43
+
44
+ update do |attr|
45
+ if respond_to?(:settable_fields)
46
+ resource.update_fields(attr, settable_fields, :validate=>false, :missing=>:skip)
47
+ else
48
+ resource.set(attr)
49
+ resource.save_changes(:validate=>false)
50
+ end
51
+ end
52
+
53
+ destroy do
54
+ resource.destroy
55
+ end
56
+
57
+ instance_eval(&block) if block
58
+ end
59
+ end
60
+
61
+ module Resource
62
+ def has_one(rel, &block)
63
+ super(rel) do
64
+ pluck do
65
+ resource.send(rel)
66
+ end
67
+
68
+ prune(:sideload_on=>:update) do
69
+ resource.send("#{rel}=", nil)
70
+ resource.save_changes
71
+ end
72
+
73
+ graft(:sideload_on=>%i[create update]) do |rio|
74
+ klass = resource.class.association_reflection(rel).associated_class
75
+ resource.send("#{rel}=", klass.with_pk!(rio[:id]))
76
+ resource.save_changes(:validate=>!sideloaded?)
77
+ end
78
+
79
+ instance_eval(&block) if block
80
+ end
81
+ end
82
+
83
+ def has_many(rel, &block)
84
+ super(rel) do
85
+ fetch do
86
+ resource.send("#{rel}_dataset")
87
+ end
88
+
89
+ clear(:sideload_on=>:update) do
90
+ resource.send("remove_all_#{rel}")
91
+ end
92
+
93
+ replace(:sideload_on=>:update) do |rios|
94
+ add_remove(rel, rios)
95
+ end
96
+
97
+ merge(:sideload_on=>:create) do |rios|
98
+ add_missing(rel, rios)
99
+ end
100
+
101
+ subtract do |rios|
102
+ remove_present(rel, rios)
103
+ end
104
+
105
+ instance_eval(&block) if block
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+ require 'forwardable'
3
+ require 'sequel'
4
+
5
+ module Sinja
6
+ module Sequel
7
+ module Core
8
+ extend Forwardable
9
+
10
+ def self.prepended(base)
11
+ base.sinja do |c|
12
+ c.conflict_exceptions << ::Sequel::ConstraintViolation
13
+ c.not_found_exceptions << ::Sequel::NoMatchingRow
14
+ c.validation_exceptions << ::Sequel::ValidationFailed
15
+ c.validation_formatter = ->(e) { e.errors.keys.zip(e.errors.full_messages) }
16
+ end
17
+
18
+ base.include Pagination if ::Sequel::Database::EXTENSIONS.key?(:pagination)
19
+ end
20
+
21
+ def_delegator ::Sequel::Model, :db, :database
22
+
23
+ def_delegator :database, :transaction
24
+
25
+ define_method :filter, proc(&:where)
26
+
27
+ def sort(collection, fields)
28
+ collection.order(*fields.map { |k, v| ::Sequel.send(v, k) })
29
+ end
30
+
31
+ define_method :finalize, proc(&:all)
32
+
33
+ def validate!
34
+ raise ::Sequel::ValidationFailed, resource unless resource.valid?
35
+ end
36
+ end
37
+
38
+ module Pagination
39
+ def self.included(base)
40
+ base.sinja { |c| c.page_using = {
41
+ :number=>1,
42
+ :size=>10,
43
+ :record_count=>nil
44
+ }}
45
+ end
46
+
47
+ def page(collection, opts)
48
+ collection = collection.dataset unless collection.respond_to?(:paginate)
49
+
50
+ opts = settings._sinja.page_using.merge(opts)
51
+ collection = collection.paginate opts[:number].to_i, opts[:size].to_i,
52
+ (opts[:record_count].to_i if opts[:record_count])
53
+
54
+ # Attributes common to all pagination links
55
+ base = {
56
+ :size=>collection.page_size,
57
+ :record_count=>collection.pagination_record_count
58
+ }
59
+
60
+ pagination = {
61
+ :first=>base.merge(:number=>1),
62
+ :self=>base.merge(:number=>collection.current_page),
63
+ :last=>base.merge(:number=>collection.page_count)
64
+ }
65
+ pagination[:next] = base.merge(:number=>collection.next_page) if collection.next_page
66
+ pagination[:prev] = base.merge(:number=>collection.prev_page) if collection.prev_page
67
+
68
+ return collection, pagination
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+ require 'sinja/sequel/core'
3
+
4
+ module Sinja
5
+ module Sequel
6
+ module Helpers
7
+ def self.included(base)
8
+ base.prepend Core
9
+ end
10
+
11
+ def next_pk(resource, opts={})
12
+ [resource.pk, resource, opts]
13
+ end
14
+
15
+ def add_remove(association, rios, try_convert=:to_i)
16
+ meth_suffix = association.to_s.singularize
17
+ add_meth = "add_#{meth_suffix}".to_sym
18
+ remove_meth = "remove_#{meth_suffix}".to_sym
19
+
20
+ dataset = resource.send("#{association}_dataset")
21
+ klass = dataset.association_reflection.associated_class
22
+
23
+ # does not / will not work with composite primary keys
24
+ new_ids = rios.map { |rio| rio[:id].send(try_convert) }
25
+ transaction do
26
+ resource.lock!
27
+ old_ids = dataset.select_map(klass.primary_key)
28
+ in_common = old_ids & new_ids
29
+
30
+ (new_ids - in_common).each do |id|
31
+ subresource = klass.with_pk!(id)
32
+ resource.send(add_meth, subresource) \
33
+ unless block_given? && !yield(subresource)
34
+ end
35
+
36
+ (old_ids - in_common).each do |id|
37
+ subresource = klass.with_pk!(id)
38
+ resource.send(remove_meth, subresource) \
39
+ unless block_given? && !yield(subresource)
40
+ end
41
+
42
+ resource.reload
43
+ end
44
+ end
45
+
46
+ def add_missing(*args, &block)
47
+ add_or_remove(:add, :-, *args, &block)
48
+ end
49
+
50
+ def remove_present(*args, &block)
51
+ add_or_remove(:remove, :&, *args, &block)
52
+ end
53
+
54
+ private
55
+
56
+ def add_or_remove(meth_prefix, operator, association, rios, try_convert=:to_i)
57
+ meth = "#{meth_prefix}_#{association.to_s.singularize}".to_sym
58
+ transaction do
59
+ resource.lock!
60
+ venn(operator, association, rios, try_convert) do |subresource|
61
+ resource.send(meth, subresource) \
62
+ unless block_given? && !yield(subresource)
63
+ end
64
+ resource.reload
65
+ end
66
+ end
67
+
68
+ def venn(operator, association, rios, try_convert)
69
+ dataset = resource.send("#{association}_dataset")
70
+ klass = dataset.association_reflection.associated_class
71
+ # does not / will not work with composite primary keys
72
+ rios.map { |rio| rio[:id].send(try_convert) }
73
+ .send(operator, dataset.select_map(klass.primary_key))
74
+ .each { |id| yield klass.with_pk!(id) }
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+ module Sinja
3
+ module Sequel
4
+ VERSION = '0.1.0'
5
+ end
6
+ end
@@ -0,0 +1,29 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'sinja/sequel/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'sinja-sequel'
8
+ spec.version = Sinja::Sequel::VERSION
9
+ spec.authors = ['Mike Pastore']
10
+ spec.email = ['mike@oobak.org']
11
+
12
+ spec.summary = 'Sequel-specific Helpers and DSL for Sinja'
13
+ spec.homepage = 'https://github.com/mwpastore/sinja/tree/master/extensions/sequel'
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
17
+ f.match(%r{^(test|spec|features)/})
18
+ end
19
+ spec.require_paths = %w[lib]
20
+
21
+ spec.required_ruby_version = '>= 2.3.0'
22
+
23
+ spec.add_dependency 'sequel', '~> 4.0'
24
+ spec.add_dependency 'sinja', '>= 1.2.0.pre2', '< 2'
25
+
26
+ spec.add_development_dependency 'bundler', '~> 1.11'
27
+ spec.add_development_dependency 'minitest', '~> 5.9'
28
+ spec.add_development_dependency 'rake', '~> 12.0'
29
+ end
metadata ADDED
@@ -0,0 +1,133 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sinja-sequel
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Mike Pastore
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-12-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: sequel
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '4.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: sinja
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.2.0.pre2
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: '2'
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 1.2.0.pre2
44
+ - - "<"
45
+ - !ruby/object:Gem::Version
46
+ version: '2'
47
+ - !ruby/object:Gem::Dependency
48
+ name: bundler
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '1.11'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '1.11'
61
+ - !ruby/object:Gem::Dependency
62
+ name: minitest
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '5.9'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '5.9'
75
+ - !ruby/object:Gem::Dependency
76
+ name: rake
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '12.0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '12.0'
89
+ description:
90
+ email:
91
+ - mike@oobak.org
92
+ executables: []
93
+ extensions: []
94
+ extra_rdoc_files: []
95
+ files:
96
+ - Gemfile
97
+ - LICENSE.txt
98
+ - README.md
99
+ - Rakefile
100
+ - bin/console
101
+ - bin/setup
102
+ - lib/sinatra/jsonapi/sequel.rb
103
+ - lib/sinja-sequel.rb
104
+ - lib/sinja/sequel.rb
105
+ - lib/sinja/sequel/core.rb
106
+ - lib/sinja/sequel/helpers.rb
107
+ - lib/sinja/sequel/version.rb
108
+ - sinja-sequel.gemspec
109
+ homepage: https://github.com/mwpastore/sinja/tree/master/extensions/sequel
110
+ licenses:
111
+ - MIT
112
+ metadata: {}
113
+ post_install_message:
114
+ rdoc_options: []
115
+ require_paths:
116
+ - lib
117
+ required_ruby_version: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: 2.3.0
122
+ required_rubygems_version: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ requirements: []
128
+ rubyforge_project:
129
+ rubygems_version: 2.6.8
130
+ signing_key:
131
+ specification_version: 4
132
+ summary: Sequel-specific Helpers and DSL for Sinja
133
+ test_files: []