Module: CSV::SID

Defined in:
lib/sid-csv.rb

Constant Summary collapse

SID_FILE_TOP_LEVEL =
"ietf-sid-file:sid-file"

Instance Method Summary collapse

Instance Method Details

#csv_generate(data) ⇒ Object



78
79
80
81
82
83
84
# File 'lib/sid-csv.rb', line 78

def csv_generate(data)
  CSV.generate('') do |csv|
    data.each do |row|
      csv << row
    end
  end
end

#csv_hash(names, values) ⇒ Object



43
44
45
# File 'lib/sid-csv.rb', line 43

def csv_hash(names, values)
  Hash[names.zip(values).filter{|k, v| v != ""}]
end

#csv_line(source, *entries) ⇒ Object



6
7
8
9
10
11
12
13
14
15
# File 'lib/sid-csv.rb', line 6

def csv_line(source, *entries)
  entries.map do |entry|
    case entry
    in String
      source[entry]
    in Symbol
      entry.to_s
    end
  end
end

#csv_lines(source, *entries) ⇒ Object



17
18
19
20
21
22
23
# File 'lib/sid-csv.rb', line 17

def csv_lines(source, *entries)
  if source
    source.map do |row|
      csv_line(row, *entries)
    end
  end
end

#csv_store(csv, name, names, values) ⇒ Object



47
48
49
50
# File 'lib/sid-csv.rb', line 47

def csv_store(csv, name, names, values)
  csv[name] ||= []
  csv[name] << csv_hash(names, values)
end

#json_dump(fn, value) ⇒ Object



94
95
96
# File 'lib/sid-csv.rb', line 94

def json_dump(fn, value)
  File.write(fn, JSON.pretty_generate(value))
end

#sid_csv_from_data(sid_data) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/sid-csv.rb', line 25

def sid_csv_from_data(sid_data)
  [
    csv_line(sid_data, :"ietf-sid-file", "module-name", "module-revision",
             "sid-file-revision", "sid-file-status"),
    csv_line(sid_data, :description, "description"),
    *csv_lines(sid_data["dependency-revision"], :dependency,
               "module-name", "module-revision"),
    *csv_lines(sid_data["assignment-range"] || (
                 warn "** assignment-range missing!  Trying assignment-ranges."
                 sid_data["assignment-ranges"]
               ), :range, "entry-point", "size"),
    *csv_lines(sid_data["item"] || (
                 warn "** item missing!  Trying items."
                 sid_data["items"]
               ), "sid", "namespace", "identifier", "status"),
  ]
end

#sid_data_from_file(text) ⇒ Object



86
87
88
89
90
91
92
# File 'lib/sid-csv.rb', line 86

def sid_data_from_file(text)
  outer = JSON.load(text)
  outer[SID_FILE_TOP_LEVEL] || (
    warn "** #{SID_FILE_TOP_LEVEL} missing!  Trying top-level itself."
    outer
  )
end

#sid_file_from_csv(sid_csv) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/sid-csv.rb', line 54

def sid_file_from_csv(sid_csv)
  {SID_FILE_TOP_LEVEL =>
   sid_csv.each_with_object({}) do |line, result|
     case line
     in ["ietf-sid-file", *values]
       result.merge!(csv_hash(["module-name", "module-revision",
                               "sid-file-revision", "sid-file-status"], values))
     in ["description", *values]
       result.merge!(csv_hash(["description"], values))
     in ["dependency", *values]
       csv_store(result, "dependency-revision",
                 ["module-name", "module-revision"], values)
     in ["range", entry_point, size]
       csv_store(result, "assignment-range",
                 ["entry-point", "size"], [entry_point.to_s, size.to_s])
     in [sid, namespace, name, status]
       csv_store(result, "item",
                 ["namespace", "identifier", "sid", "status"],
                 [namespace, name, sid.to_s, status])
     end
   end
  }
end