bootinq 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a2e3311d9fe2f906d1d620e0bff5fa4271d6aaf0
4
- data.tar.gz: fa4bc277f3707743b340b53988252f425a6648c0
3
+ metadata.gz: a8647f4b798663b8511a3d2c7a9527b93756b9ca
4
+ data.tar.gz: 35bd6157a95de1bd4df9648896d08939401281cb
5
5
  SHA512:
6
- metadata.gz: d047b517e113b611dbfc62ad58f8f4ac86aa96cd30a4ae7ac9d11a5ac1564911e35307e5d651f01f5401224b8a31e4ae48ef1e38a152f9b8144edc0a99e5414f
7
- data.tar.gz: 4b09c5cff33cfc68c72dffeeea388673e4ab873283a34db963c9e73cbe6b818d3d1c3572253e6a040d00c44c964a38d7595b2a24e12b3a3bce7ba015b9369ebf
6
+ metadata.gz: 8cf0fc21e41449527782916a81a3dfb2749f6e9f91dda590d381a5b5dd15bc31c5d15b6216fdf1cb717424cd83a069b09a3fab213a657a041700ae313fe9a8df
7
+ data.tar.gz: add219d5df6e7a54aae76552de7be7f5509d79fdb51541399f3705f3c0f025de28b19b396374b842e92fd6ae96591bb2284b66acb75ceff8a3b500477d83f748
data/Gemfile CHANGED
@@ -18,6 +18,7 @@ gem 'byebug', group: [:development, :test]
18
18
 
19
19
  group :development, :test do
20
20
  # You need these
21
+ gem "rspec"
21
22
  gem "rspec-rails"
22
23
  gem "pry"
23
24
  end
data/README.md CHANGED
@@ -14,27 +14,122 @@ And then execute:
14
14
 
15
15
  $ bundle
16
16
 
17
- Insert `require "bootinq"` to the top of `config/application.rb` file.
18
17
 
19
- Find a `Bundler.require(*Rails.groups)` line below and replace it with the `Bootinq.require`.
18
+ ## Usage
19
+
20
+ There are few steps to setup partial gem booting in a Rails application using Bootinq:
21
+
22
+ ### 1. Declare loadable parts
23
+
24
+ The environment variable specifies which parts should be loaded using the assigned char keys. If the value is starts with `-`, all parts except the given will be loaded.
25
+
26
+ For example, looking at the configuration below, if we want to load only `api`, we should set `BOOTINQ=a`. If we want to load the all except `frontend` and `admin`, we should set `BOOTINQ=-fz`.
20
27
 
21
- ## Example `config/bootinq.yml`:
28
+ The name of the environment variable can be customized by changing the `env_key:`
22
29
 
23
30
  ```yaml
31
+ # config/bootinq.yml
24
32
  env_key: BOOTINQ
25
33
  default: "-f"
26
34
 
35
+ # Non-mountable parts
27
36
  parts:
28
- s: :shared
37
+ c: :console
29
38
 
39
+ # Mountable parts (engines)
30
40
  mount:
31
41
  a: :api
32
- f: :engine
42
+ f: :frontend
43
+ z: :admin
33
44
  ```
34
45
 
35
- ## Usage
46
+ ### 2. Add gem groups
47
+
48
+ For each app part you should add a gem group named as `#{group_name}_boot`:
49
+
50
+ ```ruby
51
+ # Gemfile
52
+
53
+ gem "api", path: "apps/api", group: :api_boot
54
+ gem "admin", path: "apps/admin", group: :admin_boot
55
+ gem "frontend", path: "apps/frontend", group: :frontend_boot
56
+
57
+ group :console_boot do
58
+ gem 'term-ansicolor', '1.1.5'
59
+ gem 'pry-rails'
60
+ end
61
+ ```
62
+
63
+ ### 3. Change config/application.rb
64
+
65
+ Insert `require "bootinq"` to the top of `config/application.rb` file and replace `Bundler.require(*Rails.groups)` with the `Bootinq.require`:
66
+
67
+ #### Simple
68
+
69
+ ```ruby
70
+ # config/application.rb
71
+
72
+ require File.expand_path('../boot', __FILE__)
73
+ require 'rails/all'
74
+ require 'bootinq'
36
75
 
37
- Using example `bootinq.yml` above, you can create `api_boot` group in your `Gemfile` and load gems from that only when flag `BOOTINQ=a` is set. The group can contain local `api` gem, which provides a mountable engine. Please, see `specs/dummy` for the example.
76
+ # With no additional gem groups:
77
+ Bootinq.require
78
+ # otherwise, set them like in <tt>Bundle.require(*Rails.groups(*groups))</tt>:
79
+ # Bootinq.require(:assets => %w(development test))
80
+
81
+ puts "* Bootinq: loading components #{Bootinq.components * ', '}"
82
+ ```
83
+
84
+ #### Separate load rails components with Bootinq
85
+
86
+ ```ruby
87
+ # config/application.rb
88
+ require File.expand_path('../boot', __FILE__)
89
+
90
+ require "rails"
91
+ # Pick the frameworks you want:
92
+ require "active_model/railtie"
93
+ require "active_record/railtie"
94
+ require "active_job/railtie"
95
+ require "action_mailer/railtie"
96
+ require "rails/test_unit/railtie"
97
+
98
+ Bootinq.require do
99
+ # Load the following components only when the frontend component is enabled
100
+ on :frontend do
101
+ require "sprockets/railtie"
102
+ require "action_controller/railtie"
103
+ require "action_view/railtie"
104
+ end
105
+ end
106
+ ```
107
+
108
+ ### 4. Mount enabled engines in config/routes.rb
109
+
110
+ Use the `Bootinq.each_mountable {}` helper to easily mount currently loaded engines or do it by yourself checking `Bootinq.enabled?(engine_name)` :
111
+
112
+ ```ruby
113
+ # config/routes.rb
114
+ Rails.application.routes.draw do
115
+ Bootinq.each_mountable do |part|
116
+ mount part.engine => '/', as: part.to_sym
117
+ end
118
+
119
+ root 'frontend/pages#index' if Bootinq.enabled?(:frontend)
120
+ end
121
+ ```
122
+
123
+ ### 5. Run app with only wanted parts
124
+
125
+ Now, you can set environment variable to tell workers which part of app it should load.
126
+
127
+ For example, with the [foreman](https://github.com/ddollar/foreman) in `Procfile`:
128
+
129
+ ```
130
+ api: env BOOTINQ=a MAX_THREADS=128 bundle exec puma -w 4
131
+ admin: env BOOTINQ=z bundle exec puma
132
+ ```
38
133
 
39
134
  ## Development
40
135
 
@@ -45,4 +140,3 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
45
140
  ## Contributing
46
141
 
47
142
  Bug reports and pull requests are welcome on GitHub at https://github.com/estum/bootinq.
48
-
data/bootinq.gemspec CHANGED
@@ -12,6 +12,7 @@ Gem::Specification.new do |spec|
12
12
  spec.summary = %q{Rails Boot Inquirer}
13
13
  spec.description = %q{Allows to select which bundle groups to boot in the current rails process}
14
14
  spec.homepage = "https://github.com/estum/bootinq"
15
+ spec.license = "MIT"
15
16
 
16
17
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
18
  spec.bindir = "exe"
@@ -20,5 +21,4 @@ Gem::Specification.new do |spec|
20
21
 
21
22
  spec.add_development_dependency "bundler", "~> 1.10"
22
23
  spec.add_development_dependency "rake", "~> 10.0"
23
- spec.add_development_dependency "rspec"
24
24
  end
@@ -1,3 +1,3 @@
1
1
  class Bootinq
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
data/lib/bootinq.rb CHANGED
@@ -81,17 +81,32 @@ class Bootinq
81
81
  end
82
82
 
83
83
  # Invokes <tt>Rails.groups</tt> method within enabled Bootinq's groups
84
- def groups(*groups)
85
- Rails.groups(*components.map(&:group), *groups)
84
+ def groups(*list)
85
+ Rails.groups(*components.map(&:group), *list)
86
+ end
87
+
88
+ # Yields the given block if any of given components is enabled.
89
+ #
90
+ # ==== Example:
91
+ #
92
+ # Bootinq.on :frontend do
93
+ # # make frontend thing...
94
+ # end
95
+ def on(*names) # :yields:
96
+ if names.any? { |name| enabled?(name) }
97
+ yield
98
+ end
86
99
  end
87
100
 
88
101
  def_delegators "instance", *instance_methods(false)
89
102
 
90
103
  class << self
91
- # The helper method to bootstrap the Bootinq. Sets the BOOTINQ_PATH enviroment variable
92
- # and requires selected bundler groups.
93
- def require(*groups)
104
+ # The helper method to bootstrap the Bootinq.
105
+ # Sets the BOOTINQ_PATH enviroment variable, yields optional block in
106
+ # the own instance's binding and, finally, requires selected bundler groups.
107
+ def require(*groups, &block) # :yields:
94
108
  ENV['BOOTINQ_PATH'] ||= File.expand_path('../bootinq.yml', caller_locations(1..1)[0].path)
109
+ instance.instance_exec(&block) if block_given?
95
110
  Bundler.require(*instance.groups(*groups))
96
111
  end
97
112
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bootinq
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anton
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-08-01 00:00:00.000000000 Z
11
+ date: 2015-10-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,20 +38,6 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
- - !ruby/object:Gem::Dependency
42
- name: rspec
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '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'
55
41
  description: Allows to select which bundle groups to boot in the current rails process
56
42
  email:
57
43
  - anton.estum@gmail.com
@@ -74,7 +60,8 @@ files:
74
60
  - lib/bootinq/version.rb
75
61
  - lib/tasks/bootinq_tasks.rake
76
62
  homepage: https://github.com/estum/bootinq
77
- licenses: []
63
+ licenses:
64
+ - MIT
78
65
  metadata: {}
79
66
  post_install_message:
80
67
  rdoc_options: []