class Buildr::IntellijIdea::IdeaFile

Abstract base class for IdeaModule and IdeaProject

Constants

DEFAULT_LOCAL_REPOSITORY_ENV_OVERRIDE
DEFAULT_PREFIX
DEFAULT_SUFFIX

Attributes

buildr_project[R]
id[W]
local_repository_env_override[RW]
prefix[W]
suffix[W]
template[RW]

Public Class Methods

new() click to toggle source
# File lib/buildr/ide/idea.rb, line 35
def initialize
  @local_repository_env_override = DEFAULT_LOCAL_REPOSITORY_ENV_OVERRIDE
end

Public Instance Methods

add_component(name, attrs = {}, &xml) click to toggle source
# File lib/buildr/ide/idea.rb, line 55
def add_component(name, attrs = {}, &xml)
  self.components << create_component(name, attrs, &xml)
end
add_component_from_artifact(artifact) click to toggle source
# File lib/buildr/ide/idea.rb, line 72
def add_component_from_artifact(artifact)
  self.components << lambda do
    a = Buildr.artifact(artifact)
    a.invoke
    Buildr::IntellijIdea.new_document(IO.read(a.to_s)).root
  end
end
add_component_from_file(filename) click to toggle source
# File lib/buildr/ide/idea.rb, line 65
def add_component_from_file(filename)
  self.components << lambda do
    raise "Unable to locate file #{filename} adding component to idea file" unless File.exist?(filename)
    Buildr::IntellijIdea.new_document(IO.read(filename)).root
  end
end
add_component_in_lambda(name, attrs = {}, &xml) click to toggle source
# File lib/buildr/ide/idea.rb, line 59
def add_component_in_lambda(name, attrs = {}, &xml)
  self.components << lambda do
    create_component(name, attrs, &xml)
  end
end
filename() click to toggle source
# File lib/buildr/ide/idea.rb, line 47
def filename
  buildr_project.path_to("#{name}.#{extension}")
end
id() click to toggle source
# File lib/buildr/ide/idea.rb, line 51
def id
  @id ||= buildr_project.name.split(':').last
end
name() click to toggle source
# File lib/buildr/ide/idea.rb, line 86
def name
  "#{prefix}#{self.id}#{suffix}"
end
prefix() click to toggle source
# File lib/buildr/ide/idea.rb, line 39
def prefix
  @prefix ||= DEFAULT_PREFIX
end
suffix() click to toggle source
# File lib/buildr/ide/idea.rb, line 43
def suffix
  @suffix ||= DEFAULT_SUFFIX
end
write(f) click to toggle source

IDEA can not handle text content with indents so need to removing indenting Can not pass true as third argument as the ruby library seems broken

# File lib/buildr/ide/idea.rb, line 82
def write(f)
  document.write(f, -1, false, true)
end

Protected Instance Methods

add_to_composite_component(components) { |xml_markup(:target => target, :indent => 2)| ... } click to toggle source
# File lib/buildr/ide/idea.rb, line 140
def add_to_composite_component(components)
  components << lambda do
    target = StringIO.new
    yield Builder::XmlMarkup.new(:target => target, :indent => 2)
    Buildr::IntellijIdea.new_document(target.string).root
  end
end
base_directory() click to toggle source
# File lib/buildr/ide/idea.rb, line 96
def base_directory
  buildr_project.path_to
end
components() click to toggle source
# File lib/buildr/ide/idea.rb, line 126
def components
  @components ||= []
end
create_component(name, attrs = {}) { |xml| ... } click to toggle source
# File lib/buildr/ide/idea.rb, line 118
def create_component(name, attrs = {})
  target = StringIO.new
  Builder::XmlMarkup.new(:target => target, :indent => 2).component({ :name => name }.merge(attrs)) do |xml|
    yield xml if block_given?
  end
  Buildr::IntellijIdea.new_document(target.string).root
end
create_composite_component(name, attrs, components) click to toggle source
# File lib/buildr/ide/idea.rb, line 130
def create_composite_component(name, attrs, components)
  return nil if components.empty?
  component = self.create_component(name, attrs)
  components.each do |element|
    element = element.call if element.is_a?(Proc)
    component.add_element element
  end
  component
end
document() click to toggle source
# File lib/buildr/ide/idea.rb, line 152
def document
  if File.exist?(self.filename)
    doc = load_document(self.filename)
  else
    doc = base_document
    inject_components(doc, self.initial_components)
  end
  if self.template
    template_doc = load_document(self.template)
    REXML::XPath.each(template_doc, '//component') do |element|
      inject_component(doc, element)
    end
  end
  inject_components(doc, self.default_components.compact + self.components)

  # Sort the components in the same order the idea sorts them
  sorted = doc.root.get_elements('//component').sort { |s1, s2| s1.attribute('name').value <=> s2.attribute('name').value }
  doc = base_document
  sorted.each do |element|
    doc.root.add_element element
  end

  doc
end
file_path(path) click to toggle source
# File lib/buildr/ide/idea.rb, line 114
def file_path(path)
  "file://#{resolve_path(path)}"
end
inject_component(doc, component) click to toggle source

replace overridden component (if any) with specified component

# File lib/buildr/ide/idea.rb, line 186
def inject_component(doc, component)
  doc.root.delete_element("//component[@name='#{component.attributes['name']}']")
  doc.root.add_element component
end
inject_components(doc, components) click to toggle source
# File lib/buildr/ide/idea.rb, line 177
def inject_components(doc, components)
  components.each do |component|
    # execute deferred components
    component = component.call if Proc === component
    inject_component(doc, component) if component
  end
end
load_document(filename) click to toggle source
# File lib/buildr/ide/idea.rb, line 148
def load_document(filename)
  Buildr::IntellijIdea.new_document(File.read(filename))
end
relative(path) click to toggle source
# File lib/buildr/ide/idea.rb, line 92
def relative(path)
  ::Buildr::Util.relative_path(File.expand_path(path.to_s), self.base_directory)
end
resolve_path_from_base(path, base_variable) click to toggle source
# File lib/buildr/ide/idea.rb, line 100
def resolve_path_from_base(path, base_variable)
  m2repo = Buildr::Repositories.instance.local
  if path.to_s.index(m2repo) == 0 && !self.local_repository_env_override.nil?
    return path.sub(m2repo, "$#{self.local_repository_env_override}$")
  else
    begin
      return "#{base_variable}/#{relative(path)}"
    rescue ArgumentError
      # ArgumentError happens on windows when self.base_directory and path are on different drives
      return path
    end
  end
end