api-blocks 0.1.1 → 0.2.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 +4 -4
- data/lib/api-blocks.rb +3 -0
- data/lib/api_blocks/controller.rb +5 -2
- data/lib/api_blocks/doorkeeper/passwords/application.rb +17 -0
- data/lib/api_blocks/doorkeeper/passwords/controller.rb +158 -0
- data/lib/api_blocks/doorkeeper/passwords/migration_generator.rb +34 -0
- data/lib/api_blocks/doorkeeper/passwords/user.rb +51 -0
- data/lib/api_blocks/doorkeeper/passwords.rb +10 -0
- data/lib/api_blocks/doorkeeper.rb +8 -0
- data/lib/api_blocks/interactor.rb +4 -4
- data/lib/api_blocks/railtie.rb +29 -0
- data/lib/api_blocks/responder.rb +5 -4
- data/lib/api_blocks/version.rb +2 -2
- data/lib/api_blocks.rb +3 -1
- metadata +46 -38
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 6612a52d3c9bd211ec55b833406c4fd53196d257161945ad0ddaad976f4b5ac6
         | 
| 4 | 
            +
              data.tar.gz: 5f959035fe3f550d408efe650051ccb5869595cce7a999377b5cae688e752c51
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 5a5496696e2e9176e444c0001a3061f71aadede9e8d0b9c8ac86e74d37d62c75a689a42b1e3009d92381b83c73883c91dcc310fb0e1a9afb487ff4a1d68d00df
         | 
| 7 | 
            +
              data.tar.gz: 3db65f293c0adda35b590e5b49d85ffd04dc4ce1d02c63acb1f0587e5d0324231d7c150857573afaa0b2397d98c9494e0b5778c050fbf8d7e41b239d03d04514
         | 
    
        data/lib/api-blocks.rb
    ADDED
    
    
| @@ -1,11 +1,14 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 1 3 | 
             
            # frozen_string_litreal: true
         | 
| 2 4 |  | 
| 3 | 
            -
            require  | 
| 5 | 
            +
            require 'pundit'
         | 
| 4 6 |  | 
| 5 7 | 
             
            # ApiBlocks::Controller provides a set of default configurations for
         | 
| 6 8 | 
             
            # Ruby on Rails api controllers.
         | 
| 7 9 | 
             
            #
         | 
| 8 | 
            -
            # It sets up `ApiBlocks::Responder` as a responder, `Pundit` and controller | 
| 10 | 
            +
            # It sets up `ApiBlocks::Responder` as a responder, `Pundit` and controller
         | 
| 11 | 
            +
            # defaults.
         | 
| 9 12 | 
             
            #
         | 
| 10 13 | 
             
            # @example
         | 
| 11 14 | 
             
            #
         | 
| @@ -0,0 +1,17 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            # ApiBlocks::Doorkeeper::Passwords::Application adds `reset_password_uri`
         | 
| 4 | 
            +
            # validation to `Doorkeeper::Application`.
         | 
| 5 | 
            +
            #
         | 
| 6 | 
            +
            # This module is automatically included on rails application startup if the
         | 
| 7 | 
            +
            # passwords migrations have been ran.
         | 
| 8 | 
            +
            #
         | 
| 9 | 
            +
            # @private
         | 
| 10 | 
            +
            #
         | 
| 11 | 
            +
            module ApiBlocks::Doorkeeper::Passwords::Application
         | 
| 12 | 
            +
              extend ActiveSupport::Concern
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              included do
         | 
| 15 | 
            +
                validates :reset_password_uri, "doorkeeper/redirect_uri": true
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
            end
         | 
| @@ -0,0 +1,158 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            # ApiBlocks::Doorkeeper::Passwords::Controller implements an API passwords reset
         | 
| 4 | 
            +
            # workflow.
         | 
| 5 | 
            +
            #
         | 
| 6 | 
            +
            # @example
         | 
| 7 | 
            +
            #   # app/controllers/api/v1/passwords_controller.rb
         | 
| 8 | 
            +
            #   class Api::V1::PasswordsController < Api::V1::ApplicationController
         | 
| 9 | 
            +
            #     include ApiBlocks::Doorkeeper::Passwords::Controller
         | 
| 10 | 
            +
            #
         | 
| 11 | 
            +
            #     private
         | 
| 12 | 
            +
            #
         | 
| 13 | 
            +
            #     def user_model
         | 
| 14 | 
            +
            #       User
         | 
| 15 | 
            +
            #     end
         | 
| 16 | 
            +
            #   end
         | 
| 17 | 
            +
            #
         | 
| 18 | 
            +
            # @example
         | 
| 19 | 
            +
            #   # config/routes.rb
         | 
| 20 | 
            +
            #   Rails.application.routes.draw do
         | 
| 21 | 
            +
            #     scope module: :api do
         | 
| 22 | 
            +
            #       namespace :v1 do
         | 
| 23 | 
            +
            #         resources :passwords, only: %i[create] do
         | 
| 24 | 
            +
            #           get :callback, on: :collection
         | 
| 25 | 
            +
            #           put :update, on: :collection
         | 
| 26 | 
            +
            #         end
         | 
| 27 | 
            +
            #       end
         | 
| 28 | 
            +
            #     end
         | 
| 29 | 
            +
            #   end
         | 
| 30 | 
            +
            #
         | 
| 31 | 
            +
            # @example
         | 
| 32 | 
            +
            #   # app/models/user.rb
         | 
| 33 | 
            +
            #   class User < ApplicationRecord
         | 
| 34 | 
            +
            #     include ApiBlocks::Doorkeeper::Passwords::User
         | 
| 35 | 
            +
            #   end
         | 
| 36 | 
            +
            #
         | 
| 37 | 
            +
            # @example
         | 
| 38 | 
            +
            #   # config/initializers/devise.rb
         | 
| 39 | 
            +
            #   Devise.setup do |config|
         | 
| 40 | 
            +
            #     # Configure the class responsible to send e-mails.
         | 
| 41 | 
            +
            #     config.mailer = "DeviseMailer"
         | 
| 42 | 
            +
            #   end
         | 
| 43 | 
            +
            #
         | 
| 44 | 
            +
            # @example
         | 
| 45 | 
            +
            #   # app/mailers/devise_mailer.rb
         | 
| 46 | 
            +
            #
         | 
| 47 | 
            +
            #   class DeviseMailer < Devise::Mailer
         | 
| 48 | 
            +
            #     def reset_password_instructions(
         | 
| 49 | 
            +
            #       record, token, application = nil, _opts = {}
         | 
| 50 | 
            +
            #     )
         | 
| 51 | 
            +
            #       @token = token
         | 
| 52 | 
            +
            #       @application = application
         | 
| 53 | 
            +
            #     end
         | 
| 54 | 
            +
            #   end
         | 
| 55 | 
            +
            #
         | 
| 56 | 
            +
            module ApiBlocks::Doorkeeper::Passwords::Controller
         | 
| 57 | 
            +
              extend ActiveSupport::Concern
         | 
| 58 | 
            +
             | 
| 59 | 
            +
              included do # rubocop:disable Metrics/BlockLength
         | 
| 60 | 
            +
                # Skip pundit after action hooks because there is no authorization to
         | 
| 61 | 
            +
                # perform.
         | 
| 62 | 
            +
                skip_after_action :verify_authorized
         | 
| 63 | 
            +
                skip_after_action :verify_policy_scoped
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                # Initialize the reset password workflow, sends a reset password email to
         | 
| 66 | 
            +
                # the user.
         | 
| 67 | 
            +
                def create
         | 
| 68 | 
            +
                  application = Doorkeeper::Application.find_by!(uid: params[:client_id])
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                  user = user_model.send_reset_password_instructions(
         | 
| 71 | 
            +
                    create_params, application: application
         | 
| 72 | 
            +
                  )
         | 
| 73 | 
            +
             | 
| 74 | 
            +
                  if successfully_sent?(user)
         | 
| 75 | 
            +
                    render(status: :no_content)
         | 
| 76 | 
            +
                  else
         | 
| 77 | 
            +
                    respond_with(user)
         | 
| 78 | 
            +
                  end
         | 
| 79 | 
            +
                end
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                # Handles the redirection from the email towards the application's
         | 
| 82 | 
            +
                # `redirect_uri`.
         | 
| 83 | 
            +
                def callback
         | 
| 84 | 
            +
                  application = Doorkeeper::Application.find_by!(uid: params[:client_id])
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                  query = {
         | 
| 87 | 
            +
                    reset_password_token: params[:reset_password_token]
         | 
| 88 | 
            +
                  }.to_query
         | 
| 89 | 
            +
             | 
| 90 | 
            +
                  redirect_to(
         | 
| 91 | 
            +
                    "#{application.reset_password_uri}?#{query}"
         | 
| 92 | 
            +
                  )
         | 
| 93 | 
            +
                end
         | 
| 94 | 
            +
             | 
| 95 | 
            +
                # Updates the user password and returns a new Doorkeeper::AccessToken.
         | 
| 96 | 
            +
                def update
         | 
| 97 | 
            +
                  application = Doorkeeper::Application.find_by!(uid: params[:client_id])
         | 
| 98 | 
            +
                  user = user_model.reset_password_by_token(update_params)
         | 
| 99 | 
            +
             | 
| 100 | 
            +
                  if user.errors.empty?
         | 
| 101 | 
            +
                    user.unlock_access! if unlockable?(user)
         | 
| 102 | 
            +
             | 
| 103 | 
            +
                    render json: access_token(application, user)
         | 
| 104 | 
            +
                  else
         | 
| 105 | 
            +
                    respond_with(user)
         | 
| 106 | 
            +
                  end
         | 
| 107 | 
            +
                end
         | 
| 108 | 
            +
             | 
| 109 | 
            +
                private
         | 
| 110 | 
            +
             | 
| 111 | 
            +
                # Create permitted parameters
         | 
| 112 | 
            +
                def create_params
         | 
| 113 | 
            +
                  params.require(:user).permit(:email)
         | 
| 114 | 
            +
                end
         | 
| 115 | 
            +
             | 
| 116 | 
            +
                # Update permitted parameters
         | 
| 117 | 
            +
                def update_params
         | 
| 118 | 
            +
                  params.require(:user).permit(
         | 
| 119 | 
            +
                    :reset_password_token, :password
         | 
| 120 | 
            +
                  )
         | 
| 121 | 
            +
                end
         | 
| 122 | 
            +
             | 
| 123 | 
            +
                # Copied over from devise base controller in order to clear user errors if
         | 
| 124 | 
            +
                # `Devise.paranoid` is active.
         | 
| 125 | 
            +
                def successfully_sent?(user)
         | 
| 126 | 
            +
                  if Devise.paranoid
         | 
| 127 | 
            +
                    user.errors.clear
         | 
| 128 | 
            +
                    true
         | 
| 129 | 
            +
                  elsif user.errors.empty?
         | 
| 130 | 
            +
                    true
         | 
| 131 | 
            +
                  end
         | 
| 132 | 
            +
                end
         | 
| 133 | 
            +
             | 
| 134 | 
            +
                # Copied over from devise base controller in order to determine wether a ser
         | 
| 135 | 
            +
                # is unlockable or not.
         | 
| 136 | 
            +
                def unlockable?(resource)
         | 
| 137 | 
            +
                  resource.respond_to?(:unlock_access!) &&
         | 
| 138 | 
            +
                    resource.respond_to?(:unlock_strategy_enabled?) &&
         | 
| 139 | 
            +
                    resource.unlock_strategy_enabled?(:email)
         | 
| 140 | 
            +
                end
         | 
| 141 | 
            +
             | 
| 142 | 
            +
                # Returns a new access token for this user.
         | 
| 143 | 
            +
                def access_token(application, user)
         | 
| 144 | 
            +
                  Doorkeeper::AccessToken.find_or_create_for(
         | 
| 145 | 
            +
                    application,
         | 
| 146 | 
            +
                    user.id,
         | 
| 147 | 
            +
                    Doorkeeper.configuration.default_scopes,
         | 
| 148 | 
            +
                    Doorkeeper.configuration.access_token_expires_in,
         | 
| 149 | 
            +
                    true
         | 
| 150 | 
            +
                  )
         | 
| 151 | 
            +
                end
         | 
| 152 | 
            +
             | 
| 153 | 
            +
                # Returns the user model class.
         | 
| 154 | 
            +
                def user_model
         | 
| 155 | 
            +
                  raise 'the method `user_model` must be implemented on your password controller' # rubocop:disable Metrics/LineLength
         | 
| 156 | 
            +
                end
         | 
| 157 | 
            +
              end
         | 
| 158 | 
            +
            end
         | 
| @@ -0,0 +1,34 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'rails/generators'
         | 
| 4 | 
            +
            require 'rails/generators/active_record'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            # ApiBlocks::Doorkeeper::Passwords::MigrationGenerator implements the Rails
         | 
| 7 | 
            +
            # generator for doorkeeper passwords api migrations.
         | 
| 8 | 
            +
            #
         | 
| 9 | 
            +
            # @private
         | 
| 10 | 
            +
            #
         | 
| 11 | 
            +
            class ApiBlocks::Doorkeeper::Passwords::MigrationGenerator < ::Rails::Generators::Base # rubocop:disable Metrics/LineLength
         | 
| 12 | 
            +
              include ::Rails::Generators::Migration
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              source_root File.expand_path('templates', __dir__)
         | 
| 15 | 
            +
              desc 'Installs doorkeeper passwords api migrations'
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              def install
         | 
| 18 | 
            +
                migration_template(
         | 
| 19 | 
            +
                  'migration.rb.erb',
         | 
| 20 | 
            +
                  'db/migrate/add_reset_password_uri_to_doorkeeper_applications.rb',
         | 
| 21 | 
            +
                  migration_version: migration_version
         | 
| 22 | 
            +
                )
         | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              def self.next_migration_number(dirname)
         | 
| 26 | 
            +
                ActiveRecord::Generators::Base.next_migration_number(dirname)
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
              private
         | 
| 30 | 
            +
             | 
| 31 | 
            +
              def migration_version
         | 
| 32 | 
            +
                "[#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}]"
         | 
| 33 | 
            +
              end
         | 
| 34 | 
            +
            end
         | 
| @@ -0,0 +1,51 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            # ApiBlocks::Doorkeeper::Passwords::User overrides some methods from devise
         | 
| 4 | 
            +
            # recoverable module to add the dorkeeper application to the mailer.
         | 
| 5 | 
            +
            #
         | 
| 6 | 
            +
            # @example
         | 
| 7 | 
            +
            #   # app/models/user.rb
         | 
| 8 | 
            +
            #   class User < ApplicationRecord
         | 
| 9 | 
            +
            #     include ApiBlocks::Doorkeeper::Passwords::User
         | 
| 10 | 
            +
            #   end
         | 
| 11 | 
            +
            #
         | 
| 12 | 
            +
            module ApiBlocks::Doorkeeper::Passwords::User
         | 
| 13 | 
            +
              extend ActiveSupport::Concern
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              included do
         | 
| 16 | 
            +
                # Resets reset password token and send reset password instructions by email.
         | 
| 17 | 
            +
                # Returns the token sent in the e-mail.
         | 
| 18 | 
            +
                def send_reset_password_instructions(application = nil)
         | 
| 19 | 
            +
                  token = set_reset_password_token
         | 
| 20 | 
            +
                  puts token
         | 
| 21 | 
            +
                  send_reset_password_instructions_notification(token, application)
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  token
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                protected
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                def send_reset_password_instructions_notification(token, application = nil)
         | 
| 29 | 
            +
                  send_devise_notification(
         | 
| 30 | 
            +
                    :reset_password_instructions, token, application
         | 
| 31 | 
            +
                  )
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
              end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
              class_methods do
         | 
| 36 | 
            +
                # Attempt to find a user by its email. If a record is found, send new
         | 
| 37 | 
            +
                # password instructions to it. If user is not found, returns a new user
         | 
| 38 | 
            +
                # with an email not found error.
         | 
| 39 | 
            +
                # Attributes must contain the user's email
         | 
| 40 | 
            +
                def send_reset_password_instructions(attributes = {}, application: nil)
         | 
| 41 | 
            +
                  recoverable = find_or_initialize_with_errors(
         | 
| 42 | 
            +
                    reset_password_keys, attributes, :not_found
         | 
| 43 | 
            +
                  )
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                  if recoverable.persisted?
         | 
| 46 | 
            +
                    recoverable.send_reset_password_instructions(application)
         | 
| 47 | 
            +
                  end
         | 
| 48 | 
            +
                  recoverable
         | 
| 49 | 
            +
                end
         | 
| 50 | 
            +
              end
         | 
| 51 | 
            +
            end
         | 
| @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 | 
            -
            require  | 
| 4 | 
            -
            require  | 
| 3 | 
            +
            require 'dry/transaction'
         | 
| 4 | 
            +
            require 'dry/validation'
         | 
| 5 5 |  | 
| 6 6 | 
             
            # ApiBlocks::Interactor implements a base interactor class.
         | 
| 7 7 | 
             
            #
         | 
| @@ -10,7 +10,7 @@ require "dry/validation" | |
| 10 10 | 
             
            #
         | 
| 11 11 | 
             
            # @example
         | 
| 12 12 | 
             
            #
         | 
| 13 | 
            -
            #   class InviteUser <  | 
| 13 | 
            +
            #   class InviteUser < ApiBlocks::Interactor
         | 
| 14 14 | 
             
            #     input do
         | 
| 15 15 | 
             
            #       schema do
         | 
| 16 16 | 
             
            #         required(:email).filled
         | 
| @@ -48,7 +48,7 @@ class ApiBlocks::Interactor | |
| 48 48 | 
             
              #
         | 
| 49 49 | 
             
              # @example
         | 
| 50 50 | 
             
              #
         | 
| 51 | 
            -
              #   class FooInteractor <  | 
| 51 | 
            +
              #   class FooInteractor < ApiBlocks::Interactor
         | 
| 52 52 | 
             
              #     input do
         | 
| 53 53 | 
             
              #       schema do
         | 
| 54 54 | 
             
              #         required(:bar).filled
         | 
| @@ -0,0 +1,29 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            # ApiBlocks::Railtie implements the Rails integration for ApiBlocks.
         | 
| 4 | 
            +
            #
         | 
| 5 | 
            +
            # @private
         | 
| 6 | 
            +
            #
         | 
| 7 | 
            +
            class ApiBlocks::Railtie < Rails::Railtie
         | 
| 8 | 
            +
              config.after_initialize  do
         | 
| 9 | 
            +
                next unless defined?(Doorkeeper)
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                ActiveSupport.on_load(:active_record) do
         | 
| 12 | 
            +
                  # do not load the Doorkeeper::Application extensions if migrations have
         | 
| 13 | 
            +
                  # not been setup.
         | 
| 14 | 
            +
                  has_reset_password_uri = Doorkeeper::Application.columns.find do |col|
         | 
| 15 | 
            +
                    col.name == 'reset_password_uri'
         | 
| 16 | 
            +
                  end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  next unless has_reset_password_uri
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  Doorkeeper::Application.include(
         | 
| 21 | 
            +
                    ApiBlocks::Doorkeeper::Passwords::Application
         | 
| 22 | 
            +
                  )
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              generators do
         | 
| 27 | 
            +
                require_relative 'doorkeeper/passwords/migration_generator'
         | 
| 28 | 
            +
              end
         | 
| 29 | 
            +
            end
         | 
    
        data/lib/api_blocks/responder.rb
    CHANGED
    
    | @@ -1,8 +1,8 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 | 
            -
            require  | 
| 4 | 
            -
            require  | 
| 5 | 
            -
            require  | 
| 3 | 
            +
            require 'action_controller/responder'
         | 
| 4 | 
            +
            require 'responders'
         | 
| 5 | 
            +
            require 'dry/monads/result'
         | 
| 6 6 |  | 
| 7 7 | 
             
            # ApiBlocks::Responder provides a responder with better error handling and
         | 
| 8 8 | 
             
            # `ApiBlocks::Interactor` through `Dry::Monads::Result` support.
         | 
| @@ -27,7 +27,8 @@ class ApiBlocks::Responder < ActionController::Responder | |
| 27 27 | 
             
              def to_format
         | 
| 28 28 | 
             
                return super unless resource.is_a?(Dry::Monads::Result)
         | 
| 29 29 |  | 
| 30 | 
            -
                # unwrap the result monad so it can be processed by | 
| 30 | 
            +
                # unwrap the result monad so it can be processed by
         | 
| 31 | 
            +
                # ActionController::Responder
         | 
| 31 32 | 
             
                resource.fmap { |result| @resource = result }.or do |failure|
         | 
| 32 33 | 
             
                  @resource = failure
         | 
| 33 34 | 
             
                  @failure = true
         | 
    
        data/lib/api_blocks/version.rb
    CHANGED
    
    
    
        data/lib/api_blocks.rb
    CHANGED
    
    | @@ -7,7 +7,6 @@ require 'api_blocks/version' | |
| 7 7 | 
             
            require 'active_support/concern'
         | 
| 8 8 | 
             
            require 'active_support/dependencies/autoload'
         | 
| 9 9 |  | 
| 10 | 
            -
             | 
| 11 10 | 
             
            # ApiBlocks provides simple and consistent rails api extensions.
         | 
| 12 11 | 
             
            module ApiBlocks
         | 
| 13 12 | 
             
              extend ActiveSupport::Autoload
         | 
| @@ -15,4 +14,7 @@ module ApiBlocks | |
| 15 14 | 
             
              autoload :Controller
         | 
| 16 15 | 
             
              autoload :Responder
         | 
| 17 16 | 
             
              autoload :Interactor
         | 
| 17 | 
            +
              autoload :Doorkeeper
         | 
| 18 18 | 
             
            end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            require 'api_blocks/railtie' if defined?(Rails)
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: api-blocks
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.2.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Paul d'Hubert
         | 
| @@ -25,35 +25,35 @@ dependencies: | |
| 25 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 26 26 | 
             
                    version: 3.0.0
         | 
| 27 27 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 28 | 
            -
              name:  | 
| 28 | 
            +
              name: dry-monads
         | 
| 29 29 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 30 | 
             
                requirements:
         | 
| 31 | 
            -
                - - " | 
| 31 | 
            +
                - - "~>"
         | 
| 32 32 | 
             
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            -
                    version:  | 
| 33 | 
            +
                    version: '1.3'
         | 
| 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:  | 
| 40 | 
            +
                    version: '1.3'
         | 
| 41 41 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 42 | 
            -
              name:  | 
| 42 | 
            +
              name: dry-transaction
         | 
| 43 43 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 44 44 | 
             
                requirements:
         | 
| 45 45 | 
             
                - - "~>"
         | 
| 46 46 | 
             
                  - !ruby/object:Gem::Version
         | 
| 47 | 
            -
                    version: ' | 
| 47 | 
            +
                    version: '0.13'
         | 
| 48 48 | 
             
              type: :runtime
         | 
| 49 49 | 
             
              prerelease: false
         | 
| 50 50 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 51 51 | 
             
                requirements:
         | 
| 52 52 | 
             
                - - "~>"
         | 
| 53 53 | 
             
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            -
                    version: ' | 
| 54 | 
            +
                    version: '0.13'
         | 
| 55 55 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 56 | 
            -
              name: dry- | 
| 56 | 
            +
              name: dry-validation
         | 
| 57 57 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 58 58 | 
             
                requirements:
         | 
| 59 59 | 
             
                - - "~>"
         | 
| @@ -67,33 +67,33 @@ dependencies: | |
| 67 67 | 
             
                  - !ruby/object:Gem::Version
         | 
| 68 68 | 
             
                    version: '1.3'
         | 
| 69 69 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 70 | 
            -
              name:  | 
| 70 | 
            +
              name: pundit
         | 
| 71 71 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 72 72 | 
             
                requirements:
         | 
| 73 73 | 
             
                - - "~>"
         | 
| 74 74 | 
             
                  - !ruby/object:Gem::Version
         | 
| 75 | 
            -
                    version: ' | 
| 75 | 
            +
                    version: '2.1'
         | 
| 76 76 | 
             
              type: :runtime
         | 
| 77 77 | 
             
              prerelease: false
         | 
| 78 78 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 79 79 | 
             
                requirements:
         | 
| 80 80 | 
             
                - - "~>"
         | 
| 81 81 | 
             
                  - !ruby/object:Gem::Version
         | 
| 82 | 
            -
                    version: ' | 
| 82 | 
            +
                    version: '2.1'
         | 
| 83 83 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 84 | 
            -
              name:  | 
| 84 | 
            +
              name: rails
         | 
| 85 85 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 86 86 | 
             
                requirements:
         | 
| 87 | 
            -
                - - " | 
| 87 | 
            +
                - - ">="
         | 
| 88 88 | 
             
                  - !ruby/object:Gem::Version
         | 
| 89 | 
            -
                    version:  | 
| 89 | 
            +
                    version: 6.0.0
         | 
| 90 90 | 
             
              type: :runtime
         | 
| 91 91 | 
             
              prerelease: false
         | 
| 92 92 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 93 93 | 
             
                requirements:
         | 
| 94 | 
            -
                - - " | 
| 94 | 
            +
                - - ">="
         | 
| 95 95 | 
             
                  - !ruby/object:Gem::Version
         | 
| 96 | 
            -
                    version:  | 
| 96 | 
            +
                    version: 6.0.0
         | 
| 97 97 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 98 98 | 
             
              name: responders
         | 
| 99 99 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -109,21 +109,21 @@ dependencies: | |
| 109 109 | 
             
                  - !ruby/object:Gem::Version
         | 
| 110 110 | 
             
                    version: 3.0.0
         | 
| 111 111 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 112 | 
            -
              name:  | 
| 112 | 
            +
              name: bundler
         | 
| 113 113 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 114 114 | 
             
                requirements:
         | 
| 115 | 
            -
                - - " | 
| 115 | 
            +
                - - ">="
         | 
| 116 116 | 
             
                  - !ruby/object:Gem::Version
         | 
| 117 | 
            -
                    version: ' | 
| 117 | 
            +
                    version: '0'
         | 
| 118 118 | 
             
              type: :development
         | 
| 119 119 | 
             
              prerelease: false
         | 
| 120 120 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 121 121 | 
             
                requirements:
         | 
| 122 | 
            -
                - - " | 
| 122 | 
            +
                - - ">="
         | 
| 123 123 | 
             
                  - !ruby/object:Gem::Version
         | 
| 124 | 
            -
                    version: ' | 
| 124 | 
            +
                    version: '0'
         | 
| 125 125 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 126 | 
            -
              name:  | 
| 126 | 
            +
              name: mocha
         | 
| 127 127 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 128 128 | 
             
                requirements:
         | 
| 129 129 | 
             
                - - ">="
         | 
| @@ -150,6 +150,20 @@ dependencies: | |
| 150 150 | 
             
                - - ">="
         | 
| 151 151 | 
             
                  - !ruby/object:Gem::Version
         | 
| 152 152 | 
             
                    version: '0'
         | 
| 153 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 154 | 
            +
              name: rails
         | 
| 155 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 156 | 
            +
                requirements:
         | 
| 157 | 
            +
                - - "~>"
         | 
| 158 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 159 | 
            +
                    version: '6.0'
         | 
| 160 | 
            +
              type: :development
         | 
| 161 | 
            +
              prerelease: false
         | 
| 162 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 163 | 
            +
                requirements:
         | 
| 164 | 
            +
                - - "~>"
         | 
| 165 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 166 | 
            +
                    version: '6.0'
         | 
| 153 167 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 154 168 | 
             
              name: rake
         | 
| 155 169 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -220,29 +234,23 @@ dependencies: | |
| 220 234 | 
             
                - - ">="
         | 
| 221 235 | 
             
                  - !ruby/object:Gem::Version
         | 
| 222 236 | 
             
                    version: '0'
         | 
| 223 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 224 | 
            -
              name: mocha
         | 
| 225 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 226 | 
            -
                requirements:
         | 
| 227 | 
            -
                - - ">="
         | 
| 228 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 229 | 
            -
                    version: '0'
         | 
| 230 | 
            -
              type: :development
         | 
| 231 | 
            -
              prerelease: false
         | 
| 232 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 233 | 
            -
                requirements:
         | 
| 234 | 
            -
                - - ">="
         | 
| 235 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 236 | 
            -
                    version: '0'
         | 
| 237 237 | 
             
            description: Simple and consistent rails api extensions
         | 
| 238 238 | 
             
            email: dev@tymate.com
         | 
| 239 239 | 
             
            executables: []
         | 
| 240 240 | 
             
            extensions: []
         | 
| 241 241 | 
             
            extra_rdoc_files: []
         | 
| 242 242 | 
             
            files:
         | 
| 243 | 
            +
            - lib/api-blocks.rb
         | 
| 243 244 | 
             
            - lib/api_blocks.rb
         | 
| 244 245 | 
             
            - lib/api_blocks/controller.rb
         | 
| 246 | 
            +
            - lib/api_blocks/doorkeeper.rb
         | 
| 247 | 
            +
            - lib/api_blocks/doorkeeper/passwords.rb
         | 
| 248 | 
            +
            - lib/api_blocks/doorkeeper/passwords/application.rb
         | 
| 249 | 
            +
            - lib/api_blocks/doorkeeper/passwords/controller.rb
         | 
| 250 | 
            +
            - lib/api_blocks/doorkeeper/passwords/migration_generator.rb
         | 
| 251 | 
            +
            - lib/api_blocks/doorkeeper/passwords/user.rb
         | 
| 245 252 | 
             
            - lib/api_blocks/interactor.rb
         | 
| 253 | 
            +
            - lib/api_blocks/railtie.rb
         | 
| 246 254 | 
             
            - lib/api_blocks/responder.rb
         | 
| 247 255 | 
             
            - lib/api_blocks/version.rb
         | 
| 248 256 | 
             
            homepage: https://github.com/tymate/api-blocks
         |