acb 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: 78012876872f6c6493c9613eb2a64fe4ad023e9a25f1f9afc43077f320e74cff
4
- data.tar.gz: e806a9b3d9d2a3c39d9145bd8a44edd8e81e19ecc59d5bd53c041123e6e5ed82
3
+ metadata.gz: 3f68e2938e80af9df35a5ae1994a7aa479ffb5d2b11208e35944991d82957b8d
4
+ data.tar.gz: 24f7f96a0635e48002f4c7a743cf112d5bd4067633264688d8a9668b0abe2e90
5
5
  SHA512:
6
- metadata.gz: b692b3210b15b704c75039571cd079459d55e133894a117a8021e3c24a7b6186272540bad6d540f4ebf28a3e59317a84ef3bd193c2e67357ebee07e41eef3b69
7
- data.tar.gz: 8e8f579b6776aefeb3cf643b058943356a83091e379c2f926164debff5c576f8fb4abb693ac39f78bad0f952639b33a9bf145eaecc6d9645522bdb2bdb9b69ce
6
+ metadata.gz: 51a8387a18a49aa52e7e55608c5d5bd35267f57f8319a83970d296eb7b64ffdc01918545201650722917d7fc248e7d067f3d5eeef50a2b3814aab5060971f119
7
+ data.tar.gz: d3b4736088edbebc5d7ecfa372b037af409d3eb3e6a46e0ca01286ed138a5d805893e45526f4161dc8dde2bea7871bf0905fe464d0e5da74bfc220ff3bd3809b
data/.rubocop.yml CHANGED
@@ -19,7 +19,14 @@ Style/StringLiteralsInInterpolation:
19
19
  Enabled: true
20
20
  EnforcedStyle: single_quotes
21
21
 
22
+ Style/WordArray:
23
+ Enabled: false
24
+
22
25
  Layout/LineLength:
23
26
  Max: 120
24
27
  Exclude:
25
28
  - 'spec/support/seed.rb'
29
+
30
+ Metrics/BlockLength:
31
+ Exclude:
32
+ - 'spec/**/*'
data/lib/acb/column.rb ADDED
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Acb
4
+ class Column
5
+ attr_reader :name
6
+
7
+ def initialize(name, **options)
8
+ @name = name
9
+ @index = case options[:index]
10
+ when Proc
11
+ options[:index]
12
+ when String
13
+ options[:index].split('.')
14
+ else
15
+ [name]
16
+ end
17
+ @format = options[:format]
18
+ end
19
+
20
+ def digest(row)
21
+ data = _digest(row)
22
+ @format && data ? format(data) : data
23
+ end
24
+
25
+ private
26
+
27
+ def _digest(row)
28
+ if @index.is_a?(Array)
29
+ @index.reduce(row) do |acc, mthd|
30
+ acc.send(mthd)
31
+ end
32
+ else
33
+ @index.call(row)
34
+ end
35
+ end
36
+
37
+ def format(data)
38
+ case data
39
+ when Date, Time
40
+ data.strftime(@format)
41
+ else
42
+ @format % data
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Acb
4
+ class Columns
5
+ def initialize
6
+ @columns = []
7
+ end
8
+
9
+ def push(name, **options)
10
+ @columns.push(Column.new(name, **options))
11
+ end
12
+
13
+ def header
14
+ @columns.map(&:name)
15
+ end
16
+
17
+ def get_data(row)
18
+ @columns.map { |column| column.digest(row) }
19
+ end
20
+ end
21
+ end
data/lib/acb/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Acb
4
- VERSION = '0.1.1'
4
+ VERSION = '0.1.2'
5
5
  end
data/lib/acb.rb CHANGED
@@ -2,109 +2,37 @@
2
2
 
3
3
  require_relative 'acb/version'
4
4
  require 'active_support'
5
- require 'forwardable'
6
5
  require 'csv'
7
6
 
8
7
  module Acb
9
8
  extend ActiveSupport::Concern
10
9
 
11
- class Header
12
- extend Forwardable
13
- include Enumerable
14
-
15
- attr_accessor :columns
16
-
17
- def_delegator :@columns, :each
18
-
19
- def initialize
20
- @columns = []
21
- end
22
-
23
- def push(name, **options)
24
- @columns.push(Column.new(name, **options))
25
- end
26
-
27
- def keys
28
- @columns.map(&:name)
29
- end
30
-
31
- def get_data(row)
32
- @columns.map { |column| column.digest(row) }
33
- end
34
- end
35
-
36
- class Column
37
- attr_reader :name
38
-
39
- def initialize(name, **options)
40
- @name = name
41
- @index = case options[:index]
42
- when Proc
43
- options[:index]
44
- when String
45
- options[:index].split('.')
46
- else
47
- [name]
48
- end
49
- @format = options[:format]
50
- end
51
-
52
- def digest(row)
53
- data = _digest(row)
54
- @format && data ? format(data) : data
55
- end
56
-
57
- def _digest(row)
58
- if @index.is_a?(Array)
59
- @index.reduce(row) do |acc, set|
60
- acc.send(set)
61
- end
62
- else
63
- @index.call(row)
64
- end
65
- end
66
-
67
- def format(data)
68
- case data
69
- when Date, Time
70
- data.strftime(@format)
71
- else
72
- @format % data
73
- end
74
- end
75
- end
10
+ autoload :Column, 'acb/column'
11
+ autoload :Columns, 'acb/columns'
76
12
 
77
13
  class_methods do
78
- def header
79
- @header ||= Header.new
14
+ def columns
15
+ @columns ||= Columns.new
80
16
  end
81
17
 
82
18
  def add_column(name:, **options)
83
- header.push(name, **options)
19
+ columns.push(name, **options)
84
20
  end
85
21
  end
86
22
 
87
- def initialize(options = {})
88
- @options = options
89
- end
90
-
91
23
  def data
92
24
  @data = @data.preload(relations) if respond_to?(:relations)
93
25
  @data.find_each
94
26
  end
95
27
 
96
- def header
97
- self.class.header.keys
98
- end
99
-
100
28
  def get_data_from(row)
101
- self.class.header.get_data(row)
29
+ self.class.columns.get_data(row)
102
30
  end
103
31
 
104
- def content_string
105
- header_content = header.join(',')
32
+ def content_string(**options)
33
+ header_content = self.class.columns.header.join(',')
106
34
 
107
- CSV.generate(header_content, **@options) do |csv|
35
+ CSV.generate(header_content, **options) do |csv|
108
36
  data.each do |row|
109
37
  csv << get_data_from(row)
110
38
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acb
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
  - Akito Hikasa
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-12-24 00:00:00.000000000 Z
11
+ date: 2022-12-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -86,6 +86,8 @@ files:
86
86
  - gemfiles/rails_6.1_stable.gemfile
87
87
  - gemfiles/rails_7.0_stable.gemfile
88
88
  - lib/acb.rb
89
+ - lib/acb/column.rb
90
+ - lib/acb/columns.rb
89
91
  - lib/acb/version.rb
90
92
  - sig/acb.rbs
91
93
  homepage: https://github.com/kakubin/acb