Class: Mill::Resource
- Inherits:
-
Object
show all
- Defined in:
- lib/mill/resource.rb,
lib/mill/resources/feed.rb,
lib/mill/resources/text.rb,
lib/mill/resources/image.rb,
lib/mill/resources/robots.rb,
lib/mill/resources/generic.rb,
lib/mill/resources/sitemap.rb,
lib/mill/resources/redirect.rb
Defined Under Namespace
Classes: Feed, Generic, Image, Redirect, Robots, Sitemap, Text
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(params = {}) ⇒ Resource
Returns a new instance of Resource.
16
17
18
|
# File 'lib/mill/resource.rb', line 16
def initialize(params={})
params.each { |k, v| send("#{k}=", v) }
end
|
Instance Attribute Details
#content ⇒ Object
Returns the value of attribute content.
9
10
11
|
# File 'lib/mill/resource.rb', line 9
def content
@content
end
|
#date ⇒ Object
Returns the value of attribute date.
7
8
9
|
# File 'lib/mill/resource.rb', line 7
def date
@date
end
|
Returns the value of attribute input_file.
5
6
7
|
# File 'lib/mill/resource.rb', line 5
def input_file
@input_file
end
|
#mill ⇒ Object
Returns the value of attribute mill.
10
11
12
|
# File 'lib/mill/resource.rb', line 10
def mill
@mill
end
|
#output_file ⇒ Object
Returns the value of attribute output_file.
6
7
8
|
# File 'lib/mill/resource.rb', line 6
def output_file
@output_file
end
|
#public ⇒ Object
Returns the value of attribute public.
8
9
10
|
# File 'lib/mill/resource.rb', line 8
def public
@public
end
|
Class Method Details
.type ⇒ Object
12
13
14
|
# File 'lib/mill/resource.rb', line 12
def self.type
end
|
Instance Method Details
#absolute_uri ⇒ Object
60
61
62
|
# File 'lib/mill/resource.rb', line 60
def absolute_uri
@mill.site_uri + uri
end
|
#build ⇒ Object
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
# File 'lib/mill/resource.rb', line 82
def build
@output_file.dirname.mkpath
if (c = final_content)
@output_file.write(c.to_s)
@output_file.utime(@date.to_time, @date.to_time)
elsif @input_file
@input_file.copy(@output_file)
else
raise "Can't build resource without content or input file: #{uri}"
end
validate
end
|
#change_frequency ⇒ Object
68
69
70
|
# File 'lib/mill/resource.rb', line 68
def change_frequency
:weekly
end
|
#final_content ⇒ Object
72
73
74
|
# File 'lib/mill/resource.rb', line 72
def final_content
@content
end
|
#load ⇒ Object
76
77
78
79
80
|
# File 'lib/mill/resource.rb', line 76
def load
raise "#{uri} (#{self.class}): no content" unless @input_file || @content
self.date ||= @input_file ? @input_file.mtime : DateTime.now
@mill.update_resource(self)
end
|
#tag_uri ⇒ Object
64
65
66
|
# File 'lib/mill/resource.rb', line 64
def tag_uri
@mill.tag_uri + uri
end
|
#uri ⇒ Object
52
53
54
55
56
57
58
|
# File 'lib/mill/resource.rb', line 52
def uri
raise "#{@input_file}: No output file defined for #{self.class}" unless @output_file
path = '/' + @output_file.relative_to(@mill.output_dir).to_s
path.sub!(%r{/index\.html$}, '/')
path.sub!(%r{\.html$}, '') if @mill.shorten_uris
Addressable::URI.parse(path)
end
|
#validate ⇒ Object
97
98
99
100
101
|
# File 'lib/mill/resource.rb', line 97
def validate
if (schema = @mill.schema_for_type(self.class.type))
validate_xml(schema)
end
end
|
#validate_xml(schema) ⇒ Object
103
104
105
106
107
108
109
110
111
112
|
# File 'lib/mill/resource.rb', line 103
def validate_xml(schema)
doc = Nokogiri::XML::Document.parse(@output_file.open)
errors = doc.errors + schema.validate(doc)
unless errors.empty?
errors.each do |error|
warn "[#{error.file}:#{error.line}:#{error.column}] #{error}"
end
raise "#{uri}: Validation failed"
end
end
|