class Bookfile::BookPackage

Public Class Methods

new( name, opts={} ) click to toggle source
# File lib/bookfile/package/package.rb, line 7
def initialize( name, opts={} )
  @name = name
  @opts = opts
end

Public Instance Methods

download() click to toggle source
def local_unzip_dir() "./book";  end
def local_scripts_dir
  ## fix: just use _scripts  -- remove helpers in repo!!!
  "#{local_unzip_dir}/_scripts"
end

end

# File lib/bookfile/package/package.rb, line 44
def download
  ## logger.info( "download book package '#{@name}'" )
  ## logger.info( "   from '#{remote_zip_url}'" )
  ## logger.info( "   to '#{local_zip_path}'..." )

  ## note: lets use http:// instead of https:// for now - lets us use person proxy (NOT working w/ https for now)
  src      = remote_zip_url
  dest_zip = local_zip_path

  ## make sure dest folder exists
  FileUtils.mkdir_p( local_zip_dir )  unless Dir.exists?( local_zip_dir )

  fetch_book_templates( src, dest_zip )
end
local_zip_dir() click to toggle source
# File lib/bookfile/package/package.rb, line 25
def local_zip_dir
  "./tmp"
end
local_zip_name() click to toggle source
# File lib/bookfile/package/package.rb, line 19
def local_zip_name
  ### note: replace / in name w/ --I--
  ##  e.g. flatten the filename, that is, do NOT include any folders
  @name.gsub('/', '--I--')   # note: will NOT include/return .zip extension
end
local_zip_path() click to toggle source
# File lib/bookfile/package/package.rb, line 29
def local_zip_path  # local zip path
  "#{local_zip_dir}/#{local_zip_name}.zip"
end
prepare( unzip_dir ) click to toggle source
# File lib/bookfile/package/package.rb, line 71
  def prepare( unzip_dir )   ## change to require - why, why not??
    puts "auto-require/include book scripts in '#{unzip_dir}/_scripts'"

    files = Dir["#{unzip_dir}/_scripts/**/*.rb"]
    pp files

    files.each_with_index do |file,idx|
       ## todo/check: check for exceptions???
       puts "  [#{idx+1}/#{files.count}] try auto-require '#{file}'..."
       require file
    end

     ## include Hytext::Helper or use HytextHelper  ??
     ## include Bookfile::Helper or use BookfileHelper ??
     ##   check Rails example names for helper modules
     ##   get Helper module name from book template name ???

=begin
    res = require 'worlddb/models'
    if res
      puts "  include WorldDb::Models"
      
      Builder.send :include, WorldDb::Models
      ## PageCtx.send :include, WorldDb::Models
      ## BookCtx.send :include, WorldDb::Models
      
      ## also add to xxxx ???
      ## (possible to include as globals ???? how - Object.send :include ???) or
      ##   Module.send :include ??
    else
      ## find a better check - check for constants defined??? if not define???
      ##  or use constant_missing handler???
      puts "  assume WorldDb::Models already included ??"
    end
=end
  end
remote_zip_url() click to toggle source
# File lib/bookfile/package/package.rb, line 13
def remote_zip_url  # remote zip url
  ###  note: use http:// for now - lets us use (personal proxy NOT working w/ https) for now
  ## "https://github.com/#{@name}/archive/gh-pages.zip"
  "http://github.com/#{@name}/archive/gh-pages.zip"
end
unzip( unzip_dir ) click to toggle source
# File lib/bookfile/package/package.rb, line 60
def unzip( unzip_dir )
  src        = local_zip_path
  dest_unzip = unzip_dir        ## local_unzip_dir

  ## check if folders exists? if not create folder in path
  FileUtils.mkdir_p( dest_unzip )  unless Dir.exists?( dest_unzip )

  unzip_book_templates( src, dest_unzip )
end

Private Instance Methods

fetch_book_templates( src, dest ) click to toggle source
# File lib/bookfile/package/package.rb, line 111
def fetch_book_templates( src, dest )
  ## step 1 - fetch archive
  worker = Fetcher::Worker.new
  worker.copy( src, dest )
  ### fix: add  src.sha5
  ###      inside folder
  ### lets us check if current HEAD version is in place across datafiles etc.
  ##  - try HTTP HEAD ?? to check?
end
unzip_book_templates( src, dest, opts={} ) click to toggle source

fix/todo:

exclude _pages folder for now
 lets us include working live sample pages in template pack
# File lib/bookfile/package/package.rb, line 127
def unzip_book_templates( src, dest, opts={} )
  ### todo/fix: rename or remove root folder -- use opts { root: false or something??}
  #  e.g
  #  !/beer-gh-pages/_templates/ becomes
  #  !/_templates/   etc.

  Zip::File.open( src ) do |zipfile|
    zipfile.each do |file|
      if file.directory?
        puts "  skip directory zip entry - #{file.name}"
      else
        name = file.name[ file.name.index('/')+1..-1]   ## cut-off root/first path entry
        path = File.join( dest, name)
        puts "  unzip file zip entry - #{file.name} to #{path}"
        FileUtils.mkdir_p( File.dirname( path) )
        zipfile.extract(file, path)  unless File.exist?(path)
      end
    end
  end
end