Class: AssetsVersion

Inherits:
OpenStruct
  • Object
show all
Defined in:
lib/thunder_punch/recipes/asset_pipeline/assets_version.rb

Constant Summary collapse

REVISIONS_FILE =

ensure this file is symlinked to your Capistrano shared folder and is kept between deployments

"config/assets_version.yml"
ASSETS_DEPENDENCIES =
{
  'gemfile_lock' => 'Gemfile.lock',
  'assets_dir'   => 'app/assets',
  'vendor_dir'   => 'vendor',
}

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.currentObject



30
31
32
33
34
35
36
37
38
# File 'lib/thunder_punch/recipes/asset_pipeline/assets_version.rb', line 30

def self.current
  revisions = {}

  ASSETS_DEPENDENCIES.each do |key, file|
    revisions[key] = git_revision_for(file)
  end

  AssetsVersion.new(revisions)
end

.git_revision_for(file) ⇒ Object



46
47
48
49
50
# File 'lib/thunder_punch/recipes/asset_pipeline/assets_version.rb', line 46

def self.git_revision_for(file)
  rev = `git log -n 1 --format="%H" #{file}`

  $CHILD_STATUS.success? ? rev.strip : nil
end

.last_versionObject



25
26
27
28
# File 'lib/thunder_punch/recipes/asset_pipeline/assets_version.rb', line 25

def self.last_version
  revisions = load_revisions_from_yaml_file
  AssetsVersion.new(revisions)
end

.load_revisions_from_yaml_fileObject



40
41
42
43
44
# File 'lib/thunder_punch/recipes/asset_pipeline/assets_version.rb', line 40

def self.load_revisions_from_yaml_file
  YAML.load_file(REVISIONS_FILE)
rescue
  Hash.new
end

.needs_precompile?Boolean

Returns:

  • (Boolean)


18
19
20
21
22
23
# File 'lib/thunder_punch/recipes/asset_pipeline/assets_version.rb', line 18

def self.needs_precompile?
  @last    = last_version
  @current = current

  @last.incomplete? || @current.incomplete? || @current != @last
end

Instance Method Details

#incomplete?Boolean

Returns:

  • (Boolean)


56
57
58
59
# File 'lib/thunder_punch/recipes/asset_pipeline/assets_version.rb', line 56

def incomplete?
  revisions = ASSETS_DEPENDENCIES.keys.collect { |k| send(k) }
  revisions.any?(&:nil?) || revisions.any?(&:empty?)
end

#save_to_yamlObject



52
53
54
# File 'lib/thunder_punch/recipes/asset_pipeline/assets_version.rb', line 52

def save_to_yaml
  File.open(REVISIONS_FILE, "w") { |f| f.write(to_json) }
end

#to_jsonObject



61
62
63
# File 'lib/thunder_punch/recipes/asset_pipeline/assets_version.rb', line 61

def to_json
  YAML.to_json(marshal_dump)
end