weasel 0.1.0 → 0.2.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
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