expirable 1.0.0 → 1.0.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 916910e100aa840628c2a8290a7e2c5125355746
4
- data.tar.gz: c6075ee52e81f11758d7a8e155dd5870b14cd90f
3
+ metadata.gz: b8956d367c94c4aa41af394e953d3ed1373c9fab
4
+ data.tar.gz: 73a7a94a0ca5c1ce64280751eb783b68e5aa2231
5
5
  SHA512:
6
- metadata.gz: 040aabdfa25d7f376d04275b3c2b72f9906957782655130639404d1c50b6d3a1a5da452481f6bac5e89177abb7a059cee7515e1e8d76a514309b402ae3a77377
7
- data.tar.gz: bc2eac48b6fdcfba757bfa170ae8977d40245367cd28b59d42bf5c7dfbb4e26e3e0218548dc03154f8f1f09a10c78dce8530c7b8e4e3f4343972fd979c784f93
6
+ metadata.gz: d4bd2017ed7aef995fca1ab9a0a44ca6db3a2cc834eb6432f336853be2fda9c95e392de844975e643d0d09f1296eb5b912198cd09f5fa66e79cee23ec3b162ad
7
+ data.tar.gz: 487c0bb9cd88a3943943d4d5349d3966ea3e51b5ab6d41d6a32b5839ee23c472dc50d6006ffa25ddb4b240d48305cf730dd77d87aa2f9f6120967caaa63bfbce
@@ -0,0 +1,76 @@
1
+ Expirable
2
+ =========
3
+
4
+ Expirable is a simple Rails mixin to handle deadlines in workflows.
5
+ It builds on [Delayed::Job](https://github.com/collectiveidea/delayed_job)
6
+ and [Clockwork](https://github.com/tomykaira/clockwork) to provide a painless approach
7
+ to handling time-based events.
8
+
9
+
10
+ Installation
11
+ ------------
12
+
13
+ To install the Expirable and its dependencies, add `expirable` and an
14
+ appropriate Delayed::Jobs backend to your Gemfile:
15
+ ```rb
16
+ gem 'delayed_job_active_record'
17
+ gem 'expirable'
18
+ ```
19
+
20
+ Next, set up Delayed::Job if you are not already using it in your project:
21
+ ```bash
22
+ rails generate delayed_job:active_record
23
+ rake db:migrate
24
+ ```
25
+
26
+ Finally, set up Expirable itself by running `rails g expirable:setup`.
27
+ This will create a Clockwork configuration file called _lib/clock.rb_.
28
+ By default, it is configured to check deadlines at one minute past every hour.
29
+ See the [Clockwork manual](https://github.com/tomykaira/clockwork#clockwork---a-clock-process-to-replace-cron--)
30
+ for more information if you need to change this configuration.
31
+
32
+
33
+ Running Expirable
34
+ -----------------
35
+
36
+ To run Expirable, you will need to run a Clockwork worker and a Delayed::Job worker.
37
+ You can run the Clockwork worker by executing `bundle exec clockwork lib/clock.rb`
38
+ from the root of the Rails project, and Delayed::Job worker with `./bin/delayed_job run`.
39
+
40
+ You can also use [Foreman](http://blog.daviddollar.org/2011/05/06/introducing-foreman.html)
41
+ to manage these processes. For example, if you run your Rails application on Unicorn, then
42
+ you can create a `Procfile` with the following content and run your application with `foreman start`:
43
+ ```conf
44
+ cron: bundle exec clockwork lib/clock.rb
45
+ web: bundle exec unicorn_rails
46
+ worker: ./bin/delayed_job run
47
+ ```
48
+
49
+
50
+ Handling Deadlines
51
+ ------------------
52
+
53
+ To be expirable, a class must do the following three things:
54
+
55
+ 1. include `Expirable`;
56
+ 2. define a `deadline_expired` instance method that will be invoked when the model's deadline expires; and
57
+ 3. define a class method named `newly_expired` that returns a collection of model instances that have expired, but haven't yet received a `deadline_expired` message.
58
+
59
+ As an example, the following model uses [AASM](https://github.com/aasm/aasm) and Expirable to transition tasks to a failed state when their deadline is passed:
60
+ ```rb
61
+ class ExampleTask < ActiveRecord::Base
62
+ include AASM
63
+ include Expirable
64
+
65
+ scope :newly_expired,
66
+ -> { in_progress.where('deadline < ?', DateTime.now) }
67
+
68
+ aasm do
69
+ # ... state and event definitions skipped ...
70
+
71
+ event :deadline_expired do
72
+ transitions from: :in_progress, to: :missed
73
+ end
74
+ end
75
+ end
76
+ ```
@@ -0,0 +1,13 @@
1
+ module Expirable
2
+ module Generators
3
+ class SetupGenerator < Rails::Generators::Base
4
+ desc "Creates a basic clock.rb file to perform expiration hourly"
5
+
6
+ source_root File.expand_path("../templates", __FILE__)
7
+
8
+ def create_clock_config
9
+ copy_file "clock.rb", "lib/clock.rb"
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ require 'clockwork'
2
+ require './config/boot'
3
+ require './config/environment'
4
+
5
+ # Ensure all of the models are loaded. Expirable models are automatically
6
+ # registered when their class definitions are evaluated, so we need to
7
+ # load all of them when clockwork starts up.
8
+ Rails.application.eager_load!
9
+
10
+ module Clockwork
11
+ every 1.hour, 'Expirable.send_expired_events', at: '**:01' do
12
+ Expirable.send_expired_events
13
+ end
14
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: expirable
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brendan MacDonell
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-22 00:00:00.000000000 Z
11
+ date: 2014-03-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -58,7 +58,10 @@ executables: []
58
58
  extensions: []
59
59
  extra_rdoc_files: []
60
60
  files:
61
+ - README.md
61
62
  - lib/expirable.rb
63
+ - lib/generators/expirable/setup/setup_generator.rb
64
+ - lib/generators/expirable/setup/templates/clock.rb
62
65
  homepage: http://rubygems.org/gems/expirable
63
66
  licenses:
64
67
  - MIT