class ProconBypassMan::Web::SettingParser::Core

Public Class Methods

new() click to toggle source
# File lib/procon_bypass_man/web/setting_parser.rb, line 83
def initialize
  @installed_plugin = { macros: [], modes: [] }
  @layers = {}
end

Public Instance Methods

install_macro_plugin(name) click to toggle source
# File lib/procon_bypass_man/web/setting_parser.rb, line 75
def install_macro_plugin(name)
  @installed_plugin[:macros] << name.to_s
end
install_mode_plugin(name) click to toggle source
# File lib/procon_bypass_man/web/setting_parser.rb, line 79
def install_mode_plugin(name)
  @installed_plugin[:modes] << name.to_s
end
layer(dir, mode: nil, &block) click to toggle source
# File lib/procon_bypass_man/web/setting_parser.rb, line 96
def layer(dir, mode: nil, &block)
  if(mode == :manual || mode == 'manual')
    mode = nil
  end

  if block_given?
    @layers[dir] = Layer.new(mode: mode).instance_eval(&block) || Layer.new(mode: mode)
  else
    @layers[dir] = Layer.new(mode: mode)
  end
end
prefix_keys_for_changing_layer(value=nil) click to toggle source
# File lib/procon_bypass_man/web/setting_parser.rb, line 88
def prefix_keys_for_changing_layer(value=nil)
  if value
    @prefix_keys_for_changing_layer = value
  else
    @prefix_keys_for_changing_layer
  end
end
to_hash() click to toggle source
# File lib/procon_bypass_man/web/setting_parser.rb, line 108
def to_hash
  h = { prefix_keys_for_changing_layer: prefix_keys_for_changing_layer || [] }
  h[:layers] ||= {}
  @layers.each do |key, layer|
    h[:layers][key] = layer&.to_hash
  end
  h
end
to_hash_group_by_button() click to toggle source
# File lib/procon_bypass_man/web/setting_parser.rb, line 117
def to_hash_group_by_button
  h = { prefix_keys_for_changing_layer: prefix_keys_for_changing_layer || [] }
  h[:layers] ||= {}
  @layers.each do |key, layer|
    h[:layers][key] ||= {}
    next if layer.nil?

    if !@installed_plugin[:macros].empty?
      h[:installed_macros] = @installed_plugin[:macros]
    end
    if !@installed_plugin[:modes].empty?
      h[:installed_modes] = @installed_plugin[:modes]
    end

    layer.to_hash.dig(:flip)&.each do |button, value|
      h[:layers][key][button] ||= {}
      h[:layers][key][button][:open] = true
      h[:layers][key][button][:flip] ||= {}
      h[:layers][key][button][:flip][:enable] = true
      if value
        h[:layers][key][button][:flip].merge!(value)
      end
    end

    if layer.to_hash.dig(:macro)
      h[:layers][key][:macro] = []
      if(macros = layer.to_hash.dig(:macro))
        macros.transform_values! { |x| x[:if_pressed] }
        h[:layers][key][:macro] = macros
      end
    end

    if layer.to_hash.dig(:mode)
      h[:layers][key][:mode] = { layer.to_hash.dig(:mode) => true }
    end

    layer.to_hash.dig(:remap)&.each do |button, value|
      h[:layers][key][button] ||= {}
      h[:layers][key][button][:remap] ||= {}
      h[:layers][key][button][:open] = true
      if value
        h[:layers][key][button][:remap].merge!(value)
      end
    end
  end
  h
end