flat_kit 0.2.0 → 1.0.0
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/CONTRIBUTING.md +1 -2
- data/HISTORY.md +15 -0
- data/Manifest.txt +21 -26
- data/{bin → exe}/fk +2 -1
- data/flat_kit.gemspec +33 -0
- data/lib/flat_kit/cli.rb +48 -23
- data/lib/flat_kit/command/cat.rb +34 -32
- data/lib/flat_kit/command/merge.rb +37 -36
- data/lib/flat_kit/command/sort.rb +37 -37
- data/lib/flat_kit/command/stats.rb +96 -0
- data/lib/flat_kit/command.rb +10 -10
- data/lib/flat_kit/descendant_tracker.rb +17 -5
- data/lib/flat_kit/error.rb +4 -0
- data/lib/flat_kit/event_emitter.rb +7 -4
- data/lib/flat_kit/field_stats.rb +246 -0
- data/lib/flat_kit/field_type/boolean_type.rb +52 -0
- data/lib/flat_kit/field_type/date_type.rb +181 -0
- data/lib/flat_kit/field_type/float_type.rb +43 -0
- data/lib/flat_kit/field_type/guess_type.rb +23 -0
- data/lib/flat_kit/field_type/integer_type.rb +36 -0
- data/lib/flat_kit/field_type/null_type.rb +39 -0
- data/lib/flat_kit/field_type/string_type.rb +24 -0
- data/lib/flat_kit/field_type/timestamp_type.rb +48 -0
- data/lib/flat_kit/field_type/unknown_type.rb +30 -0
- data/lib/flat_kit/field_type.rb +83 -0
- data/lib/flat_kit/format.rb +11 -5
- data/lib/flat_kit/input/file.rb +11 -9
- data/lib/flat_kit/input/io.rb +18 -21
- data/lib/flat_kit/input.rb +8 -7
- data/lib/flat_kit/internal_node.rb +22 -19
- data/lib/flat_kit/jsonl/format.rb +6 -2
- data/lib/flat_kit/jsonl/reader.rb +7 -4
- data/lib/flat_kit/jsonl/record.rb +16 -19
- data/lib/flat_kit/jsonl/writer.rb +25 -18
- data/lib/flat_kit/jsonl.rb +8 -4
- data/lib/flat_kit/leaf_node.rb +6 -5
- data/lib/flat_kit/log_formatter.rb +20 -0
- data/lib/flat_kit/logger.rb +12 -19
- data/lib/flat_kit/merge.rb +21 -16
- data/lib/flat_kit/merge_tree.rb +5 -6
- data/lib/flat_kit/output/file.rb +13 -9
- data/lib/flat_kit/output/io.rb +40 -35
- data/lib/flat_kit/output.rb +12 -7
- data/lib/flat_kit/position.rb +18 -0
- data/lib/flat_kit/reader.rb +8 -8
- data/lib/flat_kit/record.rb +12 -12
- data/lib/flat_kit/sentinel_internal_node.rb +6 -5
- data/lib/flat_kit/sentinel_leaf_node.rb +4 -1
- data/lib/flat_kit/sort.rb +8 -9
- data/lib/flat_kit/stat_type/nominal_stats.rb +64 -0
- data/lib/flat_kit/stat_type/numerical_stats.rb +120 -0
- data/lib/flat_kit/stat_type/ordinal_stats.rb +37 -0
- data/lib/flat_kit/stat_type.rb +70 -0
- data/lib/flat_kit/stats.rb +64 -0
- data/lib/flat_kit/writer.rb +17 -3
- data/lib/flat_kit/xsv/format.rb +6 -2
- data/lib/flat_kit/xsv/reader.rb +8 -6
- data/lib/flat_kit/xsv/record.rb +21 -15
- data/lib/flat_kit/xsv/writer.rb +36 -18
- data/lib/flat_kit/xsv.rb +7 -4
- data/lib/flat_kit.rb +33 -21
- metadata +38 -113
- data/Rakefile +0 -20
- data/tasks/default.rake +0 -242
- data/tasks/extension.rake +0 -38
- data/tasks/man.rake +0 -7
- data/tasks/this.rb +0 -208
- data/test/device_dataset.rb +0 -117
- data/test/input/test_file.rb +0 -73
- data/test/input/test_io.rb +0 -93
- data/test/jsonl/test_format.rb +0 -22
- data/test/jsonl/test_reader.rb +0 -49
- data/test/jsonl/test_record.rb +0 -61
- data/test/jsonl/test_writer.rb +0 -68
- data/test/output/test_file.rb +0 -60
- data/test/output/test_io.rb +0 -104
- data/test/test_conversions.rb +0 -45
- data/test/test_event_emitter.rb +0 -72
- data/test/test_format.rb +0 -24
- data/test/test_helper.rb +0 -26
- data/test/test_merge.rb +0 -40
- data/test/test_merge_tree.rb +0 -64
- data/test/test_version.rb +0 -11
- data/test/xsv/test_format.rb +0 -22
- data/test/xsv/test_reader.rb +0 -61
- data/test/xsv/test_record.rb +0 -69
- data/test/xsv/test_writer.rb +0 -68
data/lib/flat_kit/xsv/writer.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module FlatKit
|
2
4
|
module Xsv
|
5
|
+
# Internal: Write that takes flatkit records and writes them to XSV Output
|
6
|
+
#
|
3
7
|
class Writer < ::FlatKit::Writer
|
4
|
-
attr_reader :
|
5
|
-
attr_reader :count
|
6
|
-
attr_reader :fields
|
8
|
+
attr_reader :fields, :header_bytes
|
7
9
|
|
8
10
|
def self.format_name
|
9
11
|
::FlatKit::Xsv::Format.format_name
|
@@ -12,29 +14,33 @@ module FlatKit
|
|
12
14
|
def self.default_csv_options
|
13
15
|
{
|
14
16
|
headers: nil,
|
15
|
-
write_headers: true
|
17
|
+
write_headers: true,
|
16
18
|
}
|
17
19
|
end
|
18
20
|
|
19
21
|
def initialize(destination:, fields: :auto, **csv_options)
|
20
22
|
super(destination: destination)
|
21
23
|
@fields = fields
|
22
|
-
@output = ::FlatKit::Output.from(@destination)
|
23
|
-
@count = 0
|
24
24
|
@we_write_the_header = nil
|
25
25
|
@csv_options = Writer.default_csv_options.dup
|
26
26
|
|
27
|
-
if @fields == :auto
|
27
|
+
if @fields == :auto
|
28
28
|
@we_write_the_header = true
|
29
29
|
else
|
30
|
-
@csv_options
|
30
|
+
@csv_options[:headers] = fields
|
31
31
|
@we_write_the_header = false
|
32
32
|
end
|
33
33
|
|
34
|
+
@header_bytes = 0
|
34
35
|
@csv_options.merge!(csv_options)
|
35
36
|
@csv = CSV.new(output.io, **@csv_options)
|
36
37
|
end
|
37
38
|
|
39
|
+
# write the record and return the Position the record was written
|
40
|
+
#
|
41
|
+
# In the case of the header being written automatcially, the Postion returned is the
|
42
|
+
# position of the reocrd, not the header
|
43
|
+
#
|
38
44
|
def write(record)
|
39
45
|
case record
|
40
46
|
when FlatKit::Xsv::Record
|
@@ -45,25 +51,37 @@ module FlatKit
|
|
45
51
|
else
|
46
52
|
raise FlatKit::Error, "Unable to write records of type #{record.class}"
|
47
53
|
end
|
48
|
-
rescue FlatKit::Error =>
|
49
|
-
raise
|
50
|
-
rescue => e
|
51
|
-
::FlatKit.logger.error "Error
|
54
|
+
rescue FlatKit::Error => e
|
55
|
+
raise e
|
56
|
+
rescue StandardError => e
|
57
|
+
::FlatKit.logger.error "Error writing xsv records to #{output.name}: #{e}"
|
52
58
|
raise ::FlatKit::Error, e
|
53
59
|
end
|
54
60
|
|
55
|
-
def close
|
56
|
-
@output.close
|
57
|
-
end
|
58
|
-
|
59
61
|
private
|
60
62
|
|
61
63
|
def write_record(record)
|
62
|
-
if @we_write_the_header && @count
|
64
|
+
if @we_write_the_header && @count.zero?
|
63
65
|
@csv << record.ordered_fields
|
66
|
+
@header_bytes = output.tell
|
64
67
|
end
|
65
|
-
|
68
|
+
|
69
|
+
# the index of the record being written is the same as the count of records written so far
|
70
|
+
record_index = @count
|
71
|
+
|
72
|
+
# get the current output stream position to calculate bytes written
|
73
|
+
start_offset = output.tell
|
74
|
+
|
66
75
|
@csv << record.to_a
|
76
|
+
|
77
|
+
ending_offset = output.io.tell
|
78
|
+
bytes_written = (ending_offset - start_offset)
|
79
|
+
|
80
|
+
@count += 1
|
81
|
+
|
82
|
+
@last_position = ::FlatKit::Position.new(index: record_index,
|
83
|
+
offset: start_offset,
|
84
|
+
bytesize: bytes_written)
|
67
85
|
end
|
68
86
|
end
|
69
87
|
end
|
data/lib/flat_kit/xsv.rb
CHANGED
@@ -1,8 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module FlatKit
|
4
|
+
# Internal: Namespace for the xsv file fromat handling
|
2
5
|
module Xsv
|
3
6
|
end
|
4
7
|
end
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
8
|
+
require "flat_kit/xsv/record"
|
9
|
+
require "flat_kit/xsv/reader"
|
10
|
+
require "flat_kit/xsv/writer"
|
11
|
+
require "flat_kit/xsv/format"
|
data/lib/flat_kit.rb
CHANGED
@@ -1,24 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Public: Top level namespace for this gem
|
4
|
+
#
|
1
5
|
module FlatKit
|
2
|
-
VERSION = "0.
|
6
|
+
VERSION = "1.0.0"
|
3
7
|
end
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
|
10
|
-
require
|
11
|
-
require
|
12
|
-
require
|
13
|
-
require
|
14
|
-
require
|
15
|
-
require
|
16
|
-
require
|
17
|
-
require
|
18
|
-
require
|
8
|
+
require "flat_kit/error"
|
9
|
+
require "flat_kit/descendant_tracker"
|
10
|
+
require "flat_kit/log_formatter"
|
11
|
+
require "flat_kit/logger"
|
12
|
+
require "flat_kit/event_emitter"
|
13
|
+
|
14
|
+
require "flat_kit/field_type"
|
15
|
+
require "flat_kit/format"
|
16
|
+
require "flat_kit/position"
|
17
|
+
require "flat_kit/record"
|
18
|
+
require "flat_kit/reader"
|
19
|
+
require "flat_kit/writer"
|
20
|
+
require "flat_kit/input"
|
21
|
+
require "flat_kit/output"
|
22
|
+
require "flat_kit/cli"
|
23
|
+
require "flat_kit/xsv"
|
24
|
+
require "flat_kit/jsonl"
|
25
|
+
require "flat_kit/merge"
|
26
|
+
require "flat_kit/sort"
|
27
|
+
require "flat_kit/stats"
|
28
|
+
|
29
|
+
require "flat_kit/stat_type"
|
30
|
+
require "flat_kit/field_stats"
|
19
31
|
|
20
|
-
require
|
21
|
-
require
|
22
|
-
require
|
23
|
-
require
|
24
|
-
require
|
32
|
+
require "flat_kit/merge_tree"
|
33
|
+
require "flat_kit/internal_node"
|
34
|
+
require "flat_kit/sentinel_internal_node"
|
35
|
+
require "flat_kit/sentinel_leaf_node"
|
36
|
+
require "flat_kit/leaf_node"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flat_kit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeremy Hinegardner
|
8
8
|
autorequire:
|
9
|
-
bindir:
|
9
|
+
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-04-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: oj
|
@@ -39,75 +39,19 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '3.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: csv
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
48
|
-
type: :
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '13.0'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: minitest
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '5.11'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '5.11'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: minitest-focus
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - "~>"
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '1.2'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - "~>"
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '1.2'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: rdoc
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - "~>"
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '6.3'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - "~>"
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '6.3'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: simplecov
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - "~>"
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '0.21'
|
104
|
-
type: :development
|
47
|
+
version: '3.3'
|
48
|
+
type: :runtime
|
105
49
|
prerelease: false
|
106
50
|
version_requirements: !ruby/object:Gem::Requirement
|
107
51
|
requirements:
|
108
52
|
- - "~>"
|
109
53
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
54
|
+
version: '3.3'
|
111
55
|
description: A library and commandline program for reading, writing, indexing, sorting,
|
112
56
|
and merging CSV, TSV, JSON and other flat-file formats.
|
113
57
|
email: jeremy@copiousfreetime.org
|
@@ -126,17 +70,29 @@ files:
|
|
126
70
|
- LICENSE.txt
|
127
71
|
- Manifest.txt
|
128
72
|
- README.md
|
129
|
-
-
|
130
|
-
-
|
73
|
+
- exe/fk
|
74
|
+
- flat_kit.gemspec
|
131
75
|
- lib/flat_kit.rb
|
132
76
|
- lib/flat_kit/cli.rb
|
133
77
|
- lib/flat_kit/command.rb
|
134
78
|
- lib/flat_kit/command/cat.rb
|
135
79
|
- lib/flat_kit/command/merge.rb
|
136
80
|
- lib/flat_kit/command/sort.rb
|
81
|
+
- lib/flat_kit/command/stats.rb
|
137
82
|
- lib/flat_kit/descendant_tracker.rb
|
138
83
|
- lib/flat_kit/error.rb
|
139
84
|
- lib/flat_kit/event_emitter.rb
|
85
|
+
- lib/flat_kit/field_stats.rb
|
86
|
+
- lib/flat_kit/field_type.rb
|
87
|
+
- lib/flat_kit/field_type/boolean_type.rb
|
88
|
+
- lib/flat_kit/field_type/date_type.rb
|
89
|
+
- lib/flat_kit/field_type/float_type.rb
|
90
|
+
- lib/flat_kit/field_type/guess_type.rb
|
91
|
+
- lib/flat_kit/field_type/integer_type.rb
|
92
|
+
- lib/flat_kit/field_type/null_type.rb
|
93
|
+
- lib/flat_kit/field_type/string_type.rb
|
94
|
+
- lib/flat_kit/field_type/timestamp_type.rb
|
95
|
+
- lib/flat_kit/field_type/unknown_type.rb
|
140
96
|
- lib/flat_kit/format.rb
|
141
97
|
- lib/flat_kit/input.rb
|
142
98
|
- lib/flat_kit/input/file.rb
|
@@ -148,51 +104,40 @@ files:
|
|
148
104
|
- lib/flat_kit/jsonl/record.rb
|
149
105
|
- lib/flat_kit/jsonl/writer.rb
|
150
106
|
- lib/flat_kit/leaf_node.rb
|
107
|
+
- lib/flat_kit/log_formatter.rb
|
151
108
|
- lib/flat_kit/logger.rb
|
152
109
|
- lib/flat_kit/merge.rb
|
153
110
|
- lib/flat_kit/merge_tree.rb
|
154
111
|
- lib/flat_kit/output.rb
|
155
112
|
- lib/flat_kit/output/file.rb
|
156
113
|
- lib/flat_kit/output/io.rb
|
114
|
+
- lib/flat_kit/position.rb
|
157
115
|
- lib/flat_kit/reader.rb
|
158
116
|
- lib/flat_kit/record.rb
|
159
117
|
- lib/flat_kit/sentinel_internal_node.rb
|
160
118
|
- lib/flat_kit/sentinel_leaf_node.rb
|
161
119
|
- lib/flat_kit/sort.rb
|
120
|
+
- lib/flat_kit/stat_type.rb
|
121
|
+
- lib/flat_kit/stat_type/nominal_stats.rb
|
122
|
+
- lib/flat_kit/stat_type/numerical_stats.rb
|
123
|
+
- lib/flat_kit/stat_type/ordinal_stats.rb
|
124
|
+
- lib/flat_kit/stats.rb
|
162
125
|
- lib/flat_kit/writer.rb
|
163
126
|
- lib/flat_kit/xsv.rb
|
164
127
|
- lib/flat_kit/xsv/format.rb
|
165
128
|
- lib/flat_kit/xsv/reader.rb
|
166
129
|
- lib/flat_kit/xsv/record.rb
|
167
130
|
- lib/flat_kit/xsv/writer.rb
|
168
|
-
- tasks/default.rake
|
169
|
-
- tasks/extension.rake
|
170
|
-
- tasks/man.rake
|
171
|
-
- tasks/this.rb
|
172
|
-
- test/device_dataset.rb
|
173
|
-
- test/input/test_file.rb
|
174
|
-
- test/input/test_io.rb
|
175
|
-
- test/jsonl/test_format.rb
|
176
|
-
- test/jsonl/test_reader.rb
|
177
|
-
- test/jsonl/test_record.rb
|
178
|
-
- test/jsonl/test_writer.rb
|
179
|
-
- test/output/test_file.rb
|
180
|
-
- test/output/test_io.rb
|
181
|
-
- test/test_conversions.rb
|
182
|
-
- test/test_event_emitter.rb
|
183
|
-
- test/test_format.rb
|
184
|
-
- test/test_helper.rb
|
185
|
-
- test/test_merge.rb
|
186
|
-
- test/test_merge_tree.rb
|
187
|
-
- test/test_version.rb
|
188
|
-
- test/xsv/test_format.rb
|
189
|
-
- test/xsv/test_reader.rb
|
190
|
-
- test/xsv/test_record.rb
|
191
|
-
- test/xsv/test_writer.rb
|
192
131
|
homepage: http://github.com/copiousfreetime/flat_kit
|
193
132
|
licenses:
|
194
133
|
- MIT
|
195
|
-
metadata:
|
134
|
+
metadata:
|
135
|
+
bug_tracker_uri: https://github.com/copiousfreetime/flat_kit/issues
|
136
|
+
changelog_uri: https://github.com/copiousfreetime/flat_kit/blob/master/HISTORY.md
|
137
|
+
homepage_uri: https://github.com/copiousfreetime/flat_kit
|
138
|
+
source_code_uri: https://github.com/copiousfreetime/flat_kit
|
139
|
+
label: flat_kit
|
140
|
+
rubygems_mfa_required: 'true'
|
196
141
|
post_install_message:
|
197
142
|
rdoc_options:
|
198
143
|
- "--main"
|
@@ -205,36 +150,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
205
150
|
requirements:
|
206
151
|
- - ">="
|
207
152
|
- !ruby/object:Gem::Version
|
208
|
-
version:
|
153
|
+
version: 3.0.0
|
209
154
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
210
155
|
requirements:
|
211
156
|
- - ">="
|
212
157
|
- !ruby/object:Gem::Version
|
213
158
|
version: '0'
|
214
159
|
requirements: []
|
215
|
-
rubygems_version: 3.
|
160
|
+
rubygems_version: 3.5.9
|
216
161
|
signing_key:
|
217
162
|
specification_version: 4
|
218
163
|
summary: A library and commandline program for reading, writing, indexing, sorting,
|
219
164
|
and merging CSV, TSV, JSON and other flat-file formats.
|
220
|
-
test_files:
|
221
|
-
- test/device_dataset.rb
|
222
|
-
- test/input/test_file.rb
|
223
|
-
- test/input/test_io.rb
|
224
|
-
- test/jsonl/test_format.rb
|
225
|
-
- test/jsonl/test_reader.rb
|
226
|
-
- test/jsonl/test_record.rb
|
227
|
-
- test/jsonl/test_writer.rb
|
228
|
-
- test/output/test_file.rb
|
229
|
-
- test/output/test_io.rb
|
230
|
-
- test/test_conversions.rb
|
231
|
-
- test/test_event_emitter.rb
|
232
|
-
- test/test_format.rb
|
233
|
-
- test/test_helper.rb
|
234
|
-
- test/test_merge.rb
|
235
|
-
- test/test_merge_tree.rb
|
236
|
-
- test/test_version.rb
|
237
|
-
- test/xsv/test_format.rb
|
238
|
-
- test/xsv/test_reader.rb
|
239
|
-
- test/xsv/test_record.rb
|
240
|
-
- test/xsv/test_writer.rb
|
165
|
+
test_files: []
|
data/Rakefile
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
# vim: syntax=ruby
|
2
|
-
load 'tasks/this.rb'
|
3
|
-
|
4
|
-
This.name = "flat_kit"
|
5
|
-
This.author = "Jeremy Hinegardner"
|
6
|
-
This.email = "jeremy@copiousfreetime.org"
|
7
|
-
This.homepage = "http://github.com/copiousfreetime/#{ This.name }"
|
8
|
-
|
9
|
-
This.ruby_gemspec do |spec|
|
10
|
-
spec.add_dependency('oj', '~> 3.0')
|
11
|
-
spec.add_dependency('optimist', '~> 3.0')
|
12
|
-
|
13
|
-
spec.add_development_dependency( 'rake' , '~> 13.0')
|
14
|
-
spec.add_development_dependency( 'minitest' , '~> 5.11' )
|
15
|
-
spec.add_development_dependency( 'minitest-focus' , '~> 1.2' )
|
16
|
-
spec.add_development_dependency( 'rdoc' , '~> 6.3' )
|
17
|
-
spec.add_development_dependency( 'simplecov', '~> 0.21')
|
18
|
-
end
|
19
|
-
|
20
|
-
load 'tasks/default.rake'
|
data/tasks/default.rake
DELETED
@@ -1,242 +0,0 @@
|
|
1
|
-
# vim: syntax=ruby
|
2
|
-
require 'rake/clean'
|
3
|
-
require 'digest'
|
4
|
-
#------------------------------------------------------------------------------
|
5
|
-
# If you want to Develop on this project just run 'rake develop' and you'll
|
6
|
-
# have all you need to get going. If you want to use bundler for development,
|
7
|
-
# then run 'rake develop:using_bundler'
|
8
|
-
#------------------------------------------------------------------------------
|
9
|
-
namespace :develop do
|
10
|
-
|
11
|
-
# Install all the development and runtime dependencies of this gem using the
|
12
|
-
# gemspec.
|
13
|
-
task :default => 'Gemfile' do
|
14
|
-
require 'rubygems/dependency_installer'
|
15
|
-
installer = ::Gem::DependencyInstaller.new
|
16
|
-
puts "Installing bundler..."
|
17
|
-
installer.install 'bundler'
|
18
|
-
sh 'bundle install'
|
19
|
-
puts "\n\nNow run 'rake test'"
|
20
|
-
end
|
21
|
-
|
22
|
-
# Create a Gemfile that just references the gemspec
|
23
|
-
file 'Gemfile' => :gemspec do
|
24
|
-
File.open( "Gemfile", "w+" ) do |f|
|
25
|
-
f.puts "# DO NOT EDIT - This file is automatically generated"
|
26
|
-
f.puts "# Make changes to Manifest.txt and/or Rakefile and regenerate"
|
27
|
-
f.puts 'source "https://rubygems.org"'
|
28
|
-
f.puts 'gemspec'
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
desc "Bootstrap development"
|
33
|
-
task :develop => "develop:default"
|
34
|
-
|
35
|
-
#------------------------------------------------------------------------------
|
36
|
-
# Minitest - standard TestTask
|
37
|
-
#------------------------------------------------------------------------------
|
38
|
-
begin
|
39
|
-
require 'rake/testtask'
|
40
|
-
Rake::TestTask.new( :test ) do |t|
|
41
|
-
t.ruby_opts = %w[ -w ]
|
42
|
-
t.libs = %w[ lib spec test ]
|
43
|
-
t.pattern = "{test,spec}/**/{test_*,*_spec}.rb"
|
44
|
-
end
|
45
|
-
|
46
|
-
task :test_requirements
|
47
|
-
task :test => :test_requirements
|
48
|
-
task :default => :test
|
49
|
-
rescue LoadError
|
50
|
-
This.task_warning( 'test' )
|
51
|
-
end
|
52
|
-
|
53
|
-
#------------------------------------------------------------------------------
|
54
|
-
# RDoc - standard rdoc rake task, although we must make sure to use a more
|
55
|
-
# recent version of rdoc since it is the one that has 'tomdoc' markup
|
56
|
-
#------------------------------------------------------------------------------
|
57
|
-
begin
|
58
|
-
gem 'rdoc' # otherwise we get the wrong task from stdlib
|
59
|
-
require 'rdoc/task'
|
60
|
-
RDoc::Task.new do |t|
|
61
|
-
t.markup = 'tomdoc'
|
62
|
-
t.rdoc_dir = 'doc'
|
63
|
-
t.main = 'README.md'
|
64
|
-
t.title = "#{This.name} #{This.version}"
|
65
|
-
t.rdoc_files.include( FileList['*.{rdoc,md,txt}'], FileList['ext/**/*.c'],
|
66
|
-
FileList['lib/**/*.rb'] )
|
67
|
-
end
|
68
|
-
rescue StandardError, LoadError
|
69
|
-
This.task_warning( 'rdoc' )
|
70
|
-
end
|
71
|
-
|
72
|
-
#------------------------------------------------------------------------------
|
73
|
-
# Coverage - optional code coverage, rcov for 1.8 and simplecov for 1.9, so
|
74
|
-
# for the moment only rcov is listed.
|
75
|
-
#------------------------------------------------------------------------------
|
76
|
-
begin
|
77
|
-
require 'simplecov'
|
78
|
-
desc 'Run tests with code coverage'
|
79
|
-
task :coverage do
|
80
|
-
ENV['COVERAGE'] = 'true'
|
81
|
-
Rake::Task[:test].execute
|
82
|
-
end
|
83
|
-
CLOBBER << 'coverage' if File.directory?( 'coverage' )
|
84
|
-
rescue LoadError
|
85
|
-
This.task_warning( 'simplecov' )
|
86
|
-
end
|
87
|
-
|
88
|
-
#------------------------------------------------------------------------------
|
89
|
-
# Manifest - We want an explicit list of thos files that are to be packaged in
|
90
|
-
# the gem. Most of this is from Hoe.
|
91
|
-
#------------------------------------------------------------------------------
|
92
|
-
namespace 'manifest' do
|
93
|
-
desc "Check the manifest"
|
94
|
-
task :check => :clean do
|
95
|
-
files = FileList["**/*", ".*"].exclude( This.exclude_from_manifest ).to_a.sort
|
96
|
-
files = files.select{ |f| File.file?( f ) }
|
97
|
-
|
98
|
-
tmp = "Manifest.tmp"
|
99
|
-
File.open( tmp, 'w' ) do |f|
|
100
|
-
f.puts files.join("\n")
|
101
|
-
end
|
102
|
-
|
103
|
-
begin
|
104
|
-
sh "diff -du Manifest.txt #{tmp}"
|
105
|
-
ensure
|
106
|
-
rm tmp
|
107
|
-
end
|
108
|
-
puts "Manifest looks good"
|
109
|
-
end
|
110
|
-
|
111
|
-
desc "Generate the manifest"
|
112
|
-
task :generate => :clean do
|
113
|
-
files = %x[ git ls-files ].split("\n").sort
|
114
|
-
files.reject! { |f| f =~ This.exclude_from_manifest }
|
115
|
-
File.open( "Manifest.txt", "w" ) do |f|
|
116
|
-
f.puts files.join("\n")
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
#------------------------------------------------------------------------------
|
122
|
-
# Fixme - look for fixmes and report them
|
123
|
-
#------------------------------------------------------------------------------
|
124
|
-
namespace :fixme do
|
125
|
-
task :default => 'manifest:check' do
|
126
|
-
This.manifest.each do |file|
|
127
|
-
next if file == __FILE__
|
128
|
-
next unless file =~ %r/(txt|rb|md|rdoc|css|html|xml|css)\Z/
|
129
|
-
puts "FIXME: Rename #{file}" if file =~ /fixme/i
|
130
|
-
IO.readlines( file ).each_with_index do |line, idx|
|
131
|
-
prefix = "FIXME: #{file}:#{idx+1}".ljust(42)
|
132
|
-
puts "#{prefix} => #{line.strip}" if line =~ /fixme/i
|
133
|
-
end
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
def fixme_project_root
|
138
|
-
This.project_path( '../fixme' )
|
139
|
-
end
|
140
|
-
|
141
|
-
def fixme_project_path( subtree )
|
142
|
-
fixme_project_root.join( subtree )
|
143
|
-
end
|
144
|
-
|
145
|
-
def local_fixme_files
|
146
|
-
This.manifest.select { |p| p =~ %r|^tasks/| }
|
147
|
-
end
|
148
|
-
|
149
|
-
def outdated_fixme_files
|
150
|
-
local_fixme_files.select do |local|
|
151
|
-
upstream = fixme_project_path( local )
|
152
|
-
upstream.exist? &&
|
153
|
-
( Digest::SHA256.file( local ) != Digest::SHA256.file( upstream ) )
|
154
|
-
end
|
155
|
-
end
|
156
|
-
|
157
|
-
def fixme_up_to_date?
|
158
|
-
outdated_fixme_files.empty?
|
159
|
-
end
|
160
|
-
|
161
|
-
desc "See if the fixme tools are outdated"
|
162
|
-
task :outdated do
|
163
|
-
if fixme_up_to_date? then
|
164
|
-
puts "Fixme files are up to date."
|
165
|
-
else
|
166
|
-
outdated_fixme_files.each do |f|
|
167
|
-
puts "#{f} is outdated"
|
168
|
-
end
|
169
|
-
end
|
170
|
-
end
|
171
|
-
|
172
|
-
desc "Update outdated fixme files"
|
173
|
-
task :update do
|
174
|
-
if fixme_up_to_date? then
|
175
|
-
puts "Fixme files are already up to date."
|
176
|
-
else
|
177
|
-
puts "Updating fixme files:"
|
178
|
-
outdated_fixme_files.each do |local|
|
179
|
-
upstream = fixme_project_path( local )
|
180
|
-
puts " * #{local}"
|
181
|
-
FileUtils.cp( upstream, local )
|
182
|
-
end
|
183
|
-
puts "Use your git commands as appropriate."
|
184
|
-
end
|
185
|
-
end
|
186
|
-
end
|
187
|
-
desc "Look for fixmes and report them"
|
188
|
-
task :fixme => "fixme:default"
|
189
|
-
|
190
|
-
#------------------------------------------------------------------------------
|
191
|
-
# Gem Specification
|
192
|
-
#------------------------------------------------------------------------------
|
193
|
-
# Really this is only here to support those who use bundler
|
194
|
-
desc "Build the #{This.name}.gemspec file"
|
195
|
-
task :gemspec do
|
196
|
-
File.open( This.gemspec_file, "wb+" ) do |f|
|
197
|
-
f.puts "# DO NOT EDIT - This file is automatically generated"
|
198
|
-
f.puts "# Make changes to Manifest.txt and/or Rakefile and regenerate"
|
199
|
-
f.write This.platform_gemspec.to_ruby
|
200
|
-
end
|
201
|
-
end
|
202
|
-
|
203
|
-
# .rbc files from ruby 2.0
|
204
|
-
CLOBBER << FileList["**/*.rbc"]
|
205
|
-
|
206
|
-
# The standard gem packaging task, everyone has it.
|
207
|
-
require 'rubygems/package_task'
|
208
|
-
::Gem::PackageTask.new( This.platform_gemspec ) do
|
209
|
-
# nothing
|
210
|
-
end
|
211
|
-
|
212
|
-
#------------------------------------------------------------------------------
|
213
|
-
# Release - the steps we go through to do a final release, this is pulled from
|
214
|
-
# a compbination of mojombo's rakegem, hoe and hoe-git
|
215
|
-
#
|
216
|
-
# 1) make sure we are on the main branch
|
217
|
-
# 2) make sure there are no uncommitted items
|
218
|
-
# 3) check the manifest and make sure all looks good
|
219
|
-
# 4) build the gem
|
220
|
-
# 5) do an empty commit to have the commit message of the version
|
221
|
-
# 6) tag that commit as the version
|
222
|
-
# 7) push main
|
223
|
-
# 8) push the tag
|
224
|
-
# 7) pus the gem
|
225
|
-
#------------------------------------------------------------------------------
|
226
|
-
task :release_check do
|
227
|
-
unless `git branch` =~ /^\* main/
|
228
|
-
abort "You must be on the main branch to release!"
|
229
|
-
end
|
230
|
-
unless `git status` =~ /^nothing to commit/m
|
231
|
-
abort "Nope, sorry, you have unfinished business"
|
232
|
-
end
|
233
|
-
end
|
234
|
-
|
235
|
-
desc "Create tag v#{This.version}, build and push #{This.platform_gemspec.full_name} to rubygems.org"
|
236
|
-
task :release => [ :release_check, 'manifest:check', :gem ] do
|
237
|
-
sh "git commit --allow-empty -a -m 'Release #{This.version}'"
|
238
|
-
sh "git tag -a -m 'v#{This.version}' v#{This.version}"
|
239
|
-
sh "git push origin main"
|
240
|
-
sh "git push origin v#{This.version}"
|
241
|
-
sh "gem push pkg/#{This.platform_gemspec.full_name}.gem"
|
242
|
-
end
|