feedx 0.12.7 → 0.14.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.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +2 -37
  3. data/.golangci.yml +13 -4
  4. data/.rubocop.yml +8 -14
  5. data/.tool-versions +1 -0
  6. data/Gemfile +8 -0
  7. data/Gemfile.lock +54 -68
  8. data/Makefile +3 -3
  9. data/README.md +3 -1
  10. data/compression.go +29 -0
  11. data/compression_test.go +73 -61
  12. data/consumer.go +96 -152
  13. data/consumer_test.go +124 -59
  14. data/example_test.go +140 -0
  15. data/feedx.gemspec +2 -10
  16. data/feedx.go +16 -31
  17. data/feedx_ext_test.go +13 -3
  18. data/feedx_test.go +24 -26
  19. data/format.go +29 -19
  20. data/format_test.go +84 -56
  21. data/go.mod +11 -7
  22. data/go.sum +16 -138
  23. data/incremental.go +122 -0
  24. data/incremental_test.go +62 -0
  25. data/lib/feedx/cache/abstract.rb +3 -3
  26. data/lib/feedx/cache/value.rb +6 -6
  27. data/lib/feedx/compression/abstract.rb +2 -2
  28. data/lib/feedx/compression/gzip.rb +4 -4
  29. data/lib/feedx/consumer.rb +8 -8
  30. data/lib/feedx/format/abstract.rb +6 -6
  31. data/lib/feedx/format/json.rb +2 -2
  32. data/lib/feedx/format/protobuf.rb +6 -6
  33. data/lib/feedx/format.rb +1 -3
  34. data/lib/feedx/producer.rb +11 -11
  35. data/lib/feedx/stream.rb +2 -2
  36. data/lib/feedx.rb +2 -3
  37. data/manifest.go +65 -0
  38. data/producer.go +34 -137
  39. data/producer_test.go +46 -60
  40. data/reader.go +142 -41
  41. data/reader_test.go +86 -35
  42. data/scheduler.go +176 -0
  43. data/scheduler_test.go +128 -0
  44. data/writer.go +13 -13
  45. data/writer_test.go +61 -44
  46. metadata +12 -137
  47. data/.github/workflows/lint.yml +0 -18
  48. data/ext/parquet/decoder.go +0 -59
  49. data/ext/parquet/decoder_test.go +0 -88
  50. data/ext/parquet/encoder.go +0 -27
  51. data/ext/parquet/encoder_test.go +0 -70
  52. data/ext/parquet/go.mod +0 -12
  53. data/ext/parquet/go.sum +0 -193
  54. data/ext/parquet/parquet.go +0 -78
  55. data/ext/parquet/parquet_test.go +0 -28
  56. data/ext/parquet/testdata/alltypes_plain.parquet +0 -0
  57. data/lib/feedx/format/parquet.rb +0 -102
  58. data/spec/feedx/cache/memory_spec.rb +0 -23
  59. data/spec/feedx/cache/value_spec.rb +0 -19
  60. data/spec/feedx/compression/gzip_spec.rb +0 -17
  61. data/spec/feedx/compression/none_spec.rb +0 -15
  62. data/spec/feedx/compression_spec.rb +0 -19
  63. data/spec/feedx/consumer_spec.rb +0 -49
  64. data/spec/feedx/format/abstract_spec.rb +0 -21
  65. data/spec/feedx/format/json_spec.rb +0 -27
  66. data/spec/feedx/format/parquet_spec.rb +0 -30
  67. data/spec/feedx/format/protobuf_spec.rb +0 -23
  68. data/spec/feedx/format_spec.rb +0 -21
  69. data/spec/feedx/producer_spec.rb +0 -74
  70. data/spec/feedx/stream_spec.rb +0 -109
  71. data/spec/spec_helper.rb +0 -57
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: feedx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.7
4
+ version: 0.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Black Square Media Ltd
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2022-01-10 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: bfs
@@ -24,96 +23,6 @@ dependencies:
24
23
  - - ">="
25
24
  - !ruby/object:Gem::Version
26
25
  version: 0.8.0
27
- - !ruby/object:Gem::Dependency
28
- name: bundler
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: pbio
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: rake
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: red-parquet
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '3.0'
76
- - - "<"
77
- - !ruby/object:Gem::Version
78
- version: '4.0'
79
- type: :development
80
- prerelease: false
81
- version_requirements: !ruby/object:Gem::Requirement
82
- requirements:
83
- - - ">="
84
- - !ruby/object:Gem::Version
85
- version: '3.0'
86
- - - "<"
87
- - !ruby/object:Gem::Version
88
- version: '4.0'
89
- - !ruby/object:Gem::Dependency
90
- name: rspec
91
- requirement: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - ">="
94
- - !ruby/object:Gem::Version
95
- version: '0'
96
- type: :development
97
- prerelease: false
98
- version_requirements: !ruby/object:Gem::Requirement
99
- requirements:
100
- - - ">="
101
- - !ruby/object:Gem::Version
102
- version: '0'
103
- - !ruby/object:Gem::Dependency
104
- name: rubocop-bsm
105
- requirement: !ruby/object:Gem::Requirement
106
- requirements:
107
- - - ">="
108
- - !ruby/object:Gem::Version
109
- version: '0'
110
- type: :development
111
- prerelease: false
112
- version_requirements: !ruby/object:Gem::Requirement
113
- requirements:
114
- - - ">="
115
- - !ruby/object:Gem::Version
116
- version: '0'
117
26
  description: Use feeds to exchange data between (micro-)services.
118
27
  email:
119
28
  - info@blacksquaremedia.com
@@ -122,11 +31,11 @@ extensions: []
122
31
  extra_rdoc_files: []
123
32
  files:
124
33
  - ".editorconfig"
125
- - ".github/workflows/lint.yml"
126
34
  - ".github/workflows/test.yml"
127
35
  - ".gitignore"
128
36
  - ".golangci.yml"
129
37
  - ".rubocop.yml"
38
+ - ".tool-versions"
130
39
  - Gemfile
131
40
  - Gemfile.lock
132
41
  - LICENSE
@@ -137,15 +46,7 @@ files:
137
46
  - compression_test.go
138
47
  - consumer.go
139
48
  - consumer_test.go
140
- - ext/parquet/decoder.go
141
- - ext/parquet/decoder_test.go
142
- - ext/parquet/encoder.go
143
- - ext/parquet/encoder_test.go
144
- - ext/parquet/go.mod
145
- - ext/parquet/go.sum
146
- - ext/parquet/parquet.go
147
- - ext/parquet/parquet_test.go
148
- - ext/parquet/testdata/alltypes_plain.parquet
49
+ - example_test.go
149
50
  - feedx.gemspec
150
51
  - feedx.go
151
52
  - feedx_ext_test.go
@@ -154,6 +55,8 @@ files:
154
55
  - format_test.go
155
56
  - go.mod
156
57
  - go.sum
58
+ - incremental.go
59
+ - incremental_test.go
157
60
  - internal/testdata/testdata.pb.go
158
61
  - internal/testdata/testdata.proto
159
62
  - lib/feedx.rb
@@ -169,29 +72,17 @@ files:
169
72
  - lib/feedx/format.rb
170
73
  - lib/feedx/format/abstract.rb
171
74
  - lib/feedx/format/json.rb
172
- - lib/feedx/format/parquet.rb
173
75
  - lib/feedx/format/protobuf.rb
174
76
  - lib/feedx/producer.rb
175
77
  - lib/feedx/pusher.rb
176
78
  - lib/feedx/stream.rb
79
+ - manifest.go
177
80
  - producer.go
178
81
  - producer_test.go
179
82
  - reader.go
180
83
  - reader_test.go
181
- - spec/feedx/cache/memory_spec.rb
182
- - spec/feedx/cache/value_spec.rb
183
- - spec/feedx/compression/gzip_spec.rb
184
- - spec/feedx/compression/none_spec.rb
185
- - spec/feedx/compression_spec.rb
186
- - spec/feedx/consumer_spec.rb
187
- - spec/feedx/format/abstract_spec.rb
188
- - spec/feedx/format/json_spec.rb
189
- - spec/feedx/format/parquet_spec.rb
190
- - spec/feedx/format/protobuf_spec.rb
191
- - spec/feedx/format_spec.rb
192
- - spec/feedx/producer_spec.rb
193
- - spec/feedx/stream_spec.rb
194
- - spec/spec_helper.rb
84
+ - scheduler.go
85
+ - scheduler_test.go
195
86
  - writer.go
196
87
  - writer_test.go
197
88
  homepage: https://github.com/bsm/feedx
@@ -199,7 +90,6 @@ licenses:
199
90
  - Apache-2.0
200
91
  metadata:
201
92
  rubygems_mfa_required: 'true'
202
- post_install_message:
203
93
  rdoc_options: []
204
94
  require_paths:
205
95
  - lib
@@ -207,29 +97,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
207
97
  requirements:
208
98
  - - ">="
209
99
  - !ruby/object:Gem::Version
210
- version: '2.7'
100
+ version: '3.2'
211
101
  required_rubygems_version: !ruby/object:Gem::Requirement
212
102
  requirements:
213
103
  - - ">="
214
104
  - !ruby/object:Gem::Version
215
105
  version: '0'
216
106
  requirements: []
217
- rubygems_version: 3.2.15
218
- signing_key:
107
+ rubygems_version: 3.7.2
219
108
  specification_version: 4
220
109
  summary: Exchange data between components via feeds
221
- test_files:
222
- - spec/feedx/cache/memory_spec.rb
223
- - spec/feedx/cache/value_spec.rb
224
- - spec/feedx/compression/gzip_spec.rb
225
- - spec/feedx/compression/none_spec.rb
226
- - spec/feedx/compression_spec.rb
227
- - spec/feedx/consumer_spec.rb
228
- - spec/feedx/format/abstract_spec.rb
229
- - spec/feedx/format/json_spec.rb
230
- - spec/feedx/format/parquet_spec.rb
231
- - spec/feedx/format/protobuf_spec.rb
232
- - spec/feedx/format_spec.rb
233
- - spec/feedx/producer_spec.rb
234
- - spec/feedx/stream_spec.rb
235
- - spec/spec_helper.rb
110
+ test_files: []
@@ -1,18 +0,0 @@
1
- name: Lint
2
- on:
3
- push:
4
- branches:
5
- - main
6
- pull_request:
7
- branches:
8
- - main
9
- jobs:
10
- golangci:
11
- runs-on: ubuntu-latest
12
- steps:
13
- - name: Checkout
14
- uses: actions/checkout@v2
15
- - name: Run lint
16
- uses: golangci/golangci-lint-action@v2
17
- with:
18
- version: latest
@@ -1,59 +0,0 @@
1
- package parquet
2
-
3
- import (
4
- "io"
5
-
6
- goparquet "github.com/fraugster/parquet-go"
7
- "github.com/fraugster/parquet-go/floor"
8
- )
9
-
10
- type decoder struct {
11
- pfr *goparquet.FileReader
12
- ffr *floor.Reader
13
- tmp *tempFile
14
- }
15
-
16
- func newDecoder(rs io.ReadSeeker) (*decoder, error) {
17
- pfr, err := goparquet.NewFileReader(rs)
18
- if err != nil {
19
- return nil, err
20
- }
21
-
22
- ffr := floor.NewReader(pfr)
23
-
24
- return &decoder{
25
- pfr: pfr,
26
- ffr: ffr,
27
- },
28
- nil
29
- }
30
-
31
- func (w *decoder) Decode(v interface{}) error {
32
- // read the next value and scan
33
- if w.ffr.Next() {
34
- return w.ffr.Scan(v)
35
- }
36
-
37
- // check for errors
38
- if err := w.ffr.Err(); err != nil {
39
- return err
40
- }
41
-
42
- // end of file
43
- return io.EOF
44
- }
45
-
46
- func (w *decoder) Close() (err error) {
47
- // close the tmp file if present
48
- if w.tmp != nil {
49
- if e := w.tmp.Close(); e != nil {
50
- err = e
51
- }
52
- }
53
-
54
- // close the reader
55
- if e := w.ffr.Close(); e != nil {
56
- err = e
57
- }
58
- return
59
- }
@@ -1,88 +0,0 @@
1
- package parquet_test
2
-
3
- import (
4
- "bytes"
5
- "io"
6
- "io/ioutil"
7
- "os"
8
- "time"
9
-
10
- "github.com/bsm/feedx"
11
- "github.com/bsm/feedx/ext/parquet"
12
- . "github.com/bsm/ginkgo"
13
- . "github.com/bsm/gomega"
14
- )
15
-
16
- var _ = Describe("Decoder", func() {
17
- var subject feedx.FormatDecoder
18
- var fixture *os.File
19
-
20
- f32ptr := func(f float32) *float32 { return &f }
21
-
22
- BeforeEach(func() {
23
- var err error
24
- fixture, err = os.Open("testdata/alltypes_plain.parquet")
25
- Expect(err).NotTo(HaveOccurred())
26
-
27
- format := &parquet.Format{}
28
- subject, err = format.NewDecoder(fixture)
29
- Expect(err).NotTo(HaveOccurred())
30
- })
31
-
32
- AfterEach(func() {
33
- Expect(subject.Close()).To(Succeed())
34
- Expect(fixture.Close()).To(Succeed())
35
- })
36
-
37
- It("decodes", func() {
38
- v1 := new(mockStruct)
39
- Expect(subject.Decode(v1)).To(Succeed())
40
- Expect(v1).To(Equal(&mockStruct{
41
- ID: 4,
42
- Bool: true,
43
- Float: f32ptr(0),
44
- DateString: "03/01/09", ByteString: []byte("0"),
45
- Timestamp: time.Unix(1235865600, 0).UTC(),
46
- }))
47
-
48
- v2 := new(mockStruct)
49
- Expect(subject.Decode(v2)).To(Succeed())
50
- Expect(v2).To(Equal(&mockStruct{
51
- ID: 5,
52
- TinyInt: 1, SmallUint: 1, StdInt: 1, BigInt: 10,
53
- Float: f32ptr(1.1), Double: 10.1,
54
- DateString: "03/01/09", ByteString: []byte("1"),
55
- Timestamp: time.Unix(1235865660, 0).UTC(),
56
- }))
57
-
58
- Expect(subject.Decode(new(mockStruct))).To(Succeed()) // v3
59
- Expect(subject.Decode(new(mockStruct))).To(Succeed()) // v4
60
- Expect(subject.Decode(new(mockStruct))).To(Succeed()) // v5
61
-
62
- v6 := new(mockStruct)
63
- Expect(subject.Decode(v6)).To(Succeed())
64
- Expect(v6).To(Equal(&mockStruct{
65
- ID: 3,
66
- Bool: false,
67
- TinyInt: 1, SmallUint: 1, StdInt: 1, BigInt: 10,
68
- Float: f32ptr(1.1), Double: 10.1,
69
- DateString: "02/01/09", ByteString: []byte("1"),
70
- Timestamp: time.Unix(1233446460, 0).UTC(),
71
- }))
72
-
73
- Expect(subject.Decode(new(mockStruct))).To(Succeed()) // v7
74
- Expect(subject.Decode(new(mockStruct))).To(Succeed()) // v8
75
-
76
- v9 := new(mockStruct)
77
- Expect(subject.Decode(v9)).To(MatchError(io.EOF))
78
- })
79
-
80
- It("opens from non-file readers", func() {
81
- bin, err := ioutil.ReadFile("testdata/alltypes_plain.parquet")
82
- Expect(err).NotTo(HaveOccurred())
83
-
84
- dec, err := new(parquet.Format).NewDecoder(bytes.NewReader(bin))
85
- Expect(err).NotTo(HaveOccurred())
86
- Expect(dec.Close()).To(Succeed())
87
- })
88
- })
@@ -1,27 +0,0 @@
1
- package parquet
2
-
3
- import (
4
- "io"
5
-
6
- goparquet "github.com/fraugster/parquet-go"
7
- "github.com/fraugster/parquet-go/floor"
8
- )
9
-
10
- type encoder struct {
11
- *floor.Writer
12
- }
13
-
14
- func newEncoder(w io.Writer, opts []goparquet.FileWriterOption) (*encoder, error) {
15
- // create the writer
16
- pw := goparquet.NewFileWriter(w, opts...)
17
-
18
- return &encoder{
19
- // wrap the parquet writer with a floor writer
20
- Writer: floor.NewWriter(pw),
21
- }, nil
22
- }
23
-
24
- // implements feedx.FormatEncoder
25
- func (w *encoder) Encode(v interface{}) error {
26
- return w.Writer.Write(v)
27
- }
@@ -1,70 +0,0 @@
1
- package parquet_test
2
-
3
- import (
4
- "bytes"
5
- "time"
6
-
7
- "github.com/bsm/feedx"
8
- "github.com/bsm/feedx/ext/parquet"
9
- . "github.com/bsm/ginkgo"
10
- . "github.com/bsm/gomega"
11
- goparquet "github.com/fraugster/parquet-go"
12
- parquetopt "github.com/fraugster/parquet-go/parquet"
13
- "github.com/fraugster/parquet-go/parquetschema"
14
- )
15
-
16
- var _ = Describe("Encoder", func() {
17
- var subject feedx.FormatEncoder
18
-
19
- f32ptr := func(f float32) *float32 { return &f }
20
-
21
- BeforeEach(func() {
22
- var err error
23
- buf := new(bytes.Buffer)
24
-
25
- schemaDef, err := parquetschema.ParseSchemaDefinition(`message stat {
26
- required int64 bigint_col;
27
- optional boolean bool_col;
28
- optional int32 tinyint_col;
29
- optional int32 smallint_col;
30
- optional int32 int_col;
31
- optional int64 bigint_col;
32
- optional float float_col;
33
- optional double double_col;
34
- optional binary date_string_col (STRING);
35
- optional binary string_col;
36
- optional int64 timestamp_col (TIMESTAMP(NANOS, true));
37
- }`)
38
- Expect(err).NotTo(HaveOccurred())
39
-
40
- format := &parquet.Format{}
41
- subject, err = format.NewEncoder(buf,
42
- goparquet.WithSchemaDefinition(schemaDef),
43
- goparquet.WithCompressionCodec(parquetopt.CompressionCodec_SNAPPY))
44
- Expect(err).NotTo(HaveOccurred())
45
- })
46
-
47
- AfterEach(func() {
48
- Expect(subject.Close()).To(Succeed())
49
- })
50
-
51
- It("encodes", func() {
52
- v1 := &mockStruct{
53
- ID: 1,
54
- Bool: true,
55
- TinyInt: int8(5),
56
- SmallUint: uint16(12),
57
- StdInt: 5,
58
- BigInt: int64(99),
59
- Float: f32ptr(5.5),
60
- Double: float64(5.5),
61
- DateString: "2021-08-11",
62
- ByteString: []byte("string"),
63
- Timestamp: time.Now(),
64
- }
65
- Expect(subject.Encode(v1)).To(Succeed())
66
-
67
- v2 := &mockStruct{ID: 1}
68
- Expect(subject.Encode(v2)).To(Succeed())
69
- })
70
- })
data/ext/parquet/go.mod DELETED
@@ -1,12 +0,0 @@
1
- module github.com/bsm/feedx/ext/parquet
2
-
3
- go 1.15
4
-
5
- require (
6
- github.com/bsm/feedx v0.0.0-00010101000000-000000000000
7
- github.com/bsm/ginkgo v1.16.5
8
- github.com/bsm/gomega v1.17.0
9
- github.com/fraugster/parquet-go v0.6.1
10
- )
11
-
12
- replace github.com/bsm/feedx => ../../