class Fit4Ruby::GlobalFitMessageList

Public Class Methods

new(&block) click to toggle source
# File lib/fit4ruby/GlobalFitMessage.rb, line 354
def initialize(&block)
  @current_message = nil
  @messages = {}
  instance_eval(&block) if block_given?
end

Public Instance Methods

[](number) click to toggle source
# File lib/fit4ruby/GlobalFitMessage.rb, line 408
def [](number)
  @messages[number]
end
alt_field(number, ref_field, &block) click to toggle source
# File lib/fit4ruby/GlobalFitMessage.rb, line 401
def alt_field(number, ref_field, &block)
  unless @current_message
    raise "You must define a message first"
  end
  @current_message.alt_field(number, ref_field, &block)
end
each() { |message| ... } click to toggle source
# File lib/fit4ruby/GlobalFitMessage.rb, line 367
def each
  @messages.each_value do |message|
    yield(message)
  end
end
field(number, type, name, opts = {}) click to toggle source
# File lib/fit4ruby/GlobalFitMessage.rb, line 394
def field(number, type, name, opts = {})
  unless @current_message
    raise "You must define a message first"
  end
  @current_message.field(number, type, name, opts)
end
find_by_name(name) click to toggle source
# File lib/fit4ruby/GlobalFitMessage.rb, line 390
def find_by_name(name)
  @messages.values.find { |m| m.name == name }
end
message(number, name) click to toggle source
# File lib/fit4ruby/GlobalFitMessage.rb, line 360
def message(number, name)
  if @messages.include?(number)
    raise "Message #{number} has already been defined"
  end
  @messages[number] = @current_message = GlobalFitMessage.new(name, number)
end
write(io) click to toggle source
# File lib/fit4ruby/GlobalFitMessage.rb, line 373
def write(io)
  # The FIT file supports more than 16 global message types. But only 16
  # can be declared as local message types at any point of time. If there
  # are more then 16 messages, the current subset must be declared before
  # it's being used in the data records of the file.
  # Since we currently have 16 or less message types, we just write them
  # all upfront before the data records.
  if @messages.length > 16
    raise 'Cannot support more than 16 message types!'
  end

  local_message_type = 0
  @messages.each do |number, message|
    message.write(io, local_message_type)
  end
end