csvbuilder-core 0.1.2 → 0.1.3
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/CHANGELOG.md +28 -0
- data/Gemfile.lock +80 -0
- data/README.md +122 -5
- data/lib/csvbuilder/core/internal/attribute_base.rb +13 -0
- data/lib/csvbuilder/core/internal/model/header.rb +10 -3
- data/lib/csvbuilder/core/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e7be65a3637e42b4ec99f9ebc795479ac8b629fa5921fe892784c928ce788789
|
4
|
+
data.tar.gz: 65e07ac9fdedb085aa6850ae58cba1d1b530275b4dfe6c39edbb28b3ab8f6db5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0fb1213ba385c60faecc0f4a943ffd71328f215609bf4b876f0c641691f52d6caa545c621ba1b3ebb4df7be6a9a58c51cef2679754786abb90ada1cbd1321aab
|
7
|
+
data.tar.gz: e816c1c62f4e22a16d416f82abefbc502c523d2656700140fee941d84a7051e82ab65798dad21eb43e044c0c4e863339e0ae27b2d2a104d205619fce9b2eee66
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,33 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
|
3
|
+
## [0.1.3] - 2023-03-03
|
4
|
+
|
5
|
+
Add Header default formatting
|
6
|
+
|
7
|
+
```ruby
|
8
|
+
class BasicRowModel
|
9
|
+
include Csvbuilder::Model
|
10
|
+
|
11
|
+
column :alpha
|
12
|
+
end
|
13
|
+
|
14
|
+
BasicRowModel.headers
|
15
|
+
# => ["Alpha"]
|
16
|
+
```
|
17
|
+
|
18
|
+
Basic Proc Capability
|
19
|
+
|
20
|
+
```ruby
|
21
|
+
class BasicRowModel
|
22
|
+
include Csvbuilder::Model
|
23
|
+
|
24
|
+
column :alpha, header: ->(column_name, context) { "#{context.inspect} #{column_name.to_s.humanize}" }
|
25
|
+
end
|
26
|
+
|
27
|
+
BasicRowModel.headers({ foo: :bar }) }
|
28
|
+
# => ["#<OpenStruct foo=:bar> Alpha"] }
|
29
|
+
```
|
30
|
+
|
3
31
|
## [0.1.0] - 2022-12-15
|
4
32
|
|
5
33
|
- Initial release
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
csvbuilder-core (0.1.3)
|
5
|
+
activesupport (>= 5.2, < 8)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
activesupport (7.0.4)
|
11
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
12
|
+
i18n (>= 1.6, < 2)
|
13
|
+
minitest (>= 5.1)
|
14
|
+
tzinfo (~> 2.0)
|
15
|
+
ast (2.4.2)
|
16
|
+
concurrent-ruby (1.1.10)
|
17
|
+
diff-lcs (1.5.0)
|
18
|
+
i18n (1.12.0)
|
19
|
+
concurrent-ruby (~> 1.0)
|
20
|
+
json (2.6.3)
|
21
|
+
minitest (5.16.3)
|
22
|
+
parallel (1.22.1)
|
23
|
+
parser (3.1.3.0)
|
24
|
+
ast (~> 2.4.1)
|
25
|
+
rainbow (3.1.1)
|
26
|
+
rake (13.0.6)
|
27
|
+
regexp_parser (2.6.1)
|
28
|
+
rexml (3.2.5)
|
29
|
+
rspec (3.12.0)
|
30
|
+
rspec-core (~> 3.12.0)
|
31
|
+
rspec-expectations (~> 3.12.0)
|
32
|
+
rspec-mocks (~> 3.12.0)
|
33
|
+
rspec-core (3.12.0)
|
34
|
+
rspec-support (~> 3.12.0)
|
35
|
+
rspec-expectations (3.12.1)
|
36
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
37
|
+
rspec-support (~> 3.12.0)
|
38
|
+
rspec-mocks (3.12.1)
|
39
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
40
|
+
rspec-support (~> 3.12.0)
|
41
|
+
rspec-support (3.12.0)
|
42
|
+
rubocop (1.41.1)
|
43
|
+
json (~> 2.3)
|
44
|
+
parallel (~> 1.10)
|
45
|
+
parser (>= 3.1.2.1)
|
46
|
+
rainbow (>= 2.2.2, < 4.0)
|
47
|
+
regexp_parser (>= 1.8, < 3.0)
|
48
|
+
rexml (>= 3.2.5, < 4.0)
|
49
|
+
rubocop-ast (>= 1.23.0, < 2.0)
|
50
|
+
ruby-progressbar (~> 1.7)
|
51
|
+
unicode-display_width (>= 1.4.0, < 3.0)
|
52
|
+
rubocop-ast (1.24.0)
|
53
|
+
parser (>= 3.1.1.0)
|
54
|
+
rubocop-performance (1.15.2)
|
55
|
+
rubocop (>= 1.7.0, < 2.0)
|
56
|
+
rubocop-ast (>= 0.4.0)
|
57
|
+
rubocop-rake (0.6.0)
|
58
|
+
rubocop (~> 1.0)
|
59
|
+
rubocop-rspec (2.16.0)
|
60
|
+
rubocop (~> 1.33)
|
61
|
+
ruby-progressbar (1.11.0)
|
62
|
+
tzinfo (2.0.5)
|
63
|
+
concurrent-ruby (~> 1.0)
|
64
|
+
unicode-display_width (2.3.0)
|
65
|
+
|
66
|
+
PLATFORMS
|
67
|
+
arm64-darwin-21
|
68
|
+
arm64-darwin-22
|
69
|
+
|
70
|
+
DEPENDENCIES
|
71
|
+
csvbuilder-core!
|
72
|
+
rake
|
73
|
+
rspec
|
74
|
+
rubocop
|
75
|
+
rubocop-performance
|
76
|
+
rubocop-rake
|
77
|
+
rubocop-rspec
|
78
|
+
|
79
|
+
BUNDLED WITH
|
80
|
+
2.4.2
|
data/README.md
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
# Csvbuilder::Core
|
2
2
|
|
3
|
-
|
3
|
+
[Csvbuilder::Core](https://github.com/joel/csvbuilder-core) is part of the [csvbuilder-collection](https://github.com/joel/csvbuilder)
|
4
4
|
|
5
|
-
|
5
|
+
The core contains the shared components used and extended by the exporter and the importer. It is the foundation of the gem [csvbuilder](https://github.com/joel/csvbuilder) and carries the library's architecture, and it is not meant to be used alone.
|
6
|
+
|
7
|
+
See:
|
8
|
+
- [Csvbuilder::Exporter](https://github.com/joel/csvbuilder-exporter)
|
9
|
+
- [Csvbuilder::Importer](https://github.com/joel/csvbuilder-importer)
|
6
10
|
|
7
11
|
## Installation
|
8
12
|
|
@@ -14,9 +18,122 @@ If bundler is not being used to manage dependencies, install the gem by executin
|
|
14
18
|
|
15
19
|
$ gem install csvbuilder-core
|
16
20
|
|
17
|
-
|
21
|
+
# Architecture
|
22
|
+
|
23
|
+
It is organized into three sections, the public, internal and mixins.
|
24
|
+
|
25
|
+
<img width="215" alt="Screenshot 2022-12-28 at 12 53 59 PM" src="https://user-images.githubusercontent.com/5789/209835572-01d1a7e5-3175-490c-a166-1b9b74908390.png">
|
26
|
+
|
27
|
+
# Public
|
28
|
+
|
29
|
+
The public exposes the API meant to be used by the other components. The concrete implementation is mainly lying in the Mixins, though.
|
30
|
+
|
31
|
+
# Base Attributes
|
32
|
+
|
33
|
+
It represents a `CSV` row in `Csvbuilder`. At the core, it defines the standard behaviour, and those behaviours are specialized in `Export` and `Import` gems.
|
34
|
+
|
35
|
+
In `core/concerns/attributes_base`, it exposes three main methods:
|
36
|
+
|
37
|
+
1. `original_attributes`
|
38
|
+
2. `formatted_attributes`
|
39
|
+
3. `source_attributes`
|
40
|
+
|
41
|
+
Those methods are collections called on `Attribute`—for instance, `original_attributes` call `Attribute#value` under the hood for the current row.
|
42
|
+
|
43
|
+
# Model Attributes
|
44
|
+
|
45
|
+
In `core/concerns/model/attributes`, we can find the DSL where columns with the options are defined and stored.
|
46
|
+
|
47
|
+
```ruby
|
48
|
+
class BasicRowModel
|
49
|
+
include Csvbuilder::Model
|
50
|
+
|
51
|
+
column :alpha
|
52
|
+
column :beta
|
53
|
+
end
|
54
|
+
```
|
55
|
+
|
56
|
+
It also carries the headers and the two methods helping with the formatting.
|
57
|
+
|
58
|
+
```ruby
|
59
|
+
class BasicRowModel
|
60
|
+
include Csvbuilder::Model
|
61
|
+
|
62
|
+
class << self
|
63
|
+
|
64
|
+
# Used by Csvbuilder::AttributeBase#formatted_value
|
65
|
+
def format_cell(value, column_name, context)
|
66
|
+
"- || * #{column_name} * || -"
|
67
|
+
end
|
68
|
+
|
69
|
+
# Used by Csvbuilder::Model::Header#formatted_header
|
70
|
+
def format_header(column_name, context)
|
71
|
+
"~ #{column_name} ~"
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
header = "Alpha"
|
77
|
+
value = "alpha one"
|
78
|
+
|
79
|
+
AttributeBase.new.formatted_value
|
80
|
+
# => "- || * alpha one * || -"
|
81
|
+
|
82
|
+
AttributeBase.new.value # It can carry some logic.
|
83
|
+
# => "- || * alpha one * || -"
|
84
|
+
|
85
|
+
AttributeBase.new.source_value # Will be always the raw value
|
86
|
+
# => "alpha one"
|
87
|
+
|
88
|
+
Header.new.formatted_header
|
89
|
+
# => ~ Alpha ~
|
90
|
+
```
|
91
|
+
|
92
|
+
Internally calling respectively:
|
93
|
+
|
94
|
+
```ruby
|
95
|
+
module Csvbuilder
|
96
|
+
module Model
|
97
|
+
class Header
|
98
|
+
|
99
|
+
def formatted_header
|
100
|
+
row_model_class.format_header(column_name, context)
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
```
|
108
|
+
|
109
|
+
and
|
110
|
+
|
111
|
+
```ruby
|
112
|
+
module Csvbuilder
|
113
|
+
class AttributeBase
|
114
|
+
|
115
|
+
def formatted_value
|
116
|
+
@formatted_value ||= row_model_class.format_cell(source_value, column_name, row_model.context)
|
117
|
+
end
|
118
|
+
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
```
|
123
|
+
|
124
|
+
# Attribute
|
125
|
+
|
126
|
+
Represent the cell value.
|
127
|
+
|
128
|
+
Can be found here: `core/internal/attribute_base`.
|
129
|
+
|
130
|
+
It can represent the value through the three following methods:
|
131
|
+
|
132
|
+
1. `source_value` unchanged value
|
133
|
+
2. `value` often the formatted_value, but some logic can be added.
|
134
|
+
3. `formatted_value`
|
18
135
|
|
19
|
-
|
136
|
+
<img width="725" alt="Screenshot 2022-12-28 at 3 23 34 PM" src="https://user-images.githubusercontent.com/5789/209835649-373ebaad-ed53-420d-8a7a-1b93c782d066.png">
|
20
137
|
|
21
138
|
## Development
|
22
139
|
|
@@ -26,7 +143,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
26
143
|
|
27
144
|
## Contributing
|
28
145
|
|
29
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/
|
146
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/joel/csvbuilder-core. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/[USERNAME]/csvbuilder-core/blob/main/CODE_OF_CONDUCT.md).
|
30
147
|
|
31
148
|
## License
|
32
149
|
|
@@ -13,10 +13,23 @@ module Csvbuilder
|
|
13
13
|
@row_model = row_model
|
14
14
|
end
|
15
15
|
|
16
|
+
# @return [Object] the value with formatting applied
|
16
17
|
def formatted_value
|
17
18
|
@formatted_value ||= row_model_class.format_cell(source_value, column_name, row_model.context)
|
18
19
|
end
|
19
20
|
|
21
|
+
# @return [Object] the value
|
22
|
+
def value
|
23
|
+
raise NotImplementedError
|
24
|
+
end
|
25
|
+
|
26
|
+
# @return [Object] the unchanged value from the source
|
27
|
+
def source_value
|
28
|
+
raise NotImplementedError
|
29
|
+
end
|
30
|
+
|
31
|
+
protected
|
32
|
+
|
20
33
|
def row_model_class
|
21
34
|
row_model.class
|
22
35
|
end
|
@@ -16,11 +16,18 @@ module Csvbuilder
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def value
|
19
|
-
options[:header]
|
19
|
+
case options[:header]
|
20
|
+
when Proc
|
21
|
+
return options[:header].call(column_name, context)
|
22
|
+
when String
|
23
|
+
return options[:header]
|
24
|
+
end
|
25
|
+
|
26
|
+
formatted_header(column_name.to_s.humanize)
|
20
27
|
end
|
21
28
|
|
22
|
-
def formatted_header
|
23
|
-
row_model_class.format_header(
|
29
|
+
def formatted_header(header_name)
|
30
|
+
row_model_class.format_header(header_name, context)
|
24
31
|
end
|
25
32
|
end
|
26
33
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: csvbuilder-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joel Azemar
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-03-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -43,6 +43,7 @@ files:
|
|
43
43
|
- CHANGELOG.md
|
44
44
|
- CODE_OF_CONDUCT.md
|
45
45
|
- Gemfile
|
46
|
+
- Gemfile.lock
|
46
47
|
- LICENSE.txt
|
47
48
|
- README.md
|
48
49
|
- Rakefile
|
@@ -83,7 +84,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
83
84
|
- !ruby/object:Gem::Version
|
84
85
|
version: '0'
|
85
86
|
requirements: []
|
86
|
-
rubygems_version: 3.
|
87
|
+
rubygems_version: 3.4.6
|
87
88
|
signing_key:
|
88
89
|
specification_version: 4
|
89
90
|
summary: Csvbuilder Core contain the shared components of Csvbuilder
|