Class: Baltix::Source::Base

Inherits:
Object
  • Object
show all
Extended by:
Log
Defined in:
lib/baltix/source/base.rb

Direct Known Subclasses

Fake, Gem, Gemfile, Rakefile

Constant Summary collapse

OPTION_KEYS =
%i(source_file source_names replace_list aliases alias_names)
DL_DIRS =
->(s) { ".so.#{s.name}#{RbConfig::CONFIG['sitearchdir']}" }
RI_DIRS =
->(s) { [ s.default_ridir, 'ri' ] }
INC_DIRS =
%w(ext)
EXT_DIRS =
%w(ext)
LIB_DIRS =
%w(lib)
APP_DIRS =
%w(app webpack script public)
EXE_DIRS =
%w(bin exe)
CONF_DIRS =
%w(etc config conf)
TEST_DIRS =
%w(tests test spec features acceptance autotest)
MAN_DIRS =
%w(doc docs Documentation man docs-source)
SUP_DIRS =
%w(util yardoc benchmarks examples .git vendor sample)
LOG_DIRS =
%w(log)
DATA_DIRS =
%w(.)
STATE_DIRS =
%w(tmp)
DOCSRC_DIRS =
->(s) { s.libdirs | s.appdirs | s.exedirs | s.confdirs }
DL_RE =
->(_) { /\.(#{RbConfig::CONFIG['DLEXT']}|build_complete)$/ }
RI_RE =
/\.ri$/
INC_RE =
/\.(h|hpp)$/
MAN_RE =
/\.[1-8](.ronn)?$/
EXT_RE =
/\b(.*\.rb|rakefile(\.rb)?)$/i
DATA_RE =
->(s) do
   dirs = s.extdirs | s.libdirs | s.appdirs | s.exedirs |
      s.confdirs | s.testdirs | s.mandirs | s.supdirs |
      s.ridirs | s.dldirs | s.incdirs | s.logdirs | s.statedirs

   dirs.empty? && /.*/ || /^(?!.*#{dirs.join('\b|').gsub('.', '\\\\.')}\b)/
end
DOCSRC_RE =
/\.rb$/
GROUPS =
constants.select { |c| c =~ /_DIRS/ }.map { |c| c.to_s.sub('_DIRS', '').downcase }
OPTIONS_IN =
{
   aliases: ->(o, name) { o.is_a?(Hash) && [ o[nil], o[name], o.values.map {|x|x.flatten}.select {|x|x.include?(name)}.map {|x|x.first}.flatten ].flatten.compact.uniq || o },
   alias_names: ->(o, name) { o.is_a?(Hash) && [ o[nil], o[name], o.values.map {|x|x.flatten}.select {|x|x.include?(name)}.map {|x|x.first}.flatten ].flatten.compact.uniq || o },
   version_replaces: true,
   gem_version_replace: true,
   source_file: ->(file, _name) { file.is_a?(String) && File.file?(file) && file || nil },
   loader: true,
   gemspec: true,
   source_names: true,
   name: true,
   version: true,
   "source-ri-folder-lists": :name_or_default,
   "source-inc-folder-lists": :name_or_default,
   "source-ext-folder-lists": :name_or_default,
   "source-lib-folder-lists": :name_or_default,
   "source-app-folder-lists": :name_or_default,
   "source-exe-folder-lists": :name_or_default,
   "source-conf-folder-lists": :name_or_default,
   "source-test-folder-lists": :name_or_default,
   "source-man-folder-lists": :name_or_default,
   "source-sup-folder-lists": :name_or_default,
   "source-data-folder-lists": :name_or_default,
   "source-docsrc-folder-lists": :name_or_default,
   "source-log-folder-lists": :name_or_default,
   "source-state-folder-lists": :name_or_default,
   "source-ri-folders": true,
   "source-inc-folders": true,
   "source-ext-folders": true,
   "source-lib-folders": true,
   "source-app-folders": true,
   "source-exe-folders": true,
   "source-conf-folders": true,
   "source-test-folders": true,
   "source-man-folders": true,
   "source-sup-folders": true,
   "source-data-folders": true,
   "source-docsrc-folders": true,
   "source-log-folders": true,
   "source-state-folders": true,
}

Constants included from Log

Log::DEFAULT_IO_NAMES

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Log

default_prefix, io_name_parse, ios, level, level_match, log, prefix, prefix_for, setup, setup_kind

Instance Attribute Details

#loaderObject (readonly)

Returns the value of attribute loader.



82
83
84
# File 'lib/baltix/source/base.rb', line 82

def loader
  @loader
end

#optionsObject (readonly)

Returns the value of attribute options.



82
83
84
# File 'lib/baltix/source/base.rb', line 82

def options
  @options
end

#replace_listObject



199
200
201
# File 'lib/baltix/source/base.rb', line 199

def replace_list
   @gem_version_replace ||= {}
end

#source_fileObject (readonly)

Returns the value of attribute source_file.



82
83
84
# File 'lib/baltix/source/base.rb', line 82

def source_file
  @source_file
end

#source_namesObject



186
187
188
# File 'lib/baltix/source/base.rb', line 186

def source_names
   @source_names ||= options[:source_names] || source_file && [File.basename(source_file)] || []
end

Class Method Details

.name_for(options_in) ⇒ Object



94
95
96
97
98
# File 'lib/baltix/source/base.rb', line 94

def name_for options_in
   fullname = (options_in[:rootdir] || "").split('/').last
   /^(?<name>.*)-([\d\.]+)$/ =~ fullname
   name || fullname
end

.name_or_default(value_in, name, source_name) ⇒ Object



121
122
123
124
125
# File 'lib/baltix/source/base.rb', line 121

def name_or_default value_in, name, source_name
   value = value_in && (value_in[source_name] || value_in[nil]) || nil

   value && [ name.make_singular, value ] || nil
end

.optsObject



86
87
88
89
90
91
92
# File 'lib/baltix/source/base.rb', line 86

def opts
   @opts ||= ancestors.reverse.map do |a|
      a.constants.include?(:OPTIONS_IN) &&
      a.const_get(:OPTIONS_IN).to_a ||
      nil
   end.compact.flatten(1).to_os
end

.rootdir_or_default(value_in, name, _) ⇒ Object



127
128
129
# File 'lib/baltix/source/base.rb', line 127

def rootdir_or_default value_in, name, _
   [ name, value_in || Dir.pwd ]
end

.source_options(options_in = {}.to_os) ⇒ Object



100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/baltix/source/base.rb', line 100

def source_options options_in = {}.to_os
   source_name = name_for(options_in)

   opts.map do |name_in, rule|
      value_in = options_in[name_in.to_s]

      name, value = case rule
         when true
            [name_in, value_in]
         when Proc
            [name_in, rule[value_in, source_name] ]
         when Symbol
            method(rule)[value_in, name_in, source_name]
         else
            nil
         end

      value
   end.compact.to_os
end

Instance Method Details

#+(other) ⇒ Object



345
346
347
348
349
350
351
# File 'lib/baltix/source/base.rb', line 345

def + other
   self.replace_list = replace_list.merge(other.replace_list)
   self.source_names = source_names | other.source_names
   self.dsl.merge_in(other.dsl)

   self
end

#alias_namesObject



203
204
205
# File 'lib/baltix/source/base.rb', line 203

def alias_names
   @alias_names ||= options[:alias_names] || []
end

#alias_to(*sources) ⇒ Object



357
358
359
# File 'lib/baltix/source/base.rb', line 357

def alias_to *sources
   @aliases = aliases | sources.flatten
end

#aliasesObject



353
354
355
# File 'lib/baltix/source/base.rb', line 353

def aliases
   @aliases ||= []
end

#compilable?Boolean

Returns:

  • (Boolean)


249
250
251
# File 'lib/baltix/source/base.rb', line 249

def compilable?
   extfiles.any?
end

#compilablesObject



307
308
309
310
# File 'lib/baltix/source/base.rb', line 307

def compilables
   # TODO make compilables from ext
   extfiles
end

#default_ridirObject



297
298
299
# File 'lib/baltix/source/base.rb', line 297

def default_ridir
   ".ri.#{name}"
end

#definitionObject



273
274
275
# File 'lib/baltix/source/base.rb', line 273

def definition
   dsl.definition
end

#dependencies(*types) ⇒ Object



329
330
331
332
333
334
335
# File 'lib/baltix/source/base.rb', line 329

def dependencies *types
   if definition
      definition.dependencies.select {|dep| types.empty? || types.include?(dep.type) }
   else
      []
   end
end

#deps(groups_in = nil) ⇒ Object



277
278
279
# File 'lib/baltix/source/base.rb', line 277

def deps groups_in = nil
   dsl.deps_for(groups_in)
end

#development_dependenciesObject



337
338
339
# File 'lib/baltix/source/base.rb', line 337

def development_dependencies
   Baltix::DSL.merge_dependencies(*Baltix::DSL.filter_dependencies(:development, definition.dependencies, spec.dependencies))
end

#dslObject



190
191
192
193
194
195
196
197
# File 'lib/baltix/source/base.rb', line 190

def dsl
   @dsl ||= options[:dsl] ||
      Baltix::DSL.new(source_file,
         spec: spec,
         replace_list: replace_list,
         skip_list: (options[:gem_skip_list] || []) | [name],
         append_list: options[:gem_append_list])
end

#fullnameObject

fullname returns full name of the source, by default it is the name of the current folder, if it is the root folder the name is “root”. A mixin can redefine the method to return the proper value

source.name #=> “source_name”



142
143
144
# File 'lib/baltix/source/base.rb', line 142

def fullname
   @fullname ||= rootdir.split('/').last || "root"
end

#has_name?(name) ⇒ Boolean

Returns:

  • (Boolean)


281
282
283
# File 'lib/baltix/source/base.rb', line 281

def has_name? name
   self.name == name || alias_names.include?(name)
end

#if_dir(dir) ⇒ Object



293
294
295
# File 'lib/baltix/source/base.rb', line 293

def if_dir dir
   File.directory?(File.join(rootdir, dir)) && dir || nil
end

#if_exist(file) ⇒ Object



289
290
291
# File 'lib/baltix/source/base.rb', line 289

def if_exist file
   File.exist?(File.join(rootdir, file)) && file || nil
end

#if_file(file) ⇒ Object



285
286
287
# File 'lib/baltix/source/base.rb', line 285

def if_file file
   File.file?(File.join(rootdir, file)) && file || nil
end

#licensesObject



341
342
343
# File 'lib/baltix/source/base.rb', line 341

def licenses
   []
end

#nameObject

name returns dynamically detected name of the source base on the fullname, in case the fullname is detected in a format of <name-version>, the <name> is returned, otherwise the full name is returned itself. A mixin can redefine the method to return the proper value

source.name #=> “source_name”



153
154
155
156
157
158
159
160
161
# File 'lib/baltix/source/base.rb', line 153

def name
   return @name if @name

   if /^(?<name>.*)-([\d\.]+)$/ =~ fullname
      name
   else
      fullname || rootdir.split("/").last || "root"
   end
end

#platformObject

ruby platform is default for non-gem sources



178
179
180
# File 'lib/baltix/source/base.rb', line 178

def platform
   'ruby'
end

#provideObject



312
313
314
# File 'lib/baltix/source/base.rb', line 312

def provide
   Gem::Dependency.new(name, "= #{version || "0"}")
end

#required_rubyObject



261
262
263
# File 'lib/baltix/source/base.rb', line 261

def required_ruby
   dsl.required_ruby
end

#required_ruby_versionObject



265
266
267
# File 'lib/baltix/source/base.rb', line 265

def required_ruby_version
   dsl.required_ruby_version
end

#required_rubygems_versionObject



269
270
271
# File 'lib/baltix/source/base.rb', line 269

def required_rubygems_version
   dsl.required_rubygems_version
end

#rootdirObject



182
183
184
# File 'lib/baltix/source/base.rb', line 182

def rootdir
   @rootdir ||= detect_root
end

#source_path_from(path) ⇒ Object

rebases source_file to path base and returns.



362
363
364
365
366
367
368
369
370
371
# File 'lib/baltix/source/base.rb', line 362

def source_path_from path
   file =
      if source_file.include?(path)
         source_file[path.size + 1..-1]
      else
         source_file
      end

   File.dirname(file)
end

#summariesObject

summaries returns an open-struct formatted summaries with a default locale as a key in the spec defined if any, otherwise returns blank open struct.

source.summaries # => #<OpenStruct en_US.UTF-8: …>



321
322
323
324
325
326
327
# File 'lib/baltix/source/base.rb', line 321

def summaries
   if spec&.summary
      { Baltix::I18n.default_locale => spec&.summary }.to_os
   else
      {}.to_os
   end
end

#to_osObject



253
254
255
# File 'lib/baltix/source/base.rb', line 253

def to_os
   options.merge(type: type, source_names: source_names)
end

#trees(&block) ⇒ Object



301
302
303
304
305
# File 'lib/baltix/source/base.rb', line 301

def trees &block
   GROUPS.map do |set|
      yield(set, send("#{set}tree"))
   end
end

#typeObject



257
258
259
# File 'lib/baltix/source/base.rb', line 257

def type
   self.class.to_s.split('::').last.downcase
end

#valid?Boolean

questionaries

Returns:

  • (Boolean)


245
246
247
# File 'lib/baltix/source/base.rb', line 245

def valid?
   false
end

#versionObject

version returns version of the source by default it is the daystamp for today, A subslass can redefine the method to return the proper value

source.version #=> “20000101” source.version #=> “2.1.0”



169
170
171
172
173
174
175
# File 'lib/baltix/source/base.rb', line 169

def version
   return @version if @version

   if /-(?<version>[\d\.]+)$/ =~ fullname
      version
   end
end