Module: PlanMyStuff::MetadataParser
- Defined in:
- lib/plan_my_stuff/metadata_parser.rb
Constant Summary collapse
- METADATA_PATTERN =
/\A<!-- pms-metadata:(.*?) -->\n*/m
Class Method Summary collapse
-
.parse(raw_body) ⇒ Hash{Symbol => Hash, String}
Extracts metadata JSON from the raw body.
-
.serialize(metadata, body) ⇒ String
Serializes a metadata hash and body into the stored format.
Class Method Details
.parse(raw_body) ⇒ Hash{Symbol => Hash, String}
Extracts metadata JSON from the raw body
17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/plan_my_stuff/metadata_parser.rb', line 17 def parse(raw_body) return { metadata: {}, body: '' } if raw_body.blank? match = raw_body.match(METADATA_PATTERN) return { metadata: {}, body: raw_body } if match.nil? = JSON.parse(match[1], symbolize_names: true) body = raw_body.sub(METADATA_PATTERN, '') { metadata: , body: body } rescue JSON::ParserError { metadata: {}, body: raw_body } end |
.serialize(metadata, body) ⇒ String
Serializes a metadata hash and body into the stored format
38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/plan_my_stuff/metadata_parser.rb', line 38 def serialize(, body) if !.is_a?(Hash) && !.is_a?(PlanMyStuff::CustomFields) raise(ArgumentError, "metadata must be a Hash or PlanMyStuff::CustomFields, got #{.class}") end json = if .is_a?(PlanMyStuff::CustomFields) .to_json else JSON.pretty_generate() end "<!-- pms-metadata:#{json} -->\n\n#{body}" end |