bundle-only 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7afc8f4790942fb3e5c9742928bb24b0533716c3
4
+ data.tar.gz: 4e10ca5ad02c7e763c51ef3f932738290d686096
5
+ SHA512:
6
+ metadata.gz: b999d9f5358514ef0fcff0f996718e6fba4d7874865e7e30400a3dce76e76da46a90ccbd17d1da5a75da9e4957361d1e605c15cf9a0d8eec462cfc60d428e061
7
+ data.tar.gz: f7eab42d78b83344206108b78cf3b24a770849c33af9840bc52a2c9793e69648916bd06d96c5ee4bd2442cd1ff9e47261fc2f0059e3e29c74aab91fbf2ea5af3
@@ -0,0 +1,9 @@
1
+ root = true
2
+
3
+ [*]
4
+ indent_style = space
5
+ indent_size = 2
6
+ end_of_line = lf
7
+ charset = utf-8
8
+ trim_trailing_whitespace = true
9
+ insert_final_newline = true
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
@@ -0,0 +1,9 @@
1
+ inherit_from: .rubocop_todo.yml
2
+ AllCops:
3
+ TargetRubyVersion: 2.3
4
+ Metrics/LineLength:
5
+ Enabled: false
6
+ Style/FileName:
7
+ Enabled: false
8
+ Style/Documentation:
9
+ Enabled: false
@@ -0,0 +1,14 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config`
3
+ # on 2016-01-23 23:34:56 +0300 using RuboCop version 0.36.0.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
8
+
9
+ # Offense count: 1
10
+ Style/Documentation:
11
+ Exclude:
12
+ - 'spec/**/*'
13
+ - 'test/**/*'
14
+ - 'exe/bundle-only'
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
@@ -0,0 +1,94 @@
1
+ # bundle-only
2
+
3
+ This gem provides a `bundle-only` command that installs a set of gems listed in specified `Gemfile` group.
4
+ Gems are always installed into the system and `Gemfile.lock` is never updated by this command. Though, `Gemfile.lock` is taken into account.
5
+
6
+ Just call `bundle-only mygroup` and all gems from `group :mygroup` at your `Gemfile` will be installed.
7
+
8
+ ### How it works
9
+
10
+ This command is designed to be used instead of calling `bundle install --without default development another_group all_not_needed_groups_here` and cleaning `.bundle/config` afterwards (because bundler's `--without` is a *remembered option*).
11
+
12
+ `bundle-only` is easy to use, does not pollute you bundler configs or augment `Gemfile.lock`, while allowing you to keep all your dependencies versioned in one place.
13
+
14
+ ## Usage
15
+
16
+ You can install any group from your `Gemfile`:
17
+
18
+ ```ruby
19
+ group :development do
20
+ ...
21
+ end
22
+
23
+ # You can create a separate group
24
+ group :special do
25
+ gem 'rubocop'
26
+ end
27
+ ```
28
+
29
+ $ bundle-only special
30
+ Fetching gem metadata from https://rubygems.org/...........
31
+ Fetching version metadata from https://rubygems.org/..
32
+ Resolving dependencies...
33
+ Using ast 2.2.0
34
+ Using bundler 1.11.2
35
+ Using powerpack 0.1.1
36
+ Using rainbow 2.0.0
37
+ Using ruby-progressbar 1.7.5
38
+ Using parser 2.3.0.1
39
+ Using rubocop 0.36.0
40
+ Bundle complete! 5 Gemfile dependencies, 7 gems now installed.
41
+ Gems in the groups default and development were not installed.
42
+
43
+ Other example:
44
+
45
+ ```ruby
46
+ group :development do
47
+ ...
48
+ end
49
+
50
+ # It will also work if gem is included in multiple groups
51
+ group :test, :special do
52
+ gem 'rubocop'
53
+ end
54
+
55
+ group :test do
56
+ ...
57
+ end
58
+ ```
59
+
60
+ $ bundle-only special
61
+ Fetching gem metadata from https://rubygems.org/...........
62
+ Fetching version metadata from https://rubygems.org/..
63
+ Resolving dependencies...
64
+ Using ast 2.2.0
65
+ Using bundler 1.11.2
66
+ Using powerpack 0.1.1
67
+ Using rainbow 2.0.0
68
+ Using ruby-progressbar 1.7.5
69
+ Using parser 2.3.0.1
70
+ Using rubocop 0.36.0
71
+ Bundle complete! 5 Gemfile dependencies, 7 gems now installed.
72
+ Gems in the groups default, development and test were not installed.
73
+
74
+ Notice `test` group is not installed here, but `special` group gems are still installed. You can't have that with bundler's `--with` option and optional groups.
75
+
76
+ ## Installation
77
+
78
+ Add this line to your application's Gemfile:
79
+
80
+ ```ruby
81
+ gem 'bundle-only'
82
+ ```
83
+
84
+ And then execute:
85
+
86
+ $ bundle
87
+
88
+ Or install it yourself as:
89
+
90
+ $ gem install bundle-only
91
+
92
+ ## Contributing
93
+
94
+ Bug reports and pull requests are welcome on GitHub at https://github.com/MOZGIII/bundle-only.
@@ -0,0 +1,2 @@
1
+ require 'bundler/gem_tasks'
2
+ task default: :spec
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'bundle-only/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'bundle-only'
8
+ spec.version = BundleOnly::VERSION
9
+ spec.authors = ['MOZGIII']
10
+ spec.email = ['mike-n@narod.ru']
11
+
12
+ spec.summary = 'Install gems from a specific Gemfile group.'
13
+ spec.description = <<-DESCRIPTION.gsub(/\A\s+/, '')
14
+ This gem provides a bundle-only command that installs a set of gems listed
15
+ in specified Gemfile group.
16
+ Gems are always installed into the system and never update Gemfile.lock.
17
+ DESCRIPTION
18
+ spec.homepage = 'https://github.com/MOZGIII/bundle-only'
19
+
20
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
21
+ spec.bindir = 'exe'
22
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
+ spec.require_paths = ['lib']
24
+
25
+ spec.add_runtime_dependency 'bundler', '~> 1.11'
26
+ spec.add_development_dependency 'rake', '~> 10.0'
27
+ spec.add_development_dependency 'rubocop', '>= 0.36.0'
28
+ end
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundle-only/messages'
4
+
5
+ install_only = ARGV.to_a.map(&:to_sym)
6
+
7
+ if install_only.empty?
8
+ name = File.basename($PROGRAM_NAME)
9
+ STDERR.puts "Usage: #{name} group [group [...]]"
10
+ exit 2
11
+ end
12
+
13
+ ENV['BUNDLE_IGNORE_CONFIG'] = 'true'
14
+ require 'bundler'
15
+
16
+ Bundler.configure
17
+
18
+ gemfile = Pathname.new(Bundler.default_gemfile).expand_path
19
+ builder = Bundler::Dsl.new
20
+ builder.eval_gemfile(gemfile)
21
+
22
+ all_groups = builder.dependencies.map(&:groups).flatten.uniq
23
+ groups_to_skip = all_groups - install_only
24
+ Bundler.settings.without = groups_to_skip
25
+ Bundler.settings.with = install_only
26
+
27
+ definition = builder.to_definition(Bundler.default_lockfile, {})
28
+ def definition.lock(*); end # never lock or preserve options
29
+ definition.validate_ruby!
30
+
31
+ Bundler.ui = Bundler::UI::Shell.new
32
+
33
+ Bundler::Installer.install(Bundler.root, definition, system: true)
34
+
35
+ BundleOnly::Messages.print_installation_complete(definition)
36
+ BundleOnly::Messages.confirm_without_groups
37
+
38
+ Bundler::Installer.post_install_messages.each do |name, message|
39
+ BundleOnly::Messages.print_post_install_message(name, message)
40
+ end
@@ -0,0 +1 @@
1
+ require 'bundle-only/version'
@@ -0,0 +1,36 @@
1
+ module BundleOnly
2
+ module Messages
3
+ module_function
4
+
5
+ def without_groups_message(groups)
6
+ group_list = [groups[0...-1].join(', '), groups[-1..-1]]
7
+ .reject { |s| s.to_s.empty? }.join(' and ')
8
+ group_str = (groups.size == 1) ? 'group' : 'groups'
9
+ "Gems in the #{group_str} #{group_list} were not installed."
10
+ end
11
+
12
+ def confirm_without_groups
13
+ groups = Bundler.settings.without
14
+ Bundler.ui.confirm without_groups_message(groups) if groups.any?
15
+ end
16
+
17
+ def dependencies_count_for(definition)
18
+ count = definition.dependencies.count
19
+ "#{count} Gemfile #{count == 1 ? 'dependency' : 'dependencies'}"
20
+ end
21
+
22
+ def gems_installed_for(definition)
23
+ count = definition.specs.count
24
+ "#{count} #{count == 1 ? 'gem' : 'gems'} now installed"
25
+ end
26
+
27
+ def print_post_install_message(name, msg)
28
+ Bundler.ui.confirm "Post-install message from #{name}:"
29
+ Bundler.ui.info msg
30
+ end
31
+
32
+ def print_installation_complete(definition)
33
+ Bundler.ui.confirm "Bundle complete! #{dependencies_count_for(definition)}, #{gems_installed_for(definition)}."
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BundleOnly
4
+ VERSION = '0.1.0'.freeze
5
+ end
metadata ADDED
@@ -0,0 +1,101 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bundle-only
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - MOZGIII
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-01-23 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.11'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.11'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rubocop
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 0.36.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 0.36.0
55
+ description: |
56
+ This gem provides a bundle-only command that installs a set of gems listed
57
+ in specified Gemfile group.
58
+ Gems are always installed into the system and never update Gemfile.lock.
59
+ email:
60
+ - mike-n@narod.ru
61
+ executables:
62
+ - bundle-only
63
+ extensions: []
64
+ extra_rdoc_files: []
65
+ files:
66
+ - ".editorconfig"
67
+ - ".gitignore"
68
+ - ".rubocop.yml"
69
+ - ".rubocop_todo.yml"
70
+ - Gemfile
71
+ - README.md
72
+ - Rakefile
73
+ - bundle-only.gemspec
74
+ - exe/bundle-only
75
+ - lib/bundle-only.rb
76
+ - lib/bundle-only/messages.rb
77
+ - lib/bundle-only/version.rb
78
+ homepage: https://github.com/MOZGIII/bundle-only
79
+ licenses: []
80
+ metadata: {}
81
+ post_install_message:
82
+ rdoc_options: []
83
+ require_paths:
84
+ - lib
85
+ required_ruby_version: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ required_rubygems_version: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ requirements: []
96
+ rubyforge_project:
97
+ rubygems_version: 2.5.1
98
+ signing_key:
99
+ specification_version: 4
100
+ summary: Install gems from a specific Gemfile group.
101
+ test_files: []