limited_release 0.1.1 → 0.1.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e1793f17daec59d15f6e169206d729c13817ba005efb6ea2d2a3db1b40e1ca63
4
- data.tar.gz: c061742f097b893a9e15b58210531a04bc29186e243d785e95949a80a2950db5
3
+ metadata.gz: 84ddb04259909b6c2b08a8af7d3f5da4f4084b376a4ed540a8f7af9fc4f5ffee
4
+ data.tar.gz: 94abb564bfcd89858123b5d2e0bce0b7d2c8493f04fd4fe662b8f7be125d28de
5
5
  SHA512:
6
- metadata.gz: 70602c0598144dee50ae7d2562dfe48497fcaf2705d97670bd0d4c3dfe4eb3329ec236b2b15a684a2a33450f6470b59487897f1a91b504c3fbe1e36ba9943d70
7
- data.tar.gz: 35facc7d76f151040a5b20c57d08f529863fc200f38faa218172a9efe3f7510a21dfe3625efc2f027022a74337bbd3a776e520c6db489fece3b3a451d99e6974
6
+ metadata.gz: 8c55770d7b9f595ad70eb62567e19575e8f6e8a19ad0d740fe3238d005cc6f5baf1ac9537f4addf79f4f97bbcdfa94a0d91339f6daf1a046941cb632b5528f42
7
+ data.tar.gz: 5b11aa1c0099f5c515aa30853707a394cab3a1818dd603f21cc44a14aab32a2a65861ae2d85aa2f5a0847a7fd841f5dbb67b0faa98bf840e01faf0b47ba67693
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,76 @@ 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
32
71
 
33
72
  LimitedRelease.configure do |config|
34
- config.on_error = -> (error) do
35
- ::Rails.logger.error(e)
36
- ::Rails.logger.error(e.backtrace.join("\n"))
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
- Contribution directions go here.
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).
@@ -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
@@ -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 = File.basename(path, '.rb').classify
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,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,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 :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.2'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
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.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jun0kada