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
- #csv_generate(data) ⇒ Object
- #csv_hash(names, values) ⇒ Object
- #csv_line(source, *entries) ⇒ Object
- #csv_lines(source, *entries) ⇒ Object
- #csv_store(csv, name, names, values) ⇒ Object
- #json_dump(fn, value) ⇒ Object
- #sid_csv_from_data(sid_data) ⇒ Object
- #sid_data_from_file(text) ⇒ Object
- #sid_file_from_csv(sid_csv) ⇒ Object
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 |