notable 0.2.1 → 0.3.3

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
- SHA1:
3
- metadata.gz: 40acf54eb3ab7d88b666fdb100c1622f68194b69
4
- data.tar.gz: 0f32edf2c850262c7a389910a3b2f325b50630ff
2
+ SHA256:
3
+ metadata.gz: dffa6e740a343d9d94cb914e52fa0627c33e42eaa20c9d9600365ff9fc70a4bf
4
+ data.tar.gz: 7928839098511ba32cb90106f5aa771e64886284f833da98eade40b5fa8637f5
5
5
  SHA512:
6
- metadata.gz: d7949e50b20a7998073e72fc0066f5e1f238f5cd7af5ca248907c6b60a1d0c6eeade4639b0c4fbdc3fd798f4470eb04c160ff000380af7e9e1c39eeab2decee6
7
- data.tar.gz: 39c8bfc89301550d8bee600fa788605ccb28b1bc541cf7c034f5a834fae09486211d4352e8ce37e6ba7532f9c63a5a500382e182cb50733d18bee8d5176ea5ac
6
+ metadata.gz: 80f40eecda17a03ad548ac6faa75b049b83c3e57121a65418dbc0bc2508ad1a0c04424cfe551feb2283d0e366c44968732cd9e00d5df01faa23d1c02f663946f
7
+ data.tar.gz: 1a931594bca9c6c5907592542c40e1f87b3f92731086403c04ca7e486dcf7390a46a4d886b44cd00e9a0b19fed1f6882dbd5de6b7736ad9a7d34c8f11b5c699a
@@ -1,12 +1,35 @@
1
- ## 0.2.1
1
+ ## 0.3.3 (2020-07-26)
2
+
3
+ - Added support for `queued_time` for Active Job 6
4
+
5
+ ## 0.3.2 (2020-07-24)
6
+
7
+ - Added support for Rails API
8
+ - Fixed blocked requests with Rack::Attack
9
+
10
+ ## 0.3.1 (2020-05-20)
11
+
12
+ - Fixed deprecation warning in Ruby 2.7
13
+
14
+ ## 0.3.0 (2019-05-28)
15
+
16
+ - Added support for Rack::Attack 6
17
+ - Added job-specific slow job threshold
18
+ - Dropped support for Rails 4.2
19
+
20
+ ## 0.2.2 (2018-05-18)
21
+
22
+ - Added `mask_ips` option
23
+
24
+ ## 0.2.1 (2017-05-01)
2
25
 
3
26
  - Added support for Rails 5.1
4
27
 
5
- ## 0.2.0
28
+ ## 0.2.0 (2017-01-16)
6
29
 
7
30
  - Switched to ActiveJob for jobs
8
31
  - Fixed deprecation warnings
9
32
 
10
- ## 0.1.0
33
+ ## 0.1.0 (2016-02-20)
11
34
 
12
35
  - Launched
@@ -1,4 +1,4 @@
1
- Copyright (c) 2014 Andrew Kane
1
+ Copyright (c) 2014-2020 Andrew Kane
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -1,12 +1,8 @@
1
1
  # Notable
2
2
 
3
- :star2: Extraordinary insight into your users and background jobs
3
+ :star2: :star2: :star2:
4
4
 
5
- Wouldn’t it be great to see when one of your users encounters an error, timeout, or validation failure? Now you can - directly in your admin pages.
6
-
7
- #### Introducing Notable
8
-
9
- Notable tracks notable requests and background jobs and stores them in your database. What makes a request or job notable? There are a number of default situations, but ultimately you decide what interests you.
5
+ Notable tracks notable requests and background jobs and stores them in your database. What makes a request or job notable? There are a number of default situations, but ultimately you decide what interests you.
10
6
 
11
7
  By default, Notable tracks:
12
8
 
@@ -23,6 +19,8 @@ You can track custom notes as well.
23
19
 
24
20
  :tangerine: Battle-tested at [Instacart](https://www.instacart.com/opensource)
25
21
 
22
+ [![Build Status](https://travis-ci.org/ankane/notable.svg?branch=master)](https://travis-ci.org/ankane/notable)
23
+
26
24
  ## Installation
27
25
 
28
26
  Add this line to your application’s Gemfile:
@@ -36,31 +34,23 @@ And run:
36
34
  ```sh
37
35
  rails generate notable:requests
38
36
  rails generate notable:jobs
39
- rake db:migrate
37
+ rails db:migrate
40
38
  ```
41
39
 
42
- For a web interface, check out [Notable Web](https://github.com/ankane/notable_web).
40
+ To explore the data, check out [Blazer](https://github.com/ankane/blazer).
43
41
 
44
- ## Requests
42
+ ## How It Works
45
43
 
46
44
  A `Notable::Request` is created for:
47
45
 
48
46
  - errors
49
47
  - 404s
50
48
  - slow requests
51
- - timeouts
49
+ - timeouts from [Slowpoke](https://github.com/ankane/slowpoke)
52
50
  - validation failures
53
- - [CSRF failures](http://guides.rubyonrails.org/security.html#cross-site-request-forgery-csrf)
51
+ - [CSRF failures](https://guides.rubyonrails.org/security.html#cross-site-request-forgery-csrf)
54
52
  - unpermitted parameters
55
- - blocked and throttled requests
56
-
57
- For timeouts, use [Slowpoke](https://github.com/ankane/slowpoke).
58
-
59
- For blocked and throttled requests, use [Rack Attack](https://github.com/kickstarter/rack-attack).
60
-
61
- ## Jobs
62
-
63
- Wouldn’t it be great to have a record of exact jobs that fail?
53
+ - blocked and throttled requests from [Rack Attack](https://github.com/kickstarter/rack-attack)
64
54
 
65
55
  A `Notable::Job` is created for:
66
56
 
@@ -68,19 +58,13 @@ A `Notable::Job` is created for:
68
58
  - slow jobs
69
59
  - validation failures
70
60
 
71
- ## Manual Tracking
61
+ Create a custom note inside a request or job with:
72
62
 
73
63
  ```ruby
74
- Notable.track(note_type, note)
64
+ Notable.track("Note Type", "Optional extra info")
75
65
  ```
76
66
 
77
- Like
78
-
79
- ```ruby
80
- Notable.track("Auth Event", "Signed In")
81
- ```
82
-
83
- ## Customize
67
+ ## Customization
84
68
 
85
69
  Disable tracking in certain environments
86
70
 
@@ -93,23 +77,23 @@ Notable.enabled = Rails.env.production?
93
77
  Set slow threshold
94
78
 
95
79
  ```ruby
96
- Notable.slow_request_threshold = 5 # seconds (default)
80
+ Notable.slow_request_threshold = 5.seconds
97
81
  ```
98
82
 
99
83
  Custom user method
100
84
 
101
85
  ```ruby
102
- Notable.user_method = -> (env) {
86
+ Notable.user_method = lambda do |env|
103
87
  env["warden"].try(:user) || env["action_controller.instance"].try(:current_visit)
104
- }
88
+ end
105
89
  ```
106
90
 
107
91
  Custom track method
108
92
 
109
93
  ```ruby
110
- Notable.track_request_method = -> (data, env) {
94
+ Notable.track_request_method = lambda do |data, env|
111
95
  Notable::Request.create!(data)
112
- }
96
+ end
113
97
  ```
114
98
 
115
99
  Skip tracking CSRF failures
@@ -118,26 +102,37 @@ Skip tracking CSRF failures
118
102
  skip_before_action :track_unverified_request
119
103
  ```
120
104
 
105
+ Anonymize IP addresses
106
+
107
+ ```ruby
108
+ Notable.mask_ips = true
109
+ ```
110
+
121
111
  ### Jobs
122
112
 
123
113
  Set slow threshold
124
114
 
125
115
  ```ruby
126
- Notable.slow_job_threshold = 60 # seconds (default)
116
+ Notable.slow_job_threshold = 60.seconds
127
117
  ```
128
118
 
129
- Custom track method
119
+ To set a threshold for a specific job, use:
130
120
 
131
121
  ```ruby
132
- Notable.track_job_method = -> (data) {
133
- Notable::Job.create!(data)
134
- }
122
+ class CustomJob < ApplicationJob
123
+ def notable_slow_job_threshold
124
+ 5.minutes
125
+ end
126
+ end
135
127
  ```
136
128
 
137
- ## TODO
129
+ Custom track method
138
130
 
139
- - ability to disable features
140
- - add indexes
131
+ ```ruby
132
+ Notable.track_job_method = lambda do |data|
133
+ Notable::Job.create!(data)
134
+ end
135
+ ```
141
136
 
142
137
  ## Contributing
143
138
 
@@ -147,3 +142,12 @@ Everyone is encouraged to help improve this project. Here are a few ways you can
147
142
  - Fix bugs and [submit pull requests](https://github.com/ankane/notable/pulls)
148
143
  - Write, clarify, or fix documentation
149
144
  - Suggest or add new features
145
+
146
+ To get started with development:
147
+
148
+ ```sh
149
+ git clone https://github.com/ankane/notable.git
150
+ cd notable
151
+ bundle install
152
+ bundle exec rake test
153
+ ```
@@ -2,7 +2,7 @@ module Notable
2
2
  class Request < ActiveRecord::Base
3
3
  self.table_name = "notable_requests"
4
4
 
5
- belongs_to :user, {polymorphic: true}.merge(ActiveRecord::VERSION::MAJOR >= 5 ? {optional: true} : {})
5
+ belongs_to :user, polymorphic: true, optional: true
6
6
  serialize :params, JSON
7
7
  end
8
8
  end
@@ -1,34 +1,17 @@
1
- # taken from https://github.com/collectiveidea/audited/blob/master/lib/generators/audited/install_generator.rb
2
- require "rails/generators"
3
- require "rails/generators/migration"
4
- require "active_record"
5
1
  require "rails/generators/active_record"
6
2
 
7
3
  module Notable
8
4
  module Generators
9
5
  class JobsGenerator < Rails::Generators::Base
10
- include Rails::Generators::Migration
11
-
12
- source_root File.expand_path("../templates", __FILE__)
13
-
14
- # Implement the required interface for Rails::Generators::Migration.
15
- def self.next_migration_number(dirname) #:nodoc:
16
- next_migration_number = current_migration_number(dirname) + 1
17
- if ActiveRecord::Base.timestamped_migrations
18
- [Time.now.utc.strftime("%Y%m%d%H%M%S"), "%.14d" % next_migration_number].max
19
- else
20
- "%.3d" % next_migration_number
21
- end
22
- end
6
+ include ActiveRecord::Generators::Migration
7
+ source_root File.join(__dir__, "templates")
23
8
 
24
9
  def copy_migration
25
10
  migration_template "create_jobs.rb", "db/migrate/create_notable_jobs.rb", migration_version: migration_version
26
11
  end
27
12
 
28
13
  def migration_version
29
- if ActiveRecord::VERSION::MAJOR >= 5
30
- "[#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}]"
31
- end
14
+ "[#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}]"
32
15
  end
33
16
  end
34
17
  end
@@ -1,34 +1,17 @@
1
- # taken from https://github.com/collectiveidea/audited/blob/master/lib/generators/audited/install_generator.rb
2
- require "rails/generators"
3
- require "rails/generators/migration"
4
- require "active_record"
5
1
  require "rails/generators/active_record"
6
2
 
7
3
  module Notable
8
4
  module Generators
9
5
  class RequestsGenerator < Rails::Generators::Base
10
- include Rails::Generators::Migration
11
-
12
- source_root File.expand_path("../templates", __FILE__)
13
-
14
- # Implement the required interface for Rails::Generators::Migration.
15
- def self.next_migration_number(dirname) #:nodoc:
16
- next_migration_number = current_migration_number(dirname) + 1
17
- if ActiveRecord::Base.timestamped_migrations
18
- [Time.now.utc.strftime("%Y%m%d%H%M%S"), "%.14d" % next_migration_number].max
19
- else
20
- "%.3d" % next_migration_number
21
- end
22
- end
6
+ include ActiveRecord::Generators::Migration
7
+ source_root File.join(__dir__, "templates")
23
8
 
24
9
  def copy_migration
25
10
  migration_template "create_requests.rb", "db/migrate/create_notable_requests.rb", migration_version: migration_version
26
11
  end
27
12
 
28
13
  def migration_version
29
- if ActiveRecord::VERSION::MAJOR >= 5
30
- "[#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}]"
31
- end
14
+ "[#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}]"
32
15
  end
33
16
  end
34
17
  end
@@ -6,8 +6,8 @@ class <%= migration_class_name %> < ActiveRecord::Migration<%= migration_version
6
6
  t.text :job
7
7
  t.string :job_id
8
8
  t.string :queue
9
- t.decimal :runtime
10
- t.decimal :queued_time
9
+ t.float :runtime
10
+ t.float :queued_time
11
11
  t.timestamp :created_at
12
12
  end
13
13
  end
@@ -3,8 +3,7 @@ class <%= migration_class_name %> < ActiveRecord::Migration<%= migration_version
3
3
  create_table :notable_requests do |t|
4
4
  t.string :note_type
5
5
  t.text :note
6
- t.integer :user_id
7
- t.string :user_type
6
+ t.references :user, polymorphic: true
8
7
  t.text :action
9
8
  t.integer :status
10
9
  t.text :url
@@ -13,10 +12,8 @@ class <%= migration_class_name %> < ActiveRecord::Migration<%= migration_version
13
12
  t.text :user_agent
14
13
  t.text :referrer
15
14
  t.text :params
16
- t.decimal :request_time
15
+ t.float :request_time
17
16
  t.timestamp :created_at
18
17
  end
19
-
20
- add_index :notable_requests, [:user_id, :user_type]
21
18
  end
22
19
  end
@@ -1,19 +1,15 @@
1
- require "notable/version"
2
-
3
- require "request_store"
1
+ # dependencies
2
+ require "active_support"
4
3
  require "safely/core"
5
- require "action_dispatch/middleware/debug_exceptions"
6
-
7
- # middleware
8
- require "notable/middleware"
9
- require "notable/engine" if defined?(Rails)
10
4
 
11
- # requests
12
- require "notable/unpermitted_parameters"
13
- require "notable/unverified_request"
14
- require "notable/validation_errors"
5
+ # modules
15
6
  require "notable/debug_exceptions"
7
+ require "notable/middleware"
16
8
  require "notable/throttle"
9
+ require "notable/unpermitted_parameters"
10
+ require "notable/version"
11
+
12
+ require "notable/engine" if defined?(Rails)
17
13
 
18
14
  module Notable
19
15
  class << self
@@ -25,6 +21,7 @@ module Notable
25
21
  attr_accessor :track_request_method
26
22
  attr_accessor :user_method
27
23
  attr_accessor :slow_request_threshold
24
+ attr_accessor :mask_ips
28
25
 
29
26
  # jobs
30
27
  attr_accessor :track_job_method
@@ -33,6 +30,7 @@ module Notable
33
30
  self.enabled = true
34
31
  self.requests_enabled = true
35
32
  self.jobs_enabled = true
33
+ self.mask_ips = false
36
34
 
37
35
  def self.requests_enabled?
38
36
  enabled && requests_enabled
@@ -43,7 +41,7 @@ module Notable
43
41
  end
44
42
 
45
43
  # requests
46
- self.track_request_method = -> (data, env) { Notable::Request.create!(data) }
44
+ self.track_request_method = -> (data, _) { Notable::Request.create!(data) }
47
45
  self.user_method = -> (env) { env["warden"].user if env["warden"] }
48
46
  self.slow_request_threshold = 5
49
47
 
@@ -52,7 +50,7 @@ module Notable
52
50
  self.slow_job_threshold = 60
53
51
 
54
52
  def self.track(note_type, note = nil)
55
- (RequestStore.store[:notable_notes] ||= []) << {note_type: note_type, note: note}
53
+ notes << {note_type: note_type, note: note}
56
54
  end
57
55
 
58
56
  def self.track_error(e)
@@ -60,17 +58,19 @@ module Notable
60
58
  end
61
59
 
62
60
  def self.notes
63
- RequestStore.store[:notable_notes].to_a
61
+ Thread.current[:notable_notes] ||= []
64
62
  end
65
63
 
66
64
  def self.clear_notes
67
- RequestStore.store.delete(:notable_notes)
65
+ Thread.current[:notable_notes] = nil
68
66
  end
69
67
 
70
- def self.track_job(job, job_id, queue, created_at)
68
+ def self.track_job(job, job_id, queue, created_at, slow_job_threshold = nil)
69
+ slow_job_threshold ||= Notable.slow_job_threshold
71
70
  exception = nil
72
71
  notes = nil
73
72
  start_time = Time.now
73
+ created_at = Time.parse(created_at) if created_at.is_a?(String)
74
74
  queued_time = created_at ? start_time - created_at : nil
75
75
  begin
76
76
  yield
@@ -84,7 +84,7 @@ module Notable
84
84
  runtime = Time.now - start_time
85
85
 
86
86
  Safely.safely do
87
- notes << {note_type: "Slow Job"} if runtime > Notable.slow_job_threshold
87
+ notes << {note_type: "Slow Job"} if runtime > slow_job_threshold
88
88
 
89
89
  notes.each do |note|
90
90
  data = {
@@ -103,6 +103,27 @@ module Notable
103
103
 
104
104
  raise exception if exception
105
105
  end
106
+
107
+ def self.mask_ip(ip)
108
+ addr = IPAddr.new(ip)
109
+ if addr.ipv4?
110
+ # set last octet to 0
111
+ addr.mask(24).to_s
112
+ else
113
+ # set last 80 bits to zeros
114
+ addr.mask(48).to_s
115
+ end
116
+ end
117
+ end
118
+
119
+ ActiveSupport.on_load(:action_controller) do
120
+ require "notable/unverified_request"
121
+ include Notable::UnverifiedRequest
122
+ end
123
+
124
+ ActiveSupport.on_load(:active_record) do
125
+ require "notable/validation_errors"
126
+ include Notable::ValidationErrors
106
127
  end
107
128
 
108
129
  ActiveSupport.on_load(:active_job) do
@@ -4,8 +4,9 @@ module Notable
4
4
 
5
5
  initializer "notable" do |app|
6
6
  if Notable.requests_enabled?
7
- app.config.middleware.insert_after RequestStore::Middleware, Notable::Middleware
8
- ActionDispatch::DebugExceptions.send(:prepend, Notable::DebugExceptions)
7
+ # insert in same place as request_store
8
+ app.config.middleware.insert_after ActionDispatch::RequestId, Notable::Middleware
9
+ ActionDispatch::DebugExceptions.prepend Notable::DebugExceptions
9
10
  end
10
11
  end
11
12
  end
@@ -4,8 +4,8 @@ module Notable
4
4
 
5
5
  included do
6
6
  around_perform do |job, block|
7
- # no way to get queued_at time :(
8
- Notable.track_job(job.class.name, job.job_id, job.queue_name, nil) do
7
+ # enqueued_at is only available in Active Job 6+
8
+ Notable.track_job(job.class.name, job.job_id, job.queue_name, job.try(:enqueued_at), try(:notable_slow_job_threshold)) do
9
9
  block.call
10
10
  end
11
11
  end
@@ -1,6 +1,5 @@
1
1
  module Notable
2
2
  class Middleware
3
-
4
3
  def initialize(app)
5
4
  @app = app
6
5
  end
@@ -44,6 +43,11 @@ module Notable
44
43
  user = Notable.user_method.call(env)
45
44
 
46
45
  notes.each do |note|
46
+ ip = request.remote_ip
47
+ if ip && Notable.mask_ips
48
+ ip = Notable.mask_ip(ip)
49
+ end
50
+
47
51
  data = {
48
52
  note_type: note[:note_type],
49
53
  note: note[:note],
@@ -52,7 +56,7 @@ module Notable
52
56
  status: status,
53
57
  params: params,
54
58
  request_id: request.uuid,
55
- ip: request.remote_ip,
59
+ ip: ip,
56
60
  user_agent: request.user_agent,
57
61
  url: url,
58
62
  referrer: request.referer,
@@ -64,7 +68,8 @@ module Notable
64
68
  end
65
69
 
66
70
  [status, headers, body]
71
+ ensure
72
+ Notable.clear_notes
67
73
  end
68
-
69
74
  end
70
75
  end
@@ -1,5 +1,7 @@
1
- ActiveSupport::Notifications.subscribe "rack.attack" do |name, start, finish, request_id, req|
2
- if [:blacklist, :throttle].include?(req.env["rack.attack.match_type"])
3
- Notable.track "Throttle", req.env["rack.attack.matched"]
1
+ ActiveSupport::Notifications.subscribe "rack.attack" do |_name, _start, _finish, _request_id, req|
2
+ request = req.is_a?(Hash) ? req[:request] : req
3
+
4
+ if [:blacklist, :blocklist, :throttle].include?(request.env["rack.attack.match_type"])
5
+ Notable.track "Throttle", request.env["rack.attack.matched"]
4
6
  end
5
7
  end
@@ -1,3 +1,3 @@
1
- ActiveSupport::Notifications.subscribe "unpermitted_parameters.action_controller" do |name, start, finish, id, payload|
1
+ ActiveSupport::Notifications.subscribe "unpermitted_parameters.action_controller" do |_name, _start, _finish, _id, payload|
2
2
  Notable.track "Unpermitted Parameters", payload[:keys].join(", ")
3
3
  end
@@ -7,7 +7,7 @@ module Notable
7
7
  end
8
8
 
9
9
  def track_unverified_request
10
- if !verified_request?
10
+ if respond_to?(:verified_request?, true) && !verified_request?
11
11
  expected = form_authenticity_token
12
12
  actual = form_authenticity_param || request.headers["X-CSRF-Token"]
13
13
  Notable.track "Unverified Request", "#{actual || "nil"} != #{expected}"
@@ -15,5 +15,3 @@ module Notable
15
15
  end
16
16
  end
17
17
  end
18
-
19
- ActionController::Base.send(:include, Notable::UnverifiedRequest)
@@ -13,5 +13,3 @@ module Notable
13
13
  end
14
14
  end
15
15
  end
16
-
17
- ActiveRecord::Base.send(:include, Notable::ValidationErrors)
@@ -1,3 +1,3 @@
1
1
  module Notable
2
- VERSION = "0.2.1"
2
+ VERSION = "0.3.3"
3
3
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: notable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-01 00:00:00.000000000 Z
11
+ date: 2020-07-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: request_store
14
+ name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '5'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '5'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: safely_block
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -42,49 +42,129 @@ dependencies:
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '1.7'
47
+ version: '0'
48
48
  type: :development
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: '1.7'
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '5'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '5'
83
+ - !ruby/object:Gem::Dependency
84
+ name: combustion
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
60
88
  - !ruby/object:Gem::Version
61
- version: '10.0'
89
+ version: '0'
62
90
  type: :development
63
91
  prerelease: false
64
92
  version_requirements: !ruby/object:Gem::Requirement
65
93
  requirements:
66
- - - "~>"
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rails
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
67
102
  - !ruby/object:Gem::Version
68
- version: '10.0'
69
- description: Track notable requests and background jobs
70
- email:
71
- - andrew@chartkick.com
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: sqlite3
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rack-attack
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: slowpoke
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ description:
154
+ email: andrew@chartkick.com
72
155
  executables: []
73
156
  extensions: []
74
157
  extra_rdoc_files: []
75
158
  files:
76
- - ".gitignore"
77
159
  - CHANGELOG.md
78
- - Gemfile
79
160
  - LICENSE.txt
80
161
  - README.md
81
- - Rakefile
82
162
  - app/models/notable/job.rb
83
163
  - app/models/notable/request.rb
84
164
  - lib/generators/notable/jobs_generator.rb
85
165
  - lib/generators/notable/requests_generator.rb
86
- - lib/generators/notable/templates/create_jobs.rb
87
- - lib/generators/notable/templates/create_requests.rb
166
+ - lib/generators/notable/templates/create_jobs.rb.tt
167
+ - lib/generators/notable/templates/create_requests.rb.tt
88
168
  - lib/notable.rb
89
169
  - lib/notable/debug_exceptions.rb
90
170
  - lib/notable/engine.rb
@@ -95,7 +175,6 @@ files:
95
175
  - lib/notable/unverified_request.rb
96
176
  - lib/notable/validation_errors.rb
97
177
  - lib/notable/version.rb
98
- - notable.gemspec
99
178
  homepage: https://github.com/ankane/notable
100
179
  licenses:
101
180
  - MIT
@@ -108,15 +187,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
108
187
  requirements:
109
188
  - - ">="
110
189
  - !ruby/object:Gem::Version
111
- version: '0'
190
+ version: '2.4'
112
191
  required_rubygems_version: !ruby/object:Gem::Requirement
113
192
  requirements:
114
193
  - - ">="
115
194
  - !ruby/object:Gem::Version
116
195
  version: '0'
117
196
  requirements: []
118
- rubyforge_project:
119
- rubygems_version: 2.6.11
197
+ rubygems_version: 3.1.2
120
198
  signing_key:
121
199
  specification_version: 4
122
200
  summary: Track notable requests and background jobs
data/.gitignore DELETED
@@ -1,14 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /Gemfile.lock
4
- /_yardoc/
5
- /coverage/
6
- /doc/
7
- /pkg/
8
- /spec/reports/
9
- /tmp/
10
- *.bundle
11
- *.so
12
- *.o
13
- *.a
14
- mkmf.log
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- # Specify your gem's dependencies in notable.gemspec
4
- gemspec
data/Rakefile DELETED
@@ -1 +0,0 @@
1
- require "bundler/gem_tasks"
@@ -1,26 +0,0 @@
1
- # coding: utf-8
2
- lib = File.expand_path("../lib", __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require "notable/version"
5
-
6
- Gem::Specification.new do |spec|
7
- spec.name = "notable"
8
- spec.version = Notable::VERSION
9
- spec.authors = ["Andrew Kane"]
10
- spec.email = ["andrew@chartkick.com"]
11
- spec.summary = "Track notable requests and background jobs"
12
- spec.description = "Track notable requests and background jobs"
13
- spec.homepage = "https://github.com/ankane/notable"
14
- spec.license = "MIT"
15
-
16
- spec.files = `git ls-files -z`.split("\x0")
17
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
- spec.require_paths = ["lib"]
20
-
21
- spec.add_dependency "request_store"
22
- spec.add_dependency "safely_block", ">= 0.1.1"
23
-
24
- spec.add_development_dependency "bundler", "~> 1.7"
25
- spec.add_development_dependency "rake", "~> 10.0"
26
- end