limited_release 0.1.1 → 0.1.6

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
  SHA256:
3
- metadata.gz: e1793f17daec59d15f6e169206d729c13817ba005efb6ea2d2a3db1b40e1ca63
4
- data.tar.gz: c061742f097b893a9e15b58210531a04bc29186e243d785e95949a80a2950db5
3
+ metadata.gz: ed823dc0114eaf2d5da58a5d42e9a17d4f8113c52c2b3931f800b2ff6f5730bf
4
+ data.tar.gz: 5d9a8f60d7aa88adeebc83cc2d42bdf349ef4a632edae0f32f4176112914d7c8
5
5
  SHA512:
6
- metadata.gz: 70602c0598144dee50ae7d2562dfe48497fcaf2705d97670bd0d4c3dfe4eb3329ec236b2b15a684a2a33450f6470b59487897f1a91b504c3fbe1e36ba9943d70
7
- data.tar.gz: 35facc7d76f151040a5b20c57d08f529863fc200f38faa218172a9efe3f7510a21dfe3625efc2f027022a74337bbd3a776e520c6db489fece3b3a451d99e6974
6
+ metadata.gz: 063b492d7bdd65600cf7a8ad94be68a85d67a2b8e0ba75de0afa6b23ad36aae76385948a03a638669213e442920766f6a73b57a951cf575fae6c4b06d4277299
7
+ data.tar.gz: 2e1a2d93b79b13663f003057451e6d98f837cc04537817e1971f2ed4e94b0448ff7826ed041ba2bbd678e67b819a5630e9a59c29bfee1e4e9204349b08de0b4e
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  # LimitedRelease
2
- Short description and motivation.
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
- ```bash
12
+ ```
13
13
  $ bundle
14
14
  ```
15
15
 
16
16
  Or install it yourself as:
17
- ```bash
17
+ ```
18
18
  $ gem install limited_release
19
19
  ```
20
20
 
21
21
  ## Usage
22
22
 
23
- ### View override
24
- ### Controller override
25
- ### Add path
26
- ### Helper method
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
- ### On Error
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.on_error = -> (error) do
35
- ::Rails.logger.error(e)
36
- ::Rails.logger.error(e.backtrace.join("\n"))
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
- Contribution directions go here.
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).
@@ -10,7 +10,7 @@ class LimitedReleaseGenerator < ::Rails::Generators::NamedBase
10
10
  private
11
11
 
12
12
  def file_name
13
- name.gsub('/', '_').underscore
13
+ name.underscore
14
14
  end
15
15
 
16
16
  def class_name
@@ -1,21 +1,23 @@
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'
7
6
  require 'limited_release/reloader'
7
+ require 'limited_release/railtie'
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 = File.basename(path, '.rb').classify
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
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
+ [path, name]
17
+ }.map { |path, name|
16
18
  load path
17
19
  name.constantize
18
- end
20
+ }
19
21
  end
20
22
 
21
23
  def self.reload!
@@ -4,6 +4,8 @@ module LimitedRelease
4
4
  include ActiveSupport::Configurable
5
5
 
6
6
  configure do |config|
7
+ config.controller_namespace = :limited_release
8
+
7
9
  config.on_error = -> (e) do
8
10
  if ::Rails.env.development? || ::Rails.env.test?
9
11
  raise e
@@ -4,22 +4,26 @@ module LimitedRelease
4
4
  module Controller
5
5
  extend ActiveSupport::Concern
6
6
 
7
- class InvalidCondition < StandardError; end
8
-
9
- included do
10
- prepend_around_action :wrap_rescue
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
- before_action do
17
- raise InvalidCondition unless @_limited_release.active?(self)
14
+ class InvalidCondition < StandardError; end
18
15
 
19
- self.class.helper @_limited_release.helpers
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,22 @@ 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.include @_limited_release.helpers
49
+ self.class.helper @_limited_release.helpers
50
+ end
51
+
52
+ def limited_release_controller?
53
+ self.class.name.split('::').first == LimitedRelease.config.controller_namespace.to_s.classify
54
+ end
34
55
  end
35
56
  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 :limited_release, path: nil do
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.reload_routes!
10
+ ::Rails.application.reloader.reload!
11
11
  end
12
12
  end
13
13
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module LimitedRelease
4
- VERSION = '0.1.1'
4
+ VERSION = '0.1.6'
5
5
  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.1
4
+ version: 0.1.6
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-07 00:00:00.000000000 Z
11
+ date: 2020-02-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails