activerecord-bitemporal-tablize 0.1.1 → 0.1.2

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
  SHA256:
3
- metadata.gz: 70de8844f5350436e2c63ba028631191b4945c9438c7a9fe38edb15da92078b0
4
- data.tar.gz: f4158dd30e7e2d57671cf560c40afd1dc440c200c4bf3ac6c71b8e34163bbfa6
3
+ metadata.gz: 8f6945f01b5fba96240435a8cd218539cb58d071662dae1819de71a918fcc876
4
+ data.tar.gz: 41fe5ea0d74db317f120ae714f3f254683eb017269a26412eae8158a25ec0752
5
5
  SHA512:
6
- metadata.gz: f1c2b6291e26d91067214fc1747ba63a68f2d7f3a6c1ef92523505c22a7268f8cc54bcd45beebd25a9e68a03269c609857a66dff31b4bfa8f39195e56234e294
7
- data.tar.gz: c49f90a02ebdaa545aa9f99fee351fcb6630030138b086d0c973017565b7a7c6c6b8164da0746d5c4b9b191110e707738854945571e2469100a9f1edc04c5f3c
6
+ metadata.gz: cec227269db0b579e91b3d0360c1a27afad3765cbdd35e8c7dbefe42fe45fa3a843044dd6ab83b9ebda897f766c182c4ae22bf02e69aeeceb3aa6529586597da
7
+ data.tar.gz: 2f05986586612f84aa48231c138cd2acee85ad17b3587d8fffa22f5777bb1f5b592af21fbdf85ea3794ceadc0cb588ea9a7933520f34bab87b6bd54040f31313
data/README.md CHANGED
@@ -22,7 +22,48 @@ Or install it yourself as:
22
22
 
23
23
  ## Usage
24
24
 
25
- TODO: Write usage instructions here
25
+ ローカル環境でgemをインストールし、`rails console`した後でrequireする
26
+ ref: https://qiita.com/kyanny/items/d370efe14ef15d9afacb
27
+
28
+ ```
29
+ [1] pry(main)> Employee.first.history.print_table
30
+ (0.8ms) SELECT sqlite_version(*)
31
+ Employee Load (0.3ms) SELECT "employees".* FROM "employees" WHERE "employees"."valid_from" <= ? AND "employees"."valid_to" > ? AND "employees"."deleted_at" IS NULL ORDER BY "employees"."bitemporal_id" ASC LIMIT ? [["valid_from", "2021-06-20 13:21:42.229006"], ["valid_to", "2021-06-20 13:21:42.229006"], ["LIMIT", 1]]
32
+ Employee Load (0.2ms) SELECT "employees".* FROM "employees" WHERE "employees"."deleted_at" IS NULL AND "employees"."bitemporal_id" = ? ORDER BY "employees"."valid_from" DESC [["bitemporal_id", 1]]
33
+ +------------+----+---------+--------+-----------+-------------------------+-------------------------+---------------+------------+------------+------------+-------------------------+-------------------------+
34
+ | | id | unit_id | name | joined_at | created_at | updated_at | bitemporal_id | valid_from | valid_to | deleted_at | transaction_from | transaction_to |
35
+ +-9999/12/31-+----+---------+--------+-----------+-------------------------+-------------------------+---------------+------------+------------+------------+-------------------------+-------------------------+
36
+ | | 1 | 2 | 山田 | | 2021-06-20 01:44:43 UTC | 2021-06-20 01:44:43 UTC | 1 | 2021/04/01 | 9999/12/31 | | 2021-06-20 01:44:43 UTC | 9999-12-31 00:00:00 UTC |
37
+ +-2021/04/01-+----+---------+--------+-----------+-------------------------+-------------------------+---------------+------------+------------+------------+-------------------------+-------------------------+
38
+ +-2021/04/01-+----+---------+--------+-----------+-------------------------+-------------------------+---------------+------------+------------+------------+-------------------------+-------------------------+
39
+ | | 1 | 1 | たけし | | 2021-06-20 01:44:43 UTC | 2021-06-20 01:44:43 UTC | 1 | 2020/01/01 | 2021/04/01 | | 2021-06-20 01:44:43 UTC | 9999-12-31 00:00:00 UTC |
40
+ +-2020/01/01-+----+---------+--------+-----------+-------------------------+-------------------------+---------------+------------+------------+------------+-------------------------+-------------------------+
41
+ => nil
42
+ [2] pry(main)> Employee.first.history.print_table_diff_only
43
+ Employee Load (0.2ms) SELECT "employees".* FROM "employees" WHERE "employees"."valid_from" <= ? AND "employees"."valid_to" > ? AND "employees"."deleted_at" IS NULL ORDER BY "employees"."bitemporal_id" ASC LIMIT ? [["valid_from", "2021-06-20 13:21:44.302316"], ["valid_to", "2021-06-20 13:21:44.302316"], ["LIMIT", 1]]
44
+ Employee Load (0.1ms) SELECT "employees".* FROM "employees" WHERE "employees"."deleted_at" IS NULL AND "employees"."bitemporal_id" = ? ORDER BY "employees"."valid_from" DESC [["bitemporal_id", 1]]
45
+ +------------+---------+--------+-------------------------+------------+------------+
46
+ | | unit_id | name | updated_at | valid_from | valid_to |
47
+ +-9999/12/31-+---------+--------+-------------------------+------------+------------+
48
+ | | 2 | 山田 | 2021-06-20 01:44:43 UTC | 2021/04/01 | 9999/12/31 |
49
+ +-2021/04/01-+---------+--------+-------------------------+------------+------------+
50
+ +-2021/04/01-+---------+--------+-------------------------+------------+------------+
51
+ | | 1 | たけし | 2021-06-20 01:44:43 UTC | 2020/01/01 | 2021/04/01 |
52
+ +-2020/01/01-+---------+--------+-------------------------+------------+------------+
53
+ => nil
54
+ [3] pry(main)> Employee.first.history.print_table(:name)
55
+ Employee Load (0.2ms) SELECT "employees".* FROM "employees" WHERE "employees"."valid_from" <= ? AND "employees"."valid_to" > ? AND "employees"."deleted_at" IS NULL ORDER BY "employees"."bitemporal_id" ASC LIMIT ? [["valid_from", "2021-06-20 13:22:54.269095"], ["valid_to", "2021-06-20 13:22:54.269095"], ["LIMIT", 1]]
56
+ Employee Load (0.1ms) SELECT "employees".* FROM "employees" WHERE "employees"."deleted_at" IS NULL AND "employees"."bitemporal_id" = ? ORDER BY "employees"."valid_from" DESC [["bitemporal_id", 1]]
57
+ +------------+--------+
58
+ | | name |
59
+ +-9999/12/31-+--------+
60
+ | | 山田 |
61
+ +-2021/04/01-+--------+
62
+ +-2021/04/01-+--------+
63
+ | | たけし |
64
+ +-2020/01/01-+--------+
65
+ => nil
66
+ ```
26
67
 
27
68
  ## Development
28
69
 
@@ -3,11 +3,17 @@ module ActiveRecord
3
3
  module Bitemporalize
4
4
  module InstanceMethods
5
5
  def history
6
- self.class.ignore_valid_datetime.bitemporal_for(bitemporal_id).order(valid_from: :desc).tap do |records|
7
- records.define_singleton_method(:print_table) do |*attributes|
8
- print ActiveRecord::Bitemporal::Tablize.new(records: records, attributes: attributes).call
9
- end
6
+ records = self.class.ignore_valid_datetime.bitemporal_for(bitemporal_id).order(valid_from: :desc)
7
+
8
+ records.define_singleton_method(:print_table) do |*attributes|
9
+ print ActiveRecord::Bitemporal::Tablize.new(records: records, attributes: attributes).call
10
10
  end
11
+
12
+ records.define_singleton_method(:print_table_diff_only) do |*attributes|
13
+ print ActiveRecord::Bitemporal::Tablize.new(records: records, attributes: attributes, diff_only: true).call
14
+ end
15
+
16
+ records
11
17
  end
12
18
  end
13
19
  end
@@ -7,9 +7,10 @@ class ActiveRecord::Bitemporal::Tablize
7
7
 
8
8
  attr :records, :result, :attributes
9
9
 
10
- def initialize(records:, attributes: [])
10
+ def initialize(records:, attributes: [], diff_only: false)
11
11
  @records = records.map { |record| RecordWrapper.new(record, self) }
12
- @attributes = attributes
12
+ attributes = attributes.empty? ? all_attributes : attributes
13
+ @attributes = diff_only ? select_having_diff : attributes
13
14
  @result = []
14
15
  end
15
16
 
@@ -34,6 +35,14 @@ class ActiveRecord::Bitemporal::Tablize
34
35
 
35
36
  private
36
37
 
38
+ def all_attributes
39
+ records.first&.then { |r| r.attributes.keys.map(&:to_sym) }
40
+ end
41
+
42
+ def select_having_diff
43
+ all_attributes&.select { |attribute| records.map(&:"#{attribute}").uniq.size != 1 }
44
+ end
45
+
37
46
  def append_header
38
47
  result << "+#{build_roof.join('+')}+"
39
48
  result << "|#{build_wall.join('|')}|"
@@ -57,7 +66,7 @@ class ActiveRecord::Bitemporal::Tablize
57
66
  records.each do |record|
58
67
  result << "+#{record.build_roof.join('+')}+"
59
68
  result << "|#{record.build_wall.join('|')}|"
60
- result << "+#{record.build_roof.join('+')}+"
69
+ result << "+#{record.build_floor.join('+')}+"
61
70
  end
62
71
  end
63
72
 
@@ -3,7 +3,7 @@
3
3
  module Activerecord
4
4
  module Bitemporal
5
5
  module Tablize
6
- VERSION = '0.1.1'
6
+ VERSION = '0.1.2'
7
7
  end
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-bitemporal-tablize
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - lighty