Class: Remi::Testing::BusinessRules::DataSubjectCollection

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/remi/testing/business_rules.rb

Instance Method Summary collapse

Constructor Details

#initializeDataSubjectCollection

Returns a new instance of DataSubjectCollection.



205
206
207
# File 'lib/remi/testing/business_rules.rb', line 205

def initialize
  @subjects = {}
end

Instance Method Details

#[](subject_name) ⇒ Object



209
210
211
# File 'lib/remi/testing/business_rules.rb', line 209

def [](subject_name)
  @subjects[subject_name]
end

#add_field(full_field_name) ⇒ Object



236
237
238
239
240
241
# File 'lib/remi/testing/business_rules.rb', line 236

def add_field(full_field_name)
  subject_names, field_name = parse_full_field(full_field_name, multi: true)
  Array(subject_names).each do |subject_name|
    @subjects[subject_name].add_field(field_name)
  end
end

#add_subject(subject_name, subject) ⇒ Object



232
233
234
# File 'lib/remi/testing/business_rules.rb', line 232

def add_subject(subject_name, subject)
  @subjects[subject_name] ||= DataSubject.new(subject_name, subject)
end

#each(&block) ⇒ Object



213
214
215
# File 'lib/remi/testing/business_rules.rb', line 213

def each(&block)
  @subjects.each &block
end

#fieldsObject



248
249
250
251
252
253
254
# File 'lib/remi/testing/business_rules.rb', line 248

def fields
  Enumerator.new do |enum|
    @subjects.each do |subject_name, subject|
      subject.fields.each { |field_name, field| enum << field }
    end
  end
end

#full_field_namesObject



256
257
258
259
260
# File 'lib/remi/testing/business_rules.rb', line 256

def full_field_names
  @subjects.map do |subject_name, subject|
    subject.fields.map { |field_name, field| "#{field.full_name}" }
  end.flatten
end

#keysObject



217
218
219
# File 'lib/remi/testing/business_rules.rb', line 217

def keys
  @subjects.keys
end

#onlyObject



243
244
245
246
# File 'lib/remi/testing/business_rules.rb', line 243

def only
  raise "Multiple subjects defined: #{keys}" unless @subjects.size == 1
  @subjects.values.first
end

#parse_full_field(full_field_name, multi: false) ⇒ Object



221
222
223
224
225
226
227
228
229
230
# File 'lib/remi/testing/business_rules.rb', line 221

def parse_full_field(full_field_name, multi: false)
  if full_field_name.include? ':'
    full_field_name.split(':').map(&:strip)
  elsif multi
    [@subjects.keys, full_field_name]
  else
    raise "Multiple subjects defined: #{keys}" unless @subjects.size == 1
    [@subjects.keys.first, full_field_name]
  end
end

#sizeObject



262
263
264
# File 'lib/remi/testing/business_rules.rb', line 262

def size
  @subjects.size
end

#total_sizeObject



266
267
268
# File 'lib/remi/testing/business_rules.rb', line 266

def total_size
  @subjects.reduce(0) { |sum, (name, subject)| sum += subject.size }
end