diff options
author | Samuel Giddins <segiddins@segiddins.me> | 2016-06-19 16:30:12 -0400 |
---|---|---|
committer | Samuel Giddins <segiddins@segiddins.me> | 2016-06-19 20:31:53 -0500 |
commit | 5747ccb1225f85f48e72e05caf0426cf6383ce76 (patch) | |
tree | 545e6e8616ccb4ddab4d8daa561917cbb7a6200c | |
parent | e45c11f34b350ac74d661b03927e8345c2f7da4c (diff) | |
download | bundler-seg-definition-to-ruby.tar.gz |
[Definition] Add #to_rubyseg-definition-to-ruby
-rw-r--r-- | lib/bundler/definition.rb | 30 | ||||
-rw-r--r-- | lib/bundler/dependency.rb | 14 | ||||
-rw-r--r-- | lib/bundler/dsl.rb | 4 |
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) |