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 +4 -4
- data/.rubocop.yml +7 -0
- data/lib/acb/column.rb +46 -0
- data/lib/acb/columns.rb +21 -0
- data/lib/acb/version.rb +1 -1
- data/lib/acb.rb +9 -81
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3f68e2938e80af9df35a5ae1994a7aa479ffb5d2b11208e35944991d82957b8d
|
4
|
+
data.tar.gz: 24f7f96a0635e48002f4c7a743cf112d5bd4067633264688d8a9668b0abe2e90
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
data/lib/acb/columns.rb
ADDED
@@ -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
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
|
-
|
12
|
-
|
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
|
79
|
-
@
|
14
|
+
def columns
|
15
|
+
@columns ||= Columns.new
|
80
16
|
end
|
81
17
|
|
82
18
|
def add_column(name:, **options)
|
83
|
-
|
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.
|
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,
|
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.
|
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-
|
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
|