module MusicXML::Node::JsonExport

Public Instance Methods

json_key() click to toggle source
# File lib/musicxml/node/json_export.rb, line 8
def json_key
  self.class.name.split('::').last.gsub(/^([A-Z])/) { $1.downcase }
end
json_values() click to toggle source
# File lib/musicxml/node/json_export.rb, line 12
def json_values
  output = {}
  load_plural_attrs(output)
  load_singular_attrs(output)
  load_plural_nodes(output)
  load_singular_nodes(output)
  output
end
to_json() click to toggle source
# File lib/musicxml/node/json_export.rb, line 4
def to_json
  { json_key => json_values }.to_json
end

Private Instance Methods

jsify(name) click to toggle source
# File lib/musicxml/node/json_export.rb, line 23
def jsify(name)
  name.to_s.gsub(/(_[a-z])/) { $1.upcase[1..-1] }
end
load_plural_attrs(output) click to toggle source
# File lib/musicxml/node/json_export.rb, line 27
def load_plural_attrs(output)
  self.class.config.plural_attrs.each do |name|
    output[jsify(name)] = send(name) || []
  end
end
load_plural_nodes(output) click to toggle source
# File lib/musicxml/node/json_export.rb, line 33
def load_plural_nodes(output)
  self.class.config.plural_nodes.each do |name|
    nodes = send(name)
    output[jsify(name)] = nodes ? nodes.map(&:json_values) : []
  end
end
load_singular_attrs(output) click to toggle source
# File lib/musicxml/node/json_export.rb, line 40
def load_singular_attrs(output)
  (self.class.config.properties + self.class.config.singular_attrs).each do |name|
    output[jsify(name)] = send(name)
  end
end
load_singular_nodes(output) click to toggle source
# File lib/musicxml/node/json_export.rb, line 46
def load_singular_nodes(output)
  self.class.config.singular_nodes.each do |name|
    node = send(name)
    output[jsify(name)] = node ? node.json_values : nil
  end
end