Class: ActiveRecord::Import::ValueSetsBytesParser

Inherits:
Object
  • Object
show all
Defined in:
lib/activerecord-import/value_sets_parser.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(values, options) ⇒ ValueSetsBytesParser

Returns a new instance of ValueSetsBytesParser.



9
10
11
12
13
# File 'lib/activerecord-import/value_sets_parser.rb', line 9

def initialize(values, options)
  @values = values
  @reserved_bytes = options[:reserved_bytes]
  @max_bytes = options[:max_bytes]
end

Instance Attribute Details

#max_bytesObject (readonly)

Returns the value of attribute max_bytes.



3
4
5
# File 'lib/activerecord-import/value_sets_parser.rb', line 3

def max_bytes
  @max_bytes
end

#reserved_bytesObject (readonly)

Returns the value of attribute reserved_bytes.



3
4
5
# File 'lib/activerecord-import/value_sets_parser.rb', line 3

def reserved_bytes
  @reserved_bytes
end

#valuesObject (readonly)

Returns the value of attribute values.



3
4
5
# File 'lib/activerecord-import/value_sets_parser.rb', line 3

def values
  @values
end

Class Method Details

.parse(values, options) ⇒ Object



5
6
7
# File 'lib/activerecord-import/value_sets_parser.rb', line 5

def self.parse(values, options)
  new(values, options).parse
end

Instance Method Details

#parseObject



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/activerecord-import/value_sets_parser.rb', line 15

def parse
  value_sets = []
  arr = []
  current_size = 0
  values.each_with_index do |val, i|
    comma_bytes = arr.size
    bytes_thus_far = reserved_bytes + current_size + val.bytesize + comma_bytes
    if bytes_thus_far <= max_bytes
      current_size += val.bytesize
      arr << val
    else
      value_sets << arr
      arr = [val]
      current_size = val.bytesize
    end

    # if we're on the last iteration push whatever we have in arr to value_sets
    value_sets << arr if i == (values.size - 1)
  end

  [*value_sets]
end