class Object

Constants

JRAKE_ROOT

Joomla Rake Master File

Public Instance Methods

build_area() click to toggle source

Get the build area path

# File lib/helpers/helpers.rb, line 60
def build_area
  "./packages/#{$package['name']}-#{version_name}#{package_tag}"
end
build_component(name) click to toggle source
# File lib/tasks/components.rb, line 10
def build_component(name)
  component_build_area = File.join(build_area, 'com_' + name)

  mkdir_p component_build_area

  {"/administrator" => "admin","" => "site"}.each do |context,target_context|
    # Do Languages
    language_dirs = Dir.glob(".#{context}/language/*")

    language_dirs.each do |language_dir|
      language = language_dir.split("/").last

      language_files = Rake::FileList.new(".#{context}/language/#{language}/*")

      language_files.each do |language_file|

        if language_file.include?(name)

          copy_to_dir = File.join(component_build_area, target_context, "language" , language)
          mkdir_p copy_to_dir rescue nil
          cp language_file , copy_to_dir

        end

      end
    end

    # Do the other stuff
    mkdir_p File.join(component_build_area , target_context)
    files = Rake::FileList.new(".#{context}/components/com_#{name}/**/*")

    # Copy the installer script.
    if context == '/administrator'
      cp "./administrator/components/com_#{name}/script.php" , File.join(component_build_area, 'script.php')
    end

    files.each do |file_name|
      target_file_name = file_name.gsub(".#{context}/components/com_#{name}", target_context)
      if File.directory?(file_name)
        mkdir_p File.join(component_build_area, target_file_name)
      else
        copy_to = File.join(component_build_area, File.dirname(target_file_name))
        mkdir_p copy_to unless File.exist?(copy_to)
        cp file_name, File.join(copy_to,  File.basename(target_file_name)) 
      end
    end
  end
  
  # Build the manifest
  manifest_path = File.join(component_build_area , name + '.xml')
  manifest_file = File.open(manifest_path, 'w:UTF-8')
  manifest = Builder::XmlMarkup.new(:indent => 4, :target => manifest_file)

  manifest.instruct!

  manifest.extension({
                       :type => "component" , 
                       :version => $package['package']['target_version'] , 
                       :method => "upgrade"}) do |ext|

    ext.comment! "Manifest generated by builder script at #{Time.now}"

    ext.name 'com_' + name
    ext.description"COM_#{name.upcase}_XML_DESCRIPTION"
    ext.version version_name
    ext.copyright $package['package']['copyright']
    ext.creationDate "01 Jan 2010"
    ext.author $package['package']['author']
    ext.authorEmail $package['package']['author_email']
    ext.authorUrl $package['package']['author_url']

    ext.install do |install|
      install.sql do |sql|
        sql.file({:driver => "mysql" , :charset => "utf8"}, "sql/install.mysql.utf8.sql")
      end
    end


    ext.uninstall do |uninstall|
      uninstall.sql do |sql|
        sql.file({:driver => "mysql" , :charset => "utf8"}, "sql/uninstall.mysql.utf8.sql")
      end
    end

    ext.update do |update|
      update.schemas do |schema|
        schema.schemapath({:type => "mysql"}, "sql/updates")
      end
    end


    ext.scriptfile "script.php" if File.exist?( File.join(component_build_area , 'admin' , 'script.php') )
    
    ext.administration({:folder => 'admin'}) do |admin|
      admin.menu({:img => "components/com_#{name}/assets/menu_icon.png"}, "COM_#{name.upcase}_MENUTITLE")

      admin.languages({:folder => 'admin'}) do |languages|
        language_dirs = Dir.glob( File.join(component_build_area, 'admin', 'language', '*') )
        language_dirs.each do |language_dir|

          language_code = language_dir.split('/').last
          language_files = Dir.glob(File.join(language_dir , '*.ini'))

          language_files.each do |language_file|
            language_path = File.join('language', language_code, (File.basename language_file))
            languages.language({:tag => language_code}, language_path)
          end # language_files.each
        end # language_dir.each
      end # admin.languages
                            

      admin.files({:folder => "admin"}) do |files|
        Dir.glob(File.join(component_build_area , 'admin' , '*')).each do |f|
          if File.directory? f
            files.folder File.basename( f )
          else
            files.filename File.basename( f )
          end
        end
      end # Admin files
    end   # Admin

    ext.languages({:folder => 'site'}) do |languages|

        language_dirs = Dir.glob( File.join(component_build_area, 'site', 'language', '*') )
        language_dirs.each do |language_dir|

          language_code = language_dir.split('/').last
          language_files = Dir.glob(File.join(language_dir , '*.ini'))

          language_files.each do |language_file|
            language_path = File.join('language', language_code, (File.basename language_file))
            languages.language({:tag => language_code}, language_path)
          end # language_files.each
        end # language_dir.each
    end   # Admin

    ext.files({:folder => "site"}) do |files|
      Dir.glob(File.join(component_build_area, 'site' , '*')).each do |f|
        if File.directory? f
          files.folder File.basename( f )
        else
          files.filename File.basename( f )
        end # IF
      end # Files.each
    end   # Files
  end     # Manifest

  manifest.target!
  manifest_file.flush
  manifest_file.close

  chdir(component_build_area) do
    sh %{zip -r ../com_#{name}.zip *}
  end

end
build_library(name) click to toggle source
# File lib/tasks/libraries.rb, line 7
def build_library(name)
  lib_build_area = File.join(build_area , 'lib_' + name)
    
  mkdir_p lib_build_area
  files = Rake::FileList.new("./libraries/#{name}/**/*")
  
  files.each do |file_name|
    new_file_name = file_name.gsub("./libraries/#{name}/",'')
    if File.directory?(file_name)
      mkdir_p File.join(lib_build_area, new_file_name)
    else
      copy_to = File.join(lib_build_area , File.dirname(new_file_name))
      mkdir_p copy_to unless File.exist?(copy_to)
      cp file_name, File.join(copy_to , File.basename(file_name))
    end
  end

  manifest_path = File.join(lib_build_area, name + '.xml')
  manifest_file = File.open(manifest_path , 'w')
  manifest = Builder::XmlMarkup.new(:indent => 2, :target => manifest_file)
  
  manifest.instruct!

  manifest.extension({
                       :type => "library",
                       :version => $package['package']['target_version'],
                       :method => "upgrade"}) do |ext|
    ext.name "#{name.capitalize} Library"
    ext.libraryname name
    ext.version version_name
    ext.copyright $package['package']['copyright']
    ext.creationDate "01 Jen 2010"
    ext.author $package['package']['author']
    ext.authorEmail $package['package']['author_email']
    ext.authorUrl $package['package']['author_url']
    
    ext.files do |files|
      chdir(lib_build_area) do
        Dir.glob('*').each do |f|
          if File.directory? f
            files.folder f
          else
            files.file f
          end # File.directory?
        end # Dir.glob.each
      end # chdir
    end # ext.files
  end # ext

  if $package['js'].keys.include? "libraries/#{name}"
    compile_js_sources(lib_build_area, $package['js']["libraries/#{name}"])
  end

  manifest.target!
  manifest_file.flush
  manifest_file.close

  chdir(lib_build_area) do
    sh %{zip -r ../lib_#{name}.zip *}
  end
end
build_module(module_name) click to toggle source
# File lib/tasks/modules.rb, line 8
def build_module(module_name)
  module_build_area = File.join(build_area, 'mod_' + module_name)
  
  mkdir_p module_build_area
  
  files = Rake::FileList.new("./modules/mod_#{module_name}/**/*")

  files.each do |file_name|
    new_file_name = file_name.gsub("./modules/mod_#{module_name}", '')
    
    if File.directory? file_name
      mkdir_p File.join(module_build_area, new_file_name)
    else
      copy_to = File.join(module_build_area, File.dirname(new_file_name))
      mkdir_p copy_to unless File.exist? copy_to
      cp file_name, File.join(copy_to, File.basename(new_file_name))
    end
  end

  # Handle language files
  language_dirs = Dir.glob("./language/*")
  language_dirs.each do |language_dir|
    language_code = File.basename(language_dir)
    
    language_files = Rake::FileList.new(File.join(language_dir, "#{language_code}.mod_#{module_name}.*ini"))
    language_files.each do |f|
      cp f , File.join(module_build_area , File.basename(f))
    end
  end

  chdir(module_build_area) do
    sh %{zip -r ../mod_#{module_name}.zip *}
  end

end
build_plugin(group, name) click to toggle source
# File lib/tasks/plugins.rb, line 11
def build_plugin(group, name)

  plugin_build_area = File.join(build_area , 'plg_'+ group + '_' + name)
  
  mkdir_p plugin_build_area

  files = Rake::FileList.new("./plugins/#{group}/#{name}/**/*")
  
  files.each do |file_name|
    new_file_name = file_name.gsub("./plugins/#{group}/#{name}",'')
    if File.directory? file_name
      mkdir_p File.join(plugin_build_area, new_file_name)
    else
      copy_to = File.join(plugin_build_area , File.dirname(new_file_name))
      mkdir_p copy_to unless File.exist? copy_to
      cp file_name, File.join( copy_to, File.basename(new_file_name))
    end
  end

  # Handle language files
  language_dirs = Dir.glob("./language/*")
  language_dirs.each do |language_dir|
    language_code = File.basename(language_dir)
    
    language_files = Rake::FileList.new(File.join(language_dir, "#{language_code}.plg_#{group}_#{name}.*ini"))
    language_files.each do |f|
      cp f , File.join(plugin_build_area , File.basename(f))
    end
  end

  # Update the manifest meta data:
  manifest_file = "#{plugin_build_area}/#{name}.xml"
  manifest = ''

  File.open(manifest_file, "r") do |file|
    manifest = file.read()
    manifest = template(manifest, { 
      'release.version' => version_name,
      'project.creation.date' => '01 Jan 2010',
      'project.author' => $package['package']['author'],
      'project.licence' => $package['package']['licence'],
      'project.copyright' => $package['package']['copyright'],
      'project.author.email' => $package['package']['author_email'],
      'project.author.url' => $package['package']['author_url']
    })
  end
  File.open(manifest_file, "w") do |file|
    file.puts manifest
  end

  chdir(plugin_build_area) do
    sh %{zip -r ../plg_#{group}_#{name}.zip *}
  end
end
build_template(template_name) click to toggle source
# File lib/tasks/templates.rb, line 10
def build_template(template_name)
  template_build_area = File.join(build_area, 'tpl_' + template_name)

  # Copy Files
  mkdir_p template_build_area

  template_files = Rake::FileList.new("./templates/#{template_name}/**/*")

  template_files.each do |file_name|
    target_file_name = file_name.gsub("./templates/#{template_name}", '')

    if File.directory? file_name
      mkdir_p File.join(template_build_area, target_file_name)
    else
      copy_to = File.join(template_build_area, File.dirname(target_file_name))
      mkdir_p copy_to unless File.exist?(copy_to)
      cp file_name, File.join(copy_to, File.basename(target_file_name))
    end
  end

  # Copy Language Files
  language_codes = Dir.glob("./languages/*").each { |d| File.basename d }
  
  language_codes.each do |language|
    language_files = Rake::FileList.new("./languages/#{language}/*.ini")
    
    language_files.each do |language_file|
      if language_file.include? template_name
        cp language_file , File.join(template_build_area, File.basename(language_file) )
      end
    end

  end

  # Process any LESS files
  $package['less'].keys.each do |file|
    compile_less_styles(template_build_area, $package['less'][file])
  end

  chdir(template_build_area) do
    sh %{zip -r ../tpl_#{template_name}.zip *}
  end

end
commit_count() click to toggle source

Get the commit count

Uses the git CLI to get the commit count

@return [String] Commit Count

# File lib/helpers/helpers.rb, line 32
def commit_count
  v = `git rev-list HEAD --count`
  v.strip!
end
compile_js_sources(base_dir, definitions) click to toggle source

Compile JS into minified sources

Compiles JS sources defined in definitions

# File lib/tasks/jsminify.rb, line 9
def compile_js_sources(base_dir, definitions)
  chdir(base_dir) do
    definitions.each do |definition|

      jscompressor = :uglifyjs

      sources = definition['inputs'].join(' ')

      sh %{cat #{sources} > #{definition['output']}.tmp}
      sh %{#{jscompressor} #{definition['output']}.tmp > #{definition['output']}}
      rm definition['output'] + '.tmp'
    end
  end
end
compile_less_styles(base_dir, definitions) click to toggle source

Compile less styles

Compiles less styles defined in definition

@param [array] definitions file definitions

# File lib/tasks/less.rb, line 12
def compile_less_styles(base_dir, definitions)

  chdir(base_dir) do
    definitions.each do |definition|

      lessc = 'lessc'
      flags = []

      if definition['optimize']
        case definition['optimize']
          when TrueClass then
          flags << '-O2'
          else
          flags << '-O' + definition['optimize']
        end
      end

      if definition['include']
        flags << "--include-path=" + definition['include'].join(':')
      end

      sources = definition['inputs'].join(' ')

      sh %{#{lessc} #{flags.join(' ')} #{sources} #{definition['output']}}

    end
  end
end
generate_release_notes() click to toggle source
# File lib/tasks/package.rb, line 1
def generate_release_notes

  require 'redcarpet'

  renderer = Redcarpet::Render::HTML.new({with_toc_data: true, hard_wrap: true})
  markdown = Redcarpet::Markdown.new(renderer, {no_intra_emphasis: true, tables: true})

  release_note_source = File.read("./release_notes.md")

  markdown.render(release_note_source)
end
get_js_files() click to toggle source
# File lib/tasks/codesniff.rb, line 14
def get_js_files
  
  Dir["**/*.js"]

end
get_php_files() click to toggle source

Helpers for Codesniffing

# File lib/tasks/codesniff.rb, line 7
def get_php_files

  Dir["**/*.php"]

end
package_file_path() click to toggle source

Path file Location

# File lib/helpers/helpers.rb, line 46
def package_file_path
  "./packages/#{$package['name']}/#{package_name}.zip"
end
package_files() click to toggle source

Get files to (not) be packaged @deprecated

# File lib/helpers/helpers.rb, line 52
def package_files
  package_files = Rake::FileList.new "**/*"
  package_files.exclude(/^(packages\/.*|Rakefile|\.git|README\.md)/)

  package_files
end
package_name() click to toggle source
Get the package name

@return [String] Package Name

# File lib/helpers/helpers.rb, line 40
def package_name
  "pkg_#{$package['name']}-#{version_name}#{package_tag}"
end
package_tag() click to toggle source
# File lib/helpers/helpers.rb, line 74
def package_tag
  branch = `git rev-parse --abbrev-ref HEAD`

  return '' if branch == 'master'

  '-' + branch.strip!
end
s3_bucket() click to toggle source
# File lib/helpers/helpers.rb, line 87
def s3_bucket
  $package['s3']['test_bucket'] if package_tag
  $package['s3']['bucket']
end
s3_credentials() click to toggle source

Get the S3 Credentials

# File lib/tasks/s3_upload.rb, line 4
def s3_credentials

  {
    :access_key_id => ENV['AWS_ACCESS_KEY_ID'] || $package['s3']['access_key_id'],
    :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'] || $package['s3']['secret_access_key'],
    :region => ENV['AWS_REGION'] || $package['s3']['region']
  }

end
template( template, values ) click to toggle source

Replace template values

# File lib/helpers/helpers.rb, line 65
def template( template, values )
  output = template.clone()
  values.keys.each { |key|
    output.gsub!( /{{#{key}}}/, values[ key ].to_s )
  }
  output
end
update_manifest() click to toggle source

Get the update manifest

# File lib/helpers/manifest_generators.rb, line 2
def update_manifest
  document = Builder::XmlMarkup.new(:indent => 2)
  
  document.updates do |updates|
    updates.comment! "Update manifest: Generated by Builder Script at #{Time.now}"
    updates.update do |u|
      u.name $package['package']['name']
      u.description $package['package']['description']
      u.element "pkg_#{$package['name']}"
      u.type 'package'
      u.version version_name
      u.downloads do |d|
        d.downloadurl({:type => "full" , :format => "zip"}, "#{update_site}/#{package_name}.zip")
      end
      u.tags do |t|
        t.tag 'stable'
      end
      u.infourl $package['package']['info_url'] || "http://www.mrzen.com/travelzen"
      u.maintainer $package['package']['maintainer'] || 'MrZen Ltd'
      u.maintainerurl $package['package']['maintainer_url'] || 'http://www.mrzen.com'
      u.targetplatform({:name => 'joomla', :version => $package['package']['target_version']})
      u.section 'Updates'
      u.client 'administrator'
    end
  end

  document.target!
end
update_site() click to toggle source
# File lib/helpers/helpers.rb, line 82
def update_site
  $package['package']['test_update_site'] if package_tag
  $package['package']['update_site']
end
version_name() click to toggle source

Get Version Name.

Version name is taken from the package description.

@return [String] Verison Name

# File lib/helpers/helpers.rb, line 18
def version_name
  version = $package['package']['version'].to_s + '.' + commit_count

  ENV['JR_PACKAGE_VERSION'] ||= version

  version
end