Module: Edison

Defined in:
lib/edison.rb,
lib/edison.rb

Defined Under Namespace

Modules: Helpers, YAMLFrontMatter Classes: ModelsLoader, Renderer, Router, StaticFileHandler

Constant Summary collapse

VERSION =
"0.0.3"

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.modelsObject (readonly)

Returns the value of attribute models.



148
149
150
# File 'lib/edison.rb', line 148

def models
  @models
end

.rendererObject (readonly)

Returns the value of attribute renderer.



148
149
150
# File 'lib/edison.rb', line 148

def renderer
  @renderer
end

.routesObject (readonly)

Returns the value of attribute routes.



148
149
150
# File 'lib/edison.rb', line 148

def routes
  @routes
end

Class Method Details

.config(&b) ⇒ Object



172
173
174
# File 'lib/edison.rb', line 172

def self.config(&b)
  instance_eval &b
end

.generate!Object



175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
# File 'lib/edison.rb', line 175

def self.generate!
  renderer = Renderer.new(@views)
  site = File.join(@directory, "_site")

  FileUtils.rm_rf(site)
  Dir.mkdir(site)
  puts "Copying static files..."
  routes.static.each do |name|
    src = File.join(@directory, name)
    dest = File.join(site, name)
    FileUtils.mkdir_p File.dirname(dest)
    FileUtils.copy src, dest
  end
  routes.urls.each do |(url, view_name, data)|
    puts "Creating /#{url}..."

    fname = File.join(site, url)
    FileUtils.mkdir_p(File.dirname(fname))
    File.open(fname, "w") do |f|
      f.write renderer.render(view_name, data)
    end
  end
end

.initialize!(directory) ⇒ Object



150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
# File 'lib/edison.rb', line 150

def self.initialize!(directory)
  @directory = directory

  @routes = Router.new

  loader = ModelsLoader.new
  @models = loader.load(File.join(directory, "_models"))

  @views = Hash[Dir[File.join(directory, "_views", "*")].map do |fname|
    puts "Loading view _views/#{File.basename(fname)}..."
    name = File.basename(fname).sub(/\.[^\.]+$/,'')
    data = Hashie::Mash.new Edison::YAMLFrontMatter.read(fname)
    [name, data]
  end]

  static = StaticFileHandler.load(directory)
  static.possibly_dynamic.each do |(url, data)|
    @routes.url url, url, data
    @views[url] = data
  end
  static.just_copy.each &@routes.method(:copy)
end