class Solve::Solver::Serializer
Public Instance Methods
deserialize(problem_data)
click to toggle source
@param [Hash, to_s] solver a json string or a hash representing a solver
@return [Solve::Problem]
# File lib/solve/solver/serializer.rb, line 45 def deserialize(problem_data) unless problem_data.is_a?(Hash) problem_data = JSON.parse(problem_data.to_s) end graph_spec = problem_data["graph"] demands_spec = problem_data["demands"] graph = load_graph(graph_spec) demands = load_demands(demands_spec) Solve::Problem.new(graph, demands) end
serialize(problem)
click to toggle source
@param [Solve::Problem] problem struct
@return [String]
# File lib/solve/solver/serializer.rb, line 31 def serialize(problem) graph = problem.graph demands = problem.demands graph_hash = format_graph(graph) demands_hash = format_demands(demands) problem_data = graph_hash.merge(demands_hash) problem_data.to_json end
Private Instance Methods
format_artifact(artifact)
click to toggle source
# File lib/solve/solver/serializer.rb, line 68 def format_artifact(artifact) dependencies = artifact.dependencies.inject([]) do |list, dependency| list << format_dependency(dependency) end { "name" => artifact.name, "version" => artifact.version.to_s, "dependencies" => dependencies, } end
format_demand(demand)
click to toggle source
# File lib/solve/solver/serializer.rb, line 94 def format_demand(demand) { "name" => demand[0], "constraint" => demand[1], } end
format_demands(demands)
click to toggle source
# File lib/solve/solver/serializer.rb, line 87 def format_demands(demands) demands_list = demands.inject([]) do |list, demand| list << format_demand(demand) end { "demands" => demands_list } end
format_dependency(dependency)
click to toggle source
# File lib/solve/solver/serializer.rb, line 80 def format_dependency(dependency) { "name" => dependency.name, "constraint" => dependency.constraint.to_s, } end
format_graph(graph)
click to toggle source
# File lib/solve/solver/serializer.rb, line 61 def format_graph(graph) artifacts = graph.artifacts.inject([]) do |list, artifact| list << format_artifact(artifact) end { "graph" => artifacts } end
load_artifact(graph, artifact_spec)
click to toggle source
# File lib/solve/solver/serializer.rb, line 109 def load_artifact(graph, artifact_spec) artifact = graph.artifact(artifact_spec["name"], artifact_spec["version"]) artifact_spec["dependencies"].each do |dependency_spec| load_dependency(artifact, dependency_spec) end artifact end
load_demands(demand_specs)
click to toggle source
# File lib/solve/solver/serializer.rb, line 121 def load_demands(demand_specs) demand_specs.inject([]) do |list, demand_spec| list << [demand_spec["name"], demand_spec["constraint"]] end end
load_dependency(artifact, dependency_spec)
click to toggle source
# File lib/solve/solver/serializer.rb, line 117 def load_dependency(artifact, dependency_spec) artifact.depends(dependency_spec["name"], dependency_spec["constraint"]) end
load_graph(artifacts_list)
click to toggle source
# File lib/solve/solver/serializer.rb, line 101 def load_graph(artifacts_list) graph = Solve::Graph.new artifacts_list.each do |artifact_spec| load_artifact(graph, artifact_spec) end graph end