limited_release 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +57 -12
- data/lib/generators/limited_release_generator.rb +1 -1
- data/lib/limited_release.rb +3 -3
- data/lib/limited_release/config.rb +2 -0
- data/lib/limited_release/controller.rb +30 -10
- data/lib/limited_release/railtie.rb +5 -1
- data/lib/limited_release/reloader.rb +1 -1
- data/lib/limited_release/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 84ddb04259909b6c2b08a8af7d3f5da4f4084b376a4ed540a8f7af9fc4f5ffee
|
4
|
+
data.tar.gz: 94abb564bfcd89858123b5d2e0bce0b7d2c8493f04fd4fe662b8f7be125d28de
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8c55770d7b9f595ad70eb62567e19575e8f6e8a19ad0d740fe3238d005cc6f5baf1ac9537f4addf79f4f97bbcdfa94a0d91339f6daf1a046941cb632b5528f42
|
7
|
+
data.tar.gz: 5b11aa1c0099f5c515aa30853707a394cab3a1818dd603f21cc44a14aab32a2a65861ae2d85aa2f5a0847a7fd841f5dbb67b0faa98bf840e01faf0b47ba67693
|
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,76 @@ 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
|
32
71
|
|
33
72
|
LimitedRelease.configure do |config|
|
34
|
-
config.
|
35
|
-
|
36
|
-
|
73
|
+
config.controller_namespace = :limited_release
|
74
|
+
|
75
|
+
config.on_error = -> (e) do
|
76
|
+
if ::Rails.env.development? || ::Rails.env.test?
|
77
|
+
raise e
|
78
|
+
else
|
79
|
+
::Rails.logger.error(e)
|
80
|
+
::Rails.logger.error(e.backtrace.join("\n"))
|
81
|
+
end
|
37
82
|
end
|
38
83
|
end
|
39
84
|
```
|
@@ -53,7 +98,7 @@ create `config/limited_releases/new_feature.rb`
|
|
53
98
|
|
54
99
|
|
55
100
|
## Contributing
|
56
|
-
|
101
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/Jun0kada/limited_release
|
57
102
|
|
58
103
|
## License
|
59
104
|
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
@@ -8,10 +8,10 @@ require 'limited_release/reloader'
|
|
8
8
|
|
9
9
|
module LimitedRelease
|
10
10
|
def self.features
|
11
|
-
@features ||= Dir[::Rails.root.join('config', 'limited_releases', '*.rb')].map do |path|
|
12
|
-
name =
|
11
|
+
@features ||= Dir[::Rails.root.join('config', 'limited_releases', '**', '*.rb')].sort_by { |path| path.split('/').length }.map do |path|
|
12
|
+
name = path.gsub(/(.+limited_releases\/|\.rb\z)/, '').classify
|
13
13
|
|
14
|
-
Object.send(:remove_const, name) if Object.const_defined?(name)
|
14
|
+
Object.send(:remove_const, name.split('::').first) if Object.const_defined?(name.split('::').first)
|
15
15
|
|
16
16
|
load path
|
17
17
|
name.constantize
|
@@ -4,22 +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
|
-
@_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
|
14
11
|
end
|
12
|
+
end
|
15
13
|
|
16
|
-
|
17
|
-
raise InvalidCondition unless @_limited_release.active?(self)
|
14
|
+
class InvalidCondition < StandardError; end
|
18
15
|
|
19
|
-
|
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
|
20
22
|
end
|
21
23
|
end
|
22
24
|
|
25
|
+
private
|
26
|
+
|
23
27
|
def wrap_rescue
|
24
28
|
begin
|
25
29
|
yield
|
@@ -31,5 +35,21 @@ module LimitedRelease
|
|
31
35
|
LimitedRelease.config.on_error.call(e)
|
32
36
|
end
|
33
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
|
34
54
|
end
|
35
55
|
end
|
@@ -4,7 +4,7 @@ module LimitedRelease
|
|
4
4
|
class Railtie < ::Rails::Railtie
|
5
5
|
ActiveSupport.on_load :after_initialize do
|
6
6
|
::Rails.application.routes.prepend do
|
7
|
-
namespace
|
7
|
+
namespace ::LimitedRelease.config.controller_namespace, path: nil do
|
8
8
|
::LimitedRelease.features.each do |feature|
|
9
9
|
self.instance_eval(&feature.routes) if feature.routes
|
10
10
|
end
|
@@ -12,6 +12,10 @@ module LimitedRelease
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
+
ActiveSupport.on_load :action_controller do
|
16
|
+
ActionController::Base.include ::LimitedRelease::Controller
|
17
|
+
end
|
18
|
+
|
15
19
|
if ::Rails.env.development?
|
16
20
|
initializer 'limited_release.insert_reloader' do |app|
|
17
21
|
app.config.middleware.use ::LimitedRelease::Reloader
|
@@ -7,7 +7,7 @@ module LimitedRelease
|
|
7
7
|
|
8
8
|
@reloader = ActiveSupport::FileUpdateChecker.new(Dir[::Rails.root.join('config', 'limited_releases', '**', '*.rb')]) do
|
9
9
|
::LimitedRelease.reload!
|
10
|
-
::Rails.application.
|
10
|
+
::Rails.application.reloader.reload!
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|