logga 1.4.0 → 1.6.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
- SHA1:
3
- metadata.gz: c9434272e2e6abace03aeda69fbc33cb7ffa14d1
4
- data.tar.gz: 19a90c76932c845daf8a9001cbcc52682a7c6dfc
2
+ SHA256:
3
+ metadata.gz: a10fef3d96c1c0ff09efc4f3043bf3751453b05ac86202969707a663494717ec
4
+ data.tar.gz: 0a08c2788adf74f258cb058902206181e03680caa0f7149b5a7291612173dfba
5
5
  SHA512:
6
- metadata.gz: 852eb6e83549f5894dad56a89b4672697bcdf8ea7523f76feb256b18304109c73553773723856e97f31a1cfb2fca65d1ce2a71ea0c1de55832913229f0c12102
7
- data.tar.gz: 5e63e9aab7812003e6e8bd7885af6064ee4d81dcbba39a12db4b6d191022a7b30de3929faf7dbe17823318fea12934137a52c9a6bdc69cfdb012a188c98bb733
6
+ metadata.gz: cc8887eb3f511ee2d500e4ee4a7ede79acc3b32d410d67f2e06ac37ebd098399188bc58fd442fa6c5bb59b27b1ac99b7289c3a378e2592732be5772cc396cd1b
7
+ data.tar.gz: e77078b35294a50d06fb58e8587cd126605029f3a0459f541440835c53984e985c3b83b43ce06056e99d1f730b8e7e2750f6f42af8cd4a1709a82747891488b4
data/.gitignore CHANGED
@@ -70,7 +70,6 @@ nbproject
70
70
  *.rbc
71
71
 
72
72
  # RVM / rbenv
73
- .ruby-version
74
73
  .ruby-gemset
75
74
  .rvmrc
76
75
 
data/.rubocop.yml ADDED
@@ -0,0 +1,3 @@
1
+ inherit_gem:
2
+ boxt_ruby_style_guide:
3
+ - default.yml
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ ruby-2.5.3
data/.travis.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  sudo: false
2
2
  language: ruby
3
3
  rvm:
4
- - 2.3.4
5
- before_install: gem install bundler -v 1.15.1
4
+ - 2.5.3
5
+ before_install: gem install bundler -v 1.17.3
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source "https://rubygems.org"
2
4
 
3
5
  # Specify your gem's dependencies in logga.gemspec
data/README.md CHANGED
@@ -1,8 +1,6 @@
1
1
  # Logga
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/logga`. To experiment with that code, run `bin/console` for an interactive prompt.
4
-
5
- TODO: Delete this and the text above, and describe your gem
3
+ Provides attribute logging functionality to ActiveRecord objects.
6
4
 
7
5
  ## Installation
8
6
 
@@ -31,19 +29,26 @@ end
31
29
 
32
30
  ```
33
31
 
34
- so that new LogEntry records attached to a given Order instance will be created whenever a new one is created or
32
+ So that new LogEntry records attached to a given Order instance will be created whenever a new one is created or
35
33
  modified.
36
34
 
37
35
  ## Development
38
36
 
39
37
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
40
38
 
41
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then `git push gemfury master` where gemfury remote is `https://[YOUR GEM FURY USER NAME]git.fury.io/boxt/logga_engine.git`.
39
+ To install this gem onto your local machine, run `bundle exec rake install`.
40
+
41
+ To release a new version, update the version number in `version.rb`.
42
42
 
43
43
  ## Contributing
44
44
 
45
- Bug reports and pull requests are welcome on GitHub at https://github.com/ltello/logga.
45
+ Bug reports and pull requests are welcome on GitHub at https://github.com/boxt/logga.
46
46
 
47
47
  ## License
48
48
 
49
49
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
50
+
51
+ ## TODOs
52
+
53
+ * Write some tests
54
+ * Improve the documentation
data/lib/logga.rb CHANGED
@@ -1,14 +1,13 @@
1
- require 'active_support'
2
- require 'active_support/core_ext'
3
- require 'active_support/concern'
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support"
4
+ require "active_support/core_ext"
5
+ require "active_support/concern"
4
6
  require_relative "logga/version"
5
7
  require_relative "logga/active_record"
6
8
 
7
-
8
9
  module Logga
9
-
10
10
  ActiveSupport.on_load(:active_record) do
11
11
  include Logga::ActiveRecord
12
12
  end
13
-
14
13
  end
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Logga
2
4
  module ActiveRecord
3
5
  extend ActiveSupport::Concern
4
6
 
5
- EXCLUDED_KEYS = [:id, :created_at, :deleted_at, :initial, :updated_at, :log, :sent_after_sales_emails]
6
- EXCLUDED_KEYS_SUFFIXES = [:_id, :_filenames]
7
+ EXCLUDED_KEYS = %i[id created_at deleted_at initial updated_at log sent_after_sales_emails].freeze
8
+ EXCLUDED_KEYS_SUFFIXES = %i[_id _filenames].freeze
7
9
 
8
10
  included do
9
11
  class_attribute :log_fields, instance_writer: false
@@ -18,37 +20,43 @@ module Logga
18
20
  after_destroy :log_model_deletion if actions.include?(:delete)
19
21
  after_update :log_model_changes if actions.include?(:update)
20
22
  define_method(:log_receiver) { to == :self ? self : send(to) }
23
+
21
24
  self.log_fields = fields
22
25
  self.excluded_fields = Array(exclude_fields)
23
26
  end
24
27
  end
25
28
 
29
+ def log_field_changes(changes)
30
+ return if changes.blank?
31
+
32
+ body = field_changes_to_message(changes)
33
+ create_log_entry(author_data.merge(body: body)) if body.present?
34
+ end
35
+
26
36
  def log_model_creation
37
+ return if should_not_log?
38
+
27
39
  body_generator = ->(record) { default_creation_log_body(record) }
28
40
  body = log_fields.fetch(:created_at, body_generator).call(self)
29
- log_receiver&.log_entries&.create(author_data.merge(body: body, created_at: creation_at))
41
+ create_log_entry(author_data.merge(body: body, created_at: creation_at))
30
42
  end
31
43
 
32
44
  def log_model_deletion
33
- body_generator = ->(record) {default_deletion_log_body(record)}
45
+ return if should_not_log?
46
+
47
+ body_generator = ->(record) { default_deletion_log_body(record) }
34
48
  body = log_fields.fetch(:deleted_at, body_generator).call(self)
35
- log_receiver&.log_entries&.create(author_data.merge(body: body))
49
+ create_log_entry(author_data.merge(body: body))
36
50
  end
37
51
 
38
52
  def log_model_changes
39
- field_changes = previous_changes.reject do |k, _|
40
- EXCLUDED_KEYS.include?(k.to_sym) ||
41
- (!log_fields.include?(k.to_sym) &&
42
- (excluded_fields.include?(k.to_sym) ||
43
- EXCLUDED_KEYS_SUFFIXES.any? { |suffix| k.to_s.end_with?(suffix.to_s) }))
44
- end
45
- log_field_changes(field_changes)
46
- end
53
+ return if should_not_log?
47
54
 
48
- def log_field_changes(changes)
49
- return if changes.blank?
50
- body = field_changes_to_message(changes)
51
- log_receiver&.log_entries&.create(author_data.merge(body: body)) if body.present?
55
+ field_changes = previous_changes.reject { |k, _| reject_change?(k) }
56
+ return if field_changes.blank?
57
+
58
+ body = field_changes_to_message(field_changes)
59
+ create_log_entry(author_data.merge(body: body)) if body.present?
52
60
  end
53
61
 
54
62
  private
@@ -56,14 +64,19 @@ module Logga
56
64
  def author_data
57
65
  data = Hash(log_receiver.try(:author) || try(:author)).with_indifferent_access
58
66
  {
59
- author_id: data[:id],
60
- author_type: data[:type],
61
- author_name: data[:name]
67
+ author_id: data[:id],
68
+ author_type: data[:type],
69
+ author_name: data[:name]
62
70
  }
63
71
  end
64
72
 
73
+ def create_log_entry(entry)
74
+ log_receiver&.log_entries&.create(entry)
75
+ end
76
+
65
77
  def creation_at
66
78
  return Time.current unless log_receiver == self
79
+
67
80
  (log_receiver&.log_entries&.order(:created_at)&.first&.created_at || Time.current) - 0.1.seconds
68
81
  end
69
82
 
@@ -71,10 +84,10 @@ module Logga
71
84
  [
72
85
  "#{titleized_model_class_name(record)} created",
73
86
  ("(#{record.state})" if record.try(:state))
74
- ].compact.join(' ')
87
+ ].compact.join(" ")
75
88
  end
76
89
 
77
- def default_change_log_body(record, field, old_value, new_value)
90
+ def default_change_log_body(record, field, _old_value, new_value)
78
91
  "#{titleized_model_class_name(record)} #{field.humanize(capitalize: false)} set to #{new_value}"
79
92
  end
80
93
 
@@ -82,16 +95,29 @@ module Logga
82
95
  [
83
96
  "#{titleized_model_class_name(record)} removed",
84
97
  ("(#{record.name})" if record.try(:name))
85
- ].compact.join(' ')
98
+ ].compact.join(" ")
86
99
  end
87
100
 
88
101
  def field_changes_to_message(changes)
89
- body_generator = ->(record, field, old_value, new_value) { default_change_log_body(record, field, old_value, new_value) }
102
+ body_generator = lambda { |record, field, old_value, new_value|
103
+ default_change_log_body(record, field, old_value, new_value)
104
+ }
90
105
  changes.inject([]) do |result, (field, (old_value, new_value))|
91
106
  result << log_fields.fetch(field.to_sym, body_generator).call(self, field, old_value, new_value)
92
107
  end.compact.join("\n")
93
108
  end
94
109
 
110
+ def reject_change?(key)
111
+ EXCLUDED_KEYS.include?(key.to_sym) ||
112
+ (!log_fields.include?(key.to_sym) &&
113
+ (excluded_fields.include?(key.to_sym) ||
114
+ EXCLUDED_KEYS_SUFFIXES.any? { |suffix| key.to_s.end_with?(suffix.to_s) }))
115
+ end
116
+
117
+ def should_not_log?
118
+ !log_receiver.respond_to?(:log_entries)
119
+ end
120
+
95
121
  def titleized_model_class_name(record)
96
122
  record.class.name.demodulize.titleize
97
123
  end
data/lib/logga/version.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Logga
2
- VERSION = '1.4.0'.freeze
4
+ VERSION = "1.6.0"
3
5
  end
data/logga.gemspec CHANGED
@@ -1,17 +1,21 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
+
3
+ # rubocop:disable Style/ExpandPathArguments
4
+ # NOTE: This is because of Gemfury failing with __dir__
2
5
  lib = File.expand_path("../lib", __FILE__)
6
+ # rubocop:enable Style/ExpandPathArguments
3
7
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
8
  require "logga/version"
5
9
 
6
10
  Gem::Specification.new do |spec|
7
11
  spec.name = "logga"
8
12
  spec.version = Logga::VERSION
9
- spec.authors = ["Stuart Chinery, Rob Hesketh, Lorenzo Tello"]
10
- spec.email = ["stuart.chinery@gmail.com, contact@robhesketh.com, ltello8a@gmail.com"]
13
+ spec.authors = ["Boxt"]
14
+ spec.email = ["developers@boxt.co.uk"]
11
15
 
12
- spec.summary = "Extensions to ActiveRecord to log entries on model changes"
16
+ spec.summary = "ActiveRecord log entries on model changes"
13
17
  spec.description = "Extensions to ActiveRecord to log entries on model changes"
14
- spec.homepage = "https://github.com/ltello/logga"
18
+ spec.homepage = "https://github.com/boxt/logga"
15
19
  spec.license = "MIT"
16
20
 
17
21
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
@@ -21,13 +25,13 @@ Gem::Specification.new do |spec|
21
25
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
26
  spec.require_paths = ["lib"]
23
27
 
24
- spec.add_development_dependency "bundler", "~> 1.15"
25
- spec.add_development_dependency "rake", "~> 10.0"
26
- spec.add_development_dependency "rspec", "~> 3.6"
27
- spec.add_development_dependency "factory_girl", "~> 4.8"
28
- spec.add_development_dependency "byebug", "~> 5.0"
29
- spec.add_development_dependency "simplecov"
28
+ spec.add_development_dependency "boxt_ruby_style_guide", "~> 1.1"
29
+ spec.add_development_dependency "bundler", "~> 1.17"
30
+ spec.add_development_dependency "byebug", "~> 10.0"
31
+ spec.add_development_dependency "rake", "~> 12.3"
32
+ spec.add_development_dependency "rspec", "~> 3.6"
33
+ spec.add_development_dependency "simplecov", "~> 0.16"
30
34
 
31
- spec.add_runtime_dependency "activerecord", "~> 5.2"
32
- spec.add_runtime_dependency "activesupport", "~> 5.2"
35
+ spec.add_runtime_dependency "activerecord", "~> 5.2"
36
+ spec.add_runtime_dependency "activesupport", "~> 5.2"
33
37
  end
metadata CHANGED
@@ -1,99 +1,99 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logga
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
- - Stuart Chinery, Rob Hesketh, Lorenzo Tello
7
+ - Boxt
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-03-21 00:00:00.000000000 Z
11
+ date: 2019-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
14
+ name: boxt_ruby_style_guide
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.15'
19
+ version: '1.1'
20
20
  type: :development
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: '1.15'
26
+ version: '1.1'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rake
28
+ name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '1.17'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '1.17'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rspec
42
+ name: byebug
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '3.6'
47
+ version: '10.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: '3.6'
54
+ version: '10.0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: factory_girl
56
+ name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '4.8'
61
+ version: '12.3'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '4.8'
68
+ version: '12.3'
69
69
  - !ruby/object:Gem::Dependency
70
- name: byebug
70
+ name: rspec
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '5.0'
75
+ version: '3.6'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '5.0'
82
+ version: '3.6'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: simplecov
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ">="
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0'
89
+ version: '0.16'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ">="
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '0'
96
+ version: '0.16'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: activerecord
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -124,13 +124,15 @@ dependencies:
124
124
  version: '5.2'
125
125
  description: Extensions to ActiveRecord to log entries on model changes
126
126
  email:
127
- - stuart.chinery@gmail.com, contact@robhesketh.com, ltello8a@gmail.com
127
+ - developers@boxt.co.uk
128
128
  executables: []
129
129
  extensions: []
130
130
  extra_rdoc_files: []
131
131
  files:
132
132
  - ".gitignore"
133
133
  - ".rspec"
134
+ - ".rubocop.yml"
135
+ - ".ruby-version"
134
136
  - ".travis.yml"
135
137
  - Gemfile
136
138
  - LICENSE.txt
@@ -142,7 +144,7 @@ files:
142
144
  - lib/logga/active_record.rb
143
145
  - lib/logga/version.rb
144
146
  - logga.gemspec
145
- homepage: https://github.com/ltello/logga
147
+ homepage: https://github.com/boxt/logga
146
148
  licenses:
147
149
  - MIT
148
150
  metadata: {}
@@ -162,8 +164,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
162
164
  version: '0'
163
165
  requirements: []
164
166
  rubyforge_project:
165
- rubygems_version: 2.6.13
167
+ rubygems_version: 2.7.6
166
168
  signing_key:
167
169
  specification_version: 4
168
- summary: Extensions to ActiveRecord to log entries on model changes
170
+ summary: ActiveRecord log entries on model changes
169
171
  test_files: []