breathing 0.0.9 → 0.0.10

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