log_book 0.1.7 → 0.7.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
- SHA1:
3
- metadata.gz: 844141903822ef7b4da7514701dfb0b3d4463189
4
- data.tar.gz: 6d389d3383574dbe3e676419bf46724f178482d9
2
+ SHA256:
3
+ metadata.gz: 3df7903b6702205b16c36791b7f8ebcfc1612f3dcb0042bfbc77bbde66050ff0
4
+ data.tar.gz: fdbdd4bdb6424a69ba602a0233e7611a2c3a53aeea65368ee0974f3b6e66275a
5
5
  SHA512:
6
- metadata.gz: a375456188f8cb54db495328f8260bd92adadcce1446a8454ae84bfaceedab837520cc475fbd1e7c4d46feab2f7d4748684e5781e5a2ae8201d81150979f27e0
7
- data.tar.gz: a38628f1726647304d3b31ee46fbba09857f71a6cb2e25e686f1a836ed36ddb9539a063fb60d65c8206ce2d307012c264a5d21a0f9731bbfe65f2c3eb20c795e
6
+ metadata.gz: 88f94471b1bb9b83c11abd1b6ba3cc7c5f0c6b440a7d49014a033ada08b87945be21c15a3f41bfef9e2fc8ea145dc9941aa21ed2cdcf311167dee4dcca2a96eb
7
+ data.tar.gz: 6931310a5f20887d3936b14d8a59836dda15366e5a046c7be0ac9ebda5802c2650ef944bd1e217e1a303b51af294c39fc5feaf654d7f497614fdf1cf374e07e7
data/.gitignore CHANGED
@@ -3,7 +3,6 @@
3
3
  .bundle
4
4
  .config
5
5
  .yardoc
6
- Gemfile.lock
7
6
  InstalledFiles
8
7
  _yardoc
9
8
  coverage
data/.travis.yml ADDED
@@ -0,0 +1,9 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.3.1
4
+ - 2.5.1
5
+
6
+ matrix:
7
+ fast_finish: true
8
+ allow_failures:
9
+ - rvm: 2.5.1
data/Gemfile.lock ADDED
@@ -0,0 +1,173 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ log_book (0.6.3)
5
+ acts-as-taggable-on (>= 8.0)
6
+ rails (>= 6.0)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ actioncable (7.0.2.2)
12
+ actionpack (= 7.0.2.2)
13
+ activesupport (= 7.0.2.2)
14
+ nio4r (~> 2.0)
15
+ websocket-driver (>= 0.6.1)
16
+ actionmailbox (7.0.2.2)
17
+ actionpack (= 7.0.2.2)
18
+ activejob (= 7.0.2.2)
19
+ activerecord (= 7.0.2.2)
20
+ activestorage (= 7.0.2.2)
21
+ activesupport (= 7.0.2.2)
22
+ mail (>= 2.7.1)
23
+ net-imap
24
+ net-pop
25
+ net-smtp
26
+ actionmailer (7.0.2.2)
27
+ actionpack (= 7.0.2.2)
28
+ actionview (= 7.0.2.2)
29
+ activejob (= 7.0.2.2)
30
+ activesupport (= 7.0.2.2)
31
+ mail (~> 2.5, >= 2.5.4)
32
+ net-imap
33
+ net-pop
34
+ net-smtp
35
+ rails-dom-testing (~> 2.0)
36
+ actionpack (7.0.2.2)
37
+ actionview (= 7.0.2.2)
38
+ activesupport (= 7.0.2.2)
39
+ rack (~> 2.0, >= 2.2.0)
40
+ rack-test (>= 0.6.3)
41
+ rails-dom-testing (~> 2.0)
42
+ rails-html-sanitizer (~> 1.0, >= 1.2.0)
43
+ actiontext (7.0.2.2)
44
+ actionpack (= 7.0.2.2)
45
+ activerecord (= 7.0.2.2)
46
+ activestorage (= 7.0.2.2)
47
+ activesupport (= 7.0.2.2)
48
+ globalid (>= 0.6.0)
49
+ nokogiri (>= 1.8.5)
50
+ actionview (7.0.2.2)
51
+ activesupport (= 7.0.2.2)
52
+ builder (~> 3.1)
53
+ erubi (~> 1.4)
54
+ rails-dom-testing (~> 2.0)
55
+ rails-html-sanitizer (~> 1.1, >= 1.2.0)
56
+ activejob (7.0.2.2)
57
+ activesupport (= 7.0.2.2)
58
+ globalid (>= 0.3.6)
59
+ activemodel (7.0.2.2)
60
+ activesupport (= 7.0.2.2)
61
+ activerecord (7.0.2.2)
62
+ activemodel (= 7.0.2.2)
63
+ activesupport (= 7.0.2.2)
64
+ activestorage (7.0.2.2)
65
+ actionpack (= 7.0.2.2)
66
+ activejob (= 7.0.2.2)
67
+ activerecord (= 7.0.2.2)
68
+ activesupport (= 7.0.2.2)
69
+ marcel (~> 1.0)
70
+ mini_mime (>= 1.1.0)
71
+ activesupport (7.0.2.2)
72
+ concurrent-ruby (~> 1.0, >= 1.0.2)
73
+ i18n (>= 1.6, < 2)
74
+ minitest (>= 5.1)
75
+ tzinfo (~> 2.0)
76
+ acts-as-taggable-on (9.0.1)
77
+ activerecord (>= 6.0, < 7.1)
78
+ assert_difference (1.0.0)
79
+ activesupport (>= 3.0.0)
80
+ builder (3.2.4)
81
+ concurrent-ruby (1.1.9)
82
+ crass (1.0.6)
83
+ digest (3.1.0)
84
+ erubi (1.10.0)
85
+ globalid (1.0.0)
86
+ activesupport (>= 5.0)
87
+ i18n (1.10.0)
88
+ concurrent-ruby (~> 1.0)
89
+ io-wait (0.2.1)
90
+ loofah (2.14.0)
91
+ crass (~> 1.0.2)
92
+ nokogiri (>= 1.5.9)
93
+ mail (2.7.1)
94
+ mini_mime (>= 0.1.1)
95
+ marcel (1.0.2)
96
+ method_source (1.0.0)
97
+ mini_mime (1.1.2)
98
+ minitest (5.15.0)
99
+ mocha (1.13.0)
100
+ net-imap (0.2.3)
101
+ digest
102
+ net-protocol
103
+ strscan
104
+ net-pop (0.1.1)
105
+ digest
106
+ net-protocol
107
+ timeout
108
+ net-protocol (0.1.2)
109
+ io-wait
110
+ timeout
111
+ net-smtp (0.3.1)
112
+ digest
113
+ net-protocol
114
+ timeout
115
+ nio4r (2.5.8)
116
+ nokogiri (1.13.3-x86_64-darwin)
117
+ racc (~> 1.4)
118
+ racc (1.6.0)
119
+ rack (2.2.3)
120
+ rack-test (1.1.0)
121
+ rack (>= 1.0, < 3)
122
+ rails (7.0.2.2)
123
+ actioncable (= 7.0.2.2)
124
+ actionmailbox (= 7.0.2.2)
125
+ actionmailer (= 7.0.2.2)
126
+ actionpack (= 7.0.2.2)
127
+ actiontext (= 7.0.2.2)
128
+ actionview (= 7.0.2.2)
129
+ activejob (= 7.0.2.2)
130
+ activemodel (= 7.0.2.2)
131
+ activerecord (= 7.0.2.2)
132
+ activestorage (= 7.0.2.2)
133
+ activesupport (= 7.0.2.2)
134
+ bundler (>= 1.15.0)
135
+ railties (= 7.0.2.2)
136
+ rails-dom-testing (2.0.3)
137
+ activesupport (>= 4.2.0)
138
+ nokogiri (>= 1.6)
139
+ rails-html-sanitizer (1.4.2)
140
+ loofah (~> 2.3)
141
+ railties (7.0.2.2)
142
+ actionpack (= 7.0.2.2)
143
+ activesupport (= 7.0.2.2)
144
+ method_source
145
+ rake (>= 12.2)
146
+ thor (~> 1.0)
147
+ zeitwerk (~> 2.5)
148
+ rake (13.0.6)
149
+ sqlite3 (1.4.2)
150
+ strscan (3.0.1)
151
+ thor (1.2.1)
152
+ timeout (0.2.0)
153
+ tzinfo (2.0.4)
154
+ concurrent-ruby (~> 1.0)
155
+ websocket-driver (0.7.5)
156
+ websocket-extensions (>= 0.1.0)
157
+ websocket-extensions (0.1.5)
158
+ zeitwerk (2.5.4)
159
+
160
+ PLATFORMS
161
+ x86_64-darwin-19
162
+
163
+ DEPENDENCIES
164
+ assert_difference (>= 1.0)
165
+ bundler (>= 2.0)
166
+ log_book!
167
+ minitest (>= 5.1)
168
+ mocha (>= 1.13)
169
+ rake (>= 0.13)
170
+ sqlite3 (>= 1.0)
171
+
172
+ BUNDLED WITH
173
+ 2.2.32
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # LogBook
2
2
 
3
- Storing an events log book.
3
+ Ruby on Rails, Automatically keeping record of all Model Changes
4
4
 
5
5
  ## Installation
6
6
 
@@ -23,6 +23,7 @@ As the Model should be loaded after ActiveReccord has established the connection
23
23
  ### ActsOnTaggableOn dependency
24
24
 
25
25
  rails generate acts_as_taggable_on:migration
26
+ # rake acts_as_taggable_on_engine:install:migrations # for version '~> 4.0' or superior
26
27
  rake db:migrate
27
28
 
28
29
  ## Usage
@@ -50,8 +51,50 @@ If you want to include _who executes the action_ use the special attribute `log_
50
51
  my_model.log_book_historian = current_user
51
52
  my_model.save!
52
53
 
54
+ If you want to _mute_ a model change:
55
+
56
+ my_model.log_book_mute = true
57
+ my_model.save! # No LogBook::Event will be generated
58
+
59
+ If you want to _mute_ LogBook globally:
60
+
61
+ LogBook.mute = true
62
+ my_model.save! # No LogBook::Event will be generated
63
+
64
+ If you want to _ignore_ some fields from the changes Event:
65
+
66
+ class MyModel < ActiveRecord::Base
67
+ log_book :ignore => [:my_counter]
68
+ end
69
+
70
+ my_model.update_atttibtes!(:my_counter => 9) # No LogBook::Event will be generated
71
+
72
+ If you want _LogBook::Events_ to be destroyed on _Model_ destroy:
73
+
74
+ class MyModel < ActiveRecord::Base
75
+ log_book :dependent => :destroy
76
+ end
77
+
78
+ In other case the _LogBook::Events_ will remain after _Model_ destroyed.
79
+
80
+ ## Rails Integration
81
+
82
+ Check this example project to see how LogBook is integrated:
83
+
84
+ - [Skeleton](https://github.com/fguillen/Skeleton)
85
+
86
+ Or this commit in a more modern Rails project:
87
+
88
+ - [RailsSkeleton](https://github.com/fguillen/RailsSkeleton/commit/4c16c6402254bf4c44b7589b404fc22c746bae15)
89
+
53
90
  ## TODO
54
91
 
92
+ Use block configuration instead of `model.log_book_historian` do something like:
93
+
94
+ LogBook.conf(:log_book_historian => user) do
95
+ model.save!
96
+ end
97
+
55
98
 
56
99
  ## Sate of the art
57
100
 
@@ -1,17 +1,20 @@
1
- class CreateLogBookEvents < ActiveRecord::Migration
1
+ class CreateLogBookEvents < ActiveRecord::Migration[4.2]
2
2
  def self.up
3
3
  create_table :log_book_events do |t|
4
4
  t.integer :historian_id
5
5
  t.string :historian_type
6
6
  t.integer :historizable_id
7
7
  t.string :historizable_type
8
- t.text :text, :null => false
8
+ t.text :differences, :limit => 16777215 # mediumtext
9
9
 
10
- t.timestamps
10
+ t.timestamps :null => false
11
11
  end
12
+
13
+ add_index :log_book_events, [:historizable_id, :historizable_type, :created_at], :name => "index_log_book_events_on_historizable_and_created_at"
14
+ add_index :log_book_events, [:created_at]
12
15
  end
13
16
 
14
17
  def self.down
15
18
  drop_table :log_book_events
16
19
  end
17
- end
20
+ end
@@ -1,14 +1,12 @@
1
1
  class LogBook::Event < ::ActiveRecord::Base
2
2
  self.table_name = "log_book_events"
3
3
 
4
- attr_accessible :historian, :historizable, :text, :tag_list
5
-
6
4
  acts_as_taggable
7
5
 
8
- belongs_to :historian, :polymorphic => true
6
+ belongs_to :historian, :polymorphic => true, :optional => true
9
7
  belongs_to :historizable, :polymorphic => true
10
8
 
11
- validates :text, :presence => true
12
-
13
9
  scope :by_recent, -> { order("id desc") }
10
+
11
+ serialize :differences, JSON
14
12
  end
@@ -5,7 +5,6 @@ module LogBook::Plugin
5
5
  end
6
6
 
7
7
  module ClassMethods
8
-
9
8
  def log_book(opts = {})
10
9
  after_create :log_book_event_on_create
11
10
  after_update :log_book_event_on_update
@@ -14,24 +13,36 @@ module LogBook::Plugin
14
13
  has_many :log_book_events, :class_name => "LogBook::Event", :as => :historizable, :dependent => (opts[:dependent] || :nullify)
15
14
 
16
15
  attr_accessor :log_book_historian
16
+ attr_accessor :log_book_mute
17
+ cattr_accessor :log_book_options
18
+
19
+ self.log_book_options = opts
20
+ self.log_book_options[:ignore] ||= []
21
+ self.log_book_options[:ignore] << :updated_at # ignoring noisy field
17
22
  end
18
23
  end
19
24
 
20
25
  module InstanceMethods
21
26
  def log_book_event_on_create
22
- LogBook.created(self.log_book_historian, self)
27
+ LogBook.created(self.log_book_historian, self) if !self.log_book_mute
23
28
  end
24
29
 
25
30
  def log_book_event_on_update
26
- LogBook.updated(self.log_book_historian, self) unless changes.empty?
31
+ # TODO: this line of code is duplicated
32
+ if ActiveRecord::VERSION::STRING.to_f >= 5.1
33
+ clean_changes = saved_changes.select { |k,v| !self.log_book_options[:ignore].include? k.to_sym }
34
+ else
35
+ clean_changes = changes.select { |k,v| !self.log_book_options[:ignore].include? k.to_sym }
36
+ end
37
+ LogBook.updated(self.log_book_historian, self) if !clean_changes.empty? and !self.log_book_mute
27
38
  end
28
39
 
29
40
  def log_book_event_on_destroy
30
- LogBook.destroyed(self.log_book_historian, self)
41
+ LogBook.destroyed(self.log_book_historian, self) if !self.log_book_mute
31
42
  end
32
43
  end
33
44
  end
34
45
 
35
46
  ActiveSupport.on_load(:active_record) do
36
47
  include LogBook::Plugin
37
- end
48
+ end
@@ -1,16 +1,27 @@
1
1
  module LogBook::Utils
2
2
  def self.pretty_changes(model)
3
+ # TODO: this line of code is duplicated
4
+ if ActiveRecord::VERSION::STRING.to_f >= 5.1
5
+ clean_changes = model.saved_changes.select { |k,v| !model.log_book_options[:ignore].include? k.to_sym }
6
+ else
7
+ clean_changes = model.changes.select { |k,v| !model.log_book_options[:ignore].include? k.to_sym }
8
+ end
9
+
3
10
  result =
4
- model.changes.reject { |k,v| k == "updated_at" || k =~ /password/ || k == "perishable_token" || k == "persistence_token" }.map do |k,v|
11
+ clean_changes.map do |k,v|
5
12
  old_value = v[0]
6
13
  new_value = v[1]
7
14
 
8
15
  old_value = old_value.to_s( :localdb ) if old_value.instance_of? ActiveSupport::TimeWithZone
9
16
  new_value = new_value.to_s( :localdb ) if new_value.instance_of? ActiveSupport::TimeWithZone
10
17
 
11
- "#{k}[#{old_value} -> #{new_value}]"
12
- end.join( ", " )
18
+ {
19
+ "key" => k,
20
+ "before" => old_value,
21
+ "after" => new_value
22
+ }
23
+ end
13
24
 
14
25
  result
15
26
  end
16
- end
27
+ end
@@ -1,3 +1,3 @@
1
1
  module LogBook
2
- VERSION = "0.1.7"
2
+ VERSION = "0.7.1"
3
3
  end
data/lib/log_book.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  require "active_record"
2
2
  require "active_support/core_ext/module"
3
- require "protected_attributes"
4
3
  require "acts-as-taggable-on"
5
4
  require_relative "log_book/version"
6
5
  require_relative "log_book/plugin"
@@ -13,32 +12,44 @@ module LogBook
13
12
  :destroy => "destroy"
14
13
  }
15
14
 
16
- def self.event(historian, historizable, text, tag_list)
15
+ @@muted = false
16
+
17
+ def self.event(historian, historizable, differences, tag_list)
18
+ return if @@muted
19
+
17
20
  tag_list_composed = []
18
21
  tag_list_composed << scope_tag(historian) if historian
19
22
  tag_list_composed << kind_tag(historizable) if historizable
20
23
  tag_list_composed += [tag_list].flatten if tag_list
21
-
24
+
22
25
  LogBook::Event.create!(
23
26
  :historian => historian,
24
27
  :historizable => historizable,
25
- :text => text,
28
+ :differences => differences,
26
29
  :tag_list => tag_list_composed
27
30
  )
28
31
  end
29
32
 
33
+ def self.muted=(value)
34
+ @@muted = value
35
+ end
36
+
37
+ def self.muted
38
+ @@muted
39
+ end
40
+
30
41
  private
31
42
 
32
43
  def self.created(historian, historizable)
33
- LogBook.event(historian, historizable, "#{historizable.class.name} created", LogBook::OPERATIONS[:create])
44
+ LogBook.event(historian, historizable, nil, LogBook::OPERATIONS[:create])
34
45
  end
35
46
 
36
47
  def self.updated(historian, historizable)
37
- LogBook.event(historian, historizable, "#{historizable.class.name} updated [#{LogBook::Utils.pretty_changes(historizable)}]", LogBook::OPERATIONS[:update])
48
+ LogBook.event(historian, historizable, LogBook::Utils.pretty_changes(historizable), LogBook::OPERATIONS[:update])
38
49
  end
39
50
 
40
51
  def self.destroyed(historian, historizable)
41
- LogBook.event(historian, historizable, "#{historizable.class.name} destroyed", LogBook::OPERATIONS[:destroy])
52
+ LogBook.event(historian, historizable, nil, LogBook::OPERATIONS[:destroy])
42
53
  end
43
54
 
44
55
  def self.scope_tag(historian)
@@ -49,4 +60,3 @@ module LogBook
49
60
  historizable.class.name.underscore
50
61
  end
51
62
  end
52
-
data/log_book.gemspec CHANGED
@@ -18,14 +18,13 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_runtime_dependency "rails", "~> 4.1.4"
22
- spec.add_runtime_dependency "protected_attributes"
23
- spec.add_runtime_dependency "acts-as-taggable-on", "3.3.0"
21
+ spec.add_runtime_dependency "rails", ">= 6.0"
22
+ spec.add_runtime_dependency "acts-as-taggable-on", ">= 8.0"
24
23
 
25
- spec.add_development_dependency "bundler", "~> 1.6.3"
26
- spec.add_development_dependency "rake"
27
- spec.add_development_dependency "mocha"
28
- spec.add_development_dependency "sqlite3"
29
- spec.add_development_dependency "assert_difference"
30
- spec.add_development_dependency "minitest", "~> 5.4.0"
24
+ spec.add_development_dependency "bundler", ">= 2.0"
25
+ spec.add_development_dependency "rake", ">= 0.13"
26
+ spec.add_development_dependency "mocha", ">= 1.13"
27
+ spec.add_development_dependency "sqlite3", ">= 1.0"
28
+ spec.add_development_dependency "assert_difference", ">= 1.0"
29
+ spec.add_development_dependency "minitest", ">= 5.1"
31
30
  end
@@ -12,54 +12,101 @@ class LogBookTest < MiniTest::Test
12
12
 
13
13
  def test_event
14
14
  assert_difference "LogBook::Event.count", 1 do
15
- LogBook.event(@user, @item, "Item wadus", LogBook::OPERATIONS[:create])
15
+ LogBook.event(@user, @item, ["DIFFERENCE"], LogBook::OPERATIONS[:create])
16
16
  end
17
17
 
18
- log_book = LogBook::Event.last
19
- assert_equal(@user, log_book.historian)
20
- assert_equal(@item, log_book.historizable)
21
- assert_equal("Item wadus", log_book.text)
22
- assert_equal(["user", "item", "create"].sort, log_book.tag_list.sort)
18
+ log_book_event = LogBook::Event.last
19
+ assert_equal(@user, log_book_event.historian)
20
+ assert_equal(@item, log_book_event.historizable)
21
+ assert_equal(["DIFFERENCE"], log_book_event.differences)
22
+ assert_equal(["user", "item", "create"].sort, log_book_event.tag_list.sort)
23
23
  end
24
24
 
25
25
  def test_event_with_nils
26
26
  assert_difference "LogBook::Event.count", 1 do
27
- LogBook.event(nil, nil, "Item wadus", nil)
27
+ LogBook.event(nil, nil, ["DIFFERENCE"], nil)
28
28
  end
29
29
 
30
- log_book = LogBook::Event.last
31
- assert_equal(nil, log_book.historian)
32
- assert_equal(nil, log_book.historizable)
33
- assert_equal("Item wadus", log_book.text)
34
- assert_equal([], log_book.tag_list)
30
+ log_book_event = LogBook::Event.last
31
+ assert_nil(log_book_event.historian)
32
+ assert_nil(log_book_event.historizable)
33
+ assert_equal(["DIFFERENCE"], log_book_event.differences)
34
+ assert_equal([], log_book_event.tag_list)
35
35
  end
36
36
 
37
37
  def test_created
38
38
  item = Item.new(:title => "Item Title")
39
39
  item.log_book_historian = @user
40
40
 
41
- LogBook.expects(:event).with(@user, item, "Item created", LogBook::OPERATIONS[:create])
41
+ LogBook.expects(:event).with(@user, item, nil, LogBook::OPERATIONS[:create])
42
+
43
+ item.save!
44
+ end
45
+
46
+ def test_created_when_muted
47
+ item = Item.new(:title => "Item Title")
48
+ item.log_book_mute = true
49
+
50
+ LogBook.expects(:event).never
42
51
 
43
52
  item.save!
44
53
  end
45
54
 
46
55
  def test_updated
47
- LogBook.expects(:event).with(@user, @item, "Item updated [title[Item Title -> Other Title]]", LogBook::OPERATIONS[:update])
56
+ differences = [
57
+ {
58
+ "key" => "title",
59
+ "before" => "Item Title",
60
+ "after" => "Other Title"
61
+ }
62
+ ]
63
+
64
+ LogBook.expects(:event).with(@user, @item, differences, LogBook::OPERATIONS[:update])
65
+
66
+ @item.update!(:title => "Other Title")
67
+ end
68
+
69
+ def test_updated_when_muted
70
+ LogBook.expects(:event).never
71
+
72
+ @item.log_book_mute = true
73
+ @item.update!(:title => "Other Title")
74
+ end
75
+
76
+ def test_updated_with_ignore_fields
77
+ differences = [
78
+ {
79
+ "key" => "title",
80
+ "before" => "Item Title",
81
+ "after" => "Other Title"
82
+ }
83
+ ]
48
84
 
49
- @item.update_attributes!(:title => "Other Title")
85
+ item_with_opts = ItemWithOpts.create!(:title => "Item Title", :my_counter => 0)
86
+ LogBook.expects(:event).with(@user, item_with_opts, differences, LogBook::OPERATIONS[:update])
87
+
88
+ item_with_opts.log_book_historian = @user
89
+ item_with_opts.update!(:title => "Other Title", :my_counter => 10)
50
90
  end
51
91
 
52
92
  def test_item_destroyed
53
- LogBook.expects(:event).with(@user, @item, "Item destroyed", LogBook::OPERATIONS[:destroy])
93
+ LogBook.expects(:event).with(@user, @item, nil, LogBook::OPERATIONS[:destroy])
54
94
 
55
95
  @item.destroy
56
96
  end
57
97
 
98
+ def test_item_destroyed_when_muted
99
+ LogBook.expects(:event).never
100
+
101
+ @item.log_book_mute = true
102
+ @item.destroy
103
+ end
104
+
58
105
  def test_has_many_log_book_events
59
106
  LogBook::Event.destroy_all
60
107
 
61
- log_book_event_1 = LogBook.event(@user, @item, "Item wadus", LogBook::OPERATIONS[:create])
62
- log_book_event_2 = LogBook.event(@user, @item, "Item wadus", LogBook::OPERATIONS[:update])
108
+ log_book_event_1 = LogBook.event(@user, @item, nil, LogBook::OPERATIONS[:create])
109
+ log_book_event_2 = LogBook.event(@user, @item, nil, LogBook::OPERATIONS[:update])
63
110
 
64
111
  @item.reload
65
112
 
@@ -69,7 +116,7 @@ class LogBookTest < MiniTest::Test
69
116
  end
70
117
 
71
118
  def test_log_book_events_nullify_on_historizable_destroy
72
- log_book_event = LogBook.event(@user, @item, "Item wadus", LogBook::OPERATIONS[:create])
119
+ log_book_event = LogBook.event(@user, @item, nil, LogBook::OPERATIONS[:create])
73
120
 
74
121
  @item.destroy
75
122
 
@@ -77,16 +124,26 @@ class LogBookTest < MiniTest::Test
77
124
 
78
125
  assert_equal(true, log_book_event.historizable_id.nil?)
79
126
  assert_equal(true, log_book_event.historizable.nil?)
80
- assert_equal("Item", log_book_event.historizable_type)
127
+ assert_equal(true, log_book_event.historizable_type.nil?)
81
128
  end
82
129
 
83
130
  def test_log_book_events_destroy_on_historizable_destroy
84
131
  item_with_opts = ItemWithOpts.new
85
- log_book_event = LogBook.event(@user, item_with_opts, "Item wadus", LogBook::OPERATIONS[:create])
132
+ log_book_event = LogBook.event(@user, item_with_opts, nil, LogBook::OPERATIONS[:create])
86
133
 
87
134
  item_with_opts.destroy
88
135
 
89
136
  assert_equal(false, LogBook::Event.exists?(log_book_event.id))
90
137
  end
91
- end
92
138
 
139
+ def test_created_when_global_muted
140
+ item = Item.new(:title => "Item Title")
141
+ LogBook.muted = true
142
+
143
+ LogBook::Event.expects(:create!).never
144
+
145
+ item.save!
146
+
147
+ LogBook.muted = false
148
+ end
149
+ end
data/test/models.rb CHANGED
@@ -6,5 +6,5 @@ class Item < ActiveRecord::Base
6
6
  end
7
7
 
8
8
  class ItemWithOpts < Item
9
- log_book(:dependent => :destroy)
9
+ log_book(:dependent => :destroy, :ignore => [:my_counter])
10
10
  end
data/test/plugin_test.rb CHANGED
@@ -19,7 +19,7 @@ class PluginTest < MiniTest::Test
19
19
  def test_event_on_update
20
20
  @item.log_book_historian = @user
21
21
  LogBook.expects(:updated).with(@user, @item)
22
- @item.update_attributes(:title => "Other Title")
22
+ @item.update!(:title => "Other Title")
23
23
  end
24
24
 
25
25
  def test_event_on_destroy
@@ -28,4 +28,3 @@ class PluginTest < MiniTest::Test
28
28
  @item.destroy
29
29
  end
30
30
  end
31
-
data/test/schema.rb CHANGED
@@ -5,23 +5,28 @@ ActiveRecord::Schema.define :version => 0 do
5
5
 
6
6
  create_table :items, :force => true do |t|
7
7
  t.string :title
8
+ t.integer :my_counter
8
9
  end
9
10
 
10
11
  # acts-as-taggable-on
11
- # https://github.com/mbleigh/acts-as-taggable-on/tree/master/db/migrate
12
- #
13
- create_table :tags do |t|
12
+ # https://github.com/mbleigh/acts-as-taggable-on/blob/6e1837762f0d60edc9b6c2d92b5a9435f404173f/spec/internal/db/schema.rb
13
+ create_table :tags, force: true do |t|
14
14
  t.string :name
15
+ t.integer :taggings_count, default: 0
16
+ t.string :type
15
17
  end
18
+ add_index 'tags', ['name'], name: 'index_tags_on_name', unique: true
16
19
 
17
- create_table :taggings do |t|
20
+ create_table :taggings, force: true do |t|
18
21
  t.references :tag
19
- t.references :taggable, :polymorphic => true
20
- t.references :tagger, :polymorphic => true
21
- t.string :context, :limit => 128
22
+ t.references :taggable, polymorphic: true
23
+ t.references :tagger, polymorphic: true
24
+ t.string :context, limit: 128
22
25
 
23
26
  t.datetime :created_at
24
27
  end
25
28
 
26
- add_column :tags, :taggings_count, :integer, default: 0
29
+ add_index 'taggings',
30
+ ['tag_id', 'taggable_id', 'taggable_type', 'context', 'tagger_id', 'tagger_type'],
31
+ unique: true, name: 'taggings_idx'
27
32
  end
data/test/test_helper.rb CHANGED
@@ -1,9 +1,13 @@
1
+
1
2
  require "active_record"
2
3
  require "active_support/core_ext/module"
3
4
  require "assert_difference"
4
5
  require "acts-as-taggable-on"
6
+
7
+ # require "minitest/unit"
5
8
  require "minitest/autorun"
6
- require "mocha/setup"
9
+ require "mocha/mini_test"
10
+
7
11
  require_relative "../lib/log_book"
8
12
 
9
13
  FileUtils.rm("#{File.dirname(__FILE__)}/db/log_book.sqlite", :force => true)
metadata CHANGED
@@ -1,141 +1,127 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: log_book
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fernando Guillen
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-15 00:00:00.000000000 Z
11
+ date: 2022-03-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 4.1.4
19
+ version: '6.0'
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: 4.1.4
27
- - !ruby/object:Gem::Dependency
28
- name: protected_attributes
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - '>='
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - '>='
39
- - !ruby/object:Gem::Version
40
- version: '0'
26
+ version: '6.0'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: acts-as-taggable-on
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
- - - '='
31
+ - - ">="
46
32
  - !ruby/object:Gem::Version
47
- version: 3.3.0
33
+ version: '8.0'
48
34
  type: :runtime
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
- - - '='
38
+ - - ">="
53
39
  - !ruby/object:Gem::Version
54
- version: 3.3.0
40
+ version: '8.0'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: bundler
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
- - - ~>
45
+ - - ">="
60
46
  - !ruby/object:Gem::Version
61
- version: 1.6.3
47
+ version: '2.0'
62
48
  type: :development
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
- - - ~>
52
+ - - ">="
67
53
  - !ruby/object:Gem::Version
68
- version: 1.6.3
54
+ version: '2.0'
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: rake
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
- - - '>='
59
+ - - ">="
74
60
  - !ruby/object:Gem::Version
75
- version: '0'
61
+ version: '0.13'
76
62
  type: :development
77
63
  prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
- - - '>='
66
+ - - ">="
81
67
  - !ruby/object:Gem::Version
82
- version: '0'
68
+ version: '0.13'
83
69
  - !ruby/object:Gem::Dependency
84
70
  name: mocha
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
- - - '>='
73
+ - - ">="
88
74
  - !ruby/object:Gem::Version
89
- version: '0'
75
+ version: '1.13'
90
76
  type: :development
91
77
  prerelease: false
92
78
  version_requirements: !ruby/object:Gem::Requirement
93
79
  requirements:
94
- - - '>='
80
+ - - ">="
95
81
  - !ruby/object:Gem::Version
96
- version: '0'
82
+ version: '1.13'
97
83
  - !ruby/object:Gem::Dependency
98
84
  name: sqlite3
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
- - - '>='
87
+ - - ">="
102
88
  - !ruby/object:Gem::Version
103
- version: '0'
89
+ version: '1.0'
104
90
  type: :development
105
91
  prerelease: false
106
92
  version_requirements: !ruby/object:Gem::Requirement
107
93
  requirements:
108
- - - '>='
94
+ - - ">="
109
95
  - !ruby/object:Gem::Version
110
- version: '0'
96
+ version: '1.0'
111
97
  - !ruby/object:Gem::Dependency
112
98
  name: assert_difference
113
99
  requirement: !ruby/object:Gem::Requirement
114
100
  requirements:
115
- - - '>='
101
+ - - ">="
116
102
  - !ruby/object:Gem::Version
117
- version: '0'
103
+ version: '1.0'
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
107
  requirements:
122
- - - '>='
108
+ - - ">="
123
109
  - !ruby/object:Gem::Version
124
- version: '0'
110
+ version: '1.0'
125
111
  - !ruby/object:Gem::Dependency
126
112
  name: minitest
127
113
  requirement: !ruby/object:Gem::Requirement
128
114
  requirements:
129
- - - ~>
115
+ - - ">="
130
116
  - !ruby/object:Gem::Version
131
- version: 5.4.0
117
+ version: '5.1'
132
118
  type: :development
133
119
  prerelease: false
134
120
  version_requirements: !ruby/object:Gem::Requirement
135
121
  requirements:
136
- - - ~>
122
+ - - ">="
137
123
  - !ruby/object:Gem::Version
138
- version: 5.4.0
124
+ version: '5.1'
139
125
  description: Storing an events log book
140
126
  email:
141
127
  - fguillen.mail@gmail.com
@@ -143,9 +129,10 @@ executables: []
143
129
  extensions: []
144
130
  extra_rdoc_files: []
145
131
  files:
146
- - .gitignore
147
- - .ruby-version
132
+ - ".gitignore"
133
+ - ".travis.yml"
148
134
  - Gemfile
135
+ - Gemfile.lock
149
136
  - LICENSE.txt
150
137
  - README.md
151
138
  - Rakefile
@@ -167,24 +154,23 @@ homepage: https://github.com/fguillen/LogBook
167
154
  licenses:
168
155
  - MIT
169
156
  metadata: {}
170
- post_install_message:
157
+ post_install_message:
171
158
  rdoc_options: []
172
159
  require_paths:
173
160
  - lib
174
161
  required_ruby_version: !ruby/object:Gem::Requirement
175
162
  requirements:
176
- - - '>='
163
+ - - ">="
177
164
  - !ruby/object:Gem::Version
178
165
  version: '0'
179
166
  required_rubygems_version: !ruby/object:Gem::Requirement
180
167
  requirements:
181
- - - '>='
168
+ - - ">="
182
169
  - !ruby/object:Gem::Version
183
170
  version: '0'
184
171
  requirements: []
185
- rubyforge_project:
186
- rubygems_version: 2.0.3
187
- signing_key:
172
+ rubygems_version: 3.2.22
173
+ signing_key:
188
174
  specification_version: 4
189
175
  summary: Storing an events log book
190
176
  test_files:
data/.ruby-version DELETED
@@ -1 +0,0 @@
1
- 2.0.0-p247