acb 0.1.5 → 0.2.1
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 +3 -0
- data/Appraisals +5 -0
- data/README.md +17 -0
- data/gemfiles/rails_7.1_stable.gemfile +11 -0
- data/lib/acb/base.rb +10 -12
- data/lib/acb/columns.rb +9 -8
- data/lib/acb/custom.rb +30 -0
- data/lib/acb/master_column.rb +16 -0
- data/lib/acb/registry.rb +19 -0
- data/lib/acb/version.rb +1 -1
- data/lib/acb.rb +3 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8a8d54b873e3285ef684d8270c40cfb6af19958adf9c585ec6be198c9a865024
|
4
|
+
data.tar.gz: 1a69e9e082921b7a2462474479ec140b2bf43db9e307ab4f040ce6b1726620db
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7203b2e35507032d117559c320e35157ced64eaf944bd66d76d75a83cd78a37c291dc3ad178fafdd9e886f99e931c58a9dbb6bab04c81b3ea17bf2131d9ec62c
|
7
|
+
data.tar.gz: 2db38718731c3e491dfa37f3205d173238ee8bc2c6e77784871ed635a1f6c71eb8e5465922ee9e72b6156a525e44e7205b4718b0fbf22af13c8eb4b3bb6d7ab9
|
data/.rubocop.yml
CHANGED
data/Appraisals
CHANGED
data/README.md
CHANGED
@@ -61,6 +61,23 @@ class PostCsvBuilder
|
|
61
61
|
end
|
62
62
|
|
63
63
|
PostCsvBuilder.new(user_id).to_csv
|
64
|
+
|
65
|
+
# or
|
66
|
+
|
67
|
+
class PostCsvBuilder
|
68
|
+
include Acb
|
69
|
+
|
70
|
+
add_column name: 'id'
|
71
|
+
add_column name: 'User Name', index: 'user.name'
|
72
|
+
add_column name: 'created_at', format: '%Y-%m-%d'
|
73
|
+
add_column name: 'Comment Amount', index: 'comments.size'
|
74
|
+
add_column name: 'First Comment', index: ->(post) { post.comments.first&.content }
|
75
|
+
end
|
76
|
+
|
77
|
+
builder = PostCsvBuilder.new
|
78
|
+
relations = Post.where(user_id: user_id).preload(:user, :comments)
|
79
|
+
builder.load_from(relations)
|
80
|
+
builder.to_csv
|
64
81
|
```
|
65
82
|
|
66
83
|
## Code of Conduct
|
data/lib/acb/base.rb
CHANGED
@@ -4,26 +4,24 @@ module Acb
|
|
4
4
|
module Base
|
5
5
|
extend ActiveSupport::Concern
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
@columns ||= Columns.new
|
10
|
-
end
|
11
|
-
|
12
|
-
def add_column(name:, **options)
|
13
|
-
columns.push(name, **options)
|
14
|
-
end
|
7
|
+
module ClassMethods
|
8
|
+
include Columns
|
15
9
|
end
|
16
10
|
|
17
11
|
def to_csv(**options)
|
18
12
|
CSV.generate(**options) do |csv|
|
19
|
-
csv << self.class.
|
13
|
+
csv << self.class.header
|
20
14
|
data.each do |row|
|
21
|
-
csv <<
|
15
|
+
csv << summarize(row)
|
22
16
|
end
|
23
17
|
end
|
24
18
|
end
|
25
19
|
alias content_string to_csv
|
26
20
|
|
21
|
+
def load_from(relations)
|
22
|
+
@data = relations
|
23
|
+
end
|
24
|
+
|
27
25
|
private
|
28
26
|
|
29
27
|
def data
|
@@ -31,8 +29,8 @@ module Acb
|
|
31
29
|
@data.find_each
|
32
30
|
end
|
33
31
|
|
34
|
-
def
|
35
|
-
self.class.
|
32
|
+
def summarize(row)
|
33
|
+
self.class.summarize(row)
|
36
34
|
end
|
37
35
|
end
|
38
36
|
end
|
data/lib/acb/columns.rb
CHANGED
@@ -1,21 +1,22 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Acb
|
4
|
-
|
5
|
-
def
|
6
|
-
@
|
4
|
+
module Columns
|
5
|
+
def columns
|
6
|
+
@_columns ||= []
|
7
7
|
end
|
8
8
|
|
9
|
-
def
|
10
|
-
|
9
|
+
def add_column(column = nil, name: nil, **options)
|
10
|
+
column ||= Column.new(name, **options)
|
11
|
+
columns.push(column)
|
11
12
|
end
|
12
13
|
|
13
14
|
def header
|
14
|
-
|
15
|
+
columns.map(&:name)
|
15
16
|
end
|
16
17
|
|
17
|
-
def
|
18
|
-
|
18
|
+
def summarize(data)
|
19
|
+
columns.map { |column| column.digest(data) }
|
19
20
|
end
|
20
21
|
end
|
21
22
|
end
|
data/lib/acb/custom.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Acb
|
4
|
+
module Custom
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
included do
|
8
|
+
class_attribute :registry, instance_accessor: false, instance_predicate: false, default: Registry.new
|
9
|
+
end
|
10
|
+
|
11
|
+
module ClassMethods
|
12
|
+
def add_master_column(key:, **options)
|
13
|
+
registry.push(MasterColumn.new(key, **options))
|
14
|
+
end
|
15
|
+
|
16
|
+
def use(columns)
|
17
|
+
klass = Class.new do
|
18
|
+
include Acb::Base
|
19
|
+
end
|
20
|
+
|
21
|
+
columns.each do |column|
|
22
|
+
master_column = registry.lookup(column[:key])
|
23
|
+
klass.add_column(master_column.to_column(column[:name]))
|
24
|
+
end
|
25
|
+
|
26
|
+
klass
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/acb/registry.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Acb
|
4
|
+
class Registry
|
5
|
+
class ColumnNotFound < StandardError; end
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@registrations = []
|
9
|
+
end
|
10
|
+
|
11
|
+
def push(master_column)
|
12
|
+
@registrations.push(master_column)
|
13
|
+
end
|
14
|
+
|
15
|
+
def lookup(key)
|
16
|
+
@registrations.find { |registration| registration.key == key } or raise ColumnNotFound
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/acb/version.rb
CHANGED
data/lib/acb.rb
CHANGED
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.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Akito Hikasa
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-12-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -86,10 +86,14 @@ files:
|
|
86
86
|
- gemfiles/rails_6.0_stable.gemfile
|
87
87
|
- gemfiles/rails_6.1_stable.gemfile
|
88
88
|
- gemfiles/rails_7.0_stable.gemfile
|
89
|
+
- gemfiles/rails_7.1_stable.gemfile
|
89
90
|
- lib/acb.rb
|
90
91
|
- lib/acb/base.rb
|
91
92
|
- lib/acb/column.rb
|
92
93
|
- lib/acb/columns.rb
|
94
|
+
- lib/acb/custom.rb
|
95
|
+
- lib/acb/master_column.rb
|
96
|
+
- lib/acb/registry.rb
|
93
97
|
- lib/acb/version.rb
|
94
98
|
- sig/acb.rbs
|
95
99
|
homepage: https://github.com/kakubin/acb
|