Class: Squared::Workspace::Project::Base
- Inherits:
-
Object
- Object
- Squared::Workspace::Project::Base
- Extended by:
- Rake::DSL, Common::Task
- Includes:
- Rake::DSL, Shell, Common, System, Task
- Defined in:
- lib/squared/workspace/project/base.rb
Direct Known Subclasses
Constant Summary collapse
- SEM_VER =
/^(\d+)(\.)(\d+)(?:(\.)(\d+))?$/.freeze
- @@print_order =
0
- @@tasks =
{}
Instance Attribute Summary collapse
-
#group ⇒ Object
readonly
Returns the value of attribute group.
-
#log ⇒ Object
readonly
Returns the value of attribute log.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#path ⇒ Object
readonly
Returns the value of attribute path.
-
#project ⇒ Object
readonly
Returns the value of attribute project.
-
#theme ⇒ Object
readonly
Returns the value of attribute theme.
-
#warning ⇒ Object
Returns the value of attribute warning.
-
#workspace ⇒ Object
readonly
Returns the value of attribute workspace.
Class Method Summary collapse
Instance Method Summary collapse
- #base_path(*args) ⇒ Object
- #build(*args, sync: true) ⇒ Object
- #build? ⇒ Boolean
- #clean ⇒ Object
- #clean? ⇒ Boolean
- #copy ⇒ Object
- #copy? ⇒ Boolean
- #depend ⇒ Object
- #depend? ⇒ Boolean
- #doc ⇒ Object
- #doc? ⇒ Boolean
- #enabled? ⇒ Boolean
- #has?(method) ⇒ Boolean
-
#initialize(name, path, workspace, group: nil, log: nil, common: true, **kwargs) ⇒ Base
constructor
A new instance of Base.
- #initialize_build(ref, **kwargs) ⇒ Object
- #initialize_script(ref) ⇒ Object
- #inspect ⇒ Object
- #populate ⇒ Object
- #refresh ⇒ Object
- #refresh? ⇒ Boolean
- #test ⇒ Object
- #test? ⇒ Boolean
- #to_s ⇒ Object
- #to_sym ⇒ Object
Constructor Details
#initialize(name, path, workspace, group: nil, log: nil, common: true, **kwargs) ⇒ Base
Returns a new instance of Base.
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/squared/workspace/project/base.rb', line 52 def initialize(name, path, workspace, *, group: nil, log: nil, common: true, **kwargs) @name = name.to_s @path = workspace.root_path(path.to_s) @project = @path.basename.to_s @workspace = workspace @group = group&.to_s @depend = kwargs[:depend] @doc = kwargs[:doc] @test = kwargs[:test] @output = [kwargs[:run], nil] @copy = kwargs[:copy] @clean = kwargs[:clean] @warning = workspace.warning @theme = if !workspace.verbose {} elsif common workspace.theme else __get__(:theme)[:project][to_sym] ||= {} end log = { file: log } unless log.is_a?(::Hash) if (logfile = env('LOG_FILE')).nil? && (auto = env('LOG_AUTO')) logfile = case auto when 'y', 'year' "#{@name}-#{Date.today.year}.log" when 'm', 'month' "#{@name}-#{Date.today.strftime('%Y-%m')}.log" when 'd', 'day', '1' "#{@name}-#{Date.today}.log" end end if logfile ||= log[:file] logfile = Date.today.strftime(logfile) logfile = (dir = env('LOG_DIR')) ? Pathname.new(dir).join(logfile) : Pathname.new(logfile) begin logfile.realdirpath rescue StandardError => e logfile = nil warn e if @warning end end @log = Logger.new(logfile, progname: @name, level: env('LOG_LEVEL') || log[:level] || Logger::INFO) end |
Instance Attribute Details
#group ⇒ Object (readonly)
Returns the value of attribute group.
49 50 51 |
# File 'lib/squared/workspace/project/base.rb', line 49 def group @group end |
#log ⇒ Object (readonly)
Returns the value of attribute log.
49 50 51 |
# File 'lib/squared/workspace/project/base.rb', line 49 def log @log end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
49 50 51 |
# File 'lib/squared/workspace/project/base.rb', line 49 def name @name end |
#path ⇒ Object (readonly)
Returns the value of attribute path.
49 50 51 |
# File 'lib/squared/workspace/project/base.rb', line 49 def path @path end |
#project ⇒ Object (readonly)
Returns the value of attribute project.
49 50 51 |
# File 'lib/squared/workspace/project/base.rb', line 49 def project @project end |
#theme ⇒ Object (readonly)
Returns the value of attribute theme.
49 50 51 |
# File 'lib/squared/workspace/project/base.rb', line 49 def theme @theme end |
#warning ⇒ Object
Returns the value of attribute warning.
50 51 52 |
# File 'lib/squared/workspace/project/base.rb', line 50 def warning @warning end |
#workspace ⇒ Object (readonly)
Returns the value of attribute workspace.
49 50 51 |
# File 'lib/squared/workspace/project/base.rb', line 49 def workspace @workspace end |
Class Method Details
.as_path(val) ⇒ Object
28 29 30 31 32 33 34 35 |
# File 'lib/squared/workspace/project/base.rb', line 28 def as_path(val) case val when ::Pathname val when ::String Pathname.new(val) end end |
.populate ⇒ Object
22 |
# File 'lib/squared/workspace/project/base.rb', line 22 def populate(*); end |
.tasks ⇒ Object
24 25 26 |
# File 'lib/squared/workspace/project/base.rb', line 24 def tasks [].freeze end |
.to_s ⇒ Object
37 38 39 |
# File 'lib/squared/workspace/project/base.rb', line 37 def to_s super.to_s.match(/[^:]+$/)[0] end |
.to_sym ⇒ Object
41 42 43 |
# File 'lib/squared/workspace/project/base.rb', line 41 def to_sym to_s.downcase.to_sym end |
Instance Method Details
#base_path(*args) ⇒ Object
215 216 217 |
# File 'lib/squared/workspace/project/base.rb', line 215 def base_path(*args) path.join(*args) end |
#build(*args, sync: true) ⇒ Object
136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
# File 'lib/squared/workspace/project/base.rb', line 136 def build(*args, sync: true) if args.empty? cmd, opts = @output opts &&= shell_escape(opts) else cmd = args.shift opts = sanitize_args(*args) end if cmd if opts cmd = "#{cmd} #{opts}" elsif cmd.is_a?(::Array) cmd = cmd.join(' && ') end = verbose? else return unless respond_to?(:compose) cmd = compose(opts) = env('REPO_BUILD') == 'verbose' end run(cmd, exception: workspace.exception, banner: , sync: sync) end |
#build? ⇒ Boolean
239 240 241 |
# File 'lib/squared/workspace/project/base.rb', line 239 def build? !!@output[0] end |
#clean ⇒ Object
186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 |
# File 'lib/squared/workspace/project/base.rb', line 186 def clean return unless @clean if @clean.is_a?(::String) run_s(@clean, sync: invoked_sync?('clean')) else @clean.each do |val| val = val.to_s if val =~ %r{[\\/]$} dir = Pathname.new(val) dir = base_path(dir) unless dir.absolute? next unless dir.directory? log.warn "rm -rf #{dir}" dir.rmtree(verbose: true) else files = val.include?('*') ? Dir[base_path(val)] : [base_path(val)] files.each do |file| begin File.delete(file) if File.file?(file) rescue StandardError => e log.error e end end end end end end |
#clean? ⇒ Boolean
263 264 265 |
# File 'lib/squared/workspace/project/base.rb', line 263 def clean? !!@clean end |
#copy ⇒ Object
174 175 176 |
# File 'lib/squared/workspace/project/base.rb', line 174 def copy(*) run_s(@copy, sync: invoked_sync?('copy')) end |
#copy? ⇒ Boolean
259 260 261 |
# File 'lib/squared/workspace/project/base.rb', line 259 def copy? @copy.is_a?(::String) end |
#depend ⇒ Object
170 171 172 |
# File 'lib/squared/workspace/project/base.rb', line 170 def depend(*) run(@depend, exception: workspace.exception, sync: invoked_sync?('depend')) if @depend end |
#depend? ⇒ Boolean
247 248 249 |
# File 'lib/squared/workspace/project/base.rb', line 247 def depend? !!@depend end |
#doc ⇒ Object
178 179 180 |
# File 'lib/squared/workspace/project/base.rb', line 178 def doc build(@doc, sync: invoked_sync?('doc')) if @doc end |
#doc? ⇒ Boolean
251 252 253 |
# File 'lib/squared/workspace/project/base.rb', line 251 def doc? !!@doc end |
#enabled? ⇒ Boolean
231 232 233 |
# File 'lib/squared/workspace/project/base.rb', line 231 def enabled? path.directory? && !path.empty? end |
#has?(method) ⇒ Boolean
235 236 237 |
# File 'lib/squared/workspace/project/base.rb', line 235 def has?(method) respond_to?(m = :"#{method}?") && __send__(m) end |
#initialize_build(ref, **kwargs) ⇒ Object
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/squared/workspace/project/base.rb', line 96 def initialize_build(ref, **kwargs) initialize_script(ref) if (val = env('BUILD', strict: true)) @output[0] = val elsif @script && @output[0] != false @output[0] ||= @script[:run] end @dev = kwargs.delete(:dev) if env('BUILD', suffix: 'DEV', equals: '0') @dev = false elsif env('BUILD', suffix: 'DEV') @dev = true elsif @dev.nil? @dev = workspace.dev? end end |
#initialize_script(ref) ⇒ Object
113 114 115 116 117 118 119 120 121 |
# File 'lib/squared/workspace/project/base.rb', line 113 def initialize_script(ref) return unless (script = workspace.script(group: group, ref: ref)) @depend = script[:depend] if @depend.nil? @doc = script[:doc] if @doc.nil? @test = script[:test] if @test.nil? @clean = script[:clean] if @clean.nil? @script = script end |
#inspect ⇒ Object
219 220 221 |
# File 'lib/squared/workspace/project/base.rb', line 219 def inspect "#<#{self.class}: #{name} => #{self}>" end |
#populate ⇒ Object
123 124 125 126 127 128 129 130 131 132 133 134 |
# File 'lib/squared/workspace/project/base.rb', line 123 def populate(*) namespace name do workspace.series.each_key do |key| next unless Application::WORKSPACE_KEYS.include?(key) ? has?(key) : workspace.task_include?(self, key) desc (name, key) task key do __send__(key) end end end end |
#refresh ⇒ Object
160 161 162 163 164 165 166 167 168 |
# File 'lib/squared/workspace/project/base.rb', line 160 def refresh(*) build(sync: invoked_sync?('depend')) key = "#{name}:copy" if workspace.task_defined?(key) invoke key else copy end end |
#refresh? ⇒ Boolean
243 244 245 |
# File 'lib/squared/workspace/project/base.rb', line 243 def refresh? build? && (copy? || workspace.task_defined?("#{name}:copy")) end |
#test ⇒ Object
182 183 184 |
# File 'lib/squared/workspace/project/base.rb', line 182 def test build(@test, sync: invoked_sync?('test')) if @test end |
#test? ⇒ Boolean
255 256 257 |
# File 'lib/squared/workspace/project/base.rb', line 255 def test? !!@test end |
#to_s ⇒ Object
223 224 225 |
# File 'lib/squared/workspace/project/base.rb', line 223 def to_s path.to_s end |
#to_sym ⇒ Object
227 228 229 |
# File 'lib/squared/workspace/project/base.rb', line 227 def to_sym name.to_sym end |