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