Class: OpenTrade::Base::Message

Inherits:
Object
  • Object
show all
Defined in:
lib/open_trade/base/message.rb

Constant Summary collapse

@@message_templates =
Hash.new
@@message_validations =
Hash.new

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.register_template(name, fields, validation_proc = nil) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
# File 'lib/open_trade/base/message.rb', line 43

def self.register_template name, fields, validation_proc=nil
	raise "A message template of #{template} is already registered." if @@message.has_key? name
	fields.each do |field, field_type|
		if not [ :string, :symbol, :number ].contains? field_type
			raise "Error while registering message template #{name}: field #{field} has invalid type #{field_type}"
		end
	end
	fields.symbolize_keys! true
	@@message_templates[name] = fields
	@@message_validations[name] = validation_proc
end

Instance Method Details

#intialize(template_name, field_data = {}) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/open_trade/base/message.rb', line 55

def intialize template_name, field_data={}
	if not @@message.has_key? template_name
		raise "No message template named #{template_name} has been registered yet. Perhaps you forgot to include that gem?"
	end

	field_data.symbolize_keys! true

	@type = template_name
	@payload = Hash.new
	@@message_templates[@type].keys.each {|k| @payload[k] = nil}
	@payload.strict_update field_data
end

#to_sObject



68
69
70
71
72
73
74
75
76
# File 'lib/open_trade/base/message.rb', line 68

def to_s
	verify
	JSON.dump ({
		:type			=> @type,
		:created	=> Time.now.utc.strftime,
		:uuid			=> SecureRandom.urlsafe_base64,
		:data			=> @payload
	})
end

#verifyObject



78
79
80
81
82
83
84
85
# File 'lib/open_trade/base/message.rb', line 78

def verify
	@@message_templates[@type].each do |field|
		raise "Required field #{field[:name]} is missing" if field[:required] and @payload[field[:name]] == nil
	end

	# Message specific validation
	@@message_validations[@type].call(@data) unless @@message_validations[@type].nil?
end