Add Utils.merged_file_read_opts to unify reading & strip the BOM
This commit is contained in:
		
							parent
							
								
									ce77fe6488
								
							
						
					
					
						commit
						aad54c9a87
					
				| 
						 | 
					@ -28,12 +28,6 @@ module Jekyll
 | 
				
			||||||
      !(data.key?('published') && data['published'] == false)
 | 
					      !(data.key?('published') && data['published'] == false)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Returns merged option hash for File.read of self.site (if exists)
 | 
					 | 
				
			||||||
    # and a given param
 | 
					 | 
				
			||||||
    def merged_file_read_opts(opts)
 | 
					 | 
				
			||||||
      (site ? site.file_read_opts : {}).merge(opts)
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Read the YAML frontmatter.
 | 
					    # Read the YAML frontmatter.
 | 
				
			||||||
    #
 | 
					    #
 | 
				
			||||||
    # base - The String path to the dir containing the file.
 | 
					    # base - The String path to the dir containing the file.
 | 
				
			||||||
| 
						 | 
					@ -46,7 +40,7 @@ module Jekyll
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      begin
 | 
					      begin
 | 
				
			||||||
        self.content = File.read(site.in_source_dir(base, name),
 | 
					        self.content = File.read(site.in_source_dir(base, name),
 | 
				
			||||||
                                 merged_file_read_opts(opts))
 | 
					                                 Utils.merged_file_read_opts(site, opts))
 | 
				
			||||||
        if content =~ /\A(---\s*\n.*?\n?)^((---|\.\.\.)\s*$\n?)/m
 | 
					        if content =~ /\A(---\s*\n.*?\n?)^((---|\.\.\.)\s*$\n?)/m
 | 
				
			||||||
          self.content = $POSTMATCH
 | 
					          self.content = $POSTMATCH
 | 
				
			||||||
          self.data = SafeYAML.load(Regexp.last_match(1))
 | 
					          self.data = SafeYAML.load(Regexp.last_match(1))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -237,16 +237,6 @@ module Jekyll
 | 
				
			||||||
      trigger_hooks(:post_write)
 | 
					      trigger_hooks(:post_write)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Returns merged option hash for File.read of self.site (if exists)
 | 
					 | 
				
			||||||
    # and a given param
 | 
					 | 
				
			||||||
    #
 | 
					 | 
				
			||||||
    # opts - override options
 | 
					 | 
				
			||||||
    #
 | 
					 | 
				
			||||||
    # Return the file read options hash.
 | 
					 | 
				
			||||||
    def merged_file_read_opts(opts)
 | 
					 | 
				
			||||||
      site ? site.file_read_opts.merge(opts) : opts
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Whether the file is published or not, as indicated in YAML front-matter
 | 
					    # Whether the file is published or not, as indicated in YAML front-matter
 | 
				
			||||||
    #
 | 
					    #
 | 
				
			||||||
    # Returns true if the 'published' key is specified in the YAML front-matter and not `false`.
 | 
					    # Returns true if the 'published' key is specified in the YAML front-matter and not `false`.
 | 
				
			||||||
| 
						 | 
					@ -269,7 +259,7 @@ module Jekyll
 | 
				
			||||||
          defaults = @site.frontmatter_defaults.all(url, collection.label.to_sym)
 | 
					          defaults = @site.frontmatter_defaults.all(url, collection.label.to_sym)
 | 
				
			||||||
          merge_data!(defaults, source: "front matter defaults") unless defaults.empty?
 | 
					          merge_data!(defaults, source: "front matter defaults") unless defaults.empty?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          self.content = File.read(path, merged_file_read_opts(opts))
 | 
					          self.content = File.read(path, Utils.merged_file_read_opts(site, opts))
 | 
				
			||||||
          if content =~ YAML_FRONT_MATTER_REGEXP
 | 
					          if content =~ YAML_FRONT_MATTER_REGEXP
 | 
				
			||||||
            self.content = $POSTMATCH
 | 
					            self.content = $POSTMATCH
 | 
				
			||||||
            data_file = SafeYAML.load(Regexp.last_match(1))
 | 
					            data_file = SafeYAML.load(Regexp.last_match(1))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -273,5 +273,15 @@ module Jekyll
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Returns merged option hash for File.read of self.site (if exists)
 | 
				
			||||||
 | 
					    # and a given param
 | 
				
			||||||
 | 
					    def merged_file_read_opts(site, opts)
 | 
				
			||||||
 | 
					      merged = (site ? site.file_read_opts : {}).merge(opts)
 | 
				
			||||||
 | 
					      if merged["encoding"] && !merged["encoding"].start_with?("bom|")
 | 
				
			||||||
 | 
					        merged["encoding"].insert(0, "bom|")
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					      merged
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -276,4 +276,21 @@ class TestUtils < JekyllUnitTest
 | 
				
			||||||
      refute Utils.has_yaml_header?(file)
 | 
					      refute Utils.has_yaml_header?(file)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  context "The \`Utils.merged_file_read_opts\` method" do
 | 
				
			||||||
 | 
					    should "ignore encoding if it's not there" do
 | 
				
			||||||
 | 
					      opts = Utils.merged_file_read_opts(nil, {})
 | 
				
			||||||
 | 
					      assert_nil opts["encoding"]
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    should "add bom to encoding" do
 | 
				
			||||||
 | 
					      opts = Utils.merged_file_read_opts(nil, { "encoding" => "utf-8" })
 | 
				
			||||||
 | 
					      assert_equal "bom|utf-8", opts["encoding"]
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    should "preserve bom in encoding" do
 | 
				
			||||||
 | 
					      opts = Utils.merged_file_read_opts(nil, { "encoding" => "bom|utf-8" })
 | 
				
			||||||
 | 
					      assert_equal "bom|utf-8", opts["encoding"]
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue