module Pio::OpenFlow
Common OpenFlow
modules/classes.
Public Class Methods
read(binary)
click to toggle source
# File lib/pio/open_flow.rb, line 24 def self.read(binary) header = OpenFlow::Header.read(binary) self.version = header.version Parser.find_by_type!(header.type).read(binary) end
version=(version)
click to toggle source
# File lib/pio/open_flow.rb, line 14 def self.version=(version) return if OpenFlow.version == version.to_sym find_all_class_by_version(version).each do |each| alias_open_flow_class each end @@version = version.to_sym # rubocop:disable ClassVars rescue NameError raise "#{version} is not supported yet." end
Private Class Methods
alias_open_flow_class(klass)
click to toggle source
Pio::OpenFlow10::Hello
-> Pio::Hello
# File lib/pio/open_flow.rb, line 42 def self.alias_open_flow_class(klass) version = klass.name.split('::').second class_name = klass.name.split('::').third if Pio.const_defined?(class_name) Pio.module_eval { remove_const class_name } end Pio.const_set(class_name, "Pio::#{version}::#{class_name}".constantize) end
find_all_class_by_version(version)
click to toggle source
# File lib/pio/open_flow.rb, line 30 def self.find_all_class_by_version(version) all_class = [Message, Instruction, Action, FlowMatch]. inject([]) do |result, each| result + each.descendants end all_class.select do |each| each.parents.include?(Class.const_get("Pio::#{version}")) end end