feedx 0.12.5 → 0.12.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c1c91575fbae6b3b5df7c840d8355ec2d27916212a57d19192fe63288b39ed9e
4
- data.tar.gz: e21dffcc3da9ebadd5f936380a00427339566bde0d058e66498528f9418942d6
3
+ metadata.gz: ab1b8d12efde331dcd1ca96c686c29e1ef16ab895f049121078b9f0503d23276
4
+ data.tar.gz: 3d51319d3ea39cbceeb480252e06c37238fce0cda68aa6b65cf1f59c0f0af38b
5
5
  SHA512:
6
- metadata.gz: d8f0e86db26b77894b062a9919c6f902ddb6123f218fdb9233ab8126b0905c023ba8a32d69cc90b3f035345e637cb6719bd43bee984f3f8c62460772f941405f
7
- data.tar.gz: 7451b7e3305ce7ec05a8f7c7d4a8cd9a8b65b1eef417f419903f139d01db94cc75045e0fac105eac4dc78699e2012c7c1450b16ad213615fe563799cb7ab1fab
6
+ metadata.gz: d08c34b59158c69d500b7cffe8019550dafa87b760e4b0cb3b25afc367801a3f3473486987dcb62e5c1bc62c05d3653bf26692fcbdcbb552d2af1073f4eced50
7
+ data.tar.gz: cfa3f24458cead0c12c1f03b559ded816095e1e9cf29a1918c142cd255f782fa3c51d7c45ca5833ab25b5a745e0e68f4b1b1062c7760c56ff1b57da122767135
data/Gemfile.lock CHANGED
@@ -1,22 +1,15 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- feedx (0.12.5)
4
+ feedx (0.12.6)
5
5
  bfs (>= 0.8.0)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- activesupport (6.1.3.1)
11
- concurrent-ruby (~> 1.0, >= 1.0.2)
12
- i18n (>= 1.6, < 2)
13
- minitest (>= 5.1)
14
- tzinfo (~> 2.0)
15
- zeitwerk (~> 2.3)
16
10
  ast (2.4.2)
17
- bfs (0.8.1)
11
+ bfs (0.8.4)
18
12
  bigdecimal (3.0.2)
19
- concurrent-ruby (1.1.8)
20
13
  diff-lcs (1.4.4)
21
14
  extpp (0.0.9)
22
15
  gio2 (3.4.4)
@@ -26,18 +19,14 @@ GEM
26
19
  pkg-config (>= 1.3.5)
27
20
  gobject-introspection (3.4.4)
28
21
  glib2 (= 3.4.4)
29
- google-protobuf (3.15.8)
30
- i18n (1.8.10)
31
- concurrent-ruby (~> 1.0)
32
- minitest (5.14.4)
22
+ google-protobuf (3.17.3)
33
23
  native-package-installer (1.1.1)
34
24
  parallel (1.20.1)
35
25
  parser (3.0.1.1)
36
26
  ast (~> 2.4.1)
37
- pbio (0.2.2)
27
+ pbio (0.3.0)
38
28
  google-protobuf
39
29
  pkg-config (1.4.6)
40
- rack (2.2.3)
41
30
  rainbow (3.0.0)
42
31
  rake (13.0.3)
43
32
  red-arrow (3.0.0)
@@ -63,40 +52,32 @@ GEM
63
52
  diff-lcs (>= 1.2.0, < 2.0)
64
53
  rspec-support (~> 3.10.0)
65
54
  rspec-support (3.10.2)
66
- rubocop (1.13.0)
55
+ rubocop (1.17.0)
67
56
  parallel (~> 1.10)
68
57
  parser (>= 3.0.0.0)
69
58
  rainbow (>= 2.2.2, < 4.0)
70
59
  regexp_parser (>= 1.8, < 3.0)
71
60
  rexml
72
- rubocop-ast (>= 1.2.0, < 2.0)
61
+ rubocop-ast (>= 1.7.0, < 2.0)
73
62
  ruby-progressbar (~> 1.7)
74
63
  unicode-display_width (>= 1.4.0, < 3.0)
75
- rubocop-ast (1.5.0)
64
+ rubocop-ast (1.7.0)
76
65
  parser (>= 3.0.1.1)
77
- rubocop-bsm (0.5.9)
66
+ rubocop-bsm (0.6.0)
78
67
  rubocop (~> 1.0)
79
68
  rubocop-performance
80
- rubocop-rails
81
69
  rubocop-rake
82
70
  rubocop-rspec
83
- rubocop-performance (1.11.1)
71
+ rubocop-performance (1.11.3)
84
72
  rubocop (>= 1.7.0, < 2.0)
85
73
  rubocop-ast (>= 0.4.0)
86
- rubocop-rails (2.9.1)
87
- activesupport (>= 4.2.0)
88
- rack (>= 1.1)
89
- rubocop (>= 0.90.0, < 2.0)
90
74
  rubocop-rake (0.5.1)
91
75
  rubocop
92
- rubocop-rspec (2.3.0)
76
+ rubocop-rspec (2.4.0)
93
77
  rubocop (~> 1.0)
94
78
  rubocop-ast (>= 1.1.0)
95
79
  ruby-progressbar (1.11.0)
96
- tzinfo (2.0.4)
97
- concurrent-ruby (~> 1.0)
98
80
  unicode-display_width (2.0.0)
99
- zeitwerk (2.4.2)
100
81
 
101
82
  PLATFORMS
102
83
  ruby
data/compression_test.go CHANGED
@@ -32,7 +32,7 @@ var _ = Describe("Compression", func() {
32
32
  Expect(r.Close()).To(Succeed())
33
33
  }
34
34
 
35
- It("should detect the format", func() {
35
+ It("detects the format", func() {
36
36
  Expect(feedx.DetectCompression("/path/to/file.json")).To(Equal(feedx.NoCompression))
37
37
  Expect(feedx.DetectCompression("/path/to/file.json.gz")).To(Equal(feedx.GZipCompression))
38
38
  Expect(feedx.DetectCompression("/path/to/file.jsonz")).To(Equal(feedx.GZipCompression))
@@ -53,7 +53,7 @@ var _ = Describe("Compression", func() {
53
53
  var subject = feedx.NoCompression
54
54
  var _ feedx.Compression = subject
55
55
 
56
- It("should write/read", func() {
56
+ It("writes/reads", func() {
57
57
  runSharedTest(subject)
58
58
  })
59
59
  })
@@ -62,7 +62,7 @@ var _ = Describe("Compression", func() {
62
62
  var subject = feedx.GZipCompression
63
63
  var _ feedx.Compression = subject
64
64
 
65
- It("should write/read", func() {
65
+ It("writes/reads", func() {
66
66
  runSharedTest(subject)
67
67
  })
68
68
  })
@@ -71,7 +71,7 @@ var _ = Describe("Compression", func() {
71
71
  var subject = feedx.FlateCompression
72
72
  var _ feedx.Compression = subject
73
73
 
74
- It("should write/read", func() {
74
+ It("writes/reads", func() {
75
75
  runSharedTest(subject)
76
76
  })
77
77
  })
data/consumer.go CHANGED
@@ -50,6 +50,8 @@ type Consumer interface {
50
50
  Data() interface{}
51
51
  // LastSync returns time of last sync attempt.
52
52
  LastSync() time.Time
53
+ // LastConsumed returns time of last feed consumption.
54
+ LastConsumed() time.Time
53
55
  // LastModified returns time at which the remote feed was last modified.
54
56
  LastModified() time.Time
55
57
  // NumRead returns the number of values consumed during the last sync.
@@ -114,7 +116,7 @@ type consumer struct {
114
116
  cfn ConsumeFunc
115
117
  data atomic.Value
116
118
 
117
- numRead, lastMod, lastSync int64
119
+ numRead, lastMod, lastSync, lastConsumed int64
118
120
  }
119
121
 
120
122
  // Data implements Consumer interface.
@@ -132,6 +134,11 @@ func (c *consumer) LastSync() time.Time {
132
134
  return timestamp(atomic.LoadInt64(&c.lastSync)).Time()
133
135
  }
134
136
 
137
+ // LastConsumed implements Consumer interface.
138
+ func (c *consumer) LastConsumed() time.Time {
139
+ return timestamp(atomic.LoadInt64(&c.lastConsumed)).Time()
140
+ }
141
+
135
142
  // LastModified implements Consumer interface.
136
143
  func (c *consumer) LastModified() time.Time {
137
144
  return timestamp(atomic.LoadInt64(&c.lastMod)).Time()
@@ -147,8 +154,9 @@ func (c *consumer) Close() error {
147
154
  }
148
155
 
149
156
  func (c *consumer) sync(force bool) (*ConsumerSync, error) {
157
+ syncTime := timestampFromTime(time.Now()).Millis()
150
158
  defer func() {
151
- atomic.StoreInt64(&c.lastSync, timestampFromTime(time.Now()).Millis())
159
+ atomic.StoreInt64(&c.lastSync, syncTime)
152
160
  }()
153
161
 
154
162
  // retrieve original last modified time
@@ -158,7 +166,7 @@ func (c *consumer) sync(force bool) (*ConsumerSync, error) {
158
166
  }
159
167
 
160
168
  // skip update if not forced or modified
161
- if lastMod.Millis() == atomic.LoadInt64(&c.lastMod) && !force {
169
+ if !force && lastMod > 0 && lastMod.Millis() == atomic.LoadInt64(&c.lastMod) {
162
170
  return &ConsumerSync{Consumer: c}, nil
163
171
  }
164
172
 
@@ -180,6 +188,7 @@ func (c *consumer) sync(force bool) (*ConsumerSync, error) {
180
188
  c.data.Store(data)
181
189
  atomic.StoreInt64(&c.numRead, int64(reader.NumRead()))
182
190
  atomic.StoreInt64(&c.lastMod, lastMod.Millis())
191
+ atomic.StoreInt64(&c.lastConsumed, syncTime)
183
192
  return &ConsumerSync{
184
193
  Consumer: c,
185
194
  Updated: true,
data/consumer_test.go CHANGED
@@ -17,25 +17,26 @@ var _ = Describe("Consumer", func() {
17
17
  var obj *bfs.Object
18
18
  var ctx = context.Background()
19
19
 
20
+ consume := func(r *feedx.Reader) (interface{}, error) {
21
+ var msgs []*testdata.MockMessage
22
+ for {
23
+ var msg testdata.MockMessage
24
+ if err := r.Decode(&msg); err == io.EOF {
25
+ break
26
+ } else if err != nil {
27
+ return nil, err
28
+ }
29
+ msgs = append(msgs, &msg)
30
+ }
31
+ return msgs, nil
32
+ }
33
+
20
34
  BeforeEach(func() {
21
35
  obj = bfs.NewInMemObject("path/to/file.jsonz")
22
- Expect(writeMulti(obj, 2)).To(Succeed())
36
+ Expect(writeMulti(obj, 2, mockTime)).To(Succeed())
23
37
 
24
38
  var err error
25
- subject, err = feedx.NewConsumerForRemote(ctx, obj, nil, func(r *feedx.Reader) (interface{}, error) {
26
- var msgs []*testdata.MockMessage
27
- for {
28
- var msg testdata.MockMessage
29
- if err := r.Decode(&msg); err == io.EOF {
30
- break
31
- }
32
- if err != nil {
33
- return nil, err
34
- }
35
- msgs = append(msgs, &msg)
36
- }
37
- return msgs, nil
38
- })
39
+ subject, err = feedx.NewConsumerForRemote(ctx, obj, nil, consume)
39
40
  Expect(err).NotTo(HaveOccurred())
40
41
  })
41
42
 
@@ -43,11 +44,41 @@ var _ = Describe("Consumer", func() {
43
44
  Expect(subject.Close()).To(Succeed())
44
45
  })
45
46
 
46
- It("should sync and retrieve feeds from remote", func() {
47
+ It("syncs/retrieves feeds from remote", func() {
47
48
  Expect(subject.LastSync()).To(BeTemporally("~", time.Now(), time.Second))
48
- Expect(subject.LastModified()).To(BeTemporally("~", time.Unix(1515151515, 0), time.Second))
49
+ Expect(subject.LastConsumed()).To(BeTemporally("==", subject.LastSync()))
50
+ Expect(subject.LastModified()).To(BeTemporally("==", mockTime.Truncate(time.Millisecond)))
49
51
  Expect(subject.NumRead()).To(Equal(2))
50
52
  Expect(subject.Data()).To(ConsistOf(seed(), seed()))
51
53
  Expect(subject.Close()).To(Succeed())
52
54
  })
55
+
56
+ It("consumes feeds only if necessary", func() {
57
+ prevSync := subject.LastSync()
58
+ time.Sleep(2 * time.Millisecond)
59
+
60
+ testable := subject.(interface{ TestSync() error })
61
+ Expect(testable.TestSync()).To(Succeed())
62
+ Expect(subject.LastSync()).To(BeTemporally(">", prevSync))
63
+ Expect(subject.LastConsumed()).To(BeTemporally("==", prevSync)) // skipped on last sync
64
+ Expect(subject.LastModified()).To(BeTemporally("==", mockTime.Truncate(time.Millisecond)))
65
+ Expect(subject.NumRead()).To(Equal(2))
66
+ })
67
+
68
+ It("always consumes if LastModified not set", func() {
69
+ noModTime := bfs.NewInMemObject("path/to/file.json")
70
+ Expect(writeMulti(noModTime, 2, time.Time{})).To(Succeed())
71
+
72
+ csmr, err := feedx.NewConsumerForRemote(ctx, noModTime, nil, consume)
73
+ Expect(err).NotTo(HaveOccurred())
74
+
75
+ prevSync := csmr.LastSync()
76
+ time.Sleep(2 * time.Millisecond)
77
+
78
+ testable := csmr.(interface{ TestSync() error })
79
+ Expect(testable.TestSync()).To(Succeed())
80
+ Expect(csmr.LastSync()).To(BeTemporally(">", prevSync))
81
+ Expect(csmr.LastConsumed()).To(BeTemporally("==", csmr.LastSync())) // consumed on last sync
82
+ Expect(csmr.LastModified()).To(BeTemporally("==", time.Unix(0, 0)))
83
+ })
53
84
  })
@@ -34,7 +34,7 @@ var _ = Describe("Decoder", func() {
34
34
  Expect(fixture.Close()).To(Succeed())
35
35
  })
36
36
 
37
- It("should decode", func() {
37
+ It("decodes", func() {
38
38
  v1 := new(mockStruct)
39
39
  Expect(subject.Decode(v1)).To(Succeed())
40
40
  Expect(v1).To(Equal(&mockStruct{
@@ -77,7 +77,7 @@ var _ = Describe("Decoder", func() {
77
77
  Expect(subject.Decode(v9)).To(MatchError(io.EOF))
78
78
  })
79
79
 
80
- It("should open from non-file readers", func() {
80
+ It("opens from non-file readers", func() {
81
81
  bin, err := ioutil.ReadFile("testdata/alltypes_plain.parquet")
82
82
  Expect(err).NotTo(HaveOccurred())
83
83
 
data/ext/parquet/go.mod CHANGED
@@ -3,7 +3,7 @@ module github.com/bsm/feedx/ext/parquet
3
3
  go 1.15
4
4
 
5
5
  require (
6
- github.com/bsm/feedx v0.0.0-00010101000000-000000000000
6
+ github.com/bsm/feedx v0.12.5
7
7
  github.com/bsm/ginkgo v1.16.1
8
8
  github.com/bsm/gomega v1.11.0
9
9
  github.com/bsm/parquet-go v0.0.0-20200904113737-792434824f00
data/ext/parquet/go.sum CHANGED
@@ -4,6 +4,8 @@ github.com/bmatcuk/doublestar/v3 v3.0.0 h1:TQtVPlDnAYwcrVNB2JiGuMc++H5qzWZd9PhkN
4
4
  github.com/bmatcuk/doublestar/v3 v3.0.0/go.mod h1:6PcTVMw80pCY1RVuoqu3V++99uQB3vsSYKPTd8AWA0k=
5
5
  github.com/bsm/bfs v0.11.3 h1:BTFCftgmuVZwwu6vyjhyKr/Pg1E+cZ5tLodj3wKxr94=
6
6
  github.com/bsm/bfs v0.11.3/go.mod h1:sUhBrbc9g0XThRRrT9hiinMhhKbkKIdhLkFljk4fuzM=
7
+ github.com/bsm/feedx v0.12.5 h1:N751MFTRKRgoP5eG1S30EoUuHsI7aAxJ0aQZg+7xf/Y=
8
+ github.com/bsm/feedx v0.12.5/go.mod h1:l5YNhFomuWy9du+8+hznXMH8Hug2qSMik7b5Vipcy58=
7
9
  github.com/bsm/ginkgo v1.16.0/go.mod h1:RabIZLzOCPghgHJKUqHZpqrQETA5AnF4aCSIYy5C1bk=
8
10
  github.com/bsm/ginkgo v1.16.1 h1:jp1v1dbmbGZDWmnGXDTN+XK3U1fTTNja9xYa7VBI0l0=
9
11
  github.com/bsm/ginkgo v1.16.1/go.mod h1:RabIZLzOCPghgHJKUqHZpqrQETA5AnF4aCSIYy5C1bk=
data/feedx.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'feedx'
3
- s.version = '0.12.5'
3
+ s.version = '0.12.6'
4
4
  s.authors = ['Black Square Media Ltd']
5
5
  s.email = ['info@blacksquaremedia.com']
6
6
  s.summary = %(Exchange data between components via feeds)
data/feedx_ext_test.go ADDED
@@ -0,0 +1,6 @@
1
+ package feedx
2
+
3
+ func (c *consumer) TestSync() error {
4
+ _, err := c.sync(false)
5
+ return err
6
+ }
data/feedx_test.go CHANGED
@@ -32,12 +32,12 @@ func seed() *testdata.MockMessage {
32
32
  }
33
33
  }
34
34
 
35
+ var mockTime = time.Unix(1515151515, 123456789)
36
+
35
37
  // ------------------------------------------------------------------------
36
38
 
37
- func writeMulti(obj *bfs.Object, numEntries int) error {
38
- w := feedx.NewWriter(context.Background(), obj, &feedx.WriterOptions{
39
- LastMod: time.Unix(1515151515, 123456789),
40
- })
39
+ func writeMulti(obj *bfs.Object, numEntries int, lastMod time.Time) error {
40
+ w := feedx.NewWriter(context.Background(), obj, &feedx.WriterOptions{LastMod: lastMod})
41
41
  defer w.Discard()
42
42
 
43
43
  for i := 0; i < numEntries; i++ {
data/format_test.go CHANGED
@@ -40,7 +40,7 @@ var _ = Describe("Format", func() {
40
40
  Expect(dec.Close()).To(Succeed())
41
41
  }
42
42
 
43
- It("should detect the format", func() {
43
+ It("detects the format", func() {
44
44
  Expect(feedx.DetectFormat("/path/to/file.json")).To(Equal(feedx.JSONFormat))
45
45
  Expect(feedx.DetectFormat("/path/to/file.json.gz")).To(Equal(feedx.JSONFormat))
46
46
  Expect(feedx.DetectFormat("/path/to/file.json.flate")).To(Equal(feedx.JSONFormat))
@@ -60,7 +60,7 @@ var _ = Describe("Format", func() {
60
60
  var subject = feedx.JSONFormat
61
61
  var _ feedx.Format = subject
62
62
 
63
- It("should encode/decode", func() {
63
+ It("encodes/decodes", func() {
64
64
  runSharedTest(subject)
65
65
  })
66
66
  })
@@ -69,7 +69,7 @@ var _ = Describe("Format", func() {
69
69
  var subject = feedx.ProtobufFormat
70
70
  var _ feedx.Format = subject
71
71
 
72
- It("should encode/decode", func() {
72
+ It("encodes/decodes", func() {
73
73
  runSharedTest(subject)
74
74
  })
75
75
  })
data/producer_test.go CHANGED
@@ -43,7 +43,7 @@ var _ = Describe("Producer", func() {
43
43
  }
44
44
  })
45
45
 
46
- It("should produce", func() {
46
+ It("produces", func() {
47
47
  setup(nil)
48
48
 
49
49
  Expect(subject.LastPush()).To(BeTemporally("~", time.Now(), time.Second))
@@ -56,7 +56,7 @@ var _ = Describe("Producer", func() {
56
56
  Expect(info.Size).To(BeNumerically("~", 75, 10))
57
57
  })
58
58
 
59
- It("should produce with custom last-mod check", func() {
59
+ It("produces with custom last-mod check", func() {
60
60
  setup(&feedx.ProducerOptions{
61
61
  Interval: 50 * time.Millisecond,
62
62
  LastModCheck: func(_ context.Context) (time.Time, error) { return time.Unix(1515151515, 987654321), nil },
data/reader_test.go CHANGED
@@ -4,6 +4,7 @@ import (
4
4
  "context"
5
5
  "io"
6
6
  "io/ioutil"
7
+ "time"
7
8
 
8
9
  "github.com/bsm/bfs"
9
10
  "github.com/bsm/feedx"
@@ -19,7 +20,7 @@ var _ = Describe("Reader", func() {
19
20
 
20
21
  BeforeEach(func() {
21
22
  obj = bfs.NewInMemObject("path/to/file.json")
22
- Expect(writeMulti(obj, 3)).To(Succeed())
23
+ Expect(writeMulti(obj, 3, time.Time{})).To(Succeed())
23
24
 
24
25
  var err error
25
26
  subject, err = feedx.NewReader(ctx, obj, nil)
@@ -30,14 +31,14 @@ var _ = Describe("Reader", func() {
30
31
  Expect(subject.Close()).To(Succeed())
31
32
  })
32
33
 
33
- It("should read", func() {
34
+ It("reads", func() {
34
35
  data, err := ioutil.ReadAll(subject)
35
36
  Expect(err).NotTo(HaveOccurred())
36
37
  Expect(len(data)).To(BeNumerically("~", 110, 20))
37
38
  Expect(subject.NumRead()).To(Equal(0))
38
39
  })
39
40
 
40
- It("should decode", func() {
41
+ It("decodes", func() {
41
42
  var msgs []*testdata.MockMessage
42
43
  for {
43
44
  var msg testdata.MockMessage
data/writer.go CHANGED
@@ -20,7 +20,7 @@ type WriterOptions struct {
20
20
  Compression Compression
21
21
 
22
22
  // Provides an optional last modified timestamp which is stored with the remote metadata.
23
- // Default: time.Now().
23
+ // Default: time.Time{}.
24
24
  LastMod time.Time
25
25
  }
26
26
 
@@ -31,9 +31,6 @@ func (o *WriterOptions) norm(name string) {
31
31
  if o.Compression == nil {
32
32
  o.Compression = DetectCompression(name)
33
33
  }
34
- if o.LastMod.IsZero() {
35
- o.LastMod = time.Now()
36
- }
37
34
  }
38
35
 
39
36
  // Writer encodes feeds to remote locations.
data/writer_test.go CHANGED
@@ -20,7 +20,7 @@ var _ = Describe("Writer", func() {
20
20
  compressed = bfs.NewInMemObject("path/to/file.jsonz")
21
21
  })
22
22
 
23
- It("should write plain", func() {
23
+ It("writes plain", func() {
24
24
  w := feedx.NewWriter(context.Background(), plain, &feedx.WriterOptions{
25
25
  LastMod: time.Unix(1515151515, 123456789),
26
26
  })
@@ -35,7 +35,7 @@ var _ = Describe("Writer", func() {
35
35
  Expect(info.Metadata).To(Equal(bfs.Metadata{"X-Feedx-Last-Modified": "1515151515123"}))
36
36
  })
37
37
 
38
- It("should write compressed", func() {
38
+ It("writes compressed", func() {
39
39
  w := feedx.NewWriter(context.Background(), compressed, &feedx.WriterOptions{
40
40
  LastMod: time.Unix(1515151515, 123456789),
41
41
  })
@@ -50,14 +50,14 @@ var _ = Describe("Writer", func() {
50
50
  Expect(info.Metadata).To(Equal(bfs.Metadata{"X-Feedx-Last-Modified": "1515151515123"}))
51
51
  })
52
52
 
53
- It("should encode", func() {
54
- Expect(writeMulti(plain, 10)).To(Succeed())
55
- Expect(writeMulti(compressed, 10)).To(Succeed())
53
+ It("encodes", func() {
54
+ Expect(writeMulti(plain, 10, time.Time{})).To(Succeed())
55
+ Expect(writeMulti(compressed, 10, mockTime)).To(Succeed())
56
56
 
57
57
  info, err := plain.Head(ctx)
58
58
  Expect(err).NotTo(HaveOccurred())
59
59
  Expect(info.Size).To(BeNumerically("~", 370, 10))
60
- Expect(info.Metadata).To(Equal(bfs.Metadata{"X-Feedx-Last-Modified": "1515151515123"}))
60
+ Expect(info.Metadata).To(Equal(bfs.Metadata{"X-Feedx-Last-Modified": "0"}))
61
61
 
62
62
  info, err = compressed.Head(ctx)
63
63
  Expect(err).NotTo(HaveOccurred())
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: feedx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.5
4
+ version: 0.12.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Black Square Media Ltd
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-05-04 00:00:00.000000000 Z
11
+ date: 2021-06-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bfs
@@ -146,6 +146,7 @@ files:
146
146
  - ext/parquet/types.go
147
147
  - feedx.gemspec
148
148
  - feedx.go
149
+ - feedx_ext_test.go
149
150
  - feedx_test.go
150
151
  - format.go
151
152
  - format_test.go