omg-audit-group 0.1.0 → 0.1.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
  SHA256:
3
- metadata.gz: 4aefcd1c0eb006272723f7ed68f14cd719e6480d833e9354730ee42340d6b814
4
- data.tar.gz: 418949a9ea417499e1ff0566f1255940c273bcc5404311bfd4352eecc34b3196
3
+ metadata.gz: 8826c5193da34c27182b2f70bdf09828c3fbc9044a483540cba3ae491147e3ea
4
+ data.tar.gz: 46b18034462d5c30df7d028e3b4bb337e4bd221d522f430646b4b50304663c30
5
5
  SHA512:
6
- metadata.gz: 1ef815f6b87adb3fe2df279b84dd94a7ff48f8075fa2e91292680b270bec764ff1800b38b90523d02c7f5ed92d936fcdc95bf56548a454f4e899ad9e47672f29
7
- data.tar.gz: 7ce8a2a142907e59690af0cf912302aed6fe607cefd1b133b43520517a68dd1049845d6ef32155c73c088eaebe7ab4011899e3ed859ec48c8934567f788b2299
6
+ metadata.gz: 783b7104fd8427d4183c8d777f9c91ad0129a5b8a24e65a50a252061579d183756c926564fa8e75caa09ec6146206d5852f020af984ae29b1d49fb17e1c7219e
7
+ data.tar.gz: ae01514472dd81d6f209b2a5a3e99623a8e497687024aacc790073c71965b88c5512d75491a186449cda76105da4161c2737d1dfa45febf974aa8e4645a9ad10
data/README.md CHANGED
@@ -2,19 +2,42 @@
2
2
 
3
3
  Group ActiveRecord operations together by assigning all of their audits the same `request_uuid`.
4
4
 
5
+ ## TODO
6
+
7
+ - [ ] Add `rails` as dependency instead of `active_support`
8
+ - [ ] Add `dry_run` method
9
+
5
10
  ## Requirements
6
11
 
7
12
  - [Audited](https://github.com/collectiveidea/audited) gem
8
13
 
9
14
  ## Installation
10
15
 
16
+ ### From RubyGems.org
17
+
18
+ #### Globally
19
+
20
+ ```sh
21
+ gem i omg-audit-group
22
+ ```
23
+
24
+ #### In `Gemfile`
25
+
26
+ ```ruby
27
+ gem 'omg-audit-group'
28
+ ```
29
+
11
30
  ### Testing locally
12
31
  ```sh
13
32
  # Build gem
14
- gem build audit_group.gemspec
33
+ rake build
15
34
 
16
35
  # Install gem
17
- gem i -l /path/to/this/repo/omg-audit_group-0.1.0.gem
36
+ ## From this directory
37
+ rake install
38
+
39
+ ## From other directory
40
+ gem i -l /path/to/this/folder/omg-audit-group-0.1.0.gem
18
41
  ```
19
42
 
20
43
  ## Usage
@@ -27,19 +50,34 @@ For convenience, the following operations are delegated from the `AuditGroup` mo
27
50
  - `request_uuid`
28
51
  - `audits`
29
52
 
30
- Here are some use cases:
53
+ ### Using class methods
31
54
 
32
55
  ```ruby
33
56
  # Group operations under the same request_uuid
34
57
  AuditGroup.request { perform_some_operations }
35
58
 
36
- # View the last request_uuid (the above also returns it)
59
+ # View the last request_uuid
37
60
  AuditGroup.request_uuid
38
61
 
39
62
  # View the audits from the last request
40
63
  AuditGroup.audits
41
64
  ```
42
65
 
66
+ ### Saving Request object for later use
67
+
68
+ ```ruby
69
+ # Group operations under the same request_uuid
70
+ request = AuditGroup.request { perform_some_operations }
71
+
72
+ # View the last request_uuid
73
+ request.request_uuid
74
+
75
+ # View the audits from the last request
76
+ request.audits
77
+ ```
78
+
79
+ ### Instantiating a group
80
+
43
81
  You can also create separate `AuditGroup::Request` objects to reuse.
44
82
 
45
83
  ```ruby
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ require_relative 'lib/audit_group'
2
+
3
+ require 'rake'
4
+
5
+ task :build do
6
+ sh 'gem build audit_group.gemspec'
7
+ end
8
+
9
+ task :publish do
10
+ sh "gem push omg-audit-group-#{AuditGroup::VERSION}.gem"
11
+ end
data/audit_group.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'lib/audit_group/version'
3
+ require_relative 'lib/audit_group'
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = 'omg-audit-group'
@@ -20,8 +20,6 @@ Gem::Specification.new do |spec|
20
20
  spec.metadata['homepage_uri'] = spec.homepage
21
21
  spec.metadata['rubygems_mfa_required'] = 'true'
22
22
 
23
- # Specify which files should be added to the gem when it is released.
24
- # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
25
23
  spec.files = Dir.chdir(__dir__) do
26
24
  `git ls-files -z`.split("\x0").reject do |f|
27
25
  (File.expand_path(f) == __FILE__) ||
@@ -32,7 +30,4 @@ Gem::Specification.new do |spec|
32
30
 
33
31
  spec.add_dependency 'activesupport', '>= 6.0', '< 8.0'
34
32
  spec.add_dependency 'audited', '>= 4.9', '< 6.0'
35
-
36
- # For more information and examples about making a new gem, check out our
37
- # guide at: https://bundler.io/guides/creating_gem.html
38
33
  end
data/lib/audit_group.rb CHANGED
@@ -1,13 +1,60 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'audit_group/request'
4
- require_relative 'audit_group/version'
5
-
6
3
  require 'active_support/all'
7
4
  require 'audited'
8
5
 
9
- module AuditGroup
6
+ class AuditGroup
7
+ VERSION = '0.1.1'
8
+
9
+ attr_reader :block, :request_uuid
10
+
11
+ delegate :current, :unset_request_uuid, to: :class
12
+
10
13
  class << self
11
- delegate :new, :request, :current, :request_uuid, :audits, to: Request
14
+ attr_accessor :current
15
+
16
+ delegate :request_uuid, :audits, to: :current
17
+
18
+ def set_request_uuid(request_uuid = SecureRandom.uuid)
19
+ Audited.store[:current_request_uuid] = request_uuid
20
+ end
21
+
22
+ def unset_request_uuid
23
+ Audited.store.delete(:current_request_uuid)
24
+ end
25
+
26
+ def reset
27
+ unset_request_uuid
28
+ @current = nil
29
+ end
30
+
31
+ def request(&block)
32
+ raise ArgumentError, 'No block given and no active group' unless block_given?
33
+
34
+ new.request(&block)
35
+ end
36
+ end
37
+
38
+ def initialize(request_uuid = SecureRandom.uuid)
39
+ @request_uuid = request_uuid
40
+ self.class.current = self
41
+ end
42
+
43
+ def request(&block)
44
+ set_request_uuid
45
+
46
+ block.call if block.present?
47
+
48
+ self
49
+ ensure
50
+ unset_request_uuid
51
+ end
52
+
53
+ def set_request_uuid
54
+ self.class.set_request_uuid(request_uuid)
55
+ end
56
+
57
+ def audits
58
+ Audited::Audit.where(request_uuid: request_uuid)
12
59
  end
13
60
  end
@@ -1,44 +1,108 @@
1
- # frozen_string_literal: true
2
-
3
1
  RSpec.describe AuditGroup do
4
- it 'has a version number' do
5
- expect(AuditGroup::VERSION).not_to be_nil
6
- end
2
+ describe 'class methods' do
3
+ describe '.current' do
4
+ it 'returns the last request created' do
5
+ request = described_class.request {}
6
+ expect(described_class.current).to eq(request)
7
+ end
8
+ end
7
9
 
8
- describe '.new' do
9
- it 'delegates to Request' do
10
- expect(AuditGroup.new).to be_a(AuditGroup::Request)
10
+ describe '.set_request_uuid' do
11
+ it "sets the Audit store's current_request_uuid" do
12
+ described_class.set_request_uuid('123')
13
+ expect(Audited.store[:current_request_uuid]).to eq('123')
14
+
15
+ described_class.set_request_uuid
16
+ expect(Audited.store[:current_request_uuid]).to match(/\A\h{8}-\h{4}-\h{4}-\h{4}-\h{12}\z/)
17
+ end
11
18
  end
12
- end
13
19
 
14
- describe '.request' do
15
- it 'creates a new Request' do
16
- request = AuditGroup.request { puts 'Hi, Mom!' }
20
+ describe '.unset_request_uuid' do
21
+ it "resets the Audit store's current_request_uuid" do
22
+ Audited.store[:current_request_uuid] = '123'
23
+ described_class.unset_request_uuid
24
+ expect(Audited.store[:current_request_uuid]).to be_nil
25
+ end
26
+ end
17
27
 
18
- expect(request).to be_a(AuditGroup::Request)
28
+ describe '.reset' do
29
+ it 'unsets the request_uuid and current request' do
30
+ described_class.set_request_uuid('123')
31
+ described_class.current = 'some request'
32
+
33
+ expect(Audited.store[:current_request_uuid]).to eq('123')
34
+ expect(described_class.current).to eq('some request')
35
+
36
+ described_class.reset
37
+
38
+ expect(Audited.store[:current_request_uuid]).to be_nil
39
+ expect(described_class.current).to be_nil
40
+ end
19
41
  end
20
- end
21
42
 
22
- describe '.current' do
23
- it 'returns the last created Request object' do
24
- request = AuditGroup.request { puts 'Hi, Dad!' }
25
- expect(AuditGroup.current).to eq(request)
43
+ describe '.request' do
44
+ it 'raises an ArgumentError if no block is given and no active group' do
45
+ expect { described_class.request }.to raise_error(ArgumentError, 'No block given and no active group')
46
+ end
47
+
48
+ it 'creates a new request if block is given' do
49
+ expect { |block| described_class.request(&block) }.to yield_control
50
+ end
51
+ end
52
+
53
+ describe '.request_uuid' do
54
+ it 'delegates to current' do
55
+ described_class.request {}
56
+ expect(described_class.request_uuid).to eq(described_class.current.request_uuid)
57
+ end
26
58
  end
27
- end
28
59
 
29
- describe '.request_uuid' do
30
- it 'returns the current request_uuid' do
31
- request = AuditGroup.request { puts 'Hi, Steve!' }
32
- expect(AuditGroup.request_uuid).to eq(request.request_uuid)
60
+ describe '.audits' do
61
+ it 'delegates to current' do
62
+ described_class.new('123')
63
+ audited_audit = class_double('Audited::Audit').as_stubbed_const
64
+ expect(audited_audit).to receive(:where).with(request_uuid: '123').and_return('some audits')
65
+ expect(described_class.audits).to eq('some audits')
66
+ end
33
67
  end
34
68
  end
35
69
 
36
- describe '.audits' do
37
- it 'delegates to Request' do
38
- AuditGroup.request { puts "Who's Steve?" }
39
- audited_audit = class_double('Audited::Audit').as_stubbed_const
40
- expect(audited_audit).to receive(:where).with(request_uuid: an_instance_of(String)).and_return('some audits')
41
- expect(AuditGroup.audits).to eq('some audits')
70
+ describe 'instance methods' do
71
+ describe '#initialize' do
72
+ it 'sets the request_uuid and current request' do
73
+ request = described_class.new('123')
74
+ expect(request.request_uuid).to eq('123')
75
+ expect(described_class.current).to eq(request)
76
+ end
77
+ end
78
+
79
+ describe '#request' do
80
+ it 'sets the current_request_uuid, calls the block, then resets current_request_uuid' do
81
+ request = described_class.new('123')
82
+
83
+ request.request do
84
+ expect(Audited.store[:current_request_uuid]).to eq('123')
85
+ end
86
+
87
+ expect(Audited.store[:current_request_uuid]).to be_nil
88
+ end
89
+ end
90
+
91
+ describe '#set_request_uuid' do
92
+ it 'delegates to class' do
93
+ request = described_class.new('123')
94
+ expect(request).to receive(:set_request_uuid)
95
+ request.set_request_uuid
96
+ end
97
+ end
98
+
99
+ describe '#audits' do
100
+ it 'returns audits with request_uuid' do
101
+ request = described_class.new('123')
102
+ audited_audit = class_double('Audited::Audit').as_stubbed_const
103
+ expect(audited_audit).to receive(:where).with(request_uuid: '123').and_return('some audits')
104
+ expect(request.audits).to eq('some audits')
105
+ end
42
106
  end
43
107
  end
44
108
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omg-audit-group
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Greenfield
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-04-19 00:00:00.000000000 Z
11
+ date: 2024-05-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -61,11 +61,9 @@ files:
61
61
  - ".gitignore"
62
62
  - ".rspec"
63
63
  - README.md
64
+ - Rakefile
64
65
  - audit_group.gemspec
65
66
  - lib/audit_group.rb
66
- - lib/audit_group/request.rb
67
- - lib/audit_group/version.rb
68
- - spec/audit_group/request_spec.rb
69
67
  - spec/audit_group_spec.rb
70
68
  - spec/spec_helper.rb
71
69
  homepage: https://github.com/omgreenfield/omg-util/tree/main/audit_group
@@ -1,59 +0,0 @@
1
- require 'active_support/all'
2
- require 'audited'
3
- require 'pry-byebug'
4
-
5
- module AuditGroup
6
- class Request
7
- attr_reader :block, :request_uuid
8
-
9
- delegate :current, :unset_request_uuid, to: :class
10
-
11
- class << self
12
- delegate :request_uuid, :audits, to: :current
13
-
14
- attr_accessor :current
15
-
16
- def set_request_uuid(request_uuid = SecureRandom.uuid)
17
- Audited.store[:current_request_uuid] = request_uuid
18
- end
19
-
20
- def unset_request_uuid
21
- Audited.store.delete(:current_request_uuid)
22
- end
23
-
24
- def reset
25
- unset_request_uuid
26
- @current = nil
27
- end
28
-
29
- def request(&block)
30
- raise ArgumentError, 'No block given and no active group' unless block_given?
31
-
32
- new.request(&block)
33
- end
34
- end
35
-
36
- def initialize(request_uuid = SecureRandom.uuid)
37
- @request_uuid = request_uuid
38
- self.class.current = self
39
- end
40
-
41
- def request(&block)
42
- set_request_uuid
43
-
44
- block.call if block.present?
45
-
46
- self
47
- ensure
48
- unset_request_uuid
49
- end
50
-
51
- def set_request_uuid
52
- self.class.set_request_uuid(request_uuid)
53
- end
54
-
55
- def audits
56
- Audited::Audit.where(request_uuid: request_uuid)
57
- end
58
- end
59
- end
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module AuditGroup
4
- VERSION = "0.1.0"
5
- end
@@ -1,110 +0,0 @@
1
- require 'audit_group/request'
2
-
3
- RSpec.describe AuditGroup::Request do
4
- describe 'class methods' do
5
- describe '.current' do
6
- it 'returns the last request created' do
7
- request = described_class.request {}
8
- expect(described_class.current).to eq(request)
9
- end
10
- end
11
-
12
- describe '.set_request_uuid' do
13
- it "sets the Audit store's current_request_uuid" do
14
- described_class.set_request_uuid('123')
15
- expect(Audited.store[:current_request_uuid]).to eq('123')
16
-
17
- described_class.set_request_uuid
18
- expect(Audited.store[:current_request_uuid]).to match(/\A\h{8}-\h{4}-\h{4}-\h{4}-\h{12}\z/)
19
- end
20
- end
21
-
22
- describe '.unset_request_uuid' do
23
- it "resets the Audit store's current_request_uuid" do
24
- Audited.store[:current_request_uuid] = '123'
25
- described_class.unset_request_uuid
26
- expect(Audited.store[:current_request_uuid]).to be_nil
27
- end
28
- end
29
-
30
- describe '.reset' do
31
- it 'unsets the request_uuid and current request' do
32
- described_class.set_request_uuid('123')
33
- described_class.current = 'some request'
34
-
35
- expect(Audited.store[:current_request_uuid]).to eq('123')
36
- expect(described_class.current).to eq('some request')
37
-
38
- described_class.reset
39
-
40
- expect(Audited.store[:current_request_uuid]).to be_nil
41
- expect(described_class.current).to be_nil
42
- end
43
- end
44
-
45
- describe '.request' do
46
- it 'raises an ArgumentError if no block is given and no active group' do
47
- expect { described_class.request }.to raise_error(ArgumentError, 'No block given and no active group')
48
- end
49
-
50
- it 'creates a new request if block is given' do
51
- expect { |block| described_class.request(&block) }.to yield_control
52
- end
53
- end
54
-
55
- describe '.request_uuid' do
56
- it 'delegates to current' do
57
- described_class.request {}
58
- expect(described_class.request_uuid).to eq(described_class.current.request_uuid)
59
- end
60
- end
61
-
62
- describe '.audits' do
63
- it 'delegates to current' do
64
- described_class.new('123')
65
- audited_audit = class_double('Audited::Audit').as_stubbed_const
66
- expect(audited_audit).to receive(:where).with(request_uuid: '123').and_return('some audits')
67
- expect(described_class.audits).to eq('some audits')
68
- end
69
- end
70
- end
71
-
72
- describe 'instance methods' do
73
- describe '#initialize' do
74
- it 'sets the request_uuid and current request' do
75
- request = described_class.new('123')
76
- expect(request.request_uuid).to eq('123')
77
- expect(described_class.current).to eq(request)
78
- end
79
- end
80
-
81
- describe '#request' do
82
- it 'sets the current_request_uuid, calls the block, then resets current_request_uuid' do
83
- request = described_class.new('123')
84
-
85
- request.request do
86
- expect(Audited.store[:current_request_uuid]).to eq('123')
87
- end
88
-
89
- expect(Audited.store[:current_request_uuid]).to be_nil
90
- end
91
- end
92
-
93
- describe '#set_request_uuid' do
94
- it 'delegates to class' do
95
- request = described_class.new('123')
96
- expect(request).to receive(:set_request_uuid)
97
- request.set_request_uuid
98
- end
99
- end
100
-
101
- describe '#audits' do
102
- it 'returns audits with request_uuid' do
103
- request = described_class.new('123')
104
- audited_audit = class_double('Audited::Audit').as_stubbed_const
105
- expect(audited_audit).to receive(:where).with(request_uuid: '123').and_return('some audits')
106
- expect(request.audits).to eq('some audits')
107
- end
108
- end
109
- end
110
- end