limited_release 0.1.0 → 0.1.5
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 +4 -4
- data/README.md +58 -12
- data/lib/generators/limited_release_generator.rb +1 -1
- data/lib/limited_release.rb +19 -5
- data/lib/limited_release/config.rb +2 -0
- data/lib/limited_release/controller.rb +30 -12
- data/lib/limited_release/feature.rb +7 -2
- data/lib/limited_release/railtie.rb +14 -4
- data/lib/limited_release/reloader.rb +20 -0
- data/lib/limited_release/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6f0a45b2fb3719c78df1bed2243234033887bda5d429a69aa2a97572af988d2e
|
4
|
+
data.tar.gz: b77cf64ddf56a9da761e577cd1d47e72abbad3a2fcece78fd2313a14f2bfe606
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d1cade85a7e1fe48ea607f99271de3cc1abc6328671cfe120d1115551190684d96df80bde00911e596e4d7ef1d3e1a6ce37cf8440f5107f7103599d31db3501d
|
7
|
+
data.tar.gz: c16f659d6bbfc3cb9adc7effc810728f2e2f16c6fdce4aed960af120614e075ea650a4b7114c3bef47ba03f29a63a6668aaa58d3868b9862b29fbfd3ec50299f
|
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# LimitedRelease
|
2
|
-
|
2
|
+
A simple, safe and rapid prototyping framework for Rails
|
3
3
|
|
4
4
|
## Installation
|
5
5
|
Add this line to your application's Gemfile:
|
@@ -9,31 +9,77 @@ gem 'limited_release'
|
|
9
9
|
```
|
10
10
|
|
11
11
|
And then execute:
|
12
|
-
```
|
12
|
+
```
|
13
13
|
$ bundle
|
14
14
|
```
|
15
15
|
|
16
16
|
Or install it yourself as:
|
17
|
-
```
|
17
|
+
```
|
18
18
|
$ gem install limited_release
|
19
19
|
```
|
20
20
|
|
21
21
|
## Usage
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
23
|
+
```ruby
|
24
|
+
# config/limited_releases/top_page_design.rb
|
25
|
+
|
26
|
+
class TopPageDesign
|
27
|
+
include LimitedRelease::Feature
|
28
|
+
|
29
|
+
active_if do
|
30
|
+
params[:new_design].present?
|
31
|
+
end
|
32
|
+
|
33
|
+
routes do
|
34
|
+
get '/', to: 'top_page_designs#show', as: 'top_page_design'
|
35
|
+
end
|
36
|
+
|
37
|
+
helpers do
|
38
|
+
def title
|
39
|
+
'Welcome to New Design!'
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
```
|
44
|
+
|
45
|
+
```ruby
|
46
|
+
# app/controllers/limited_release/top_page_designs_controller.rb
|
47
|
+
|
48
|
+
class LimitedRelease::TopPageDesignsController < TopController
|
49
|
+
## you can specify limited_release class name
|
50
|
+
# limited_release 'TopPageDesign'
|
51
|
+
|
52
|
+
def show
|
53
|
+
super
|
54
|
+
end
|
55
|
+
end
|
56
|
+
```
|
57
|
+
|
58
|
+
```html
|
59
|
+
<!-- app/views/limited_release/top_page_designs/show.html.erb -->
|
60
|
+
|
61
|
+
<h1><%= title %></h1>
|
62
|
+
...
|
63
|
+
```
|
64
|
+
|
65
|
+
[Other examples](https://github.com/Jun0kada/limited_release/tree/master/test/dummy)
|
27
66
|
|
28
|
-
###
|
67
|
+
### Config
|
29
68
|
|
30
69
|
```ruby
|
31
70
|
# config/initializers/limited_release.rb
|
71
|
+
require 'limited_release'
|
32
72
|
|
33
73
|
LimitedRelease.configure do |config|
|
34
|
-
config.
|
35
|
-
|
36
|
-
|
74
|
+
config.controller_namespace = :limited_release
|
75
|
+
|
76
|
+
config.on_error = -> (e) do
|
77
|
+
if ::Rails.env.development? || ::Rails.env.test?
|
78
|
+
raise e
|
79
|
+
else
|
80
|
+
::Rails.logger.error(e)
|
81
|
+
::Rails.logger.error(e.backtrace.join("\n"))
|
82
|
+
end
|
37
83
|
end
|
38
84
|
end
|
39
85
|
```
|
@@ -53,7 +99,7 @@ create `config/limited_releases/new_feature.rb`
|
|
53
99
|
|
54
100
|
|
55
101
|
## Contributing
|
56
|
-
|
102
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/Jun0kada/limited_release
|
57
103
|
|
58
104
|
## License
|
59
105
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/lib/limited_release.rb
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'limited_release/railtie'
|
4
3
|
require 'limited_release/config'
|
5
4
|
require 'limited_release/feature'
|
6
5
|
require 'limited_release/controller'
|
6
|
+
require 'limited_release/reloader'
|
7
|
+
require 'limited_release/railtie'
|
7
8
|
|
8
9
|
module LimitedRelease
|
9
|
-
def self.
|
10
|
-
@features
|
10
|
+
def self.features
|
11
|
+
@features ||= Dir[::Rails.root.join('config', 'limited_releases', '**', '*.rb')].sort_by { |path| path.split('/').length }.map { |path|
|
12
|
+
name = path.gsub(/(.+limited_releases\/|\.rb\z)/, '').classify
|
13
|
+
|
14
|
+
Object.send(:remove_const, name.split('::').first) if Object.const_defined?(name.split('::').first)
|
15
|
+
|
16
|
+
[path, name]
|
17
|
+
}.map { |path, name|
|
11
18
|
load path
|
12
|
-
|
13
|
-
|
19
|
+
name.constantize
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.reload!
|
24
|
+
@features = nil
|
25
|
+
self.features
|
26
|
+
|
27
|
+
true
|
14
28
|
end
|
15
29
|
end
|
@@ -4,24 +4,26 @@ module LimitedRelease
|
|
4
4
|
module Controller
|
5
5
|
extend ActiveSupport::Concern
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
prepend_before_action do
|
13
|
-
LimitedRelease.load_features if ::Rails.env.development?
|
14
|
-
|
15
|
-
@_limited_release = self.class.name.split('::')[1].sub(/Controller\z/, '').constantize
|
7
|
+
module ClassMethods
|
8
|
+
def limited_release(name = nil)
|
9
|
+
@_limited_release = name.to_s if name
|
10
|
+
@_limited_release
|
16
11
|
end
|
12
|
+
end
|
17
13
|
|
18
|
-
|
19
|
-
raise InvalidCondition unless @_limited_release.active?(self)
|
14
|
+
class InvalidCondition < StandardError; end
|
20
15
|
|
21
|
-
|
16
|
+
included do
|
17
|
+
with_options if: :limited_release_controller? do
|
18
|
+
around_action :wrap_rescue
|
19
|
+
before_action :set_limited_release
|
20
|
+
before_action :check_limited_release_condition
|
21
|
+
before_action :append_limited_release_helper
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
+
private
|
26
|
+
|
25
27
|
def wrap_rescue
|
26
28
|
begin
|
27
29
|
yield
|
@@ -33,5 +35,21 @@ module LimitedRelease
|
|
33
35
|
LimitedRelease.config.on_error.call(e)
|
34
36
|
end
|
35
37
|
end
|
38
|
+
|
39
|
+
def set_limited_release
|
40
|
+
@_limited_release = self.class.limited_release&.constantize || self.class.name.split('::')[1].sub(/Controller\z/, '').classify.constantize
|
41
|
+
end
|
42
|
+
|
43
|
+
def check_limited_release_condition
|
44
|
+
raise InvalidCondition unless @_limited_release.active?(self)
|
45
|
+
end
|
46
|
+
|
47
|
+
def append_limited_release_helper
|
48
|
+
self.class.helper @_limited_release.helpers
|
49
|
+
end
|
50
|
+
|
51
|
+
def limited_release_controller?
|
52
|
+
self.class.name.split('::').first == LimitedRelease.config.controller_namespace.to_s.classify
|
53
|
+
end
|
36
54
|
end
|
37
55
|
end
|
@@ -4,6 +4,10 @@ module LimitedRelease
|
|
4
4
|
module Feature
|
5
5
|
extend ActiveSupport::Concern
|
6
6
|
|
7
|
+
included do
|
8
|
+
self.const_set(:Helper, Module.new)
|
9
|
+
end
|
10
|
+
|
7
11
|
module ClassMethods
|
8
12
|
def active_if(&block)
|
9
13
|
@active_if = block
|
@@ -19,8 +23,9 @@ module LimitedRelease
|
|
19
23
|
end
|
20
24
|
|
21
25
|
def helpers(&block)
|
22
|
-
|
23
|
-
|
26
|
+
helper = self.const_get(:Helper)
|
27
|
+
helper.module_eval(&block) if block
|
28
|
+
helper
|
24
29
|
end
|
25
30
|
end
|
26
31
|
end
|
@@ -3,13 +3,23 @@
|
|
3
3
|
module LimitedRelease
|
4
4
|
class Railtie < ::Rails::Railtie
|
5
5
|
ActiveSupport.on_load :after_initialize do
|
6
|
-
Rails.application.routes.prepend do
|
7
|
-
LimitedRelease.
|
8
|
-
|
9
|
-
self.instance_eval(&feature.routes)
|
6
|
+
::Rails.application.routes.prepend do
|
7
|
+
namespace ::LimitedRelease.config.controller_namespace, path: nil do
|
8
|
+
::LimitedRelease.features.each do |feature|
|
9
|
+
self.instance_eval(&feature.routes) if feature.routes
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
14
|
+
|
15
|
+
ActiveSupport.on_load :action_controller do
|
16
|
+
ActionController::Base.include ::LimitedRelease::Controller
|
17
|
+
end
|
18
|
+
|
19
|
+
if ::Rails.env.development?
|
20
|
+
initializer 'limited_release.insert_reloader' do |app|
|
21
|
+
app.config.middleware.use ::LimitedRelease::Reloader
|
22
|
+
end
|
23
|
+
end
|
14
24
|
end
|
15
25
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module LimitedRelease
|
4
|
+
class Reloader
|
5
|
+
def initialize(app)
|
6
|
+
@app = app
|
7
|
+
|
8
|
+
@reloader = ActiveSupport::FileUpdateChecker.new(Dir[::Rails.root.join('config', 'limited_releases', '**', '*.rb')]) do
|
9
|
+
::LimitedRelease.reload!
|
10
|
+
::Rails.application.reloader.reload!
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def call(env)
|
15
|
+
@reloader.execute_if_updated
|
16
|
+
|
17
|
+
@app.call(env)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: limited_release
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jun0kada
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-02-
|
11
|
+
date: 2020-02-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -55,6 +55,7 @@ files:
|
|
55
55
|
- lib/limited_release/controller.rb
|
56
56
|
- lib/limited_release/feature.rb
|
57
57
|
- lib/limited_release/railtie.rb
|
58
|
+
- lib/limited_release/reloader.rb
|
58
59
|
- lib/limited_release/version.rb
|
59
60
|
homepage: https://github.com/Jun0kada/limited_release
|
60
61
|
licenses:
|