{"id":16086142,"url":"https://github.com/zw963/delayed_worker","last_synced_at":"2025-04-05T14:11:57.131Z","repository":{"id":62556959,"uuid":"121474142","full_name":"zw963/delayed_worker","owner":"zw963","description":"Run delayed job easy!","archived":false,"fork":false,"pushed_at":"2018-04-28T16:35:20.000Z","size":43,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-11T19:45:49.573Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zw963.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-02-14T05:22:16.000Z","updated_at":"2018-04-28T16:35:21.000Z","dependencies_parsed_at":"2022-11-03T06:01:06.077Z","dependency_job_id":null,"html_url":"https://github.com/zw963/delayed_worker","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zw963%2Fdelayed_worker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zw963%2Fdelayed_worker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zw963%2Fdelayed_worker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zw963%2Fdelayed_worker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zw963","download_url":"https://codeload.github.com/zw963/delayed_worker/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247345856,"owners_count":20924102,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-09T13:10:39.945Z","updated_at":"2025-04-05T14:11:57.101Z","avatar_url":"https://github.com/zw963.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DelayedWorker [![Build Status](https://travis-ci.org/zw963/delayed_worker.svg?branch=master)](https://travis-ci.org/zw963/delayed_worker) [![Gem Version](https://badge.fury.io/rb/delayed_worker.svg)](http://badge.fury.io/rb/delayed_worker)\n\nThis gem is intend for write delayed job with easy and clean.\n\n## Philosophy\n\nWe hope to see delayed executed business logic clealy in where add it into, so, all we need to be done is \njust use a `do ... end block` to wrap delayed job code, it will work as expected.\n\n## Getting Started\n\nInstall via Rubygems\n\n    $ gem install delayed_worker\n\nOR ...\n\nAdd to your Gemfile\n\n    gem 'delayed_worker'\n\n## Usage\n\n### run worker With ActiveRecord.\n\n```rb\n# == Schema Information\n\n# Table name: test_delayed_workers\n\n# some_column                   :string(255)\n# delayed_worker_disabled       :boolean          default(TRUE)\n# delayed_worker_scheduled_at   :datetime\n\nclass TestDelayedWorkerController \u003c ActionController::Base\n  def update_column\n    record = TestDelayedWorker.find(params[:id])\n    \n    add_job_into_delayed_worker job_name: 'update some_column value' do\n    # all code in block will be run asynchronous in delayed worker.\n    # do heavy task here, e.g. invoke exteral API or do heavy SQL query\n    # ...\n    \n    update(some_column: 'new_value') # can use any activerecord object method here to update record\n    # ...\n    # You can outout log to `log/delayed_worker.log` with following code:\n    # DelayedWorker::Logger.logger.info 'logger something'\n    end\n  end\nend\n```\nIf you want to disabled scheduled job before executed, you can add a `delayed_worker_disabled` boolean column to table.\nif this column is `true`, scheduled job will just do noop.\n\nIf you want job is execute in some future date, you need add a `delayed_worker_scheduled_at` column into table, and pass in \n`scheduled_at` named parameter, with a integer(seconds after now) or any time like object which have a `to_time` method. \n(e.g. Date, Time, DateTime, ActiveSupport::TimeWithZone)\n\nfollowing is a example:\n\n```rb\nclass TestDelayedWorkerController \u003c ActionController::Base\n  def update_column\n  record = TestDelayedWorker.find(params[:id], scheduled_at: 3600)\n\n    add_job_into_delayed_worker job_name: 'update some_column value' do\n      update(some_column: 'new_value') # can use any activerecord object method here to update record\n    end\n  end\nend\n ```\n \n If you want to change scheduled date before job executed, just need change column `delayed_worker_scheduled_at` value, and\n run add_job_into_delayed_worker again to add a new job into queue, old job will just do noop, and new job will work.\n\n### run worker in controller action\n ```rb\nclass TestDelayedWorkerController \u003c ActionController::Base\n  def update_column\n    id = params[:id]\n    new_params = {some_column: params[:some_column]}\n    \n    # we must use `params: {key1: value1, key2...}` to pass local variable into block.\n    add_job_into_delayed_worker job_name: 'update some column value use params in controller', subject_id: id, params: new_params do\n      record = TestDelayedWorker.find(subject_id)\n      record.update(some_column: params[:some_column]) # get passed in value with: params[:some_key] or params['some_key']\n    end\n  end\nend\n```\n\n### Run in a simple class\n\n```rb\nclass SimpleDelayedWorker\n  include DelayedWorker::Concern\n  \n  def some_method\n    add_job_into_delayed_worker job_name: 'simple delayed worker', time: 10 do\n      print 'run asynchronous after 10 seconds'\n    end\n  end\nend\n ```\n \n add_job_into_delayed_worker all supported options is list [here](https://github.com/zw963/delayed_worker/blob/master/lib/delayed_worker/concern.rb#L6-L14)\n \n __IMPORTANT__ some trap you must to know:\n \n 1. Only support `do ...end` form block, and `do` must not same line as `end`, curly braces {} block is not supported!\n 2. External variables defined in `add_job_into_delayed_worker` context must use `params` named parameter pass in.\n \n \n## Support\n\n  CRuby 2.2 2.3 2.4 2.5 is support.\n  \n## Dependency\n\n  [sidekiq](https://github.com/mperham/sidekiq)\n  [method_source](https://github.com/banister/method_source)\n\n## History\n\n  See [CHANGELOG](https://github.com/zw963/delayed_worker/blob/master/CHANGELOG) for details.\n\n## Contributing\n\n  * [Bug reports](https://github.com/zw963/delayed_worker/issues)\n  * [Source](https://github.com/zw963/delayed_worker)\n  * Patches:\n    * Fork on Github.\n    * Run `bundle install`.\n    * Create your feature branch: `git checkout -b my-new-feature`.\n    * Commit your changes: `git commit -am 'Add some feature'`.\n    * Push to the branch: `git push origin my-new-feature`.\n    * Send a pull request :D.\n\n## license\n\nReleased under the MIT license, See [LICENSE](https://github.com/zw963/delayed_worker/blob/master/LICENSE) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzw963%2Fdelayed_worker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzw963%2Fdelayed_worker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzw963%2Fdelayed_worker/lists"}