log_table 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: 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