Skip to content

Commit

Permalink
Make it possible to force an exact version from package.json
Browse files Browse the repository at this point in the history
  • Loading branch information
Otto Vehvilainen committed Oct 7, 2015
1 parent 55858f8 commit 3546113
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 5 deletions.
16 changes: 13 additions & 3 deletions lib/capistrano-node.rb
Expand Up @@ -29,14 +29,24 @@ def choose_version(requirement, versions = [])
end
end

# Internal: Parse requirement from package.json
# Internal: Parse requirement from `file`
#
# file - package.json file object
#
# Returns Gem::Requirement
def requirement(file)
json = JSON.parse(File.open('package.json', 'r:utf-8').read)
Gem::Requirement.create(json['engines']['node'])
Gem::Requirement.create(raw_requirement(file))
end

def exact_requirement(file)
requirement = raw_requirement(file)
raise "No exact node version specified" unless Gem::Requirement.create(requirement).exact?
requirement
end

def raw_requirement(file)
json = JSON.parse(File.open(file, 'r:utf-8').read)
json['engines']['node'].strip
end
end
end
9 changes: 7 additions & 2 deletions lib/capistrano/node.rb
Expand Up @@ -27,6 +27,7 @@ def remote_versions(path, prefix)
set :node_dir, '/opt/nodejs/versions' unless defined? node_dir # Node versions dir
set :version_prefix, 'v' unless defined? version_prefix # Prefix for versin dirs, (v0.6.10 -> 'v')
set :npm_flags, '--production --quiet' unless defined? npm_flags
set :force_node_version, false unless defined? force_node_version

# Lazy variable to list available node versions from either local or remote
set :available_node_versions do
Expand All @@ -39,8 +40,12 @@ def remote_versions(path, prefix)

# Export used Node version from package.json
set :node_version do
requirement = Capistrano::Node.requirement 'package.json'
Capistrano::Node.choose_version requirement, available_node_versions
if force_node_version
Capistrano::Node.exact_requirement 'package.json'
else
requirement = Capistrano::Node.requirement 'package.json'
Capistrano::Node.choose_version requirement, available_node_versions
end
end

set :node_version_dir, "#{node_dir}/#{version_prefix}#{node_version}/bin"
Expand Down

0 comments on commit 3546113

Please sign in to comment.