gemfile_interpreter 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e89680ad78bd316ed6e82011cb0ae0b6bfc611fc
4
+ data.tar.gz: 904b2ac93f8f447a870776c0d01042a67779467e
5
+ SHA512:
6
+ metadata.gz: a5a0a2e66e7bc5a924ca1495bdff3525aabfaf5e939e97c690b0cbea4d11577fff3ddaad56cc08e8cb43ffae6dd9d02654c9af8acf2ded2dd3b81fb1a5329e5a
7
+ data.tar.gz: 2525a81548c28b85095309913d6ca31a9288ce0603284bc0aed99e867a518ca05fc329fc0a454e9c1aa611edc722963329cdaedd03ce19741b4785c3e21bbcdd
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in foundation_rails_helper.gemspec
4
+ gemspec
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'gemfile_interpreter'
4
+
5
+ def print_help
6
+ puts "Usage: #{__FILE__} GEMFILE [--json|--yaml]"
7
+ exit 1
8
+ end
9
+
10
+ gemfile = ARGV[0]
11
+ if [nil, '--help', '-h'].include? gemfile
12
+ print_help
13
+ else
14
+ type = ARGV[1]
15
+ GemfileInterpreter.load gemfile
16
+ if type == '--yaml'
17
+ puts GemfileInterpreter.to_yaml
18
+ elsif type.nil? || type == '--json'
19
+ puts GemfileInterpreter.to_json
20
+ else
21
+ print_help
22
+ end
23
+ end
@@ -0,0 +1,18 @@
1
+ require 'bundler'
2
+
3
+ OwnBundler = Bundler.dup
4
+
5
+ module OwnBundler
6
+ class << self
7
+ def setup gemfile
8
+ @default_gemfile = Pathname.new gemfile
9
+ end
10
+
11
+ attr_reader :default_gemfile
12
+
13
+ def default_bundle_dir
14
+ Pathname.new File.join(default_gemfile.directory, '.bundle')
15
+ end
16
+ end
17
+ reset!
18
+ end
@@ -0,0 +1,39 @@
1
+ require 'bundler'
2
+
3
+ module GemfileInterpreter
4
+ module Parser
5
+ class << self
6
+ def parse gems
7
+ hash = {}
8
+ gems.each do |gem|
9
+ hash[gem.name] = parse_gem gem
10
+ end
11
+ hash
12
+ end
13
+
14
+ def parse_gem gem
15
+ hash = {}
16
+ [:version, :full_name, :platform, :remote].map do |method|
17
+ hash[method.to_s] = gem.send(method).to_s
18
+ end
19
+ hash['source'] = parse_source gem.source
20
+ hash
21
+ end
22
+
23
+ def parse_source source
24
+ source_type = if source.is_a? Bundler::Source::Rubygems
25
+ # normal rubygems.org
26
+ 'rubygems'
27
+ elsif source.is_a? Bundler::Source::Git
28
+ # git
29
+ 'git'
30
+ elsif source.is_a? Bundler::Source::Path
31
+ raise NotImplementedError, "A gem from a local path is currently not supported"
32
+ else
33
+ raise "unknown type #{source.inspect}"
34
+ end
35
+ {'type' => source_type}.merge(source.options)
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,3 @@
1
+ module GemfileInterpreter
2
+ VERSION = '0.0.1'
3
+ end
@@ -0,0 +1,43 @@
1
+ require 'gemfile_interpreter/version'
2
+ require 'gemfile_interpreter/parser'
3
+ require 'gemfile_interpreter/own_bundler'
4
+ require 'json'
5
+ require 'yaml'
6
+
7
+ module GemfileInterpreter
8
+ class << self
9
+ def load gemfile
10
+ @gemfile = gemfile
11
+ raise 'The parameter gemfile may not be empty' if gemfile.nil? || gemfile.empty?
12
+ ensure_file_exists! @gemfile
13
+ ensure_file_exists! "#{@gemfile}.lock"
14
+ @parsed = nil
15
+ OwnBundler.setup @gemfile
16
+ @bundler_runtime = OwnBundler.load
17
+ true
18
+ end
19
+
20
+ def bundler_runtime
21
+ raise "first use #load before #bundler_runtime" unless @bundler_runtime
22
+ @bundler_runtime
23
+ end
24
+
25
+ def parsed
26
+ @parsed = Parser.parse bundler_runtime.gems
27
+ end
28
+
29
+ def to_json
30
+ parsed.to_json
31
+ end
32
+
33
+ def to_yaml
34
+ parsed.to_yaml
35
+ end
36
+
37
+ private
38
+
39
+ def ensure_file_exists! filename
40
+ raise IOError, "File #{filename.inspect} not found" unless File.exists? filename
41
+ end
42
+ end
43
+ end
metadata ADDED
@@ -0,0 +1,64 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gemfile_interpreter
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Nicolas Ganz
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-02-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
27
+ description: A tool to interpret the Gemfile without installing it
28
+ email: nicolas@kelte.ch
29
+ executables:
30
+ - gemfile_interpreter
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - Gemfile
35
+ - bin/gemfile_interpreter
36
+ - lib/gemfile_interpreter.rb
37
+ - lib/gemfile_interpreter/own_bundler.rb
38
+ - lib/gemfile_interpreter/parser.rb
39
+ - lib/gemfile_interpreter/version.rb
40
+ homepage: https://github.com/ThunderKey/gemfile_interpreter
41
+ licenses:
42
+ - MIT
43
+ metadata: {}
44
+ post_install_message:
45
+ rdoc_options: []
46
+ require_paths:
47
+ - lib
48
+ required_ruby_version: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ required_rubygems_version: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
58
+ requirements: []
59
+ rubyforge_project:
60
+ rubygems_version: 2.6.8
61
+ signing_key:
62
+ specification_version: 4
63
+ summary: Gemfile Interpreter
64
+ test_files: []