log_table 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: 5a3bac03cb5e151d6994bfbcddcf876d6d1ff4bb
4
- data.tar.gz: d8197dba004608c3f58e82f2ad2254dd33f9666e
3
+ metadata.gz: 52f146085c33b699a9ad2c599635622ba24e69b0
4
+ data.tar.gz: 626da3f952be97c2775b8c18c636f240ac0f81d8
5
5
  SHA512:
6
- metadata.gz: 8533007d4d2f356397df004ddfadca193bf83112878d4f889f5e374ba0dcd09d6cc87aa5c2b0ad08b9822d0d2d25eddce640cef12df126ee4a63a13dad55b6a9
7
- data.tar.gz: e1b55ac03f7fa8d1353e10bc4cf3957777b034d4a3e17bf26997b271d9daff8a7bd469a28430d7c6e725c40686b429df326e593006c86663c4410e8ca4d965c5
6
+ metadata.gz: 504e87d8d33ae8aef765ea177d17042d6adfecf27eaa70aa6f2b9225a88f042dc091a987ccab5301cca16de5a490bb1dea1792bb9316d0c1867cf86ed0c50c99
7
+ data.tar.gz: 2c3c1243bfade52c08909425cf20c23dd1fa1ebba2f0fed6f5891f87c69ded6c1ec6add55d6e1951180d39567f766b486f66e169323cbf94e1bcaf1ace00d964
data/.travis.yml CHANGED
@@ -1,4 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
+ - 1.9.3
4
+ - 2.1.5
3
5
  - 2.2.3
4
6
  before_install: gem install bundler -v 1.10.6
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # LogTable
2
2
 
3
+ [<img src="https://secure.travis-ci.org/diskshima/log_table.png?branch=master" />](http://travis-ci.org/diskshima/log_table)
4
+
3
5
  The LogTable gem will read your Active Record model and generate a table to store logs to.
4
6
  It will additionally create triggers which will do the actual saving into the log table.
5
7
 
@@ -21,7 +23,12 @@ Or install it yourself as:
21
23
 
22
24
  ## Usage
23
25
 
24
- WIP
26
+ After installing the gem, you will need to run the below two Rake tasks
27
+
28
+ $ bundle exec rake db:generate_log_table_migration MODEL=MODEL1,MODEL2,...
29
+ $ bundle exec rake db:generate_log_trigger_migration MODEL=MODEL1,MODEL2,...
30
+
31
+ The first will generate a migration which will generate the log tables and the second will generate a migration for the triggers.
25
32
 
26
33
  ## Contributing
27
34
 
data/TODO.md ADDED
@@ -0,0 +1,5 @@
1
+ # TODO
2
+
3
+ - [x] Add comments for generated code
4
+ - [x] Ability to log on delete
5
+ - [ ] Migrations when columns are added (NOTE: not when deleted. We do not want to delete a column from the log table even if the original does not have it anymore)
@@ -1,3 +1,3 @@
1
1
  module LogTable
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/log_table.rb CHANGED
@@ -9,6 +9,31 @@ require 'log_table/version'
9
9
  require 'hairtrigger'
10
10
 
11
11
  module LogTable
12
+ module LogStatus
13
+ STATUS_COLUMN_NAME = 'log_table_status'
14
+ INSERTED = 'inserted'
15
+ UPDATED = 'updated'
16
+ DELETED = 'deleted'
17
+
18
+ def self.sql_func(status, model_name, column_names, table_name, options)
19
+ col_names = column_names
20
+
21
+ db_columns = [STATUS_COLUMN_NAME] + col_names.map { |col_name|
22
+ col_name == 'id' ? "#{model_name.underscore}_id" : "#{col_name}"
23
+ }
24
+
25
+ db_columns_str = db_columns.join(', ')
26
+
27
+ values = (["\"#{status}\""] + col_names.map { |col| "NEW.#{col}" }).join(', ')
28
+
29
+ log_table_name = options[:table_name] || "#{table_name}_log"
30
+
31
+ sql = "INSERT INTO #{log_table_name}(#{db_columns_str}) VALUES (#{values})"
32
+
33
+ sql
34
+ end
35
+ end
36
+
12
37
  def self.included(base)
13
38
  base.send :extend, ClassMethods
14
39
  end
@@ -23,24 +48,20 @@ module LogTable
23
48
  # - :table_name - Specify table name of the log table.
24
49
  #
25
50
  def add_log_trigger(options = {})
26
- col_names = column_names
27
-
28
- db_columns = col_names.map { |col_name|
29
- col_name == 'id' ? "#{name.underscore}_id" : "#{col_name}"
30
- }.join(', ')
31
-
32
- values = col_names.map { |col| "NEW.#{col}" }.join(', ')
33
-
34
- log_table_name = options[:table_name] || "#{table_name}_log"
35
-
36
- insert_sql = "INSERT INTO #{log_table_name}(#{db_columns}) VALUES (#{values})"
37
51
 
38
52
  trigger.after(:insert) do
39
- insert_sql
53
+ LogStatus.sql_func(LogStatus::INSERTED, name, column_names, table_name,
54
+ options)
40
55
  end
41
56
 
42
57
  trigger.after(:update) do
43
- insert_sql
58
+ LogStatus.sql_func(LogStatus::UPDATED, name, column_names, table_name,
59
+ options)
60
+ end
61
+
62
+ trigger.after(:delete) do
63
+ LogStatus.sql_func(LogStatus::DELETED, name, column_names, table_name,
64
+ options)
44
65
  end
45
66
  end
46
67
  end
@@ -1,3 +1,5 @@
1
+ # Generated by log_table.
2
+
1
3
  class <%= migration_class_name %> < ActiveRecord::Migration
2
4
  def change
3
5
  <% tables.each do |table| %>
data/log_table.gemspec CHANGED
@@ -25,4 +25,5 @@ Gem::Specification.new do |spec|
25
25
  spec.add_development_dependency 'rake', '~> 10.0'
26
26
  spec.add_development_dependency 'minitest', '~> 5.8'
27
27
  spec.add_development_dependency 'm', '~> 1.4'
28
+ spec.add_development_dependency 'sqlite3', '~> 1.3'
28
29
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: log_table
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
  - Daisuke Shimamoto
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-12-01 00:00:00.000000000 Z
11
+ date: 2015-12-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hairtrigger
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '1.4'
83
+ - !ruby/object:Gem::Dependency
84
+ name: sqlite3
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.3'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.3'
83
97
  description: log_table creates a log table for the given Active Record model and triggers
84
98
  to write into it.
85
99
  email:
@@ -95,6 +109,7 @@ files:
95
109
  - LICENSE.txt
96
110
  - README.md
97
111
  - Rakefile
112
+ - TODO.md
98
113
  - bin/console
99
114
  - bin/setup
100
115
  - lib/log_table.rb