activerecord-bitemporal-tablize 0.1.1 → 0.1.2

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