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 +4 -4
- data/README.md +73 -0
- data/lib/sinatra/jsonapi/sequel.rb +1 -1
- data/lib/sinja/sequel/core.rb +3 -39
- data/lib/sinja/sequel/pagination.rb +42 -0
- data/lib/sinja/sequel/version.rb +1 -1
- data/lib/sinja/sequel.rb +7 -3
- data/sinja-sequel.gemspec +1 -1
- metadata +7 -12
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 9b6983191193091edf129496e971949a02941748
         | 
| 4 | 
            +
              data.tar.gz: 1f88be88d7d6366362543c054c2607cf4e8eb81d
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 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
         | 
    
        data/lib/sinja/sequel/core.rb
    CHANGED
    
    | @@ -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:: | 
| 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
         | 
    
        data/lib/sinja/sequel/version.rb
    CHANGED
    
    
    
        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 | 
            -
                         | 
| 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 | 
            -
                       | 
| 30 | 
            +
                      dataset.where(klass.primary_key=>ids.map!(&try_convert)).all
         | 
| 27 31 | 
             
                    end
         | 
| 28 32 |  | 
| 29 33 | 
             
                    index do
         | 
| 30 | 
            -
                       | 
| 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', ' | 
| 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. | 
| 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- | 
| 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
         |