operator_recordable 1.0.0 → 1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 22c581a6ae6ddeb9369818a631861d56b3575df72e3f426ce6a25624dc293d15
4
- data.tar.gz: b4a05d37ff0e899da55158e3dc0fd6695a09aed4bc9c62d5e637f39d7b469cf2
3
+ metadata.gz: f15fe7bfab329bcdac169e462ecfdb78af6c49a18e851c904ef9e16a8b33ac4c
4
+ data.tar.gz: 60a6488ec7540f1b7ea60173126a4817b9ae139058cddfec0e34999adac33244
5
5
  SHA512:
6
- metadata.gz: a72f3ebda5df303a2971819f53796eac9e7d04f2409ae72c367ab5f4ec3016a6c3d852e308f17188eb1737fe2eb3831e9c633c0e11227a84e2a4a26d139896f7
7
- data.tar.gz: 53bfd57f4e883ca9fcaee71b6339d25847d9474949dd0aada34d2370f1400121531232a4d4c1da2bc03eec681e74b1795abacd7620cfabeebdd6005ab059a964
6
+ metadata.gz: 2ad18e622600bd8ba978d998f24ab6b5aa25cd9763159d290b27e9e6b8003715229239da507364ddb083bbc0a03e9ecaa87acc947743aa16e9087ae36dee4853
7
+ data.tar.gz: f32382da136939d9cad3d9bce663886ae116e6006b0235d7196a567f4830e67ececc1af2bef838f96ec7d386b604195e4c92549a1ad7155ac54d8282531bbb58
@@ -0,0 +1,85 @@
1
+ # This workflow uses actions that are not certified by GitHub.
2
+ # They are provided by a third-party and are governed by
3
+ # separate terms of service, privacy policy, and support
4
+ # documentation.
5
+ # This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
6
+ # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
7
+
8
+ name: Build
9
+
10
+ on: [push, pull_request]
11
+
12
+ jobs:
13
+ test:
14
+ runs-on: ubuntu-latest
15
+ strategy:
16
+ matrix:
17
+ ruby: ['2.5', '2.6', '2.7', '3.0', '3.1']
18
+ activerecord: ['5.2', '6.0', '6.1', '7.0']
19
+ plugin: ['', '_with_request_store']
20
+ experimental: [false]
21
+ exclude:
22
+ - ruby: '2.5'
23
+ activerecord: '7.0'
24
+ plugin: ''
25
+ experimental: false
26
+ - ruby: '2.5'
27
+ activerecord: '7.0'
28
+ plugin: '_with_request_store'
29
+ experimental: false
30
+ - ruby: '2.6'
31
+ activerecord: '7.0'
32
+ plugin: ''
33
+ experimental: false
34
+ - ruby: '2.6'
35
+ activerecord: '7.0'
36
+ plugin: '_with_request_store'
37
+ experimental: false
38
+ - ruby: '2.7'
39
+ activerecord: '5.2'
40
+ plugin: ''
41
+ experimental: false
42
+ - ruby: '2.7'
43
+ activerecord: '5.2'
44
+ plugin: '_with_request_store'
45
+ experimental: false
46
+ - ruby: '3.0'
47
+ activerecord: '5.2'
48
+ plugin: ''
49
+ experimental: false
50
+ - ruby: '3.0'
51
+ activerecord: '5.2'
52
+ plugin: '_with_request_store'
53
+ experimental: false
54
+ - ruby: '3.1'
55
+ activerecord: '5.2'
56
+ plugin: ''
57
+ experimental: false
58
+ - ruby: '3.1'
59
+ activerecord: '5.2'
60
+ plugin: '_with_request_store'
61
+ experimental: false
62
+ include:
63
+ - ruby: '2.7'
64
+ activerecord: '5.2'
65
+ plugin: ''
66
+ experimental: true
67
+ - ruby: '2.7'
68
+ activerecord: '5.2'
69
+ plugin: '_with_request_store'
70
+ experimental: true
71
+ continue-on-error: ${{ matrix.experimental }}
72
+ env:
73
+ APPRAISAL: activerecord_${{ matrix.activerecord }}${{ matrix.plugin }}
74
+ steps:
75
+ - uses: actions/checkout@v2
76
+ - name: Set up Ruby
77
+ uses: ruby/setup-ruby@v1
78
+ with:
79
+ ruby-version: ${{ matrix.ruby }}
80
+ - name: Install dependencies
81
+ run: |
82
+ bundle install
83
+ bundle exec appraisal $APPRAISAL bundle install
84
+ - name: Run tests
85
+ run: bundle exec appraisal $APPRAISAL rake
data/.gitignore CHANGED
@@ -4,6 +4,7 @@
4
4
  /Gemfile.lock
5
5
  /coverage/
6
6
  /doc/
7
+ /gemfiles/.bundle/
7
8
  /gemfiles/*.gemfile.lock
8
9
  /pkg/
9
10
  /spec/reports/
data/.rubocop.yml CHANGED
@@ -1,5 +1,8 @@
1
1
  AllCops:
2
- TargetRubyVersion: 2.4
2
+ Exclude:
3
+ - gemfiles/**/*
4
+ TargetRubyVersion: 2.5
5
+ NewCops: enable
3
6
 
4
7
  Style/AsciiComments:
5
8
  Enabled: false
@@ -21,6 +24,10 @@ Layout/EndOfLine:
21
24
  Layout/LineLength:
22
25
  Max: 128
23
26
 
27
+ Metrics/AbcSize:
28
+ Exclude:
29
+ - spec/**/*
30
+
24
31
  Metrics/BlockLength:
25
32
  Exclude:
26
33
  - spec/**/*
data/Appraisals ADDED
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ appraise "activerecord_5.2" do
4
+ gem "activerecord", "~> 5.2.0"
5
+ end
6
+
7
+ appraise "activerecord_5.2_with_request_store" do
8
+ gem "activerecord", "~> 5.2.0"
9
+ gem "request_store"
10
+ end
11
+
12
+ appraise "activerecord_6.0" do
13
+ gem "activerecord", "~> 6.0.0"
14
+ gem "sqlite3", "~> 1.4"
15
+ end
16
+
17
+ appraise "activerecord_6.0_with_request_store" do
18
+ gem "activerecord", "~> 6.0.0"
19
+ gem "request_store"
20
+ gem "sqlite3", "~> 1.4"
21
+ end
22
+
23
+ appraise "activerecord_6.1" do
24
+ gem "activerecord", "~> 6.1.0"
25
+ gem "sqlite3", "~> 1.4"
26
+ end
27
+
28
+ appraise "activerecord_6.1_with_request_store" do
29
+ gem "activerecord", "~> 6.1.0"
30
+ gem "request_store"
31
+ gem "sqlite3", "~> 1.4"
32
+ end
33
+
34
+ appraise "activerecord_7.0" do
35
+ gem "activerecord", "~> 7.0.1"
36
+ gem "sqlite3", "~> 1.4"
37
+ end
38
+
39
+ appraise "activerecord_7.0_with_request_store" do
40
+ gem "activerecord", "~> 7.0.1"
41
+ gem "request_store"
42
+ gem "sqlite3", "~> 1.4"
43
+ end
data/CHANGELOG.md CHANGED
@@ -1,11 +1,69 @@
1
1
  ## Unreleased
2
2
 
3
3
 
4
+ ## 1.3.0 (2022-06-01)
5
+
6
+ ### Changes
7
+
8
+ * Support discard gem for soft deletes
9
+ + [PR#31](https://github.com/yujideveloper/operator_recordable/pull/31)
10
+ * Get rid of needless guard clauses for ActiveSupport 5.1 and older
11
+ + [PR#32](https://github.com/yujideveloper/operator_recordable/pull/32)
12
+
13
+ ### Misc
14
+
15
+ * Fix RuboCop offenses
16
+ + [PR#33](https://github.com/yujideveloper/operator_recordable/pull/33)
17
+
18
+
19
+ ## 1.2.0 (2022-04-26)
20
+
21
+ ### Changes
22
+
23
+ * Make associations optional
24
+ + [PR#28](https://github.com/yujideveloper/operator_recordable/pull/28)
25
+
26
+ ### Misc
27
+
28
+ * CI against for Rails 7.0 running on Ruby 3.1
29
+ + [PR#26](https://github.com/yujideveloper/operator_recordable/pull/26)
30
+ * Call `super` in `OperatorRecordable::Recorder#initialize`
31
+ + [PR#30](https://github.com/yujideveloper/operator_recordable/pull/30)
32
+
33
+
34
+ ## 1.1.0 (2022-01-07)
35
+
36
+ ### Changes
37
+
38
+ * Add gem metadata
39
+ + [PR#24](https://github.com/yujideveloper/operator_recordable/pull/24)
40
+ * Drop Ruby 2.4 support
41
+ + [PR#25](https://github.com/yujideveloper/operator_recordable/pull/25)
42
+ * Drop ActiveRecord 5.0 and 5.1 support
43
+ + [PR#25](https://github.com/yujideveloper/operator_recordable/pull/25)
44
+
45
+ ### Misc
46
+
47
+ * Introduce Appraisal
48
+ + [PR#19](https://github.com/yujideveloper/operator_recordable/pull/19)
49
+ * CI against for ActiveRecord 6.1 and 7.0
50
+ + [PR#19](https://github.com/yujideveloper/operator_recordable/pull/19)
51
+ + [PR#22](https://github.com/yujideveloper/operator_recordable/pull/22)
52
+ * Use GitHub Actions and stop using Travis CI
53
+ + [PR#20](https://github.com/yujideveloper/operator_recordable/pull/20)
54
+ * CI against for Ruby 3.0 and 3.1
55
+ + [PR#23](https://github.com/yujideveloper/operator_recordable/pull/23)
56
+ + [PR#25](https://github.com/yujideveloper/operator_recordable/pull/25)
57
+ * Require MFA to release gem
58
+ + [PR#24](https://github.com/yujideveloper/operator_recordable/pull/24)
59
+
60
+
4
61
  ## 1.0.0 (2020-10-16)
5
62
 
6
63
  ### Changes
7
64
 
8
65
  * Support Ruby 2.7
66
+ + [PR#14](https://github.com/yujideveloper/operator_recordable/pull/14)
9
67
 
10
68
 
11
69
  ## 0.4.0 (2019-08-22)
@@ -13,10 +71,12 @@
13
71
  ### Changes
14
72
 
15
73
  * Support ActiveRecord 6.0.0
74
+ + [PR#13](https://github.com/yujideveloper/operator_recordable/pull/13)
16
75
 
17
76
  ### Misc
18
77
 
19
78
  * Improve rspec and CI
79
+ + [PR#11](https://github.com/yujideveloper/operator_recordable/pull/11)
20
80
 
21
81
 
22
82
  ## 0.3.0 (2018-10-05)
@@ -24,6 +84,7 @@
24
84
  ### Breaking changes
25
85
 
26
86
  * Change mixin module from `OperatorRecordable` to `OperatorRecordable::Extension`
87
+ + [PR#5](https://github.com/yujideveloper/operator_recordable/pull/5)
27
88
 
28
89
 
29
90
  ## 0.2.0 (2018-09-27)
@@ -31,11 +92,14 @@
31
92
  ### Changes
32
93
 
33
94
  * Add association name options
95
+ + [PR#2](https://github.com/yujideveloper/operator_recordable/pull/2)
34
96
  * Modify not to define unnecessary class methods for ActiveRecord model
97
+ + [PR#3](https://github.com/yujideveloper/operator_recordable/pull/3)
35
98
 
36
99
  ### Misc
37
100
 
38
101
  * Remove unecessary `require`
102
+ + [PR#4](https://github.com/yujideveloper/operator_recordable/pull/4)
39
103
 
40
104
 
41
105
  ## 0.1.1 (2018-09-19)
@@ -43,6 +107,7 @@
43
107
  ### Misc
44
108
 
45
109
  * Refactor internal structures
110
+ + [PR#1](https://github.com/yujideveloper/operator_recordable/pull/1)
46
111
 
47
112
 
48
113
  ## 0.1.0 (2018-09-14)
data/Gemfile CHANGED
@@ -6,7 +6,3 @@ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
6
6
 
7
7
  # Specify your gem's dependencies in operator_recordable.gemspec
8
8
  gemspec
9
-
10
- gem "activerecord", ENV.fetch("AR_VERSION", "~> 6.0.0")
11
- gem "request_store" unless ENV["WITHOUT_REQUEST_STORE"]
12
- gem "sqlite3", ENV.fetch("SQLITE3_VERSION", ">= 1.4.0")
data/README.md CHANGED
@@ -1,12 +1,14 @@
1
1
  # OperatorRecordable
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/operator_recordable.svg)](https://badge.fury.io/rb/operator_recordable)
4
- [![Build Status](https://travis-ci.org/yujideveloper/operator_recordable.svg?branch=master)](https://travis-ci.org/yujideveloper/operator_recordable)
4
+ [![Build](https://github.com/yujideveloper/operator_recordable/workflows/Build/badge.svg)](https://github.com/yujideveloper/operator_recordable/actions?query=workflow%3ABuild)
5
5
  [![Maintainability](https://api.codeclimate.com/v1/badges/aaa0fcd567da9232a847/maintainability)](https://codeclimate.com/github/yujideveloper/operator_recordable/maintainability)
6
6
 
7
7
  OperatorRecordable is a Rails plugin gem that makes your ActiveRecord models to be saved or logically deleted with automatically set `created_by`, `updated_by`, and `deleted_by`.
8
8
  Also it makes `creator`, `updater`, and `deleter` `belongs_to` association if a class has `created_by`, `updated_by`, or `deleted_by`.
9
9
 
10
+ It also supports `discarded_by` column if [discard gem](https://github.com/jhawthorn/discard) is available.
11
+
10
12
  This gem is inspired by [RecordWithOperator](https://github.com/nay/record_with_operator).
11
13
 
12
14
  ## Installation
@@ -19,7 +21,7 @@ gem 'operator_recordable'
19
21
 
20
22
  And then execute:
21
23
 
22
- $ bundle
24
+ $ bundle install
23
25
 
24
26
  Or install it yourself as:
25
27
 
@@ -38,9 +40,11 @@ OperatorRecordable.config = {
38
40
  creator_column_name: "created_by",
39
41
  updater_column_name: "updated_by",
40
42
  deleter_column_name: "deleted_by",
43
+ discarder_column_name: "discarded_by",
41
44
  creator_association_name: "creator",
42
45
  updater_association_name: "updater",
43
46
  deleter_association_name: "deleter",
47
+ discarder_association_name: "discarder",
44
48
  operator_association_options: {},
45
49
  operator_association_scope: nil,
46
50
  store: :thread_store
@@ -55,10 +59,12 @@ OperatorRecordable.config = {
55
59
  | `creator_column_name` | String | column name of creator. | `"created_by"` |
56
60
  | `updater_column_name` | String | column name of updater. | `"updated_by"` |
57
61
  | `deleter_column_name` | String | column name of deleter. | `"deleted_by"` |
62
+ | `discarder_column_name` | String | column name of discarder. | `"discarded_by"` |
58
63
  | `creator_association_name` | String | association name of creator. | `"creator"` |
59
64
  | `updater_association_name` | String | association name of updater. | `"updater"` |
60
65
  | `deleter_association_name` | String | association name of deleter. | `"deleter"` |
61
- | `operator_association_options` | Hash | options of operator associations. e.g. `{ optional: true }` | `{}` |
66
+ | `discarder_association_name` | String | association name of discarder. | `"discarder"` |
67
+ | `operator_association_options` | Hash | options of operator associations. e.g. `{ touch: true }` | `{}` |
62
68
  | `operator_association_scope` | Proc | The scope of operator associations. e.g. `-> { with_deleted }` | `nil` |
63
69
  | `store` | Enum | operator store. any value of `:thread_store`, `:request_store` or `:current_attributes_store` | `:thread_store` |
64
70
 
@@ -99,7 +105,7 @@ This is default store.
99
105
  This store is implemented by using [RequestStore gem](https://github.com/steveklabnik/request_store).
100
106
  So, this requires RequestStore gem.
101
107
 
102
- RequestStore must be required before OperatorRecordable.
108
+ RequestStore must be loaded before OperatorRecordable.
103
109
 
104
110
  ``` ruby
105
111
  gem "request_store"
@@ -112,15 +118,14 @@ require "request_store"
112
118
  require "operator_recordable"
113
119
  ```
114
120
 
115
- Otherwise, you need to require it yourself.
121
+ Otherwise, you need to load it yourself.
116
122
  ``` ruby
117
123
  require "operator_recordable/store/request_store"
118
124
  ```
119
125
 
120
126
  #### `:current_attributes_store`
121
127
 
122
- This store is implemented by using [`ActiveSupport::CurrentAttributes`](https://api.rubyonrails.org/v5.2.0/classes/ActiveSupport/CurrentAttributes.html).
123
- So, this requires ActiveSupport 5.2 or later.
128
+ This store is implemented by using [`ActiveSupport::CurrentAttributes`](https://api.rubyonrails.org/v5.2.0/classes/ActiveSupport/CurrentAttributes.html).
124
129
 
125
130
 
126
131
  ## Development
@@ -1,6 +1,6 @@
1
- # frozen_string_literal: true
1
+ # This file was generated by Appraisal
2
2
 
3
- source "https://rubygems.org/"
3
+ source "https://rubygems.org"
4
4
 
5
5
  gem "activerecord", "~> 5.2.0"
6
6
 
@@ -1,6 +1,6 @@
1
- # frozen_string_literal: true
1
+ # This file was generated by Appraisal
2
2
 
3
- source "https://rubygems.org/"
3
+ source "https://rubygems.org"
4
4
 
5
5
  gem "activerecord", "~> 5.2.0"
6
6
  gem "request_store"
@@ -1,6 +1,6 @@
1
- # frozen_string_literal: true
1
+ # This file was generated by Appraisal
2
2
 
3
- source "https://rubygems.org/"
3
+ source "https://rubygems.org"
4
4
 
5
5
  gem "activerecord", "~> 6.0.0"
6
6
  gem "sqlite3", "~> 1.4"
@@ -1,6 +1,6 @@
1
- # frozen_string_literal: true
1
+ # This file was generated by Appraisal
2
2
 
3
- source "https://rubygems.org/"
3
+ source "https://rubygems.org"
4
4
 
5
5
  gem "activerecord", "~> 6.0.0"
6
6
  gem "request_store"
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "~> 6.1.0"
6
+ gem "sqlite3", "~> 1.4"
7
+
8
+ gemspec path: "../"
@@ -0,0 +1,9 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "~> 6.1.0"
6
+ gem "request_store"
7
+ gem "sqlite3", "~> 1.4"
8
+
9
+ gemspec path: "../"
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "~> 7.0.1"
6
+ gem "sqlite3", "~> 1.4"
7
+
8
+ gemspec path: "../"
@@ -0,0 +1,9 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "~> 7.0.1"
6
+ gem "request_store"
7
+ gem "sqlite3", "~> 1.4"
8
+
9
+ gemspec path: "../"
@@ -11,8 +11,8 @@ module OperatorRecordable
11
11
  @store = initialize_store
12
12
  end
13
13
 
14
- %i[operator_class_name creator_column_name updater_column_name deleter_column_name
15
- creator_association_name updater_association_name deleter_association_name
14
+ %i[operator_class_name creator_column_name updater_column_name deleter_column_name discarder_column_name
15
+ creator_association_name updater_association_name deleter_association_name discarder_association_name
16
16
  operator_association_options operator_association_scope].each do |name|
17
17
  define_method name do
18
18
  config[name]
@@ -37,9 +37,11 @@ module OperatorRecordable
37
37
  creator_column_name: "created_by",
38
38
  updater_column_name: "updated_by",
39
39
  deleter_column_name: "deleted_by",
40
+ discarder_column_name: "discarded_by",
40
41
  creator_association_name: "creator",
41
42
  updater_association_name: "updater",
42
43
  deleter_association_name: "deleter",
44
+ discarder_association_name: "discarder",
43
45
  operator_association_options: {},
44
46
  operator_association_scope: nil,
45
47
  store: :thread_store
@@ -53,7 +55,7 @@ module OperatorRecordable
53
55
  end
54
56
 
55
57
  class Model
56
- VALID_ACTIONS = %i[create update destroy].freeze
58
+ VALID_ACTIONS = %i[create update destroy discard].freeze
57
59
 
58
60
  def initialize(actions)
59
61
  @actions = actions
@@ -72,6 +74,10 @@ module OperatorRecordable
72
74
  actions.include? :destroy
73
75
  end
74
76
 
77
+ def record_discarder?
78
+ actions.include? :discard
79
+ end
80
+
75
81
  private
76
82
 
77
83
  attr_reader :actions
@@ -5,6 +5,7 @@ require "operator_recordable/configuration"
5
5
  module OperatorRecordable
6
6
  class Recorder < ::Module
7
7
  def initialize(config)
8
+ super()
8
9
  define_activate_method(config)
9
10
  end
10
11
 
@@ -30,6 +31,11 @@ module OperatorRecordable
30
31
  m.__send__(:run_deleter_dsl, self, config)
31
32
  m.__send__(:define_deleter_instance_methods, self, config)
32
33
  end
34
+
35
+ if c.record_discarder?
36
+ m.__send__(:run_discarder_dsl, self, config)
37
+ m.__send__(:define_discarder_instance_methods, self, config)
38
+ end
33
39
  end
34
40
  end
35
41
 
@@ -48,46 +54,67 @@ module OperatorRecordable
48
54
  run_add_association_dsl(:deleter, klass, config)
49
55
  end
50
56
 
57
+ def run_discarder_dsl(klass, config)
58
+ klass.before_discard :"assign_#{config.discarder_association_name}"
59
+ run_add_association_dsl(:discarder, klass, config)
60
+ end
61
+
51
62
  def run_add_association_dsl(type, klass, config)
52
63
  klass.belongs_to config.association_name_for(type).to_sym,
53
64
  config.operator_association_scope,
54
65
  **{ foreign_key: config.column_name_for(type),
55
- class_name: config.operator_class_name }.merge(config.operator_association_options)
66
+ class_name: config.operator_class_name,
67
+ optional: true }.merge(config.operator_association_options)
56
68
  end
57
69
 
58
70
  def define_creator_instance_methods(klass, config)
59
71
  klass.class_eval <<~END_OF_DEF, __FILE__, __LINE__ + 1
60
- private def assign_#{config.creator_association_name}
61
- return unless (op = OperatorRecordable.operator)
62
-
63
- self.#{config.creator_column_name} = op.id
64
- end
72
+ private def assign_#{config.creator_association_name} # private def assign_creator
73
+ return unless (op = OperatorRecordable.operator) # return unless (op = OperatorRecordable.operator)
74
+ #
75
+ self.#{config.creator_column_name} = op.id # self.created_by = op.id
76
+ end # end
65
77
  END_OF_DEF
66
78
  end
67
79
 
68
80
  def define_updater_instance_methods(klass, config)
69
81
  klass.class_eval <<~END_OF_DEF, __FILE__, __LINE__ + 1
70
- private def assign_#{config.updater_association_name}
71
- return if !self.new_record? && !self.changed?
72
- return unless (op = OperatorRecordable.operator)
73
-
74
- self.#{config.updater_column_name} = op.id
75
- end
82
+ private def assign_#{config.updater_association_name} # private def assign_updater
83
+ return if !self.new_record? && !self.changed? # return if !self.new_record? && !self.changed?
84
+ return unless (op = OperatorRecordable.operator) # return unless (op = OperatorRecordable.operator)
85
+ #
86
+ self.#{config.updater_column_name} = op.id # self.updated_by = op.id
87
+ end # end
76
88
  END_OF_DEF
77
89
  end
78
90
 
79
91
  def define_deleter_instance_methods(klass, config)
80
92
  klass.class_eval <<~END_OF_DEF, __FILE__, __LINE__ + 1
81
- private def assign_#{config.deleter_association_name}
82
- return if self.frozen?
83
- return unless (op = OperatorRecordable.operator)
84
-
85
- self
86
- .class
87
- .where(self.class.primary_key => id)
88
- .update_all('#{config.deleter_column_name}' => op.id)
89
- self.#{config.deleter_column_name} = op.id
90
- end
93
+ private def assign_#{config.deleter_association_name} # private def assign_deleter
94
+ return if self.frozen? # return if self.frozen?
95
+ return unless (op = OperatorRecordable.operator) # return unless (op = OperatorRecordable.operator)
96
+ #
97
+ self # self
98
+ .class # .class
99
+ .where(self.class.primary_key => id) # .where(self.class.primary_key => id)
100
+ .update_all('#{config.deleter_column_name}' => op.id) # .update_all('deleted_by' => op.id)
101
+ self.#{config.deleter_column_name} = op.id # self.deleted_by = op.id
102
+ end # end
103
+ END_OF_DEF
104
+ end
105
+
106
+ def define_discarder_instance_methods(klass, config)
107
+ klass.class_eval <<~END_OF_DEF, __FILE__, __LINE__ + 1
108
+ private def assign_#{config.discarder_association_name} # private def assign_discarder
109
+ return if self.frozen? # return if self.frozen?
110
+ return unless (op = OperatorRecordable.operator) # return unless (op = OperatorRecordable.operator)
111
+ #
112
+ self # self
113
+ .class # .class
114
+ .where(self.class.primary_key => id) # .where(self.class.primary_key => id)
115
+ .update_all('#{config.discarder_column_name}' => op.id) # .update_all('discarded_by' => op.id)
116
+ self.#{config.discarder_column_name} = op.id # self.discarded_by = op.id
117
+ end # end
91
118
  END_OF_DEF
92
119
  end
93
120
  end
@@ -15,4 +15,4 @@ end
15
15
 
16
16
  require "operator_recordable/store/thread_store"
17
17
  require "operator_recordable/store/request_store" if defined? ::RequestStore
18
- require "operator_recordable/store/current_attributes_store" if defined? ::ActiveSupport::CurrentAttributes
18
+ require "operator_recordable/store/current_attributes_store"
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OperatorRecordable
4
- VERSION = "1.0.0"
4
+ VERSION = "1.3.0"
5
5
  end
@@ -24,20 +24,32 @@ Gem::Specification.new do |spec| # rubocop:disable Metrics/BlockLength
24
24
  spec.homepage = "https://github.com/yujideveloper/operator_recordable"
25
25
  spec.license = "MIT"
26
26
 
27
+ spec.metadata["allowed_push_host"] = "https://rubygems.org"
28
+
29
+ spec.metadata["homepage_uri"] = spec.homepage
30
+ spec.metadata["source_code_uri"] = spec.homepage
31
+ spec.metadata["changelog_uri"] = "https://github.com/yujideveloper/operator_recordable/tree/master/CHANGELOG.md"
32
+
33
+ spec.metadata["rubygems_mfa_required"] = "true"
34
+
27
35
  # Specify which files should be added to the gem when it is released.
28
36
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
29
- spec.files = Dir.chdir(__dir__) do
37
+ spec.files = Dir.chdir(__dir__) do
30
38
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
31
39
  end
32
40
  spec.bindir = "exe"
33
41
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
34
42
  spec.require_paths = ["lib"]
35
43
 
36
- spec.add_dependency "activerecord", ">= 5.0"
44
+ spec.required_ruby_version = ">= 2.5"
45
+
46
+ spec.add_dependency "activerecord", ">= 5.2"
47
+ spec.add_development_dependency "appraisal", ">= 2.3.0"
37
48
  spec.add_development_dependency "bundler", ">= 1.16"
49
+ spec.add_development_dependency "discard", ">= 1.2"
38
50
  spec.add_development_dependency "pry", ">= 0.10.0"
39
51
  spec.add_development_dependency "rake", ">= 10.0"
40
52
  spec.add_development_dependency "rspec", "~> 3.7"
41
- spec.add_development_dependency "rubocop", ">= 0.78.0"
53
+ spec.add_development_dependency "rubocop", ">= 1.13.0"
42
54
  spec.add_development_dependency "sqlite3", ">= 1.3.13"
43
55
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: operator_recordable
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuji Hanamura
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-10-16 00:00:00.000000000 Z
11
+ date: 2022-06-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -16,14 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '5.0'
19
+ version: '5.2'
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: '5.0'
26
+ version: '5.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: appraisal
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 2.3.0
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 2.3.0
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -38,6 +52,20 @@ dependencies:
38
52
  - - ">="
39
53
  - !ruby/object:Gem::Version
40
54
  version: '1.16'
55
+ - !ruby/object:Gem::Dependency
56
+ name: discard
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '1.2'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '1.2'
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: pry
43
71
  requirement: !ruby/object:Gem::Requirement
@@ -86,14 +114,14 @@ dependencies:
86
114
  requirements:
87
115
  - - ">="
88
116
  - !ruby/object:Gem::Version
89
- version: 0.78.0
117
+ version: 1.13.0
90
118
  type: :development
91
119
  prerelease: false
92
120
  version_requirements: !ruby/object:Gem::Requirement
93
121
  requirements:
94
122
  - - ">="
95
123
  - !ruby/object:Gem::Version
96
- version: 0.78.0
124
+ version: 1.13.0
97
125
  - !ruby/object:Gem::Dependency
98
126
  name: sqlite3
99
127
  requirement: !ruby/object:Gem::Requirement
@@ -118,10 +146,11 @@ executables: []
118
146
  extensions: []
119
147
  extra_rdoc_files: []
120
148
  files:
149
+ - ".github/workflows/ruby.yml"
121
150
  - ".gitignore"
122
151
  - ".rspec"
123
152
  - ".rubocop.yml"
124
- - ".travis.yml"
153
+ - Appraisals
125
154
  - CHANGELOG.md
126
155
  - Gemfile
127
156
  - LICENSE.txt
@@ -129,14 +158,14 @@ files:
129
158
  - Rakefile
130
159
  - bin/console
131
160
  - bin/setup
132
- - gemfiles/activerecord_5.0.gemfile
133
- - gemfiles/activerecord_5.0_with_request_store.gemfile
134
- - gemfiles/activerecord_5.1.gemfile
135
- - gemfiles/activerecord_5.1_with_request_store.gemfile
136
161
  - gemfiles/activerecord_5.2.gemfile
137
162
  - gemfiles/activerecord_5.2_with_request_store.gemfile
138
163
  - gemfiles/activerecord_6.0.gemfile
139
164
  - gemfiles/activerecord_6.0_with_request_store.gemfile
165
+ - gemfiles/activerecord_6.1.gemfile
166
+ - gemfiles/activerecord_6.1_with_request_store.gemfile
167
+ - gemfiles/activerecord_7.0.gemfile
168
+ - gemfiles/activerecord_7.0_with_request_store.gemfile
140
169
  - lib/operator_recordable.rb
141
170
  - lib/operator_recordable/configuration.rb
142
171
  - lib/operator_recordable/extension.rb
@@ -150,7 +179,12 @@ files:
150
179
  homepage: https://github.com/yujideveloper/operator_recordable
151
180
  licenses:
152
181
  - MIT
153
- metadata: {}
182
+ metadata:
183
+ allowed_push_host: https://rubygems.org
184
+ homepage_uri: https://github.com/yujideveloper/operator_recordable
185
+ source_code_uri: https://github.com/yujideveloper/operator_recordable
186
+ changelog_uri: https://github.com/yujideveloper/operator_recordable/tree/master/CHANGELOG.md
187
+ rubygems_mfa_required: 'true'
154
188
  post_install_message:
155
189
  rdoc_options: []
156
190
  require_paths:
@@ -159,14 +193,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
159
193
  requirements:
160
194
  - - ">="
161
195
  - !ruby/object:Gem::Version
162
- version: '0'
196
+ version: '2.5'
163
197
  required_rubygems_version: !ruby/object:Gem::Requirement
164
198
  requirements:
165
199
  - - ">="
166
200
  - !ruby/object:Gem::Version
167
201
  version: '0'
168
202
  requirements: []
169
- rubygems_version: 3.1.4
203
+ rubygems_version: 3.1.6
170
204
  signing_key:
171
205
  specification_version: 4
172
206
  summary: OperatorRecordable is a Rails plugin to set created_by, updated_by, and deleted_by
data/.travis.yml DELETED
@@ -1,37 +0,0 @@
1
- ---
2
- sudo: false
3
- language: ruby
4
- cache: bundler
5
- rvm:
6
- - 2.4
7
- - 2.5
8
- - 2.6
9
- - 2.7
10
- gemfile:
11
- - gemfiles/activerecord_5.0.gemfile
12
- - gemfiles/activerecord_5.0_with_request_store.gemfile
13
- - gemfiles/activerecord_5.1.gemfile
14
- - gemfiles/activerecord_5.1_with_request_store.gemfile
15
- - gemfiles/activerecord_5.2.gemfile
16
- - gemfiles/activerecord_5.2_with_request_store.gemfile
17
- - gemfiles/activerecord_6.0.gemfile
18
- - gemfiles/activerecord_6.0_with_request_store.gemfile
19
- matrix:
20
- exclude:
21
- - rvm: 2.4
22
- gemfile: gemfiles/activerecord_6.0.gemfile
23
- - rvm: 2.4
24
- gemfile: gemfiles/activerecord_6.0_with_request_store.gemfile
25
- allow_failures:
26
- - rvm: 2.7
27
- gemfile: gemfiles/activerecord_5.0.gemfile
28
- - rvm: 2.7
29
- gemfile: gemfiles/activerecord_5.0_with_request_store.gemfile
30
- - rvm: 2.7
31
- gemfile: gemfiles/activerecord_5.1.gemfile
32
- - rvm: 2.7
33
- gemfile: gemfiles/activerecord_5.1_with_request_store.gemfile
34
- - rvm: 2.7
35
- gemfile: gemfiles/activerecord_5.2.gemfile
36
- - rvm: 2.7
37
- gemfile: gemfiles/activerecord_5.2_with_request_store.gemfile
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source "https://rubygems.org/"
4
-
5
- gem "activerecord", "~> 5.0.0"
6
- gem "sqlite3", "~> 1.3.13"
7
-
8
- gemspec path: "../"
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source "https://rubygems.org/"
4
-
5
- gem "activerecord", "~> 5.0.0"
6
- gem "request_store"
7
- gem "sqlite3", "~> 1.3.13"
8
-
9
- gemspec path: "../"
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source "https://rubygems.org/"
4
-
5
- gem "activerecord", "~> 5.1.0"
6
-
7
- gemspec path: "../"
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source "https://rubygems.org/"
4
-
5
- gem "activerecord", "~> 5.1.0"
6
- gem "request_store"
7
-
8
- gemspec path: "../"