buildr-iidea 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,15 @@
1
+ 0.0.5 (June 5, 2010)
2
+ * Changed: The documentation indicated that the iml.local_repository_env_override value
3
+ defaulted to nil while the code defaulted the value to M2_REPO. The code was changed to
4
+ Use $MAVEN_REPOSITORY$ to match the behaviour of IDEA 9.x.
5
+ * Added: Dependencies that are not in the maven repository or in projects where
6
+ iml.local_repository_env_override is set nil will now have paths relative to the
7
+ module directory.
8
+ * Added: Ability to disable generation of content section using iml.skip_content!
9
+ * Fixed: A project which is tagged with no_iml may have a child with an IML.
10
+ * Changed: Directories that are outside content dir are no longer excluded in the content
11
+ section.
12
+
1
13
  0.0.4 (May 29, 2010)
2
14
  * Added: Ability to disable ipr generation using project.no_ipr
3
15
  * Added: Documented the ability to disable the generation of iml files via project.no_iml
@@ -4,7 +4,7 @@ This extension provides tasks to generate Intellij IDEA project files by issuing
4
4
 
5
5
  $ buildr iidea:generate
6
6
 
7
- This task will generate an .iml file for every project (or subproject) and a .ipr
7
+ This task will generate an .iml file for every project (or sub-project) and a .ipr
8
8
  that you can directly open for the root project.
9
9
 
10
10
  The generated project files can be removed by issuing;
@@ -14,14 +14,16 @@ The generated project files can be removed by issuing;
14
14
  The iidea task generates the project files based on the settings of each project and
15
15
  extension specific settings. The main and test source trees are added to the .iml
16
16
  file for each project as are the respective resource directories. The target and report
17
- directories are excluded from the project. If the project files exist on the filesystem
17
+ directories are excluded from the project. If the project files exist on the file system
18
18
  the extension will replace specific component sections in the xml with the generated
19
19
  component configurations.
20
20
 
21
21
  Dependencies come in two forms. Dependencies on other projects and dependencies on
22
22
  external jars. Dependencies on other projects are added as module dependencies in the
23
23
  .iml while jars are added as regular file dependencies. Dependencies are exported from
24
- the .iml file if they are compile dependencies.
24
+ the .iml file if they are compile dependencies. If a artifact that matches dependency but
25
+ has a classifier of 'sources' is present then it is configured as the source for the
26
+ dependency. Note: Use "buildr artifacts:sources" to download the source for dependencies.
25
27
 
26
28
  == Installation
27
29
 
@@ -43,12 +45,12 @@ The user then needs to add the following require into the build file:
43
45
  === Warning
44
46
 
45
47
  The iidea task may generate project files that conflict with the files generated by the
46
- builtin 'idea' and 'idea7x' tasks. As a result the builtin tasks would fail if ran while
48
+ built-in 'idea' and 'idea7x' tasks. As a result the built-in tasks would fail if ran while
47
49
  the extension is present. To avoid this problem the extension removes these tasks.
48
50
 
49
51
  == Idea Specific Directives
50
52
 
51
- The extension specific settings of subprojects inherit the parent projects settings
53
+ The extension specific settings of sub-projects inherit the parent projects settings
52
54
  unless overwritten.
53
55
 
54
56
  === Project file naming
@@ -57,8 +59,8 @@ The extension will use the last element of the projects name when generating the
57
59
  and .iml files. i.e. A project named "foo" will generate "foo.iml" and "foo.ipr" while
58
60
  a project named "foo:bar" will generate "bar/bar.iml" and no ipr. (The .ipr project
59
61
  files are only generated for base project). The name can be modified by setting the
60
- "ipr.suffix" or "iml.suffix" settins which specifies the suffix appended to the
61
- filenames. The user can also overide the name completely by setting "ipr.id" or "iml.id".
62
+ "ipr.suffix" or "iml.suffix" settings which specifies the suffix appended to the
63
+ file names. The user can also override the name completely by setting "ipr.id" or "iml.id".
62
64
 
63
65
  ==== Example: Setting id
64
66
 
@@ -107,6 +109,19 @@ Will generate:
107
109
 
108
110
  foo.iml
109
111
 
112
+ === Disabling generation of content section in .iml file
113
+
114
+ The extension will not generate a content section in an iml file if the "iml.skip_content!" method
115
+ is invoked. This can be useful if a project is just exporting dependencies and has no associated
116
+ source code. This may also be of use in scenarios where the build is repackaging an existing jar with
117
+ more meta-data or the project is just a container for other projects.
118
+
119
+ ==== Example
120
+
121
+ define "foo" do
122
+ iml.skip_content!
123
+ end
124
+
110
125
  === VCS Integration
111
126
 
112
127
  The extension will attempt to guess the VCS type of the project by looking for a .svn
@@ -122,25 +137,36 @@ the project to one of either 'Git' or 'svn' using the ipr.vcs setting.
122
137
 
123
138
  === Dependency generation
124
139
 
125
- When file dependencies are inserted into an .iml file absolute paths are used by default.
126
- The user can override this by setting the "iml.local_repository_env_override" setting.
127
- If set to nil absolute paths are used. If set to a non-null value the path to the local
128
- maven repository will be replaced with the specified environment variable.
140
+ A file dependency that exists in the local maven 2 repository is stored in the IML file
141
+ relative to the $MAVEN_REPOSITORY$ environment variable (that defaults to ~/.m2/repository).
142
+ The user can override the environment variable by setting the "iml.local_repository_env_override"
143
+ setting. If the dependency does not exist in to maven repository or the "iml.local_repository_env_override"
144
+ setting is set to nil, then the path stored in the IML is relative to the IML file.
129
145
 
130
146
  ==== Example: Setting local_repository_env_override
131
147
 
132
148
  define "foo" do
133
- iml.local_repository_env_override = "MAVEN_REPOSITORY"
149
+ iml.local_repository_env_override = nil
134
150
  compile.with 'group:id:jar:1.0'
135
151
  end
136
152
 
137
153
  Will generate a dependency with a path like:
138
154
 
139
- jar://$MAVEN_REPOSITORY$/group/id/1.0/id-1.0.jar!/
155
+ jar:///home/peter/.m2/repository/group/id/1.0/id-1.0.jar!/
140
156
 
141
157
  rather than the default
142
158
 
143
- jar:///home/peter/.m2/repository/group/id/1.0/id-1.0.jar!/
159
+ jar://$MAVEN_REPOSITORY$/group/id/1.0/id-1.0.jar!/
160
+
161
+ ==== Example: A dependency outside the maven repository
162
+
163
+ define "foo" do
164
+ compile.with _("foos-dep.jar")
165
+ end
166
+
167
+ Will generate a dependency with a path like:
168
+
169
+ jar://$MODULE_DIR$/foo-dep.jar!/
144
170
 
145
171
  === Module Facets
146
172
 
@@ -149,7 +175,7 @@ core java. A facet can be added to a project so that it can be deployed as a web
149
175
  or a hibernate application. A facet can also be used t provide support for other languages
150
176
  such as ruby and scala. The extension makes it possible to generate .iml with the appropriate
151
177
  facets via the "iml.add_facet" method. It should be noted that facets are NOT inherited by
152
- subprojects.
178
+ sub-projects.
153
179
 
154
180
  ==== Example
155
181
 
@@ -261,7 +287,7 @@ Will place the generated .imls in the following groups:
261
287
  === Add Extra .iml files to .ipr
262
288
 
263
289
  The 'ipr.extra_modules' setting makes it possible to add extra modules to the generated iml file.
264
- The setting is an array of filenames relative to the base project directory.
290
+ The setting is an array of file names relative to the base project directory.
265
291
 
266
292
  ==== Example
267
293
 
@@ -283,7 +309,7 @@ jump in and supply a patch if you have gone ahead and implemented the feature.
283
309
 
284
310
  === Auto-generate Web Facet
285
311
 
286
- Any project that defines a war package should have a web facet autogenerated for it.
312
+ Any project that defines a war package should have a web facet auto-generated for it.
287
313
 
288
314
  === Auto-generate Scala Facet
289
315
 
@@ -295,14 +321,6 @@ Add the ability for the module and project files to be generated off into a diff
295
321
  directory hierarchy. i.e. Generate project modules into .idea_project in projects base
296
322
  directory.
297
323
 
298
- === Populate SOURCES and JAVADOC for dependencies
299
-
300
- Add tasks 'iidea:deps:sources:download' and 'iidea:deps:javadoc:download' that downloads
301
- missing :classifier => 'sources' and :classifier => 'javadoc' dependencies for all the
302
- :classifier => 'jar' dependencies in the project. When generating the project files the task
303
- should populate the SOURCES and JAVADOC if the relevant artifact is present in the local
304
- repository.
305
-
306
324
  === Fix tests to work when installed as a gem
307
325
 
308
326
  The library should determine whether it is installed as a gem and if so use the gem to
@@ -1,6 +1,8 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/lib/buildr/intellij_idea/version')
2
+
1
3
  Gem::Specification.new do |spec|
2
4
  spec.name = 'buildr-iidea'
3
- spec.version = `git describe`.strip.split('-').first
5
+ spec.version = Buildr::IntellijIdea::Version::STRING
4
6
  spec.authors = ['Rhett Sutphin', 'Peter Donald']
5
7
  spec.email = ["rhett@detailedbalance.net","peter@realityforge.org"]
6
8
  spec.homepage = "http://github.com/realityforge/buildr-iidea"
@@ -2,10 +2,8 @@ module Buildr
2
2
  module IntellijIdea
3
3
  class IdeaModule < IdeaFile
4
4
  DEFAULT_TYPE = "JAVA_MODULE"
5
- DEFAULT_LOCAL_REPOSITORY_ENV_OVERRIDE = "M2_REPO"
6
- MODULE_DIR_URL = "file://$MODULE_DIR$"
5
+ DEFAULT_LOCAL_REPOSITORY_ENV_OVERRIDE = nil
7
6
 
8
- attr_writer :buildr_project
9
7
  attr_accessor :type
10
8
  attr_accessor :local_repository_env_override
11
9
  attr_accessor :group
@@ -14,12 +12,12 @@ module Buildr
14
12
  def initialize
15
13
  @type = DEFAULT_TYPE
16
14
  @local_repository_env_override = DEFAULT_LOCAL_REPOSITORY_ENV_OVERRIDE
17
- @facets = []
18
15
  end
19
16
 
20
17
  def buildr_project=(buildr_project)
21
18
  @id = nil
22
19
  @facets = []
20
+ @skip_content = false
23
21
  @buildr_project = buildr_project
24
22
  end
25
23
 
@@ -63,12 +61,21 @@ module Buildr
63
61
  [buildr_project.test.resources.target, buildr_project.resources.target].compact
64
62
  end
65
63
 
66
- def main_dependencies
67
- buildr_project.compile.dependencies.map(&:to_s)
68
- end
69
-
70
64
  def test_dependencies
71
- buildr_project.test.compile.dependencies.map(&:to_s) - [ buildr_project.compile.target.to_s ]
65
+ main_dependencies_paths = buildr_project.compile.dependencies.map(&:to_s)
66
+ target_dir = buildr_project.compile.target.to_s
67
+ buildr_project.test.compile.dependencies.select{|d| d.to_s != target_dir}.collect do |d|
68
+ dependency_path = d.to_s
69
+ export = main_dependencies_paths.include?(dependency_path)
70
+ source_path = nil
71
+ if d.respond_to?(:to_spec_hash)
72
+ source_spec = d.to_spec_hash.merge(:classifier => 'sources')
73
+ source_path = Buildr.artifact(source_spec).to_s
74
+ source_path = nil unless File.exist?(source_path)
75
+ end
76
+ [dependency_path, export, source_path]
77
+ end
78
+
72
79
  end
73
80
 
74
81
  def base_directory
@@ -83,6 +90,14 @@ module Buildr
83
90
  self.facets << REXML::Document.new(target.string).root
84
91
  end
85
92
 
93
+ def skip_content?
94
+ !!@skip_content
95
+ end
96
+
97
+ def skip_content!
98
+ @skip_content = true
99
+ end
100
+
86
101
  protected
87
102
 
88
103
  def base_document
@@ -112,16 +127,13 @@ module Buildr
112
127
  end
113
128
 
114
129
  def module_root_component
115
- m2repo = Buildr::Repositories.instance.local
116
-
117
130
  create_component("NewModuleRootManager", "inherit-compiler-output" => "false") do |xml|
118
131
  generate_compile_output(xml)
119
- generate_content(xml)
132
+ generate_content(xml) unless skip_content?
120
133
  generate_initial_order_entries(xml)
121
134
 
122
135
  # Note: Use the test classpath since IDEA compiles both "main" and "test" classes using the same classpath
123
- self.test_dependencies.each do |dependency_path|
124
- export = self.main_dependencies.include?(dependency_path)
136
+ self.test_dependencies.each do |dependency_path, export, source_path|
125
137
  project_for_dependency = Buildr.projects.detect do |project|
126
138
  project.packages.detect { |pkg| pkg.to_s == dependency_path }
127
139
  end
@@ -130,52 +142,69 @@ module Buildr
130
142
  generate_project_dependency( xml, project_for_dependency.iml.name, export )
131
143
  end
132
144
  next
133
- elsif dependency_path.to_s.index(m2repo) == 0
134
- entry_path = dependency_path
135
- unless self.local_repository_env_override.nil?
136
- entry_path = entry_path.sub(m2repo, "$#{self.local_repository_env_override}$")
137
- end
138
- generate_module_lib(xml, "jar://#{entry_path}!/", export )
145
+ else
146
+ generate_module_lib(xml, jar_path(dependency_path), export, (source_path ? jar_path(source_path) : nil))
139
147
  end
140
148
  end
141
149
 
142
150
  self.resources.each do |resource|
143
- generate_module_lib(xml, "#{MODULE_DIR_URL}/#{relative(resource.to_s)}", true)
151
+ generate_module_lib(xml, file_path(resource.to_s), true, nil)
144
152
  end
145
153
 
146
154
  xml.orderEntryProperties
147
155
  end
148
156
  end
149
157
 
158
+ def jar_path(path)
159
+ "jar://#{resolve_path(path)}!/"
160
+ end
161
+
162
+ def file_path(path)
163
+ "file://#{resolve_path(path)}"
164
+ end
165
+
166
+ def resolve_path(path)
167
+ m2repo = Buildr::Repositories.instance.local
168
+ if path.to_s.index(m2repo) == 0 && !self.local_repository_env_override.nil?
169
+ return path.sub(m2repo, "$#{self.local_repository_env_override}$")
170
+ else
171
+ return "$MODULE_DIR$/#{relative(path)}"
172
+ end
173
+ end
174
+
150
175
  def relative(path)
151
- Util.relative_path(File.expand_path(path.to_s), self.base_directory)
176
+ ::Buildr::Util.relative_path(File.expand_path(path.to_s), self.base_directory)
152
177
  end
153
178
 
154
179
  def generate_compile_output(xml)
155
- xml.output(:url => "#{MODULE_DIR_URL}/#{relative(self.main_output_dir.to_s)}")
156
- xml.tag!("output-test", :url => "#{MODULE_DIR_URL}/#{relative(self.test_output_dir.to_s)}")
180
+ xml.output(:url => file_path(self.main_output_dir.to_s))
181
+ xml.tag!("output-test", :url => file_path(self.test_output_dir.to_s))
157
182
  xml.tag!("exclude-output")
158
183
  end
159
184
 
160
185
  def generate_content(xml)
161
- xml.content(:url => MODULE_DIR_URL) do
186
+ xml.content(:url => "file://$MODULE_DIR$") do
162
187
  # Source folders
163
188
  {
164
189
  :main => self.main_source_directories,
165
190
  :test => self.test_source_directories
166
191
  }.each do |kind, directories|
167
192
  directories.map { |dir| relative(dir) }.compact.sort.uniq.each do |dir|
168
- xml.sourceFolder :url => "#{MODULE_DIR_URL}/#{dir}", :isTestSource => (kind == :test ? 'true' : 'false')
193
+ xml.sourceFolder :url => file_path(dir), :isTestSource => (kind == :test ? 'true' : 'false')
169
194
  end
170
195
  end
171
196
 
172
197
  # Exclude target directories
173
- self.net_excluded_directories.sort.each do |dir|
174
- xml.excludeFolder :url => "#{MODULE_DIR_URL}/#{dir}"
198
+ self.net_excluded_directories.select{|dir| relative_dir_inside_dir?(dir)}.sort.each do |dir|
199
+ xml.excludeFolder :url => file_path(dir)
175
200
  end
176
201
  end
177
202
  end
178
203
 
204
+ def relative_dir_inside_dir?(dir)
205
+ !dir.include?("../")
206
+ end
207
+
179
208
  def generate_initial_order_entries(xml)
180
209
  xml.orderEntry :type => "sourceFolder", :forTests => "false"
181
210
  xml.orderEntry :type => "inheritedJdk"
@@ -187,7 +216,7 @@ module Buildr
187
216
  xml.orderEntry attribs
188
217
  end
189
218
 
190
- def generate_module_lib(xml, path, export)
219
+ def generate_module_lib(xml, path, export, source_path)
191
220
  attribs = {:type => 'module-library'}
192
221
  attribs[:exported] = '' if export
193
222
  xml.orderEntry attribs do
@@ -196,7 +225,11 @@ module Buildr
196
225
  xml.root :url => path
197
226
  end
198
227
  xml.JAVADOC
199
- xml.SOURCES
228
+ xml.SOURCES do
229
+ if source_path
230
+ xml.root :url => source_path
231
+ end
232
+ end
200
233
  end
201
234
  end
202
235
  end
@@ -42,9 +42,10 @@ module Buildr
42
42
  iidea.enhance [ file(ideafile.filename) ]
43
43
  file(ideafile.filename => [Buildr.application.buildfile, module_dir]) do |task|
44
44
  info "Writing #{task.name}"
45
- temp_filename = nil
46
- Tempfile.open("buildr-iidea") do |f|
47
- temp_filename = f.path
45
+ t = Tempfile.open("buildr-iidea")
46
+ temp_filename = t.path
47
+ t.close!
48
+ File.open(temp_filename, "w") do |f|
48
49
  ideafile.write f
49
50
  end
50
51
  mv temp_filename, ideafile.filename
@@ -74,7 +75,11 @@ module Buildr
74
75
  def iml
75
76
  if iml?
76
77
  unless @iml
77
- @iml = self.parent ? self.parent.iml.clone : IdeaModule.new
78
+ inheritable_iml_source = self.parent
79
+ while inheritable_iml_source && !inheritable_iml_source.iml?
80
+ inheritable_iml_source = inheritable_iml_source.parent;
81
+ end
82
+ @iml = inheritable_iml_source ? inheritable_iml_source.iml.clone : IdeaModule.new
78
83
  @iml.buildr_project = self
79
84
  end
80
85
  return @iml
@@ -0,0 +1,11 @@
1
+ module Buildr
2
+ module IntellijIdea
3
+ class Version
4
+ MAJOR = "0"
5
+ MINOR = "0"
6
+ MICRO = "5"
7
+
8
+ STRING = "#{MAJOR}.#{MINOR}.#{MICRO}"
9
+ end
10
+ end
11
+ end
@@ -1,4 +1,5 @@
1
1
  require 'buildr'
2
+ require File.expand_path(File.dirname(__FILE__) + '/buildr/intellij_idea/version')
2
3
  require File.expand_path(File.dirname(__FILE__) + '/buildr/intellij_idea/idea_file')
3
4
  require File.expand_path(File.dirname(__FILE__) + '/buildr/intellij_idea/idea_module')
4
5
  require File.expand_path(File.dirname(__FILE__) + '/buildr/intellij_idea/idea_project')
@@ -2,6 +2,7 @@ require File.expand_path('../../../spec_helper', __FILE__)
2
2
 
3
3
  ORDER_ENTRY_XPATH = "/module/component[@name='NewModuleRootManager']/orderEntry"
4
4
  DEPENDENCY_NAME = 'group:id:jar:1.0'
5
+ DEPENDENCY_SOURCES_NAME = 'group:id:jar:sources:1.0'
5
6
  DEPENDENCY2_NAME = 'group:id2:jar:1.0'
6
7
 
7
8
  describe "iidea:generate" do
@@ -20,7 +21,7 @@ describe "iidea:generate" do
20
21
  end
21
22
 
22
23
  it "generates one exported 'module-library' orderEntry in IML" do
23
- root_module_xml(@foo).should have_nodes("#{ORDER_ENTRY_XPATH}[@type='module-library', @exported='']", 1)
24
+ root_module_xml(@foo).should have_nodes("#{ORDER_ENTRY_XPATH}[@type='module-library', @exported='']/library/CLASSES/root", 1)
24
25
  end
25
26
  end
26
27
 
@@ -33,8 +34,22 @@ describe "iidea:generate" do
33
34
  end
34
35
 
35
36
  it "generates one non-exported 'module-library' orderEntry in IML" do
36
- root_module_xml(@foo).should have_nodes("#{ORDER_ENTRY_XPATH}[@type='module-library' and @exported]", 0)
37
- root_module_xml(@foo).should have_nodes("#{ORDER_ENTRY_XPATH}[@type='module-library']", 1)
37
+ root_module_xml(@foo).should have_nodes("#{ORDER_ENTRY_XPATH}[@type='module-library' and @exported]/library/CLASSES/root", 0)
38
+ root_module_xml(@foo).should have_nodes("#{ORDER_ENTRY_XPATH}[@type='module-library']/library/CLASSES/root", 1)
39
+ end
40
+ end
41
+
42
+ describe "with sources artifact present" do
43
+ before do
44
+ artifact(DEPENDENCY_SOURCES_NAME) { |t| write t.to_s }
45
+ @foo = define "foo" do
46
+ compile.with DEPENDENCY_NAME
47
+ end
48
+ invoke_generate_task
49
+ end
50
+
51
+ it "generates 'module-library' orderEntry in IML with SOURCES specified" do
52
+ root_module_xml(@foo).should have_nodes("#{ORDER_ENTRY_XPATH}[@type='module-library', @exported='']/library/SOURCES/root", 1)
38
53
  end
39
54
  end
40
55
 
@@ -49,7 +64,7 @@ describe "iidea:generate" do
49
64
 
50
65
  it "generates orderEntry with absolute path for classes jar" do
51
66
  root_module_xml(@foo).should match_xpath("#{ORDER_ENTRY_XPATH}/library/CLASSES/root/@url",
52
- "jar://#{@artifact.to_s}!/")
67
+ "jar://$MODULE_DIR$/home/.m2/repository/group/id/1.0/id-1.0.jar!/")
53
68
  end
54
69
  end
55
70
  describe "with local_repository_env_override set to MAVEN_REPOSITORY" do
@@ -82,4 +97,20 @@ describe "iidea:generate" do
82
97
  root_module_xml(@foo).should have_nodes("#{ORDER_ENTRY_XPATH}[@type='module-library']", 2)
83
98
  end
84
99
  end
100
+
101
+ describe "with a single non artifact dependency" do
102
+ before do
103
+ @foo = define "foo" do
104
+ filename = _("foo-dep.jar")
105
+ File.open(filename,"w") { |t| write t.to_s }
106
+ compile.with filename
107
+ end
108
+ invoke_generate_task
109
+ end
110
+
111
+ it "generates one exported 'module-library' orderEntry in IML" do
112
+ root_module_xml(@foo).should match_xpath("#{ORDER_ENTRY_XPATH}/library/CLASSES/root/@url",
113
+ "jar://$MODULE_DIR$/foo-dep.jar!/")
114
+ end
115
+ end
85
116
  end
@@ -0,0 +1,76 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe "iidea:generate" do
4
+ describe "with iml.skip_content! specified" do
5
+ before do
6
+ @foo = define "foo" do
7
+ iml.skip_content!
8
+ end
9
+ invoke_generate_task
10
+ end
11
+
12
+ it "generate an IML with no content section" do
13
+ doc = xml_document(@foo._(root_module_filename(@foo)))
14
+ doc.should_not have_xpath("/module/component[@name='NewModuleRootManager']/content")
15
+ end
16
+ end
17
+
18
+ describe "with iml.skip_content! not specified and standard layout" do
19
+ before do
20
+ @foo = define "foo" do
21
+ end
22
+ invoke_generate_task
23
+ end
24
+
25
+ it "generate an IML with content section" do
26
+ root_module_xml(@foo).should have_xpath("/module/component[@name='NewModuleRootManager']/content")
27
+ end
28
+
29
+ it "generate an exclude in content section for reports" do
30
+ root_module_xml(@foo).should have_xpath("/module/component[@name='NewModuleRootManager']/content/excludeFolder[@url='file://$MODULE_DIR$/reports']")
31
+ end
32
+
33
+ it "generate an exclude in content section for target" do
34
+ root_module_xml(@foo).should have_xpath("/module/component[@name='NewModuleRootManager']/content/excludeFolder[@url='file://$MODULE_DIR$/target']")
35
+ end
36
+ end
37
+
38
+ describe "with report dir outside content" do
39
+ before do
40
+ layout = Layout::Default.new
41
+ layout[:reports] = "../reports"
42
+
43
+ @foo = define "foo", :layout => layout do
44
+ end
45
+ invoke_generate_task
46
+ end
47
+
48
+ it "generate an exclude in content section for target" do
49
+ root_module_xml(@foo).should have_xpath("/module/component[@name='NewModuleRootManager']/content/excludeFolder[@url='file://$MODULE_DIR$/target']")
50
+ end
51
+
52
+ it "generates an content section without an exclude for report dir" do
53
+ root_module_xml(@foo).should have_nodes("/module/component[@name='NewModuleRootManager']/content/excludeFolder", 1)
54
+ end
55
+ end
56
+
57
+ describe "with target dir outside content" do
58
+ before do
59
+ layout = Layout::Default.new
60
+ layout[:target] = "../target"
61
+ layout[:target, :main] = "../target"
62
+
63
+ @foo = define "foo", :layout => layout do
64
+ end
65
+ invoke_generate_task
66
+ end
67
+
68
+ it "generate an exclude in content section for reports" do
69
+ root_module_xml(@foo).should have_xpath("/module/component[@name='NewModuleRootManager']/content/excludeFolder[@url='file://$MODULE_DIR$/reports']")
70
+ end
71
+
72
+ it "generates an content section without an exclude for target dir" do
73
+ root_module_xml(@foo).should have_nodes("/module/component[@name='NewModuleRootManager']/content/excludeFolder", 1)
74
+ end
75
+ end
76
+ end
@@ -28,4 +28,69 @@ describe "project extension" do
28
28
  it "removes the 'idea7x:clean' task" do
29
29
  Rake::Task.tasks.detect{|task| task.to_s == "idea7x:clean"}.should be_nil
30
30
  end
31
+
32
+ describe "#no_iml" do
33
+ it "makes #iml? false" do
34
+ @foo = define "foo" do
35
+ project.no_iml
36
+ end
37
+ @foo.iml?.should be_false
38
+ end
39
+ end
40
+
41
+ describe "#iml" do
42
+ before do
43
+ define "foo" do
44
+ iml.suffix = "-top"
45
+
46
+ define "bar" do
47
+ iml.suffix = "-mid"
48
+
49
+ define "baz" do
50
+ end
51
+ end
52
+ end
53
+ end
54
+
55
+ it "inherits the direct parent's IML settings" do
56
+ project('foo:bar:baz').iml.suffix.should == "-mid"
57
+ end
58
+
59
+ it "does not modify the parent's IML settings" do
60
+ project('foo').iml.suffix.should == "-top"
61
+ end
62
+
63
+ it "works even when the parent has no IML" do
64
+ lambda {
65
+ define "a" do
66
+ project.no_iml
67
+ define "b" do
68
+ iml.suffix = "-alone"
69
+ end
70
+ end
71
+ }.should_not raise_error
72
+ end
73
+
74
+ it "inherits from the first ancestor which has an IML" do
75
+ define "a" do
76
+ iml.suffix = "-a"
77
+ define "b" do
78
+ iml.suffix = "-b"
79
+ define "c" do
80
+ project.no_iml
81
+ define "d" do
82
+ project.no_iml
83
+ define "e" do
84
+ project.no_iml
85
+ define "f" do
86
+ end
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end
92
+
93
+ project("a:b:c:d:e:f").iml.suffix.should == "-b"
94
+ end
95
+ end
31
96
  end
@@ -2,10 +2,19 @@ require 'spec'
2
2
  require File.expand_path(File.dirname(__FILE__) + '/xpath_matchers.rb')
3
3
 
4
4
  DEFAULT_BUILDR_DIR=File.expand_path(File.dirname(__FILE__) + '/../../buildr')
5
- BUILDR_DIR=ENV['BUILDR_DIR'] || DEFAULT_BUILDR_DIR
5
+ BUILDR_DIR =
6
+ begin
7
+ if ENV['BUILDR_DIR']
8
+ ENV['BUILDR_DIR']
9
+ elsif File.exist?(File.expand_path('../buildr_dir', __FILE__))
10
+ File.read(File.expand_path('../buildr_dir', __FILE__)).strip
11
+ else
12
+ DEFAULT_BUILDR_DIR
13
+ end
14
+ end
6
15
 
7
16
  unless File.exist?("#{BUILDR_DIR}/buildr.gemspec")
8
- raise "Unable to find buildr.gemspec in #{BUILDR_DIR == DEFAULT_BUILDR_DIR ? 'guessed' : 'specified'} $BUILD_DIR (#{BUILDR_DIR})"
17
+ raise "Unable to find buildr.gemspec in #{BUILDR_DIR == DEFAULT_BUILDR_DIR ? 'guessed' : 'specified'} $BUILDR_DIR (#{BUILDR_DIR})"
9
18
  end
10
19
 
11
20
  require 'rubygems'
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 4
9
- version: 0.0.4
8
+ - 5
9
+ version: 0.0.5
10
10
  platform: ruby
11
11
  authors:
12
12
  - Rhett Sutphin
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-05-29 00:00:00 +10:00
18
+ date: 2010-07-05 00:00:00 +10:00
19
19
  default_executable:
20
20
  dependencies: []
21
21
 
@@ -38,6 +38,7 @@ extra_rdoc_files:
38
38
  - CHANGELOG
39
39
  files:
40
40
  - lib/buildr_iidea.rb
41
+ - lib/buildr/intellij_idea/version.rb
41
42
  - lib/buildr/intellij_idea/idea_project.rb
42
43
  - lib/buildr/intellij_idea/project_extension.rb
43
44
  - lib/buildr/intellij_idea/idea_module.rb
@@ -55,6 +56,7 @@ files:
55
56
  - spec/buildr/intellij_idea/initial_components_spec.rb
56
57
  - spec/buildr/intellij_idea/clean_spec.rb
57
58
  - spec/buildr/intellij_idea/dependency_spec.rb
59
+ - spec/buildr/intellij_idea/module_content_generation_spec.rb
58
60
  - spec/buildr/intellij_idea/template_spec.rb
59
61
  - buildr-iidea.gemspec
60
62
  - LICENSE
@@ -69,7 +71,7 @@ licenses: []
69
71
  post_install_message: Thanks for installing the Intellij IDEA extension for Buildr
70
72
  rdoc_options:
71
73
  - --title
72
- - buildr-iidea 0.0.4
74
+ - buildr-iidea 0.0.5
73
75
  - --main
74
76
  - README.rdoc
75
77
  require_paths: