Class: Prick::AbstractRelease

Inherits:
Build
  • Object
show all
Defined in:
lib/prick/build.rb

Direct Known Subclasses

MigrationRelease, Prerelease, Release

Instance Attribute Summary collapse

Attributes inherited from Build

#database, #migration, #project, #schema, #version

Instance Method Summary collapse

Methods inherited from Build

#active?, #base_release, #build, #built?, #checkback, #checkout, deref_node_file, #destroy, #exist?, #features, #history, #include_feature, #name, #present?, #rebuild, #remove_feature, #snapshot, #to_s

Methods included from Ensure

#ensure_state, #ensure_state_value, #revoke_state

Constructor Details

#initialize(project, base_release, version, migration, **opts) ⇒ AbstractRelease

Returns a new instance of AbstractRelease.



179
180
181
182
183
# File 'lib/prick/build.rb', line 179

def initialize(project, base_release, version, migration, **opts)
  super
  @node = File.join(RELEASE_DIR, name)
  @archive = DumpFile.new(project, version.to_s)
end

Instance Attribute Details

#archiveObject (readonly)

Cache object



169
170
171
# File 'lib/prick/build.rb', line 169

def archive
  @archive
end

#nodeObject (readonly)

Redefine Build#node



172
173
174
# File 'lib/prick/build.rb', line 172

def node
  @node
end

Instance Method Details

#<=>(other) ⇒ Object



198
# File 'lib/prick/build.rb', line 198

def <=>(other) version <=> other.version end

#cacheObject



186
# File 'lib/prick/build.rb', line 186

def cache() database.save(archive.path) end

#cached?Boolean

Returns:

  • (Boolean)


185
# File 'lib/prick/build.rb', line 185

def cached?() archive.exist? end

#create(create_release_link_file: true) ⇒ Object

Create the release in Git and on the disk



201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
# File 'lib/prick/build.rb', line 201

def create(create_release_link_file: true)
  super()

  # Create release link file (eg. releases/0.1.0)
  if create_release_link_file
    base_release_dir = (version.zero? ? "/dev/null" : "../#{migration.path}")
    Dir.chdir(RELEASE_DIR) { 
      FileUtils.ln_s(base_release_dir, File.basename(node))
    }
    Git.add(node)
  end

  # Set schema version
  project.schema.version = version
  Git.add(project.schema.path)
end

#dumpObject



218
219
220
221
222
223
224
225
226
227
228
# File 'lib/prick/build.rb', line 218

def dump
  return self
  $stderr.puts "#{self.class} #{version}"
  $stderr.indent { |f|
    f.puts "node        : #{node.inspect}"
    f.puts "base_release: #{base_release&.version.inspect}"
    f.puts "migration   : #{migration&.path.inspect}"
    f.puts "release_dir : #{release_dir.inspect}"
  }
  self
end

#loadObject



190
# File 'lib/prick/build.rb', line 190

def load() database.ensure(:loaded, archive.file) end

#loaded?Boolean

Returns:

  • (Boolean)


189
# File 'lib/prick/build.rb', line 189

def loaded?() schema.loaded?(database) end

#prepare(commit: true) ⇒ Object



193
194
195
196
# File 'lib/prick/build.rb', line 193

def prepare(commit: true)
  migration.prepare
  Git.commit("Prepared next release") if commit
end

#release_dirObject

The directory representing this release. It is initially empty. It is the same as the next release’s migration directory and contains features that require this release

Raises:



177
# File 'lib/prick/build.rb', line 177

def release_dir() raise AbstractMethod end

#tagObject

Tag



166
# File 'lib/prick/build.rb', line 166

def tag() [version.custom, "v#{version.semver}"].compact.join("-") end

#uncacheObject



187
# File 'lib/prick/build.rb', line 187

def uncache() FileUtils.rm_f(archive.path) end

#unloadObject



191
# File 'lib/prick/build.rb', line 191

def unload() database.ensure(:loaded, expect: false) end