Class: MxxRu::TargetState

Inherits:
Object
  • Object
show all
Defined in:
lib/mxx_ru/abstract_target.rb

Overview

Target status description.

Constant Summary collapse

ABSENT =

Target is absent or rebuild is required.

0
REBUILT =

Target was rebuilt.

1
EXISTS =

Target exists and up-to-date.

2

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(a_state = ABSENT) ⇒ TargetState

Returns a new instance of TargetState.



50
51
52
# File 'lib/mxx_ru/abstract_target.rb', line 50

def initialize( a_state = ABSENT )
  @state = a_state
end

Instance Attribute Details

#stateObject (readonly)

Returns the value of attribute state.



48
49
50
# File 'lib/mxx_ru/abstract_target.rb', line 48

def state
  @state
end

Class Method Details

.detect(name, depends) ⇒ Object

Detect target status. TargetState object returned.

name

Target name.

depends

Dependencies list. Array of String.



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
# File 'lib/mxx_ru/abstract_target.rb', line 59

def TargetState.detect( name, depends )

  state = ABSENT

  # In dry-run mode we always return that target is absent.
  if !MxxRu::Util::Mode.instance.is_dry_run
    if FileTest.exist?( name )
      # It's necessary to detect time of target and it's dependencies.
      target_mtime = File.mtime( name )
      if nil != depends.find { |d|
          if !FileTest.exist?( d )
            raise MxxRu::MissingDependFileEx.new( d, name )
          end
          depend_mtime = File.mtime( d )
          target_mtime < depend_mtime
        }
        # More young dependency found.
        state = REBUILT
      else
        # Target is up-to-date.
        state = EXISTS
      end
    end
  end

  return TargetState.new( state )
end

.make_absentObject

Creates and returns objects of state ABSENT

Since v.1.4.4



110
111
112
# File 'lib/mxx_ru/abstract_target.rb', line 110

def TargetState.make_absent
  TargetState.new( ABSENT )
end

.rebuilding_needed?(*statuses) ⇒ Boolean

Checks collection of statuses.

Returns true if at least one of statuses have value REBUILT or ABSENT.

Typical usage is:

subprojects_status = build_subprojects
self_files_status = build_self_files

if TargetState.rebuilding_needed?(
    subprojects_status, self_files_status )
  do_rebuild
end

Since v.1.4.4

Returns:

  • (Boolean)


102
103
104
# File 'lib/mxx_ru/abstract_target.rb', line 102

def TargetState.rebuilding_needed?( *statuses )
  nil != statuses.find { |s| EXISTS != s.state }
end