Class: RubySlippers::Engine::Site
Instance Method Summary collapse
- #/ ⇒ Object
- #[](*args) ⇒ Object
- #[]=(key, value) ⇒ Object
- #archives(filter = "") ⇒ Object
- #article(route) ⇒ Object
- #articles ⇒ Object
- #config ⇒ Object
- #go(route, env = {}, type = :html) ⇒ Object
- #index(type = :html) ⇒ Object
-
#initialize(config) ⇒ Site
constructor
A new instance of Site.
- #sitemap(type = :xml) ⇒ Object
- #tagged(tag) ⇒ Object
Constructor Details
#initialize(config) ⇒ Site
Returns a new instance of Site.
5 6 7 |
# File 'lib/ruby_slippers/site.rb', line 5 def initialize config @config = config end |
Instance Method Details
#/ ⇒ Object
64 65 66 |
# File 'lib/ruby_slippers/site.rb', line 64 def / self[:root] end |
#[](*args) ⇒ Object
13 14 15 |
# File 'lib/ruby_slippers/site.rb', line 13 def [] *args @config[*args] end |
#[]=(key, value) ⇒ Object
17 18 19 |
# File 'lib/ruby_slippers/site.rb', line 17 def []= key, value @config.set key, value end |
#archives(filter = "") ⇒ Object
39 40 41 42 43 44 45 46 47 48 |
# File 'lib/ruby_slippers/site.rb', line 39 def archives filter = "" entries = ! self.articles.empty?? self.articles.select do |a| filter !~ /^\d{4}/ || File.basename(a) =~ /^#{filter}/ end.reverse.map do |article| Article.new article, @config end : [] return :archives => Archives.new(entries, @config) end |
#article(route) ⇒ Object
50 51 52 |
# File 'lib/ruby_slippers/site.rb', line 50 def article route Article.new("#{Paths[:articles]}/#{route.join('-')}.#{self[:ext]}", @config).load end |
#articles ⇒ Object
21 22 23 |
# File 'lib/ruby_slippers/site.rb', line 21 def articles self.class.articles self[:ext] end |
#config ⇒ Object
9 10 11 |
# File 'lib/ruby_slippers/site.rb', line 9 def config @config end |
#go(route, env = {}, type = :html) ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/ruby_slippers/site.rb', line 68 def go route, env = {}, type = :html route << self./ if route.empty? type, path = type =~ /html|xml|json/ ? type.to_sym : :html, route.join('/') context = lambda do |data, page| Context.new(data, @config, path, env).render(page, type) end body, status = if Context.new.respond_to?(:"to_#{type}") if route.first =~ /\d{4}/ case route.size when 1..3 context[archives(route * '-'), :archives] when 4 context[article(route), :article] else http 400 end elsif route.first == "tagged" context[tagged(route.last), :tagged] elsif respond_to?(path) context[send(path, type), path.to_sym] elsif (repo = @config[:github][:repos].grep(/#{path}/).first) && !@config[:github][:user].empty? context[Repo.new(repo, @config), :repo] else context[{}, path.to_sym] end else http 400 end rescue NoMethodError, Errno::ENOENT => e return :body => http(404).first, :type => :html, :status => 404 else return :body => body || "", :type => type, :status => status || 200 end |
#index(type = :html) ⇒ Object
32 33 34 35 36 37 |
# File 'lib/ruby_slippers/site.rb', line 32 def index type = :html articles = type == :html ? self.articles.reverse : self.articles {:articles => articles.map do |article| Article.new article, @config end}.merge archives end |
#sitemap(type = :xml) ⇒ Object
25 26 27 28 29 30 |
# File 'lib/ruby_slippers/site.rb', line 25 def sitemap type = :xml articles = type == :html ? self.articles.reverse : self.articles {:articles => articles.map do |article| Article.new article, @config end}.merge archives end |
#tagged(tag) ⇒ Object
54 55 56 57 58 59 60 61 62 |
# File 'lib/ruby_slippers/site.rb', line 54 def tagged tag articles = self.articles.collect do |article| Article.new article, @config end.select do |article| article[:tags].index(tag.humanize.downcase) if article[:tags] end {:articles => articles, :tagged => tag} end |