aboutsummaryrefslogtreecommitdiff
path: root/lib/core_ext/yaml.rb
blob: bb0b5c94b7a22e55202134b3f54aa668cf51a46e (plain)
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
class Object
  #
  # ya2yaml will output hash keys in sorted order, but it outputs arrays
  # in natural order. This new method, sorted_ya2yaml(), is the same as
  # ya2yaml but ensures that arrays are sorted.
  #
  # This is important so that the .yaml files don't change each time you recompile.
  #
  # see https://github.com/afunai/ya2yaml/blob/master/lib/ya2yaml.rb
  #
  def sorted_ya2yaml(options = {})
    # modify array
    Array.class_eval do
      alias_method :collect_without_sort, :collect
      def collect(&block)
        sorted = sort {|a,b| a.to_s <=> b.to_s}
        sorted.collect_without_sort(&block)
      end
    end

    # generate yaml
    yaml_str = self.ya2yaml(options)

    # restore array
    Array.class_eval {alias_method :collect, :collect_without_sort}

    return yaml_str
  end
end