summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Giddins <segiddins@segiddins.me>2016-06-19 16:30:12 -0400
committerSamuel Giddins <segiddins@segiddins.me>2016-06-19 20:31:53 -0500
commit5747ccb1225f85f48e72e05caf0426cf6383ce76 (patch)
tree545e6e8616ccb4ddab4d8daa561917cbb7a6200c
parente45c11f34b350ac74d661b03927e8345c2f7da4c (diff)
downloadbundler-seg-definition-to-ruby.tar.gz
[Definition] Add #to_rubyseg-definition-to-ruby
-rw-r--r--lib/bundler/definition.rb30
-rw-r--r--lib/bundler/dependency.rb14
-rw-r--r--lib/bundler/dsl.rb4
3 files changed, 47 insertions, 1 deletions
diff --git a/lib/bundler/definition.rb b/lib/bundler/definition.rb
index d4af6b70e7..34ac2c9028 100644
--- a/lib/bundler/definition.rb
+++ b/lib/bundler/definition.rb
@@ -25,6 +25,36 @@ module Bundler
Dsl.evaluate(gemfile, lockfile, unlock)
end
+ def to_ruby
+ rubify = proc do |obj|
+ case obj
+ when RubyVersion
+ "ruby #{rubify.call(obj.versions)}"
+ when Array
+ obj.map(&rubify).join(", ")
+ when Hash
+ "{ #{obj.map {|k, v| "#{rubify.call(k)} => #{rubify.call(v)}" }.join(", ")} }"
+ when NilClass, Symbol, TrueClass, FalseClass
+ obj.inspect
+ when Dependency
+ reqs = rubify.call(obj.requirement)
+ "gem #{rubify.call(obj.name)}#{",\n #{reqs}" unless reqs.empty?},\n #{rubify.call(obj.options)}".strip
+ when SourceList
+ obj.rubygems_primary_remotes.map {|r| "source #{rubify.call(r)}" }.join("\n")
+ else
+ "#{obj.to_s.dump}.freeze"
+ end
+ end
+ String.new.tap do |gemfile|
+ gemfile << rubify.call(@ruby_version) << "\n" if @ruby_version
+ gemfile << rubify.call(sources) << "\n"
+ gemfile << "group " << rubify.call(@optional_groups) << ", :optional => true" << "\n" unless Array(@optional_groups).empty?
+ dependencies.sort_by {|d| [d.name, d.groups] }.each do |dep|
+ gemfile << rubify.call(dep) << "\n"
+ end
+ end.gsub(/[\n]{2,}/, "\n").gsub(/[^\s][ ]{2,}/, " ").strip << "\n"
+ end
+
#
# How does the new system work?
#
diff --git a/lib/bundler/dependency.rb b/lib/bundler/dependency.rb
index 1b1808b40a..c3e2ae58f2 100644
--- a/lib/bundler/dependency.rb
+++ b/lib/bundler/dependency.rb
@@ -78,6 +78,20 @@ module Bundler
@autorequire = Array(options["require"] || []) if options.key?("require")
end
+ def options
+ options = {
+ "type" => type != :runtime && type || nil,
+ "group" => @groups != [:default] && @groups || nil,
+ "platforms" => @platforms,
+ "env" => @env,
+ "require" => @autorequire,
+ "install_if" => @should_include,
+ }
+ options.merge!(source.options) if source
+ options["source"] = options.delete("remote")
+ options.reject {|k, v| !Dsl::VALID_KEYS.include?(k) || Array(v).empty? }
+ end
+
def gem_platforms(valid_platforms)
return valid_platforms if @platforms.empty?
diff --git a/lib/bundler/dsl.rb b/lib/bundler/dsl.rb
index 4208f9b575..8f2dbffccb 100644
--- a/lib/bundler/dsl.rb
+++ b/lib/bundler/dsl.rb
@@ -280,8 +280,10 @@ module Bundler
opts
end
+ VALID_KEYS = %w(group groups git path glob name branch ref tag require submodules platform platforms type source install_if).freeze
+
def valid_keys
- @valid_keys ||= %w(group groups git path glob name branch ref tag require submodules platform platforms type source install_if)
+ @valid_keys ||= VALID_KEYS
end
def normalize_options(name, version, opts)