weasel 0.1.0 → 0.2.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
  SHA1:
3
- metadata.gz: d760cb9dc3cea66dcc2aa05d827c70b1cbf48380
4
- data.tar.gz: 64525592fd903e40df98aa87d8a4c993715fe212
3
+ metadata.gz: d6162cafcd694b7210e34b8adfb06a68804712c4
4
+ data.tar.gz: b72c21903a01397cc14d09e093bbb2c41a32248f
5
5
  SHA512:
6
- metadata.gz: bf57d3bae060ba231942b8ca814556be64db30abc044d519e6e2338b10d2ac79a4448eba499f178bee11129601636a55ff8b8aacd620efdb7a569b8ba3783b23
7
- data.tar.gz: c5d7d02859dc111aacc11c2d8d2bb8d443f247fcfcef7c1c5ceef7c45103e5245473073f7e7f8dd44b9a641fe721bbc9e2e508380530a186607a055df98438ee
6
+ metadata.gz: 74da567b7dde7fdd7524b6ac3b6ec2af1c62b9cdb11ef8267b77c78f679b888f3d1960b7484e16f80ecffe9eca660583503ef3cae5d7c61d1151b68496c45e42
7
+ data.tar.gz: 1bed4eebf9549908c63548fe646d3e0d9b427b30f3a7ee61b12be51e571ca8317f8d97920a468981f4ba5feb753f1267400ebbc16b1a68895510478fa5bd0fa5
data/.gitignore CHANGED
@@ -7,3 +7,4 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ .ruby-*
data/Gemfile CHANGED
@@ -1,4 +1,3 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- # Specify your gem's dependencies in weasel.gemspec
4
3
  gemspec
data/README.md CHANGED
@@ -22,7 +22,33 @@ Or install it yourself as:
22
22
 
23
23
  ## Usage
24
24
 
25
- TODO: Write usage instructions here
25
+ First, you'll need to create a table like this:
26
+
27
+ ```ruby
28
+ class AddWeaselTables < ActiveRecord::Migration
29
+ def self.up
30
+ create_table :weasel_events do |t|
31
+ t.integer :actor_id
32
+ t.string :actor_type
33
+ t.text :action_data
34
+
35
+ t.timestamps
36
+ end
37
+
38
+ def self.down
39
+ drop_table :weasel_events
40
+ end
41
+ end
42
+ end
43
+ ```
44
+
45
+ Then, create an initializer to configure Weasel. Put this in it:
46
+
47
+ ```ruby
48
+ Weasel.configure do |config|
49
+ config.db_configuration = ActiveRecord::Base.connection_config
50
+ end
51
+ ```
26
52
 
27
53
  ## Development
28
54
 
@@ -32,10 +58,9 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
32
58
 
33
59
  ## Contributing
34
60
 
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/weasel. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](contributor-covenant.org) code of conduct.
61
+ Bug reports and pull requests are welcome on GitHub at https://github.com/goodpeople/weasel. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](contributor-covenant.org) code of conduct.
36
62
 
37
63
 
38
64
  ## License
39
65
 
40
66
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
41
-
data/Rakefile CHANGED
@@ -1,10 +1,10 @@
1
- require "bundler/gem_tasks"
2
- require "rake/testtask"
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
3
 
4
4
  Rake::TestTask.new(:test) do |t|
5
- t.libs << "test"
6
- t.libs << "lib"
5
+ t.libs << 'test'
6
+ t.libs << 'lib'
7
7
  t.test_files = FileList['test/**/*_test.rb']
8
8
  end
9
9
 
10
- task :default => :test
10
+ task default: :test
@@ -0,0 +1,45 @@
1
+ module Weasel
2
+ def audit_with_weasel(*args)
3
+ around_filter :audit, only: args
4
+ end
5
+
6
+ module Auditable
7
+ def audit
8
+ yield
9
+
10
+ Weasel::EventsWorker.perform_async(current_user.id, thin_request)
11
+ end
12
+
13
+ private
14
+
15
+ def thin_request
16
+ parameters = request.params
17
+
18
+ rails_action = "#{parameters[:controller]}:#{parameters[:action]}"
19
+ rails_parameters = parameters.except(:controller, :action)
20
+
21
+ {
22
+ action: rails_action,
23
+ params: rails_parameters,
24
+ remote_ip: request.remote_ip,
25
+ geo_ip_information: geo_ip_information,
26
+ user_agent: request.user_agent,
27
+ response: {
28
+ status: response.status
29
+ }.tap do |hash|
30
+ hash[:body] = response.body if response.body
31
+ end
32
+ }.tap do |hash|
33
+ hash[:flash] = request.flash if request.flash
34
+ end
35
+ end
36
+
37
+ def geo_ip_information
38
+ geo_service.country(request.remote_ip).to_h
39
+ end
40
+
41
+ def geo_service
42
+ @@geoip ||= GeoIP.new(File.join(Rails.root, 'tmp/GeoIP.dat'))
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,9 @@
1
+ module Weasel
2
+ class Event < ActiveRecord::Base
3
+ self.table_name = 'weasel_events'
4
+
5
+ serialize :action_data
6
+
7
+ belongs_to :actor, polymorphic: true
8
+ end
9
+ end
@@ -1,3 +1,3 @@
1
1
  module Weasel
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -0,0 +1,14 @@
1
+ module Weasel
2
+ class EventsWorker
3
+ include Sidekiq::Worker
4
+
5
+ def perform(user_id, request_hash)
6
+ return if user_id.nil? || request_hash.empty?
7
+
8
+ Weasel::Event.create do |object|
9
+ object.actor = User.find(user_id)
10
+ object.action_data = request_hash
11
+ end
12
+ end
13
+ end
14
+ end
data/lib/weasel.rb CHANGED
@@ -1,5 +1,32 @@
1
- require "weasel/version"
1
+ require 'active_record'
2
+ require 'active_support/concern'
3
+
4
+ require 'weasel/concerns/auditable'
5
+ require 'weasel/models/event'
6
+ require 'weasel/workers/events_worker'
7
+ require 'weasel/version'
2
8
 
3
9
  module Weasel
4
- # Your code goes here...
10
+ def self.root
11
+ File.expand_path('../..', __FILE__)
12
+ end
13
+
14
+ class Configuration
15
+ attr_accessor :db_configuration
16
+ end
17
+
18
+ def self.config
19
+ @@config ||= Configuration.new
20
+ end
21
+
22
+ def self.configure
23
+ yield config
24
+
25
+ # Connect to current AR connection.
26
+ ActiveRecord::Base.establish_connection(config.db_configuration)
27
+
28
+ # Extend ActionController with the `audit_with_weasel` method.
29
+ ActionController::Base.extend(Weasel)
30
+ ActionController::Base.send(:include, Weasel::Auditable)
31
+ end
5
32
  end
data/weasel.gemspec CHANGED
@@ -4,22 +4,27 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'weasel/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "weasel"
7
+ spec.name = 'weasel'
8
8
  spec.version = Weasel::VERSION
9
- spec.authors = ["Agustin Cavilliotti"]
10
- spec.email = ["cavi21@gmail.com"]
9
+ spec.authors = ['Agustin Cavilliotti']
10
+ spec.email = ['cavi21@gmail.com']
11
11
 
12
12
  spec.summary = %q{Simple Audit gem}
13
13
  spec.description = %q{Works as a weasel for your controllers}
14
- spec.homepage = "https://github.com/goodpeople/weasel"
15
- spec.license = "MIT"
14
+ spec.homepage = 'https://github.com/goodpeople/weasel'
15
+ spec.license = 'MIT'
16
16
 
17
17
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
- spec.bindir = "exe"
18
+ spec.bindir = 'exe'
19
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
- spec.require_paths = ["lib"]
20
+ spec.require_paths = ['lib']
21
21
 
22
- spec.add_development_dependency "bundler", "~> 1.10"
23
- spec.add_development_dependency "rake", "~> 10.0"
24
- spec.add_development_dependency "minitest"
22
+ spec.add_dependency 'activerecord', '~> 3.2'
23
+ spec.add_dependency 'sidekiq', '~> 2.17'
24
+
25
+ spec.add_development_dependency 'bundler', '~> 1.10'
26
+ spec.add_development_dependency 'pry'
27
+ spec.add_development_dependency 'pry-nav'
28
+ spec.add_development_dependency 'rake', '~> 10.0'
29
+ spec.add_development_dependency 'minitest'
25
30
  end
metadata CHANGED
@@ -1,15 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: weasel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Agustin Cavilliotti
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-03-04 00:00:00.000000000 Z
11
+ date: 2016-04-20 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activerecord
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '3.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: sidekiq
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.17'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2.17'
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: bundler
15
43
  requirement: !ruby/object:Gem::Requirement
@@ -24,6 +52,34 @@ dependencies:
24
52
  - - "~>"
25
53
  - !ruby/object:Gem::Version
26
54
  version: '1.10'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry-nav
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
27
83
  - !ruby/object:Gem::Dependency
28
84
  name: rake
29
85
  requirement: !ruby/object:Gem::Requirement
@@ -69,7 +125,10 @@ files:
69
125
  - bin/console
70
126
  - bin/setup
71
127
  - lib/weasel.rb
128
+ - lib/weasel/concerns/auditable.rb
129
+ - lib/weasel/models/event.rb
72
130
  - lib/weasel/version.rb
131
+ - lib/weasel/workers/events_worker.rb
73
132
  - weasel.gemspec
74
133
  homepage: https://github.com/goodpeople/weasel
75
134
  licenses:
@@ -91,7 +150,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
91
150
  version: '0'
92
151
  requirements: []
93
152
  rubyforge_project:
94
- rubygems_version: 2.2.3
153
+ rubygems_version: 2.4.8
95
154
  signing_key:
96
155
  specification_version: 4
97
156
  summary: Simple Audit gem