logga 1.4.0 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
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: []