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