bmg 0.20.5 → 0.21.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: 0c2ddf234065e92d8491f0efc3e603522c3aabdb43d268a1e6b438f9aa9197ea
4
- data.tar.gz: d985c466d1b0cc9f9117517f64fb2b00715e2e6cf41e95a10eaa5772e89c2dd3
2
+ SHA1:
3
+ metadata.gz: ef6b320621feeff681bb76b804da274ae055573c
4
+ data.tar.gz: 2a119b1aa5838fbb2b657332de25fd22cc10dbb6
5
5
  SHA512:
6
- metadata.gz: 13d3dd2a73eb78e4e2344da2af4f6d738c1294f15ec19affa732aad83d2d1e4aa6778e424814a833b3ccdb78f5a6abe55121d75a35448d73ce7f03591abb502f
7
- data.tar.gz: 27d4c95da2fa998ef36a6fbdc08fdbd8e4cae0735a0b6450008d835a494d82c12566553b50aa222316b8e4e99c145e390e0c3c5148305aeab71c259177dac160
6
+ metadata.gz: e33cda560cb1c3f119940745c63f45884a406d7b0bce113d08a43d2f374a9a658ab47667c63919d16d5863f6867f2d29808d23a049efe9e34487a282e29c9c82
7
+ data.tar.gz: ec437125ffbf4e41633b33c6ddc5eedeccef915dd2201f7d0f2a54e8ba348f272e67195ebc57cd8a8e839b07a0fa1aacb957eacf6723d34a42b03dac1d4783ec
@@ -39,9 +39,7 @@ module Bmg
39
39
  private
40
40
 
41
41
  def tuple(row)
42
- row.to_hash.each_with_object({}){|(k,v),h|
43
- h[k.to_sym] = v
44
- }
42
+ row.to_hash.each_with_object({}){|(k,v),h| h[k.to_sym] = v }
45
43
  end
46
44
 
47
45
  def handle_type(type)
@@ -2,13 +2,7 @@ module Bmg
2
2
  class Ordering
3
3
 
4
4
  def initialize(attrs)
5
- @attrs = if attrs.empty?
6
- []
7
- elsif attrs.first.is_a?(Symbol)
8
- attrs.map{|a| [a, :asc] }
9
- else
10
- attrs
11
- end
5
+ @attrs = attrs
12
6
  end
13
7
  attr_reader :attrs
14
8
 
@@ -39,9 +33,5 @@ module Bmg
39
33
  0
40
34
  end
41
35
 
42
- def to_a
43
- attrs.to_a
44
- end
45
-
46
36
  end # class Ordering
47
37
  end # module Bmg
@@ -3,7 +3,6 @@ module Bmg
3
3
 
4
4
  DEFAULT_PREFS = {
5
5
  attributes_ordering: nil,
6
- tuple_ordering: nil,
7
6
  extra_attributes: :after
8
7
  }
9
8
 
@@ -18,12 +17,6 @@ module Bmg
18
17
  new(arg)
19
18
  end
20
19
 
21
- def tuple_ordering
22
- return nil unless to = options[:tuple_ordering]
23
-
24
- @tuple_ordering = Ordering.new(to)
25
- end
26
-
27
20
  def attributes_ordering
28
21
  options[:attributes_ordering]
29
22
  end
@@ -32,29 +25,10 @@ module Bmg
32
25
  options[:extra_attributes]
33
26
  end
34
27
 
35
- def grouping_attributes
36
- options[:grouping_attributes]
37
- end
38
-
39
- def erase_redundance_in_group(before, current)
40
- return [nil, current] unless ga = grouping_attributes
41
- return [current, current] unless before
42
-
43
- new_before, new_current = current.dup, current.dup
44
- ga.each do |attr|
45
- return [new_before, new_current] unless before[attr] == current[attr]
46
- new_current[attr] = nil
47
- end
48
- [new_before, new_current]
49
- end
50
-
51
28
  def order_attrlist(attrlist)
52
29
  return attrlist if attributes_ordering.nil?
53
-
54
30
  index = Hash[attributes_ordering.each_with_index.to_a]
55
- base = attrlist
56
- base = attrlist & attributes_ordering if extra_attributes == :ignored
57
- base.sort{|a,b|
31
+ attrlist.sort{|a,b|
58
32
  ai, bi = index[a], index[b]
59
33
  if ai && bi
60
34
  ai <=> bi
data/lib/bmg/version.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  module Bmg
2
2
  module Version
3
3
  MAJOR = 0
4
- MINOR = 20
5
- TINY = 5
4
+ MINOR = 21
5
+ TINY = 0
6
6
  end
7
7
  VERSION = "#{Version::MAJOR}.#{Version::MINOR}.#{Version::TINY}"
8
8
  end
@@ -16,14 +16,12 @@ module Bmg
16
16
  require 'csv'
17
17
  string_or_io, to_s = string_or_io.nil? ? [StringIO.new, true] : [string_or_io, false]
18
18
  headers, csv = infer_headers(relation.type), nil
19
- previous = nil
20
- each_tuple(relation) do |tuple,i|
19
+ relation.each do |tuple|
21
20
  if csv.nil?
22
21
  headers = infer_headers(tuple) if headers.nil?
23
22
  csv_opts = csv_options.merge(headers: headers)
24
23
  csv = CSV.new(string_or_io, **csv_opts)
25
24
  end
26
- previous, tuple = output_preferences.erase_redundance_in_group(previous, tuple)
27
25
  csv << headers.map{|h| tuple[h] }
28
26
  end
29
27
  to_s ? string_or_io.string : string_or_io
@@ -6,11 +6,11 @@ module Bmg
6
6
  DEFAULT_OPTIONS = {
7
7
  }
8
8
 
9
- def initialize(xlsx_options, output_preferences = nil)
10
- @xlsx_options = DEFAULT_OPTIONS.merge(xlsx_options)
9
+ def initialize(csv_options, output_preferences = nil)
10
+ @csv_options = DEFAULT_OPTIONS.merge(csv_options)
11
11
  @output_preferences = OutputPreferences.dress(output_preferences)
12
12
  end
13
- attr_reader :xlsx_options, :output_preferences
13
+ attr_reader :csv_options, :output_preferences
14
14
 
15
15
  def call(relation, path)
16
16
  require 'write_xlsx'
@@ -21,24 +21,22 @@ module Bmg
21
21
  attr_reader :workbook, :worksheet
22
22
 
23
23
  def _call(relation, path)
24
- @workbook = xlsx_options[:workbook] || WriteXLSX.new(path)
25
- @worksheet = xlsx_options[:worksheet] || workbook.add_worksheet
24
+ @workbook = WriteXLSX.new(path)
25
+ @worksheet = workbook.add_worksheet
26
26
 
27
27
  headers = infer_headers(relation.type)
28
- before = nil
29
- each_tuple(relation) do |tuple,i|
28
+ relation.each_with_index do |tuple,i|
30
29
  headers = infer_headers(tuple) if headers.nil?
31
30
  headers.each_with_index do |h,i|
32
31
  worksheet.write_string(0, i, h)
33
32
  end if i == 0
34
- before, tuple = output_preferences.erase_redundance_in_group(before, tuple)
35
33
  headers.each_with_index do |h,j|
36
34
  meth, *args = write_pair(tuple[h])
37
35
  worksheet.send(meth, 1+i, j, *args)
38
36
  end
39
37
  end
40
38
 
41
- workbook.close unless xlsx_options[:workbook]
39
+ workbook.close
42
40
  path
43
41
  end
44
42
 
data/lib/bmg/writer.rb CHANGED
@@ -12,17 +12,6 @@ module Bmg
12
12
  attrlist ? output_preferences.order_attrlist(attrlist) : nil
13
13
  end
14
14
 
15
- def each_tuple(relation, &bl)
16
- if ordering = output_preferences.tuple_ordering
17
- relation
18
- .to_a
19
- .sort{|t1,t2| ordering.compare_attrs(t1, t2) }
20
- .each_with_index(&bl)
21
- else
22
- relation.each_with_index(&bl)
23
- end
24
- end
25
-
26
15
  end # module Writer
27
16
  end # module Bmg
28
17
  require_relative 'writer/csv'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bmg
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.20.5
4
+ version: 0.21.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bernard Lambeau
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-01-18 00:00:00.000000000 Z
11
+ date: 2023-05-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: predicate
@@ -320,7 +320,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
320
320
  - !ruby/object:Gem::Version
321
321
  version: '0'
322
322
  requirements: []
323
- rubygems_version: 3.1.6
323
+ rubyforge_project:
324
+ rubygems_version: 2.6.14.4
324
325
  signing_key:
325
326
  specification_version: 4
326
327
  summary: Bmg is Alf's successor.