Class: Fit4Ruby::GlobalFitMessageList

Inherits:
Object
  • Object
show all
Defined in:
lib/fit4ruby/GlobalFitMessage.rb

Instance Method Summary collapse

Constructor Details

#initialize(&block) ⇒ GlobalFitMessageList

Returns a new instance of GlobalFitMessageList.



168
169
170
171
172
# File 'lib/fit4ruby/GlobalFitMessage.rb', line 168

def initialize(&block)
  @current_message = nil
  @messages = {}
  instance_eval(&block) if block_given?
end

Instance Method Details

#[](number) ⇒ Object



215
216
217
# File 'lib/fit4ruby/GlobalFitMessage.rb', line 215

def [](number)
  @messages[number]
end

#eachObject



181
182
183
184
185
# File 'lib/fit4ruby/GlobalFitMessage.rb', line 181

def each
  @messages.each_value do |message|
    yield(message)
  end
end

#field(number, type, name, opts = {}) ⇒ Object



208
209
210
211
212
213
# File 'lib/fit4ruby/GlobalFitMessage.rb', line 208

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) ⇒ Object



204
205
206
# File 'lib/fit4ruby/GlobalFitMessage.rb', line 204

def find_by_name(name)
  @messages.values.find { |m| m.name == name }
end

#message(number, name) ⇒ Object



174
175
176
177
178
179
# File 'lib/fit4ruby/GlobalFitMessage.rb', line 174

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) ⇒ Object



187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
# File 'lib/fit4ruby/GlobalFitMessage.rb', line 187

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