devise-async 0.2.0 → 0.3.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.
- data/CHANGELOG.md +5 -0
- data/README.md +15 -0
- data/lib/devise/async.rb +1 -0
- data/lib/devise/async/model.rb +30 -0
- data/lib/devise/async/version.rb +1 -1
- data/test/devise/async/model_test.rb +21 -0
- data/test/support/helpers.rb +8 -0
- data/test/support/rails_app/app/models/admin.rb +7 -0
- data/test/support/rails_app/db/schema.rb +24 -0
- metadata +9 -6
- data/test/support/support/rails_app/log/test.log +0 -0
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,5 +1,10 @@ | |
| 1 1 | 
             
            ## Unreleased
         | 
| 2 2 |  | 
| 3 | 
            +
            * Fixes
         | 
| 4 | 
            +
              * Added `Devise::Async::Model` to use new devise's after_commit hooks to resolve #6 (only devise >=2.1.1)
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            ## 0.2.0
         | 
| 7 | 
            +
             | 
| 3 8 | 
             
            * Enhancements
         | 
| 4 9 | 
             
              * Added `Devise::Async.queue` option to let configure the queue
         | 
| 5 10 | 
             
              the jobs will be enqueued to.
         | 
    
        data/README.md
    CHANGED
    
    | @@ -26,12 +26,27 @@ Or install it yourself as: | |
| 26 26 |  | 
| 27 27 | 
             
            ## Usage
         | 
| 28 28 |  | 
| 29 | 
            +
            ### Devise >= 2.1.1
         | 
| 30 | 
            +
             | 
| 31 | 
            +
            Include `Devise::Async::Model` to your Devise model
         | 
| 32 | 
            +
             | 
| 33 | 
            +
            ```ruby
         | 
| 34 | 
            +
            class User < ActiveRecord::Base
         | 
| 35 | 
            +
              devise :database_authenticatable, :confirmable # etc ...
         | 
| 36 | 
            +
             | 
| 37 | 
            +
              include Devise::Async::Model # should be below call to `devise`
         | 
| 38 | 
            +
            end
         | 
| 39 | 
            +
            ```
         | 
| 40 | 
            +
             | 
| 41 | 
            +
            ### Devise < 2.1.1
         | 
| 42 | 
            +
             | 
| 29 43 | 
             
            Set `Devise::Async::Proxy` as Devise's mailer in `config/initializers/devise.rb`:
         | 
| 30 44 |  | 
| 31 45 | 
             
            ```ruby
         | 
| 32 46 | 
             
            # Configure the class responsible to send e-mails.
         | 
| 33 47 | 
             
            config.mailer = "Devise::Async::Proxy"
         | 
| 34 48 | 
             
            ```
         | 
| 49 | 
            +
            ### All
         | 
| 35 50 |  | 
| 36 51 | 
             
            Set your queuing backend by creating `config/initializers/devise_async.rb`:
         | 
| 37 52 |  | 
    
        data/lib/devise/async.rb
    CHANGED
    
    
| @@ -0,0 +1,30 @@ | |
| 1 | 
            +
            module Devise
         | 
| 2 | 
            +
              module Async
         | 
| 3 | 
            +
                module Model
         | 
| 4 | 
            +
                  extend ActiveSupport::Concern
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                  included do
         | 
| 7 | 
            +
                    after_commit :send_devise_pending_notifications
         | 
| 8 | 
            +
                  end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                  protected
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  def send_devise_notification(notification)
         | 
| 13 | 
            +
                    devise_pending_notifications << notification
         | 
| 14 | 
            +
                  end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                  def send_devise_pending_notifications
         | 
| 17 | 
            +
                    devise_pending_notifications.each do |notification|
         | 
| 18 | 
            +
                      # Use `id.to_s` to avoid problems with mongoid 2.4.X ids being serialized
         | 
| 19 | 
            +
                      # wrong with YAJL.
         | 
| 20 | 
            +
                      Devise::Async::Worker.enqueue(notification, self.class.name, self.id.to_s)
         | 
| 21 | 
            +
                    end
         | 
| 22 | 
            +
                    @devise_pending_notifications = []
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                  def devise_pending_notifications
         | 
| 26 | 
            +
                    @devise_pending_notifications ||= []
         | 
| 27 | 
            +
                  end
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
            end
         | 
    
        data/lib/devise/async/version.rb
    CHANGED
    
    
| @@ -0,0 +1,21 @@ | |
| 1 | 
            +
            require "test_helper"
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Devise
         | 
| 4 | 
            +
              module Async
         | 
| 5 | 
            +
                describe "Model" do
         | 
| 6 | 
            +
                  it "accumulates notifications to be send after commit" do
         | 
| 7 | 
            +
                    admin = create_admin
         | 
| 8 | 
            +
                    admin.send_confirmation_instructions
         | 
| 9 | 
            +
                    admin.send(:devise_pending_notifications).must_equal [:confirmation_instructions]
         | 
| 10 | 
            +
                    Worker.expects(:enqueue).never
         | 
| 11 | 
            +
                  end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                  it "triggers enqueues the notifications on save" do
         | 
| 14 | 
            +
                    admin = create_admin
         | 
| 15 | 
            +
                    admin.send_confirmation_instructions
         | 
| 16 | 
            +
                    Worker.expects(:enqueue).with(:confirmation_instructions, "Admin", admin.id.to_s)
         | 
| 17 | 
            +
                    admin.update_attribute(:username, "newusername")
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
            end
         | 
    
        data/test/support/helpers.rb
    CHANGED
    
    | @@ -18,3 +18,11 @@ end | |
| 18 18 | 
             
            def create_user(attributes={})
         | 
| 19 19 | 
             
              User.create!(valid_attributes(attributes))
         | 
| 20 20 | 
             
            end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
            def new_admin(attributes={})
         | 
| 23 | 
            +
              Admin.new(valid_attributes(attributes))
         | 
| 24 | 
            +
            end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
            def create_admin(attributes={})
         | 
| 27 | 
            +
              Admin.create!(valid_attributes(attributes))
         | 
| 28 | 
            +
            end
         | 
| @@ -29,6 +29,30 @@ ActiveRecord::Schema.define(:version => 1) do | |
| 29 29 | 
             
                t.datetime "updated_at"
         | 
| 30 30 | 
             
              end
         | 
| 31 31 |  | 
| 32 | 
            +
              create_table "admins", :force => true do |t|
         | 
| 33 | 
            +
                t.string   "username"
         | 
| 34 | 
            +
                t.string   "facebook_token"
         | 
| 35 | 
            +
                t.string   "email",                               :default => "", :null => false
         | 
| 36 | 
            +
                t.string   "unconfirmed_email",                   :default => ""
         | 
| 37 | 
            +
                t.string   "encrypted_password",   :limit => 128, :default => "", :null => false
         | 
| 38 | 
            +
                t.string   "confirmation_token"
         | 
| 39 | 
            +
                t.datetime "confirmed_at"
         | 
| 40 | 
            +
                t.datetime "confirmation_sent_at"
         | 
| 41 | 
            +
                t.string   "reset_password_token"
         | 
| 42 | 
            +
                t.datetime "remember_created_at"
         | 
| 43 | 
            +
                t.integer  "sign_in_count",                       :default => 0
         | 
| 44 | 
            +
                t.datetime "current_sign_in_at"
         | 
| 45 | 
            +
                t.datetime "last_sign_in_at"
         | 
| 46 | 
            +
                t.string   "current_sign_in_ip"
         | 
| 47 | 
            +
                t.string   "last_sign_in_ip"
         | 
| 48 | 
            +
                t.integer  "failed_attempts",                     :default => 0
         | 
| 49 | 
            +
                t.string   "unlock_token"
         | 
| 50 | 
            +
                t.datetime "locked_at"
         | 
| 51 | 
            +
                t.string   "authentication_token"
         | 
| 52 | 
            +
                t.datetime "created_at"
         | 
| 53 | 
            +
                t.datetime "updated_at"
         | 
| 54 | 
            +
              end
         | 
| 55 | 
            +
             | 
| 32 56 | 
             
              create_table :delayed_jobs, :force => true do |table|
         | 
| 33 57 | 
             
                table.integer  :priority, :default => 0      # Allows some jobs to jump to the front of the queue
         | 
| 34 58 | 
             
                table.integer  :attempts, :default => 0      # Provides for retries, but still fail eventually.
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: devise-async
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.3.0
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2012- | 
| 12 | 
            +
            date: 2012-07-21 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: devise
         | 
| @@ -193,6 +193,7 @@ files: | |
| 193 193 | 
             
            - lib/devise/async/backend/delayed_job.rb
         | 
| 194 194 | 
             
            - lib/devise/async/backend/resque.rb
         | 
| 195 195 | 
             
            - lib/devise/async/backend/sidekiq.rb
         | 
| 196 | 
            +
            - lib/devise/async/model.rb
         | 
| 196 197 | 
             
            - lib/devise/async/proxy.rb
         | 
| 197 198 | 
             
            - lib/devise/async/version.rb
         | 
| 198 199 | 
             
            - lib/devise/async/worker.rb
         | 
| @@ -201,12 +202,14 @@ files: | |
| 201 202 | 
             
            - test/devise/async/backend/resque_test.rb
         | 
| 202 203 | 
             
            - test/devise/async/backend/sidekiq_test.rb
         | 
| 203 204 | 
             
            - test/devise/async/backend_test.rb
         | 
| 205 | 
            +
            - test/devise/async/model_test.rb
         | 
| 204 206 | 
             
            - test/devise/async/proxy_test.rb
         | 
| 205 207 | 
             
            - test/devise/async/worker_test.rb
         | 
| 206 208 | 
             
            - test/devise/async_test.rb
         | 
| 207 209 | 
             
            - test/support/helpers.rb
         | 
| 208 210 | 
             
            - test/support/my_mailer.rb
         | 
| 209 211 | 
             
            - test/support/rails_app.rb
         | 
| 212 | 
            +
            - test/support/rails_app/app/models/admin.rb
         | 
| 210 213 | 
             
            - test/support/rails_app/app/models/user.rb
         | 
| 211 214 | 
             
            - test/support/rails_app/config/database.yml
         | 
| 212 215 | 
             
            - test/support/rails_app/config/initializers/devise.rb
         | 
| @@ -214,7 +217,6 @@ files: | |
| 214 217 | 
             
            - test/support/rails_app/config/routes.rb
         | 
| 215 218 | 
             
            - test/support/rails_app/db/schema.rb
         | 
| 216 219 | 
             
            - test/support/rails_app/log/development.log
         | 
| 217 | 
            -
            - test/support/support/rails_app/log/test.log
         | 
| 218 220 | 
             
            - test/test_helper.rb
         | 
| 219 221 | 
             
            homepage: https://github.com/mhfs/devise-async/
         | 
| 220 222 | 
             
            licenses: []
         | 
| @@ -230,7 +232,7 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 230 232 | 
             
                  version: '0'
         | 
| 231 233 | 
             
                  segments:
         | 
| 232 234 | 
             
                  - 0
         | 
| 233 | 
            -
                  hash: - | 
| 235 | 
            +
                  hash: -1160752069777007952
         | 
| 234 236 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 235 237 | 
             
              none: false
         | 
| 236 238 | 
             
              requirements:
         | 
| @@ -239,7 +241,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 239 241 | 
             
                  version: '0'
         | 
| 240 242 | 
             
                  segments:
         | 
| 241 243 | 
             
                  - 0
         | 
| 242 | 
            -
                  hash: - | 
| 244 | 
            +
                  hash: -1160752069777007952
         | 
| 243 245 | 
             
            requirements: []
         | 
| 244 246 | 
             
            rubyforge_project: 
         | 
| 245 247 | 
             
            rubygems_version: 1.8.23
         | 
| @@ -254,12 +256,14 @@ test_files: | |
| 254 256 | 
             
            - test/devise/async/backend/resque_test.rb
         | 
| 255 257 | 
             
            - test/devise/async/backend/sidekiq_test.rb
         | 
| 256 258 | 
             
            - test/devise/async/backend_test.rb
         | 
| 259 | 
            +
            - test/devise/async/model_test.rb
         | 
| 257 260 | 
             
            - test/devise/async/proxy_test.rb
         | 
| 258 261 | 
             
            - test/devise/async/worker_test.rb
         | 
| 259 262 | 
             
            - test/devise/async_test.rb
         | 
| 260 263 | 
             
            - test/support/helpers.rb
         | 
| 261 264 | 
             
            - test/support/my_mailer.rb
         | 
| 262 265 | 
             
            - test/support/rails_app.rb
         | 
| 266 | 
            +
            - test/support/rails_app/app/models/admin.rb
         | 
| 263 267 | 
             
            - test/support/rails_app/app/models/user.rb
         | 
| 264 268 | 
             
            - test/support/rails_app/config/database.yml
         | 
| 265 269 | 
             
            - test/support/rails_app/config/initializers/devise.rb
         | 
| @@ -267,5 +271,4 @@ test_files: | |
| 267 271 | 
             
            - test/support/rails_app/config/routes.rb
         | 
| 268 272 | 
             
            - test/support/rails_app/db/schema.rb
         | 
| 269 273 | 
             
            - test/support/rails_app/log/development.log
         | 
| 270 | 
            -
            - test/support/support/rails_app/log/test.log
         | 
| 271 274 | 
             
            - test/test_helper.rb
         | 
| 
            File without changes
         |