Class: WinExcelDb::MetaRange

Inherits:
Object
  • Object
show all
Defined in:
lib/win_excel_db/meta_range.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeMetaRange

Returns a new instance of MetaRange.



9
10
11
# File 'lib/win_excel_db/meta_range.rb', line 9

def initialize
  @meta_rows = Array.new
end

Instance Attribute Details

#meta_rowsObject

attr_accessor :row_sheet



7
8
9
# File 'lib/win_excel_db/meta_range.rb', line 7

def meta_rows
  @meta_rows
end

Instance Method Details

#eachObject



55
56
57
58
59
# File 'lib/win_excel_db/meta_range.rb', line 55

def each
  @meta_rows.each do |row|
    yield(row)
  end
end

#exclude_row(meta_row) ⇒ Object



27
28
29
# File 'lib/win_excel_db/meta_range.rb', line 27

def exclude_row(meta_row)
  @meta_rows.delete(meta_row)
end

#innerjoin(*args) ⇒ Object



207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
# File 'lib/win_excel_db/meta_range.rb', line 207

def innerjoin(*args)
  case args.size
  when 3
    self_field = args[0]
    self_field2 = nil
    joining_range = args[1]
    joining_field = args[2]
    joining_field2 = nil
  when 5
    self_field = args[0]
    self_field2 = args[1]
    joining_range = args[2]
    joining_field = args[3]
    joining_field2 = args[4]
  end
  new_range = MetaRange.new
  new_meta_rows = new_range.meta_rows
  @meta_rows.each do |meta_row|
    new_meta_rows.push(meta_row)
  end
  new_range.innerjoin!(self_field, self_field2, joining_range, joining_field, joining_field2)
  return new_range
end

#innerjoin!(*args) ⇒ Object



166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
# File 'lib/win_excel_db/meta_range.rb', line 166

def innerjoin!(*args)
  new_array = []

  case args.size
  when 3
    self_field = args[0]
    self_field2 = nil
    joining_range = args[1]
    joining_field = args[2]
    joining_field2 = nil
  when 5
    self_field = args[0]
    self_field2 = args[1]
    joining_range = args[2]
    joining_field = args[3]
    joining_field2 = args[4]
  end

  @meta_rows.each do |self_row|
    hit = false
    joining_range.meta_rows.each do |joining_row|
      first_match = (self_row.read(self_field) == joining_row.read(joining_field))
      second_match = self_field2.nil? || (self_row.read(self_field2) == joining_row.read(joining_field2))

      if first_match && second_match
        joining_row.data_rows.each_value do |joining_data_row|
          self_row.add(joining_data_row)
          hit = true
        end
        new_array << self_row
        break if hit
      end
    end
  end

  @meta_rows.clear
  new_array.each do |row|
    @meta_rows << row
  end
end

#leftjoin(*args) ⇒ Object



97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/win_excel_db/meta_range.rb', line 97

def leftjoin(*args)
  case args.size
  when 3
    self_field = args[0]
    self_field2 = nil
    joining_range = args[1]
    joining_field = args[2]
    joining_field2 = nil
  when 5
    self_field = args[0]
    self_field2 = args[1]
    joining_range = args[2]
    joining_field = args[3]
    joining_field2 = args[4]
  end
  new_range = MetaRange.new
  new_meta_rows = new_range.meta_rows
  # creating a deep copy of own meta_rows in new MetaRange filled with old DataRows
  @meta_rows.each do |meta_row|
    new_meta_rows.push(meta_row)
  end

  new_range.leftjoin!(self_field, self_field2, joining_range, joining_field, joining_field2)

  return new_range
end

#leftjoin!(*args) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/win_excel_db/meta_range.rb', line 61

def leftjoin!(*args)
  case args.size
  when 3
    self_field = args[0]
    self_field2 = nil
    joining_range = args[1]
    joining_field = args[2]
    joining_field2 = nil
  when 5
    self_field = args[0]
    self_field2 = args[1]
    joining_range = args[2]
    joining_field = args[3]
    joining_field2 = args[4]
  end

  @meta_rows.each do |self_row|
    hit = false

    joining_range.meta_rows.each do |joining_row|
      # Vergleiche erstes Feld
      first_match = (self_row.read(self_field) == joining_row.read(joining_field))
      # Zweites Feld nur vergleichen, wenn angegeben, sonst true
      second_match = self_field2.nil? || (self_row.read(self_field2) == joining_row.read(joining_field2))

      if first_match && second_match
        joining_row.data_rows.each_value do |joining_data_row|
          self_row.add(joining_data_row)
          hit = true
        end
        break if hit
      end
    end
  end
end

#lengthObject



13
14
15
# File 'lib/win_excel_db/meta_range.rb', line 13

def length
  return @meta_rows.length
end

#push(meta_row) ⇒ Object



21
22
23
24
25
# File 'lib/win_excel_db/meta_range.rb', line 21

def push(meta_row)
  if !@meta_rows.include?(meta_row) then
    @meta_rows.push(meta_row)
  end
end

#selection(field = '', value = '') ⇒ Object



154
155
156
157
158
159
160
161
162
163
164
# File 'lib/win_excel_db/meta_range.rb', line 154

def selection(field = '', value = '')
  new_range = MetaRange.new
  new_meta_rows = new_range.meta_rows
  @meta_rows.each { |meta_row| new_meta_rows.push(meta_row) }
  if block_given?
    new_range.selection!(field, value) { |row| yield row }
  else
    new_range.selection!(field, value)
  end
  return new_range
end

#selection!(field = '', value = '') ⇒ Object



124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# File 'lib/win_excel_db/meta_range.rb', line 124

def selection!(field = '', value = '')
  new_meta_rows = Array.new

  @meta_rows.each do |meta_row|
    if !(block_given?) then
      if value.is_a?(String) then
        if value == meta_row.read(field) then
          new_meta_rows.push(meta_row)
        end
      else
        # is regex
        if value === meta_row.read(field) then
          # three equals!
          new_meta_rows.push(meta_row)
        end
      end
    else
      # is a block!
      if yield(meta_row) then
        new_meta_rows.push(meta_row)
      end
    end

  end
  @meta_rows.clear
  new_meta_rows.each do |row|
    @meta_rows.push(row)
  end
end

#shuffle!Object



17
18
19
# File 'lib/win_excel_db/meta_range.rb', line 17

def shuffle!
  @meta_rows.shuffle!
end

#sort_by(&block) ⇒ Object



35
36
37
38
39
# File 'lib/win_excel_db/meta_range.rb', line 35

def sort_by(&block)
  new_meta_rows = @meta_rows.sort_by &block
  new_meta_range = MetaRange.new
  new_meta_range.meta_rows = new_meta_rows
end

#sort_by!(&block) ⇒ Object



31
32
33
# File 'lib/win_excel_db/meta_range.rb', line 31

def sort_by!(&block)
  @meta_rows.sort_by! &block
end

#take(count) ⇒ Object



45
46
47
48
49
# File 'lib/win_excel_db/meta_range.rb', line 45

def take(count)
  new_meta_range = MetaRange.new
  new_meta_range.meta_rows = @meta_rows.take(count)
  return new_meta_range
end

#take!(count) ⇒ Object



41
42
43
# File 'lib/win_excel_db/meta_range.rb', line 41

def take!(count)
  @meta_rows = @meta_rows.take(count)
end

#take_rows(count) ⇒ Object



51
52
53
# File 'lib/win_excel_db/meta_range.rb', line 51

def take_rows(count)
  return @meta_rows.take(count)
end

#to_htmlObject



234
235
# File 'lib/win_excel_db/meta_range.rb', line 234

def to_html
end

#to_sheetObject



231
232
# File 'lib/win_excel_db/meta_range.rb', line 231

def to_sheet
end