breathing 0.0.9 → 0.0.10

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: 78f7bd77e2aacd87fe91b8e42eeb8dd590fac1a067c90c092a8069fa9d2a391f
4
- data.tar.gz: cb6802aa877aa675fe62170d7d3fde082b1262439c33409a5a38169c90a05c8e
3
+ metadata.gz: 9424309ec8f7ac77b44503b31bbd1a62fa54881cdaa7f75a507ba90d596d1f6a
4
+ data.tar.gz: d217036b86439348557fe9d0538be415260b970b43fa6fc0f29997c4772292d6
5
5
  SHA512:
6
- metadata.gz: 1610bf010d660a7f0c1f00ed61b3235e75497220ef2b21c0f9a5c200b2c670c8495cbf905b782c7202f0236549e086296141d6e3d1b5fd1c24684d3a3af69335
7
- data.tar.gz: 22d2262edfd99554875fbbaec0edac113c5e970a41f32126f7ebf18cc7b141987f9c58b1da1c02f4c1257e8f07a07e4a9a269c8876f6957bcc10cbac3767b161
6
+ metadata.gz: dfd1f75df70cb2380f9ed51000dcfacfdef64ffc185c9965cdc324979f676380c508ee7ed1e4d326bd134732c35aa430f8e10a211edfdf1e2bd30285a909ae84
7
+ data.tar.gz: 931f3a899695f04b044cf83f936db122291b28b85e7eb3924469745cd3b9cb44dd1c5366179c57f5e15720d78ac09dac4b1743062b21e34d6783b07bdb53d6cb
@@ -2,7 +2,7 @@ $:.push File.expand_path('lib', __dir__)
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'breathing'
5
- s.version = '0.0.9'
5
+ s.version = '0.0.10'
6
6
  s.platform = Gem::Platform::RUBY
7
7
  s.authors = ['Akira Kusumoto']
8
8
  s.email = ['akirakusumo10@gmail.com']
@@ -29,9 +29,9 @@ module Breathing
29
29
  def diff
30
30
  return nil if action != 'UPDATE'
31
31
 
32
- changed_attribute_columns.each.with_object({}) do |column_name, diff_hash|
33
- diff_hash[column_name] = {before_data[column_name] => after_data[column_name]}
34
- end
32
+ changed_attribute_columns.map do |column_name|
33
+ "#{column_name}: #{before_data[column_name]} -> #{after_data[column_name]}"
34
+ end.join(" \n")
35
35
  end
36
36
 
37
37
  def attributes_for_excel
@@ -41,9 +41,7 @@ module Breathing
41
41
  'table_name' => table_name,
42
42
  'action' => action,
43
43
  'id' => transaction_id,
44
- 'diff' => diff.to_s,
45
- 'before_data' => before_data.to_s,
46
- 'after_data' => after_data.to_s,
44
+ 'diff' => diff
47
45
  }
48
46
  end
49
47
  end
@@ -27,8 +27,10 @@ module Breathing
27
27
  add_style(sheet)
28
28
  end
29
29
 
30
- add_change_logs_sheet(id) if table_names.size.positive?
31
-
30
+ if table_names.size.positive?
31
+ add_change_logs_sheet(id)
32
+ @workbook.worksheets.rotate!(-1)
33
+ end
32
34
  @workbook.write(file_name)
33
35
  end
34
36
 
@@ -36,9 +38,17 @@ module Breathing
36
38
 
37
39
  def add_header_row(sheet, row)
38
40
  header_color = 'ddedf3' # blue
41
+ foreign_keys = ActiveRecord::Base.connection.foreign_keys(sheet.sheet_name)
39
42
  row.data_attributes.keys.each.with_index do |header_column, column_index|
40
43
  cell = sheet.add_cell(0, column_index, header_column)
41
44
  cell.change_fill(header_color)
45
+ if column_index == 0
46
+ add_hyperlink(sheet: sheet, cell: cell, to_sheet: 'change_logs', to_cell: 'A1')
47
+ end
48
+
49
+ if key = foreign_keys.detect { |k| k.options[:column] == header_column }
50
+ add_hyperlink(sheet: sheet, cell: cell, to_sheet: key.to_table, to_cell: 'A1')
51
+ end
42
52
  end
43
53
  end
44
54
 
@@ -81,12 +91,23 @@ module Breathing
81
91
  end
82
92
 
83
93
  change_logs.each.with_index(1) do |change_log, row_number|
84
- change_log.attributes_for_excel.each.with_index do |(_column_name, value), column_index|
85
- sheet.add_cell(row_number, column_index, value)
94
+ change_log.attributes_for_excel.each.with_index do |(column_name, value), column_index|
95
+ cell = sheet.add_cell(row_number, column_index, value)
96
+
97
+ if column_name == 'table_name'
98
+ add_hyperlink(sheet: sheet, cell: cell, to_sheet: value, to_cell: 'A1')
99
+ end
86
100
  end
87
101
  end
88
102
 
89
103
  add_style(sheet)
90
104
  end
105
+
106
+ def add_hyperlink(sheet:, cell:, to_sheet:, to_cell:)
107
+ sheet.hyperlinks ||= RubyXL::Hyperlinks.new
108
+ sheet.hyperlinks << RubyXL::Hyperlink.new(ref: RubyXL::Reference.ind2ref(cell.row, cell.column), location: "#{to_sheet}!#{to_cell}")
109
+ cell.change_font_underline(true)
110
+ cell.change_font_color('1F1FFF') # blue
111
+ end
91
112
  end
92
113
  end
@@ -7,6 +7,7 @@ ActiveRecord::Base.establish_connection(
7
7
 
8
8
  ActiveRecord::Schema.define version: 0 do
9
9
  create_table :users, force: true do |t|
10
+ t.references :department, foreign_key: false
10
11
  t.string :name, null: false
11
12
  t.integer :age, null: false
12
13
  t.timestamps null: false
@@ -16,6 +17,8 @@ ActiveRecord::Schema.define version: 0 do
16
17
  t.string :name, null: false
17
18
  t.timestamps null: false
18
19
  end
20
+
21
+ add_foreign_key :users, :departments
19
22
  end
20
23
 
21
24
  class User < ActiveRecord::Base
@@ -16,23 +16,24 @@ describe Breathing::Excel do
16
16
  Tempfile.open(['tmp', '.xlsx']) do |file|
17
17
  Breathing::Excel.new.create(file_name: file.path)
18
18
  workbook = RubyXL::Parser.parse(file.path)
19
- expect(workbook.sheets[0].name).to eq('users')
20
- user_sheet = workbook.worksheets[0]
19
+ expect(workbook.sheets.map(&:name)).to eq(%w[change_logs users])
20
+ user_sheet = workbook.worksheets.last
21
21
  expect(user_sheet.sheet_data.size).to eq(Breathing::ChangeLog.where(table_name: :users).count + 1)
22
22
  end
23
23
  end
24
24
 
25
25
  it 'multi sheets' do
26
- user = User.create!(name: 'a', age: 20)
26
+ department = Department.create!(name: 'a')
27
+
28
+ user = User.create!(name: 'a', age: 20, department_id: department.id)
27
29
  user.update!(age: 21)
28
30
  user.destroy!
29
- Department.create!(name: 'a')
30
31
 
31
32
  Tempfile.open(['tmp', '.xlsx']) do |file|
32
33
  Breathing::Excel.new.create(file_name: file.path)
33
34
  workbook = RubyXL::Parser.parse(file.path)
34
- expect(workbook.sheets.map(&:name)).to eq(%w[departments users change_logs])
35
- change_logs_sheet = workbook.worksheets.last
35
+ expect(workbook.sheets.map(&:name)).to eq(%w[change_logs departments users])
36
+ change_logs_sheet = workbook.worksheets.first
36
37
 
37
38
  expect(change_logs_sheet.sheet_data.size).to eq(Breathing::ChangeLog.count + 1)
38
39
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: breathing
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Akira Kusumoto
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-12-23 00:00:00.000000000 Z
11
+ date: 2021-01-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor