lucarecord 0.2.26 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 526cf95ca548f5f2b4617f0af76337fa1d9a05896b212a4468f2d68db4b3ab03
4
- data.tar.gz: 203299e63b9835ca1da312059df927cc8d65d81bea25d299fd08cf1d5afca0fa
3
+ metadata.gz: 9ed7b48ed86166e5a300510832dff02e9e51d4fd3184aeaa4b1c73b663845631
4
+ data.tar.gz: a2b03908af268809a66a08e600994064f5a1bf9cda2610f94f9f849b5d981188
5
5
  SHA512:
6
- metadata.gz: d53ff1db376c14b4b39f2975dc70ec0cb74a04dc25f7b17da193c532b819f76614399ad019e4101d73acde439bfdef7a0cc6773a8bacda88b0bc22dedeb8c5e8
7
- data.tar.gz: 4feed97a4a7b5f7505f6aee51a71c7301606387f3ce2c1bf7086edf1c3bb5e3ceab42b43e7a5daa2576e94ba4ae8e054a3d5ec88d735b5ff47c903ee0a31290a
6
+ metadata.gz: 1cefaa9401e153e6cd7f628c8141265b172ca3cec2606294b691a08acc6860c46b76ed60739f1f8ac1e40dc57e8def103d507d5b917fa3713c118bc8e333888e
7
+ data.tar.gz: b85f03f247270a7d87ab7635bf7e0dc73ecaf0f33af37660ce666d1f287259274c612112f77305f3ad317a823324058290b81d5a19e7e47c947f88d6d598788e
data/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## LucaRecord 0.3.0
2
+
3
+ * implement LucaRecord::IO.latest_month
4
+
5
+ ## LucaRecord 0.2.28
6
+
7
+ * implement LucaSupport::Range, handle #by_month enumeration between several months.
8
+ * @record_type = 'raw' is deprecated in favor of overriding LucaRecord::IO.load_data
9
+ * change code search from exact match to prefix match
10
+
11
+ ## LucaRecord 0.2.27
12
+
13
+ * Fix: update_digest
14
+
1
15
  ## LucaRecord 0.2.26
2
16
 
3
17
  * Support #dig / #search for TSV dictionary
@@ -64,11 +64,7 @@ module LucaRecord # :nodoc:
64
64
 
65
65
  LucaSupport::Code.encode_term(start_year, start_month, end_year, end_month).each do |subdir|
66
66
  open_records(basedir, subdir, nil, code) do |f, path|
67
- if @record_type == 'raw'
68
- yield f, path
69
- else
70
- yield load_data(f, path)
71
- end
67
+ yield load_data(f, path)
72
68
  end
73
69
  end
74
70
  end
@@ -80,11 +76,7 @@ module LucaRecord # :nodoc:
80
76
 
81
77
  subdir = year.to_s + LucaSupport::Code.encode_month(month)
82
78
  open_records(basedir, subdir, LucaSupport::Code.encode_date(day), code) do |f, path|
83
- if @record_type == 'raw'
84
- yield f, path
85
- else
86
- yield load_data(f, path), path
87
- end
79
+ yield load_data(f, path), path
88
80
  end
89
81
  end
90
82
 
@@ -98,6 +90,12 @@ module LucaRecord # :nodoc:
98
90
  end
99
91
  end
100
92
 
93
+ # [year, month] pair of the latest record
94
+ #
95
+ def latest_month(code = nil, basedir = @dirname)
96
+ LucaSupport::Code.decode_term(Dir.entries(abs_path(basedir)).max)
97
+ end
98
+
101
99
  # ----------------------------------------------------------------
102
100
  # :section: Write Methods
103
101
  # <tt>basedir</tt> is set by class instance variable <tt>@dirname</tt>
@@ -311,14 +309,14 @@ module LucaRecord # :nodoc:
311
309
  File.open(subpath, mode) { |f| yield(f, id_set) }
312
310
  end
313
311
  end
312
+ end
314
313
 
315
- # Calculate md5sum with original digest, file content and filename(optional).
316
- #
317
- def update_digest(digest, str, filename = nil)
318
- str = filename.nil? ? str : filename + str
319
- content = Digest::MD5.new.update(str).hexdigest
320
- Digest::MD5.new.update(digest + content).hexdigest
321
- end
314
+ # Calculate md5sum with original digest, file content and filename(optional).
315
+ #
316
+ def update_digest(digest, str, filename = nil)
317
+ str = filename.nil? ? str : filename + str
318
+ content = Digest::MD5.new.update(str).hexdigest
319
+ Digest::MD5.new.update(digest + content).hexdigest
322
320
  end
323
321
 
324
322
  # git object like structure
@@ -360,9 +358,6 @@ module LucaRecord # :nodoc:
360
358
  def load_data(io, path = nil)
361
359
  if @record_type
362
360
  case @record_type
363
- when 'raw'
364
- # TODO: raw may be unneeded in favor of override
365
- io
366
361
  when 'json'
367
362
  # TODO: implement JSON parse
368
363
  end
@@ -386,14 +381,17 @@ module LucaRecord # :nodoc:
386
381
  Pathname(LucaSupport::PJDIR) / 'data' / base_dir
387
382
  end
388
383
 
389
- # true when file doesn't have record on code
390
- # false when file may have one
384
+ # True when file doesn't have record on code.
385
+ # False when file may have one.
386
+ # If filename doesn't record codes, always return false,
387
+ # so later check is required. This is partial optimization.
388
+ #
391
389
  def skip_on_unmatch_code(subpath, code = nil)
392
390
  # p filename.split('-')[1..-1]
393
391
  filename = subpath.split('/').last
394
392
  return false if code.nil? || filename.length <= 4
395
393
 
396
- !filename.split('-')[1..-1].include?(code)
394
+ filename.split('-')[1..-1].select { |fragment| /^#{code}/.match(fragment) }.empty?
397
395
  end
398
396
 
399
397
  # AUTO INCREMENT
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module LucaRecord
4
- VERSION = '0.2.26'
4
+ VERSION = '0.3.0'
5
5
  end
@@ -5,8 +5,9 @@ require 'securerandom'
5
5
  require 'digest/sha1'
6
6
  require 'luca_support/config'
7
7
 
8
- # implement Luca IDs convention
9
- module LucaSupport
8
+ module LucaSupport # :nodoc:
9
+ # implement Luca IDs convention
10
+ #
10
11
  module Code
11
12
  module_function
12
13
 
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LucaSupport # :nodoc:
4
+ # Partial range operation
5
+ #
6
+ module Range
7
+ def self.included(klass) # :nodoc:
8
+ klass.extend ClassMethods
9
+ end
10
+
11
+ def by_month(step = nil, from: nil, to: nil)
12
+ return enum_for(:by_month, step, from: from, to: to) unless block_given?
13
+
14
+ from ||= @start_date
15
+ to ||= @end_date
16
+ self.class.term_by_month(from, to, step || 1).each do |date|
17
+ @cursor_start = date
18
+ @cursor_end = step.nil? ? date : [date.next_month(step - 1), to].min
19
+ yield @cursor_start, @cursor_end
20
+ end
21
+ end
22
+
23
+ module ClassMethods
24
+ def term_by_month(start_date, end_date, step = 1)
25
+ Enumerator.new do |yielder|
26
+ each_month = start_date
27
+ while each_month <= end_date
28
+ yielder << each_month
29
+ each_month = each_month.next_month(step)
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lucarecord
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.26
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chuma Takahiro
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-03-15 00:00:00.000000000 Z
11
+ date: 2022-03-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mail
@@ -68,7 +68,7 @@ dependencies:
68
68
  version: 12.3.3
69
69
  description: 'ERP File operation framework
70
70
 
71
- '
71
+ '
72
72
  email:
73
73
  - co.chuma@gmail.com
74
74
  executables: []
@@ -86,6 +86,7 @@ files:
86
86
  - lib/luca_support/code.rb
87
87
  - lib/luca_support/config.rb
88
88
  - lib/luca_support/mail.rb
89
+ - lib/luca_support/range.rb
89
90
  - lib/luca_support/view.rb
90
91
  homepage: https://github.com/chumaltd/luca/tree/master/lucarecord
91
92
  licenses:
@@ -94,7 +95,7 @@ metadata:
94
95
  homepage_uri: https://github.com/chumaltd/luca/tree/master/lucarecord
95
96
  source_code_uri: https://github.com/chumaltd/luca/tree/master/lucarecord
96
97
  changelog_uri: https://github.com/chumaltd/luca/tree/master/lucarecord/CHANGELOG.md
97
- post_install_message:
98
+ post_install_message:
98
99
  rdoc_options: []
99
100
  require_paths:
100
101
  - lib
@@ -109,8 +110,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
109
110
  - !ruby/object:Gem::Version
110
111
  version: '0'
111
112
  requirements: []
112
- rubygems_version: 3.2.3
113
- signing_key:
113
+ rubygems_version: 3.2.5
114
+ signing_key:
114
115
  specification_version: 4
115
116
  summary: ERP File operation framework
116
117
  test_files: []