File: serialization.rb

package info (click to toggle)
ruby-compass 0.12.2~dfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 8,308 kB
  • sloc: ruby: 10,474; makefile: 42; xml: 14
file content (88 lines) | stat: -rw-r--r-- 3,001 bytes parent folder | download
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
module Compass
  module Configuration
    # The serialization module manages reading and writing the configuration file(s).
    module Serialization
      def parse(config_file)
        raise Compass::Error, "Compass.configuration.parse(filename) has been removed. Please call Compass.add_project_configuration(filename) instead."
      end

      # parses a configuration file which is a ruby script
      def _parse(config_file)
        unless File.readable?(config_file)
          raise Compass::Error, "Configuration file, #{config_file}, not found or not readable."
        end
        open(config_file) do |f|
          parse_string(f.read, config_file)
        end
      end

      def get_binding
        binding
      end
      def parse_string(contents, filename)
        bind = get_binding
        eval(contents, bind, filename)
        local_vars_set = eval("local_variables", bind)
        local_vars_set.each do |local_var|
          if (ATTRIBUTES+ARRAY_ATTRIBUTES).include?(local_var.to_sym)
            value = eval(local_var.to_s, bind)
            value = value.to_s if value.is_a?(Pathname)
            self.send("#{local_var}=", value)
          end
        end
        if @added_import_paths
          self.additional_import_paths ||= []
          self.additional_import_paths += @added_import_paths
          self.additional_import_paths.uniq!
        end
        issue_deprecation_warnings
      end

      def serialize
        contents = ""
        (required_libraries || []).each do |lib|
          contents << %Q{require '#{lib}'\n}
        end
        (loaded_frameworks || []).each do |lib|
          contents << %Q{load '#{lib}'\n}
        end
        (framework_path || []).each do |lib|
          contents << %Q{discover '#{lib}'\n}
        end
        contents << "# Require any additional compass plugins here.\n"
        contents << "\n" if (required_libraries || []).any?
        (ATTRIBUTES + ARRAY_ATTRIBUTES).each do |prop|
          value = send("#{prop}_without_default")
          if value.is_a?(Proc)
            $stderr.puts "WARNING: #{prop} is code and cannot be written to a file. You'll need to copy it yourself."
          end
          if respond_to?("comment_for_#{prop}")
            contents << "\n"
            contents << send("comment_for_#{prop}")
          end
          if block_given? && (to_emit = yield(prop, value))
            contents << to_emit
          else
            contents << serialize_property(prop, value) unless value.nil?
          end
        end
        contents
      end

      def serialize_property(prop, value)
        if value.respond_to?(:serialize_to_config)
          value.serialize_to_config(prop) + "\n"
        else
          %Q(#{prop} = #{value.inspect}\n)
        end
      end

      def issue_deprecation_warnings
        if http_images_path == :relative
          $stderr.puts "DEPRECATION WARNING: Please set relative_assets = true to enable relative paths."
        end
      end

    end
  end
end