Class: TapClutch::Models::Base

Inherits:
Struct
  • Object
show all
Defined in:
lib/models/base.rb

Overview

rubocop:disable Metrics/BlockLength

Direct Known Subclasses

Card, Transaction

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#clientObject

Returns the value of attribute client

Returns:

  • (Object)

    the current value of client



8
9
10
# File 'lib/models/base.rb', line 8

def client
  @client
end

#dataObject

Returns the value of attribute data

Returns:

  • (Object)

    the current value of data



8
9
10
# File 'lib/models/base.rb', line 8

def data
  @data
end

Class Method Details

.key_propertyObject



17
18
19
# File 'lib/models/base.rb', line 17

def self.key_property
  :id
end

.schema(&block) ⇒ Object



21
22
23
24
25
# File 'lib/models/base.rb', line 21

def self.schema(&block)
  @schema ||= ::TapClutch::Schema.new(stream, key_property)
  @schema.instance_eval(&block) if block_given?
  @schema.to_hash
end

.streamObject



13
14
15
# File 'lib/models/base.rb', line 13

def self.stream
  raise 'Implement #stream in a subclass'
end

.subclassesObject



9
10
11
# File 'lib/models/base.rb', line 9

def self.subclasses
  ObjectSpace.each_object(Class).select { |klass| klass < self }
end

Instance Method Details

#base_recordObject



31
32
33
34
35
36
37
# File 'lib/models/base.rb', line 31

def base_record
  {
    type: 'RECORD',
    stream: self.class.stream,
    record: transform
  }
end

#extra_recordsObject



39
40
41
# File 'lib/models/base.rb', line 39

def extra_records
  []
end

#recordsObject



43
44
45
# File 'lib/models/base.rb', line 43

def records
  [base_record] + extra_records.compact.flat_map(&:records)
end

#transformObject



27
28
29
# File 'lib/models/base.rb', line 27

def transform
  data.transform_keys(&:underscore)
end