File: binding.rb

package info (click to toggle)
ruby-representable 3.0.4-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 896 kB
  • sloc: ruby: 6,432; makefile: 3
file content (48 lines) | stat: -rw-r--r-- 1,116 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
require 'representable/hash/binding'

module Representable
  module YAML
    class Binding < Representable::Hash::Binding
      def self.build_for(definition)
        return Collection.new(definition) if definition.array?
        new(definition)
      end

      def write(map, fragment, as)
        map.children << Psych::Nodes::Scalar.new(as)
        map.children << node_for(fragment)  # FIXME: should be serialize.
      end
    # private

      def node_for(fragment)
        write_scalar(fragment)
      end

      def write_scalar(value)
        return value if typed?

        Psych::Nodes::Scalar.new(value.to_s)
      end

      def serialize_method
        :to_ast
      end

      def deserialize_method
        :from_hash
      end


      class Collection < self
        include Representable::Binding::Collection

        def node_for(fragments)
          Psych::Nodes::Sequence.new.tap do |seq|
            seq.style = Psych::Nodes::Sequence::FLOW if self[:style] == :flow
            fragments.each { |frag| seq.children << write_scalar(frag) }
          end
        end
      end
    end
  end
end