Module: RJack::TarPit::SpecHelper

Defined in:
lib/rjack-tarpit/spec.rb

Overview

Helper mixin for Gem::Specification, adding Manifest awareness, maven strategy, jars and other generated_files declarations, as well as several convenience methods and defaults. Many of these were Hoe inspired or remain compatible with Hoe.spec

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#assembly_nameObject

The name of the assembly (default: name)



111
112
113
# File 'lib/rjack-tarpit/spec.rb', line 111

def assembly_name
  @assembly_name
end

#assembly_versionObject

The version of the assembly, which might be static, i.e. “1.0”, if the pom is not shared (dependency jars only) (default: version)



116
117
118
# File 'lib/rjack-tarpit/spec.rb', line 116

def assembly_version
  @assembly_version
end

#generated_filesObject

Any additional generated files to be included. (default: nil)



100
101
102
# File 'lib/rjack-tarpit/spec.rb', line 100

def generated_files
  @generated_files
end

#history_fileObject

The filename for the project History (default: History.rdoc or History.txt if present)



87
88
89
# File 'lib/rjack-tarpit/spec.rb', line 87

def history_file
  @history_file
end

#jar_destObject

Destination path for any jar links (default: lib/<name>)



96
97
98
# File 'lib/rjack-tarpit/spec.rb', line 96

def jar_dest
  @jar_dest
end

#jarsObject

Return set or defaulted jar file names (without path)



222
223
224
225
226
227
228
229
230
231
232
233
234
235
# File 'lib/rjack-tarpit/spec.rb', line 222

def jars
  if @jars.nil? && ( maven_strategy == :jars_from_assembly )

    # Extract jar files from saved Manifest state, since neither
    # from or dest jars may be available at call time.
    @jars =
      Util::read_file_list( 'Manifest.txt' ).
      select { |f| f =~ /\.jar$/ }.
      map    { |f| File.basename( f ) }

    #FIXME: Test Manifest.txt exists yet?
  end
  @jars ||= Array( @jars )
end

#maven_strategyObject

Strategy for interacting with maven (default: nil, none )

:jars_from_assembly

jars will be found in assembly rather then set in Rakefile.

:no_assembly

One jar created from source, jars=, no assembly setup in maven.



108
109
110
# File 'lib/rjack-tarpit/spec.rb', line 108

def maven_strategy
  @maven_strategy
end

#readme_fileObject

The filename for the project README (default: README.rdoc or README.txt if present)



83
84
85
# File 'lib/rjack-tarpit/spec.rb', line 83

def readme_file
  @readme_file
end

#version_fileObject

The canonical file containing the version number, where changes should trigger Manifest.txt (re-)generation. (default: lib/<name>/base.rb or lib/<name>/version.rb if present)



121
122
123
# File 'lib/rjack-tarpit/spec.rb', line 121

def version_file
  @version_file
end

Instance Method Details

#add_developer(author, email = nil) ⇒ Object

Add developer with optional email.



185
186
187
188
# File 'lib/rjack-tarpit/spec.rb', line 185

def add_developer( author, email = nil )
  ( self.authors ||= [] ) << author
  ( self.email   ||= [] ) << email if email
end

#check_generate_manifestObject



237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
# File 'lib/rjack-tarpit/spec.rb', line 237

def check_generate_manifest
  # FIXME: How about diffent aproach: Always build new manifest
  # list, compare, and report and write if change from read in
  # list?

  unless ManifestTracker.generated?( name )
    if File.exist?( 'Manifest.static' )
      mtime = [ 'Manifest.static', version_file ].
        compact.
        map { |f| File.stat( f ).mtime }.
        max

      if ( !File.exist?( 'Manifest.txt' ) ||
           mtime > File.stat( 'Manifest.txt' ).mtime )
        generate_manifest
        self.files = Util::read_file_list( 'Manifest.txt' )
      end
    end
  end
end

#depend(name, *args) ⇒ Object

Add a dependencies by name, version requirements, and a final optional :dev or :development symbol indicating its for development.



193
194
195
196
197
198
199
200
# File 'lib/rjack-tarpit/spec.rb', line 193

def depend( name, *args )
  if args.last == :dev || args.last == :development
    args.pop
    add_development_dependency( name, *args )
  else
    add_dependency( name, *args )
  end
end

#description=(val) ⇒ Object

Set description. This override cleans up whitespace.



208
209
210
# File 'lib/rjack-tarpit/spec.rb', line 208

def description=( val )
  super( val.gsub( /\s+/, ' ' ).strip )
end

#generate_manifestObject

Generate Manifest.txt



259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
# File 'lib/rjack-tarpit/spec.rb', line 259

def generate_manifest
  ManifestTracker.once( name ) do
    remove_dest_jars

    m = []
    if File.exist?( 'Manifest.static' )
      m += Util::read_file_list( 'Manifest.static' )
    end
    m += Util::clean_list( generated_files ).sort
    m += dest_jars

    puts "TARPIT: Regenerating #{ File.expand_path( 'Manifest.txt' ) }"
    open( 'Manifest.txt', 'w' ) { |out| out.puts m }
  end
end

#jar_fromObject

The target/assembly path from which jars are linked



282
283
284
285
286
287
288
289
290
291
292
# File 'lib/rjack-tarpit/spec.rb', line 282

def jar_from
  dirs = [ 'target' ]

  unless maven_strategy == :no_assembly
    dirs << [ assembly_name,
              assembly_version,
              'bin.dir' ].join( '-' )
  end

  File.join( dirs )
end

#platform=(val) ⇒ Object

Override Gem::Specification to support simple platform symbol/string, i.e. :java



214
215
216
217
218
219
# File 'lib/rjack-tarpit/spec.rb', line 214

def platform=( val )
  if val.is_a?( Symbol ) || val.is_a?( String )
    val = Gem::Platform.new( val.to_s )
  end
  super( val )
end

#remove_dest_jarsObject

Remove jars in jar_dest by wildcard expression



276
277
278
279
# File 'lib/rjack-tarpit/spec.rb', line 276

def remove_dest_jars
  jars = Dir[ File.join( jar_dest, "*.jar" ) ].sort
  FileUtils::rm_f jars unless jars.empty?
end

#summary=(val) ⇒ Object

Set summary. This override cleans up whitespace.



203
204
205
# File 'lib/rjack-tarpit/spec.rb', line 203

def summary=( val )
  super( val.gsub( /\s+/, ' ' ).strip )
end

#tarpit_specify {|_self| ... } ⇒ Object

Set defaults, yields self to block, and finalizes

Yields:

  • (_self)

Yield Parameters:



124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
# File 'lib/rjack-tarpit/spec.rb', line 124

def tarpit_specify

  # Better defaults
  if File.exist?( 'Manifest.txt' )
    self.files = Util::read_file_list( 'Manifest.txt' )
  end

  self.executables =
    self.files.grep( /^bin\/.+/ ) { |f| File.basename( f ) }

  @readme_file  = existing( %w[ README.rdoc README.txt ] )
  @history_file = existing( %w[ History.rdoc History.txt ] )

  self.extra_rdoc_files += [ Dir[ '*.rdoc' ],
                             @readme_file,
                             @history_file ].flatten.compact.sort.uniq

  self.rdoc_options += [ '--main', @readme_file ] if @readme_file

  @jars            = nil
  @jar_dest        = nil
  @generated_files = nil
  @maven_strategy  = nil

  parse_readme( @readme_file ) if @readme_file

  yield self if block_given?

  @assembly_name ||= name
  @assembly_version ||= version

  version_candidates = %w[ base version ].map do |f|
    File.join( 'lib', name, "#{f}.rb" )
  end
  @version_file ||= existing( version_candidates )

  @jar_dest ||= File.join( 'lib', name )

  @jars = Array( @jars ).compact
  @jars = nil if @jars.empty?

  if ( @jars.nil? &&
       ( ( @maven_strategy == :no_assembly ) ||
         ( @maven_strategy.nil? && File.exist?( 'pom.xml' ) ) ) )
    @jars = [ default_jar ]
  end

  # The platform must be java if jars are specified.
  self.platform = :java if !jars.empty?

  # Add tarpit as dev dependency unless already present
  unless ( name == 'rjack-tarpit' ||
           dependencies.find { |d| d.name == 'rjack-tarpit' } )
    depend( 'rjack-tarpit', "~> #{ RJack::TarPit::MINOR_VERSION }", :dev )
  end

  check_generate_manifest

end