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 66 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 59 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
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 80 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 76 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 134 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 90 def base_directory buildr_project.path_to end
components()
click to toggle source
# File lib/buildr/ide/idea.rb, line 120 def components @components ||= [] end
create_component(name, attrs = {}) { |xml| ... }
click to toggle source
# File lib/buildr/ide/idea.rb, line 112 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 124 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 146 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 108 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 180 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 171 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 142 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 86 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 94 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