best_boy 2.0.3 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 052c16860b6631958848facca1874befa90c03ea
4
+ data.tar.gz: 691c93a312656f98fc39db8f253fb39acfb3be22
5
+ SHA512:
6
+ metadata.gz: ef3642b2d03a4399f348563be130118bf95e1da1eb0b8f990b2a6bdfbe3d9fad714205a1f16e9136233092c07d524656529b1ba9eaa45a76685d0389796d6c55
7
+ data.tar.gz: 3b7ad04877352de616c77193bd897947e4bf374d818d7850089febfa344a76f7ac38ca018e3b322889897443be8e549a2dc4f22dfde7bcfdcd3344273576aee7
data/README.md CHANGED
@@ -10,7 +10,7 @@ A simple event driven logging for ActiveRecord models.
10
10
  What does this gem do?
11
11
  ----------------------
12
12
 
13
- best_boy logs "create" and "delete" events as well as custom events triggered in controller actions. It uses an own polimorphic database table to log each event.
13
+ best_boy logs "create" and "delete" events as well as custom events triggered by controller actions. It uses its own polymorphic database table to log each event.
14
14
  At the moment, best_boy only provides support for ActiveRecord models.
15
15
 
16
16
 
@@ -59,6 +59,17 @@ Run the migration
59
59
  rake db:migrate
60
60
 
61
61
 
62
+ Changelog
63
+ ---------
64
+ #### 2.1.0
65
+ * Code cleanup - now compatible with RSpec 3 syntax
66
+ * Support a "dry-run" test mode
67
+ * Reduce public methods added by `BestBoy::Eventable` ([#4](https://github.com/Absolventa/best_boy/issues/4))
68
+ * Remove mass-assignments that could cause problems with the protected_attributes gem [#8](https://github.com/Absolventa/best_boy/issues/8)
69
+ * Do not expose mixed-in controller method ([#9](https://github.com/Absolventa/best_boy/issues/9)))
70
+ * Avoid potential callbacks for callbacks switch ([#10](https://github.com/Absolventa/best_boy/issues/10))
71
+
72
+
62
73
  Update in Version 2
63
74
  --------------------------------
64
75
 
@@ -107,6 +118,24 @@ This will log custom events for a object and a event phrase. You can specify thi
107
118
 
108
119
  If no Object is given, it will raise an exception as well as if no event is provided.
109
120
 
121
+ #### Test mode
122
+
123
+ BestBoy features a sandbox mode for your testing environment from version 2.1 onward. It will prevent the creation of BestBoy records. Activate it in your spec_helper.rb or test_helper.rb globally:
124
+
125
+ BestBoy.test_mode = true
126
+
127
+ If you want to test your BestBoy integration, you can run your code like this:
128
+
129
+ BestBoy.in_real_mode do
130
+ # your expectations / asserts
131
+ end
132
+
133
+ Conversely, you can also sandbox a specific code block:
134
+
135
+ BestBoy.in_test_mode do
136
+ # database will be spared
137
+ end
138
+
110
139
 
111
140
  BestBoyEvent table
112
141
  ------------------
@@ -165,25 +194,23 @@ beginning of Feb 1st, 2010 up to now.
165
194
 
166
195
  Budget some time for this task, since it can take long if your BestBoyEvent table has grown very big.
167
196
 
168
- Used gems and resource
169
- ----------------------
170
- [Twitter Bootstrap](http://twitter.github.com/bootstrap/) in its version 2.0.4
171
-
172
- [Stefan Petre](http://www.eyecon.ro/bootstrap-datepicker) for Datepicker in Twitter Bootstrap style
173
-
174
- [Winston Teo Yong Wei](https://github.com/winston/google_visualr) Google_Visualr in its version 2.1.2
197
+ Used gems and resources
198
+ -----------------------
199
+ * [Twitter Bootstrap](http://twitter.github.com/bootstrap/) in its version 2.0.4
200
+ * [Stefan Petre](http://www.eyecon.ro/bootstrap-datepicker) for Datepicker in Twitter Bootstrap style
201
+ * [Winston Teo Yong Wei](https://github.com/winston/google_visualr) Google_Visualr in its version 2.1.2
175
202
 
176
203
 
177
204
  Contributors in alphabetic order
178
205
  --------------------------------
179
- @cseydel
180
- @danscho
181
- @neumanrq
206
+ * [carpodaster](https://github.com/carpodaster)
207
+ * [cseydel](https://github.com/cseydel)
208
+ * [danscho](https://github.com/danscho)
209
+ * [neumannrq](https://github.com/neumannrq)
182
210
 
183
211
  Thanks
184
212
  ------
185
- We are extremely grateful to everyone contributing to this project.
186
- Big thanks to each contributor on Impressionist. This gem helped me a long way to get here in modelling and creating a gem.
213
+ We PRs thanks to everyone contributing to this project. Big thanks to each contributor on Impressionist. This gem helped me ([cseydel](https://github.com/cseydel)) a long way to get here in modelling and creating a gem.
187
214
 
188
215
 
189
- See LICENSE.txt for details on licenses.
216
+ See [LICENSE.txt](https://raw.github.com/Absolventa/best_boy/master/LICENSE.txt) for usage and licensing details.
data/Rakefile CHANGED
File without changes
@@ -1,20 +1,40 @@
1
1
  require "best_boy/engine.rb"
2
2
 
3
3
  module BestBoy
4
- # Define ORM
5
- mattr_accessor :precompile_assets, :orm, :base_controller, :before_filter,
6
- :skip_before_filter, :skip_after_filter, :custom_redirect
7
-
8
- @@precompile_assets = false
9
- @@orm = :active_record
10
- @@base_controller = "ApplicationController"
11
- @@before_filter = nil
4
+ mattr_accessor :base_controller, :before_filter, :custom_redirect, :orm,
5
+ :precompile_assets, :skip_after_filter, :skip_before_filter, :test_mode
6
+
7
+ @@base_controller = "ApplicationController"
8
+ @@before_filter = nil
9
+ @@custom_redirect = nil
10
+ @@orm = :active_record
11
+ @@precompile_assets = false
12
+ @@skip_after_filter = nil
12
13
  @@skip_before_filter = nil
13
- @@skip_after_filter = nil
14
- @@custom_redirect = nil
14
+ @@test_mode = false
15
15
 
16
16
  # Load configuration from initializer
17
17
  def self.setup
18
18
  yield self
19
19
  end
20
+
21
+ def self.in_test_mode(&block)
22
+ execute_with_test_mode_set_to(true, &block)
23
+ end
24
+
25
+ def self.in_real_mode(&block)
26
+ execute_with_test_mode_set_to(false, &block)
27
+ end
28
+
29
+ private
30
+
31
+ def self.execute_with_test_mode_set_to(test_mode, &block)
32
+ Mutex.new.synchronize do
33
+ test_mode_before = self.test_mode
34
+ self.test_mode = test_mode
35
+ block.call if block.present?
36
+ self.test_mode = test_mode_before
37
+ end
38
+ end
39
+
20
40
  end
@@ -1,11 +1,9 @@
1
1
  module BestBoyController
2
2
  module InstanceMethods
3
+ protected
4
+
3
5
  def best_boy_event(obj, event, source = nil)
4
- if obj.respond_to?("eventable?")
5
- obj.trigger_best_boy_event(event, source)
6
- else
7
- raise "#{obj.class.to_s} is not a best_boy eventable!"
8
- end
6
+ obj.trigger_best_boy_event(event, source)
9
7
  end
10
8
  end
11
- end
9
+ end
@@ -5,7 +5,7 @@ require "google_visualr"
5
5
  module BestBoy
6
6
  class Engine < ::Rails::Engine
7
7
 
8
- initializer 'best_boy.assets', :group => :all do |app|
8
+ initializer 'best_boy.assets', group: :all do |app|
9
9
  initializer_path = "#{Rails.root}/config/initializers/best_boy.rb"
10
10
  require initializer_path if File.exist? initializer_path
11
11
 
@@ -16,10 +16,11 @@ module BestBoy
16
16
 
17
17
  initializer 'best_boy.model' do |app|
18
18
  if BestBoy.orm == :active_record
19
+ require "best_boy/models/active_record/best_boy/obeys_test_mode.rb"
19
20
  require "best_boy/models/active_record/best_boy_event.rb"
20
21
  require "best_boy/models/active_record/best_boy/eventable.rb"
21
- require "best_boy/models/active_record/best_boy_day_report.rb"
22
- require "best_boy/models/active_record/best_boy_month_report.rb"
22
+ require "best_boy/models/active_record/best_boy/day_report.rb"
23
+ require "best_boy/models/active_record/best_boy/month_report.rb"
23
24
  ActiveRecord::Base.send(:include, BestBoy::Eventable)
24
25
  else
25
26
  raise "Sorry, best_boy actually only supports ActiveRecord ORM."
@@ -1,6 +1,8 @@
1
1
  module BestBoy
2
2
  class DayReport < ActiveRecord::Base
3
3
 
4
+ include BestBoy::ObeysTestMode
5
+
4
6
  # db configuration
5
7
  #
6
8
  #
@@ -3,19 +3,18 @@ module BestBoy
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  module ClassMethods
6
- attr_accessor :disable_callbacks
7
- @disable_callbacks = nil
6
+ attr_accessor :best_boy_disable_callbacks
8
7
 
9
8
  def has_a_best_boy(options={})
10
9
  # constants
11
10
  #
12
11
  #
13
- @disable_callbacks = options[:disable_callbacks]
12
+ self.best_boy_disable_callbacks = options[:disable_callbacks]
14
13
 
15
14
  # associations
16
15
  #
17
16
  #
18
- has_many :best_boy_events, :as => :owner, :dependent => :nullify
17
+ has_many :best_boy_events, as: :owner, dependent: :nullify
19
18
 
20
19
  # callbacks
21
20
  #
@@ -23,16 +22,14 @@ module BestBoy
23
22
  after_create :trigger_create_event
24
23
  after_destroy :trigger_destroy_event
25
24
  end
26
-
27
- def best_boy_disable_callbacks
28
- @disable_callbacks
29
- end
30
25
  end
31
26
 
32
- def eventable?
33
- true
27
+ def trigger_best_boy_event type, source = nil
28
+ create_best_boy_event_with_type(type, source)
34
29
  end
35
30
 
31
+ private
32
+
36
33
  def trigger_create_event
37
34
  return if self.class.best_boy_disable_callbacks
38
35
  create_best_boy_event_with_type "create"
@@ -43,14 +40,13 @@ module BestBoy
43
40
  create_best_boy_event_with_type "destroy"
44
41
  end
45
42
 
46
- def trigger_best_boy_event type, source = nil
47
- create_best_boy_event_with_type(type, source)
48
- end
49
-
50
43
  def create_best_boy_event_with_type type, source = nil
51
44
  raise "nil event is not allowed" if type.blank?
52
- best_boy_event = BestBoyEvent.new(:event => type, :event_source => source)
53
- best_boy_event.owner = self
45
+ best_boy_event = BestBoyEvent.new do |bbe|
46
+ bbe.event = type
47
+ bbe.event_source = source
48
+ bbe.owner = self
49
+ end
54
50
  best_boy_event.save
55
51
  report type, source
56
52
  end
@@ -1,6 +1,8 @@
1
1
  module BestBoy
2
2
  class MonthReport < ActiveRecord::Base
3
3
 
4
+ include BestBoy::ObeysTestMode
5
+
4
6
  # db configuration
5
7
  #
6
8
  #
@@ -0,0 +1,11 @@
1
+ module BestBoy
2
+ module ObeysTestMode
3
+ def save(*args)
4
+ BestBoy.test_mode || super
5
+ end
6
+
7
+ def save!(*args)
8
+ BestBoy.test_mode || super
9
+ end
10
+ end
11
+ end
@@ -1,14 +1,16 @@
1
1
  class BestBoyEvent < ActiveRecord::Base
2
2
 
3
+ include BestBoy::ObeysTestMode
4
+
3
5
  # associations
4
6
  #
5
7
  #
6
- belongs_to :owner, :polymorphic => true
8
+ belongs_to :owner, polymorphic: true
7
9
 
8
10
  # validations
9
11
  #
10
12
  #
11
- validates :event, :presence => true
13
+ validates :event, presence: true
12
14
 
13
15
  # scopes
14
16
  #
@@ -1,3 +1,3 @@
1
1
  module BestBoy
2
- VERSION = "2.0.3"
2
+ VERSION = "2.1.0"
3
3
  end
File without changes
File without changes
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: best_boy
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.3
5
- prerelease:
4
+ version: 2.1.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Christoph Seydel, Robin Neumann, Daniel Schoppmann
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-11-15 00:00:00.000000000 Z
11
+ date: 2014-03-05 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rails
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: kaminari
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ~>
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ~>
44
39
  - !ruby/object:Gem::Version
@@ -46,39 +41,34 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: google_visualr
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: sqlite3
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - '>='
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - '>='
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: rspec-rails
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
73
  - - ~>
84
74
  - !ruby/object:Gem::Version
@@ -86,7 +76,6 @@ dependencies:
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
80
  - - ~>
92
81
  - !ruby/object:Gem::Version
@@ -94,7 +83,6 @@ dependencies:
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: shoulda
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
87
  - - ~>
100
88
  - !ruby/object:Gem::Version
@@ -102,7 +90,6 @@ dependencies:
102
90
  type: :development
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
94
  - - ~>
108
95
  - !ruby/object:Gem::Version
@@ -110,39 +97,20 @@ dependencies:
110
97
  - !ruby/object:Gem::Dependency
111
98
  name: haml
112
99
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
100
  requirements:
115
- - - ! '>='
101
+ - - '>='
116
102
  - !ruby/object:Gem::Version
117
103
  version: '0'
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
107
  requirements:
123
- - - ! '>='
108
+ - - '>='
124
109
  - !ruby/object:Gem::Version
125
110
  version: '0'
126
- - !ruby/object:Gem::Dependency
127
- name: kaminari
128
- requirement: !ruby/object:Gem::Requirement
129
- none: false
130
- requirements:
131
- - - ~>
132
- - !ruby/object:Gem::Version
133
- version: 0.14.1
134
- type: :development
135
- prerelease: false
136
- version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
- requirements:
139
- - - ~>
140
- - !ruby/object:Gem::Version
141
- version: 0.14.1
142
111
  - !ruby/object:Gem::Dependency
143
112
  name: sass-rails
144
113
  requirement: !ruby/object:Gem::Requirement
145
- none: false
146
114
  requirements:
147
115
  - - ~>
148
116
  - !ruby/object:Gem::Version
@@ -150,7 +118,6 @@ dependencies:
150
118
  type: :development
151
119
  prerelease: false
152
120
  version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
121
  requirements:
155
122
  - - ~>
156
123
  - !ruby/object:Gem::Version
@@ -162,6 +129,8 @@ executables: []
162
129
  extensions: []
163
130
  extra_rdoc_files: []
164
131
  files:
132
+ - README.md
133
+ - Rakefile
165
134
  - app/assets/images/best_boy/glyphicons-halflings-white.png
166
135
  - app/assets/images/best_boy/glyphicons-halflings.png
167
136
  - app/assets/javascripts/best_boy/best_boy.js
@@ -181,14 +150,15 @@ files:
181
150
  - app/views/layouts/best_boy_backend.html.erb
182
151
  - config/initializers/will_paginate.rb
183
152
  - config/routes.rb
153
+ - lib/best_boy.rb
184
154
  - lib/best_boy/controllers/best_boy_controller.rb
185
155
  - lib/best_boy/engine.rb
156
+ - lib/best_boy/models/active_record/best_boy/day_report.rb
186
157
  - lib/best_boy/models/active_record/best_boy/eventable.rb
187
- - lib/best_boy/models/active_record/best_boy_day_report.rb
158
+ - lib/best_boy/models/active_record/best_boy/month_report.rb
159
+ - lib/best_boy/models/active_record/best_boy/obeys_test_mode.rb
188
160
  - lib/best_boy/models/active_record/best_boy_event.rb
189
- - lib/best_boy/models/active_record/best_boy_month_report.rb
190
161
  - lib/best_boy/version.rb
191
- - lib/best_boy.rb
192
162
  - lib/generators/active_record/best_boy_generator.rb
193
163
  - lib/generators/active_record/templates/add_event_source_to_best_boy_events_table.rb
194
164
  - lib/generators/active_record/templates/create_best_boy_events_table.rb
@@ -201,31 +171,28 @@ files:
201
171
  - lib/generators/templates/bootstrap/glyphicons-halflings-white.png
202
172
  - lib/generators/templates/bootstrap/glyphicons-halflings.png
203
173
  - lib/tasks/recover_report_history.rake
204
- - Rakefile
205
- - README.md
206
174
  homepage: https://github.com/absolventa/best_boy
207
175
  licenses:
208
176
  - MIT
177
+ metadata: {}
209
178
  post_install_message:
210
179
  rdoc_options: []
211
180
  require_paths:
212
181
  - lib
213
182
  required_ruby_version: !ruby/object:Gem::Requirement
214
- none: false
215
183
  requirements:
216
- - - ! '>='
184
+ - - '>='
217
185
  - !ruby/object:Gem::Version
218
186
  version: '0'
219
187
  required_rubygems_version: !ruby/object:Gem::Requirement
220
- none: false
221
188
  requirements:
222
- - - ! '>='
189
+ - - '>='
223
190
  - !ruby/object:Gem::Version
224
191
  version: '0'
225
192
  requirements: []
226
193
  rubyforge_project:
227
- rubygems_version: 1.8.25
194
+ rubygems_version: 2.2.2
228
195
  signing_key:
229
- specification_version: 3
196
+ specification_version: 4
230
197
  summary: a simple event driven logging for models
231
198
  test_files: []