controller_setter_pattern 0.1.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 36ee901377eb976f73cfc39346aa635c7063af71
4
+ data.tar.gz: 7740bd3b21ee8af6e282fb182ac75cdb33026c5c
5
+ SHA512:
6
+ metadata.gz: 1fff224ca7116cf0773456103b329f60d4186a3c1ea176f35cd84f5ba8b048b5ba14104e302c17f4970ec4685e931ca0b0a82cec52e4220cd5a53f2996365420
7
+ data.tar.gz: 1fdbb3904400d9b320a4b10ad7918cf1bdb50d5b78c2b6531bb8cd895b518dd5f5c60630ec9b06bdbd41447883a86be49b5ae9b455a004776e79523ac2bc76dd
data/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ .project
2
+ Gemfile.lock
3
+ log/*
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format=documentation
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ gem 'rails', '~> 4.2.1'
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015 Rodrigo Casara
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
data/README.md ADDED
@@ -0,0 +1,178 @@
1
+ # controller_setter_pattern
2
+ Pattern for assign instance variables in controllers for use in views, etc.
3
+
4
+ ## Instalation
5
+
6
+ Add `controller_setter_pattern` to your Gemfile:
7
+
8
+ ```ruby
9
+ gem "controller_setter_pattern"
10
+ ```
11
+
12
+ ## Basic usage
13
+
14
+ Before setter pattern:
15
+
16
+ ```ruby
17
+ class ArticlesController < ApplicationController
18
+ before_action :set_article, except: [:index, :new, :create]
19
+
20
+ # GET /articles
21
+ def index
22
+ @articles = Article.all
23
+ end
24
+
25
+ # GET /articles/:id
26
+ def show; end
27
+
28
+ # GET /articles/new
29
+ def new
30
+ @article = Article.new
31
+ end
32
+
33
+ # GET /articles/:id/edit
34
+ def edit; end
35
+
36
+ # POST /articles
37
+ def create
38
+ @article = Article.new(article_params)
39
+
40
+ if @article.save
41
+ redirect_to @article
42
+ else
43
+ render :new
44
+ end
45
+ end
46
+
47
+ # PATCH/PUT /articles/:id
48
+ def update
49
+ if @article.update(article_params)
50
+ redirect_to @article
51
+ else
52
+ render :edit
53
+ end
54
+ end
55
+
56
+ # DELETE /articles/:id
57
+ def destroy
58
+ @article.destroy
59
+ redirect_to articles_path
60
+ end
61
+
62
+ private
63
+ def set_article
64
+ @article = Article.find(params[:id])
65
+ end
66
+
67
+ def article_params
68
+ params.require(:article).permit(:title, :text)
69
+ end
70
+ end
71
+
72
+ class CommentsController < ApplicationController
73
+ before_action :set_article
74
+ before_action :set_comment, except: [:index, :new, :create]
75
+
76
+ # POST /articles/:article_id/comments
77
+ def create
78
+ @comment = @article.comments.create(comment_params)
79
+ redirect_to article_path(@article)
80
+ end
81
+
82
+ # DELETE /articles/:article_id/comments/:id
83
+ def destroy
84
+ @comment.destroy
85
+ redirect_to article_path(@article)
86
+ end
87
+
88
+ private
89
+ def set_article
90
+ @article = Article.find(params[:article_id])
91
+ end
92
+
93
+ def set_comment
94
+ @comment = @article.comments.find(params[:id])
95
+ end
96
+
97
+ def comment_params
98
+ params.require(:comment).permit(:commenter, :body)
99
+ end
100
+ end
101
+ ```
102
+
103
+ After setter pattern:
104
+
105
+ ```ruby
106
+ class ArticlesController < ApplicationController
107
+ set :article, except: [:index, :new, :create]
108
+
109
+ # actions methods ...
110
+
111
+ private
112
+ # setter method no more necessary
113
+
114
+ def article_params
115
+ params.require(:article).permit(:title, :text)
116
+ end
117
+ end
118
+
119
+ class CommentsController < ApplicationController
120
+ set :article
121
+ set :comment, ancestor: :article, except: [:index, :new, :create]
122
+
123
+ # actions methods ...
124
+
125
+ private
126
+ def comment_params
127
+ params.require(:comment).permit(:commenter, :body)
128
+ end
129
+ end
130
+ ```
131
+
132
+ In file `app/views/articles/show.html.erb`:
133
+
134
+ ```erb
135
+ <p>
136
+ <strong>Title:</strong>
137
+ <%= @article.title %>
138
+ </p>
139
+
140
+ <p>
141
+ <strong>Text:</strong>
142
+ <%= @article.text %>
143
+ </p>
144
+
145
+ <h2>Comments</h2>
146
+ <%= render @article.comments %>
147
+
148
+ <h2>Add a comment:</h2>
149
+ <%= render 'comments/form' %>
150
+
151
+ <%= link_to 'Edit', edit_article_path(@article) %> |
152
+ <%= link_to 'Back', articles_path %>
153
+ ```
154
+
155
+ ## Further configuration
156
+
157
+ **Specify the model name:**
158
+
159
+ ```ruby
160
+ set :ebook, model: Book
161
+ # @ebook = Book.find(params[:id])
162
+ ```
163
+
164
+ **Specify the parameters key to use to fetch the object:**
165
+ ```ruby
166
+ set :ebook, model: Book, finder_params: :isbn
167
+ # @ebook = Book.find_by_isbn(params[:isbn])
168
+
169
+ set :ebook, model: Book, finder_params: [:author, :title]
170
+ # @ebook = Book.find_by_author_and_title(params[:author], params[:title])
171
+ ```
172
+
173
+ **Specify the scope:**
174
+
175
+ ```ruby
176
+ set :user, scope: :active, finder_params: :email
177
+ # @user = User.active.find_by_email(params[:email])
178
+ ```
data/Rakefile ADDED
@@ -0,0 +1,7 @@
1
+ require 'rspec/core/rake_task'
2
+
3
+ RSpec::Core::RakeTask.new(:spec) do |t|
4
+ t.rspec_opts = ['--format progress']
5
+ end
6
+
7
+ task default: :spec
@@ -0,0 +1,29 @@
1
+ $:.push File.expand_path('../lib', __FILE__)
2
+
3
+ require 'controller_setter_pattern/version'
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = 'controller_setter_pattern'
7
+ s.version = ControllerSetterPattern::VERSION
8
+ s.authors = ['Rodrigo Casara']
9
+ s.email = ['rodrigocasara@gmail.com']
10
+ s.homepage = 'https://github.com/Casara/controller_setter_pattern'
11
+ s.summary = 'Pattern for assign instance variables in controllers for use in views, etc.'
12
+ s.description = s.summary
13
+ s.license = 'MIT'
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
18
+ s.require_paths = ['lib']
19
+
20
+ s.add_development_dependency 'rspec', '~> 3.2.0'
21
+ s.add_development_dependency 'rspec-rails', '~> 3.2.1'
22
+ s.add_development_dependency 'sqlite3'
23
+ s.add_development_dependency 'database_cleaner', '~> 1.4.1'
24
+ s.add_development_dependency 'rake'
25
+ s.add_development_dependency 'actionpack', '~> 4.2.1'
26
+ s.add_development_dependency 'activesupport', '~> 4.2.1'
27
+ s.add_development_dependency 'factory_girl_rails', '~> 4.5.0'
28
+ s.add_development_dependency 'faker', '~> 1.4.3'
29
+ end
@@ -0,0 +1,5 @@
1
+ require 'controller_setter_pattern/action_controller'
2
+
3
+ ActiveSupport.on_load :action_controller do
4
+ ActionController::Base.send :include, ControllerSetterPattern::ActionController
5
+ end
@@ -0,0 +1,67 @@
1
+ module ControllerSetterPattern
2
+ module ActionController
3
+ extend ActiveSupport::Concern
4
+
5
+ module ClassMethods
6
+ def set(*names)
7
+ options = names.extract_options!
8
+
9
+ model = options.delete(:model)
10
+ model = model.to_s.camelize.constantize unless model.nil?
11
+
12
+ finder_params = normalize_finder_params(options.delete(:finder_params) || [])
13
+ finder_method = 'find' + (finder_params.empty? ? '' : '_by_' + finder_params.join('_and_'))
14
+
15
+ ancestor = options.delete(:ancestor)
16
+ scope = options.delete(:scope)
17
+
18
+ names.each do |variable|
19
+ before_action options do |controller|
20
+ if !ancestor.nil?
21
+ if controller.instance_variable_defined?("@#{ancestor}")
22
+ resource = controller.instance_variable_get("@#{ancestor}")
23
+ model_class = resource.class
24
+ else
25
+ model_class = ancestor.to_s.camelize.constantize
26
+ resource = model_class.find(params["#{model_class.name.underscore}_id".to_sym])
27
+ end
28
+ reflection_name = (model || variable).to_s.underscore.pluralize.to_sym
29
+ resource = resource.send(reflection_name) if resource.respond_to?(reflection_name)
30
+ elsif !model.nil? && model.descends_from_active_record?
31
+ model_class = model
32
+ elsif
33
+ model_class = variable.to_s.camelize.constantize
34
+ end
35
+
36
+ resource ||= model_class
37
+
38
+ unless scope.nil?
39
+ scope = [scope] unless scope.is_a?(Array)
40
+ scope.each { |s| resource = resource.send(s) }
41
+ end
42
+
43
+ if finder_params.empty?
44
+ values_for_find = controller.params["#{variable}_id".to_sym] || controller.params[:id]
45
+ else
46
+ defaults = finder_params.inject({}) { |h, v| h.merge(v.to_s => nil) }
47
+ values_for_find = defaults.merge(controller.params.permit(finder_params)).values
48
+ end
49
+
50
+ resource = resource.send(finder_method, *values_for_find)
51
+
52
+ var_name = "@#{variable}".to_sym
53
+ controller.instance_variable_set(var_name, resource)
54
+ end
55
+ end
56
+ end
57
+
58
+ private
59
+ def normalize_finder_params(finder_params)
60
+ finder_params = [finder_params] unless finder_params.is_a?(Array)
61
+ finder_params = finder_params.compact.uniq
62
+ finder_params.clear if finder_params.one? && finder_params.join.eql?('id')
63
+ finder_params
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,6 @@
1
+ module ControllerSetterPattern #:nodoc:
2
+ MAJOR = 0
3
+ MINOR = 1
4
+ PATCH = 0
5
+ VERSION = "#{MAJOR}.#{MINOR}.#{PATCH}"
6
+ end
@@ -0,0 +1,68 @@
1
+ require 'spec_helper'
2
+ require 'rspec/rails'
3
+
4
+ describe ControllerSetterPattern do
5
+ it 'is a model' do
6
+ expect(ControllerSetterPattern).to be_a(Module)
7
+ end
8
+ end
9
+
10
+ describe UsersController, type: :controller do
11
+ before { FactoryGirl.create_list(:user, 3) }
12
+
13
+ let(:user) { User.first }
14
+
15
+ subject { assigns(:user) }
16
+
17
+ it 'finds the instance with params[:id]' do
18
+ get :show, id: user.id
19
+ should be_a(User)
20
+ end
21
+
22
+ it 'finds the instance with params[:model_id]' do
23
+ get :show, user_id: user.id
24
+ should be_a(User)
25
+ end
26
+ end
27
+
28
+ describe AccountController, type: :controller do
29
+ before { FactoryGirl.create_list(:user, 3) }
30
+
31
+ let(:user) { User.first }
32
+
33
+ subject { assigns(:account) }
34
+
35
+ context 'with a model name and a parameter key' do
36
+ it 'finds an instance' do
37
+ get :resend_password, email: user.email
38
+ should be_a(User)
39
+ end
40
+
41
+ it 'finds an instance with scope' do
42
+ user.active!
43
+ get :profile, username: user.username
44
+ should be_a(User)
45
+ end
46
+ end
47
+ end
48
+
49
+ describe OrdersController, type: :controller do
50
+ let(:customer) { FactoryGirl.create(:customer) }
51
+
52
+ context 'with ancestor' do
53
+ it 'finds an instance' do
54
+ get :show, customer_id: customer.id, id: customer.orders.first.id
55
+ expect(assigns(:order)).to be_a(Order)
56
+ end
57
+
58
+ it 'assigns based on ancestor model class and model name' do
59
+ get :edit, customer_id: customer.id, id: customer.orders.last.id
60
+ expect(assigns(:other_order)).to be_a(Order)
61
+ end
62
+ end
63
+
64
+ it 'finds the instance with params keys' do
65
+ xhr :get, :order_by_customer_date, customer_id: customer.id, order_date: customer.orders.last.order_date.to_date
66
+ expect(assigns(:order)).to be_a(Order)
67
+ end
68
+ end
data/spec/factories.rb ADDED
@@ -0,0 +1,17 @@
1
+ FactoryGirl.define do
2
+ factory :user do
3
+ name { Faker::Name.name }
4
+ username { Faker::Internet.user_name(name) }
5
+ email { Faker::Internet.safe_email(username) }
6
+ end
7
+
8
+ factory :customer do
9
+ name { Faker::Company.name }
10
+ after(:create) { |customer| create_list(:order, 3, customer: customer) }
11
+ end
12
+
13
+ factory :order do
14
+ customer
15
+ order_date { Faker::Date.forward(90) }
16
+ end
17
+ end
@@ -0,0 +1,53 @@
1
+ require 'action_controller'
2
+ require 'active_model'
3
+ require 'active_record'
4
+ require 'database_cleaner'
5
+ require 'logger'
6
+ require 'faker'
7
+ require 'factory_girl_rails'
8
+ require 'controller_setter_pattern'
9
+
10
+ module Rails
11
+ class App
12
+ def env_config; {} end
13
+ def routes
14
+ @routes ||= ActionDispatch::Routing::RouteSet.new
15
+ end
16
+ end
17
+
18
+ def self.application
19
+ @app ||= App.new
20
+ end
21
+ end
22
+
23
+ ActiveRecord::Base.establish_connection adapter: 'sqlite3', database: ':memory:'
24
+ ActiveRecord::Base.logger = Logger.new(File.join(File.dirname(__FILE__), '../log/debug.log'))
25
+
26
+ # now that we have the database configured, we can create the models and
27
+ # migrate the database
28
+ require 'support/models'
29
+ require 'support/controllers'
30
+
31
+ RSpec.configure do |config|
32
+ config.include FactoryGirl::Syntax::Methods
33
+
34
+ config.before(:suite) do
35
+ begin
36
+ DatabaseCleaner.strategy = :transaction
37
+ DatabaseCleaner.clean_with(:truncation)
38
+ DatabaseCleaner.start
39
+ FactoryGirl.find_definitions
40
+ FactoryGirl.lint
41
+ ensure
42
+ DatabaseCleaner.clean
43
+ end
44
+ end
45
+
46
+ config.before(:each) do
47
+ DatabaseCleaner.start
48
+ end
49
+
50
+ config.after(:each) do
51
+ DatabaseCleaner.clean
52
+ end
53
+ end
@@ -0,0 +1,43 @@
1
+ load File.dirname(__FILE__) + '/routes.rb'
2
+
3
+ ActionController::Base.include Rails.application.routes.url_helpers
4
+
5
+ class UsersController < ActionController::Base
6
+ set :user, only: :show
7
+
8
+ def show
9
+ render json: @user
10
+ end
11
+ end
12
+
13
+ class AccountController < ActionController::Base
14
+ set :account, model: User, finder_params: :email, only: :resend_password
15
+ set :account, model: User, scope: :active, finder_params: :username, only: :profile
16
+
17
+ def resend_password
18
+ render text: "An email containing the new password was sent to your inbox (#{@account.email})."
19
+ end
20
+
21
+ def profile
22
+ render json: @account
23
+ end
24
+ end
25
+
26
+ class OrdersController < ActionController::Base
27
+ set :customer, only: :show
28
+ set :order, ancestor: :customer, only: :show
29
+ set :other_order, model: Order, ancestor: :customer, only: :edit
30
+ set :order, finder_params: [:customer_id, :order_date], only: :order_by_customer_date
31
+
32
+ def show
33
+ render json: @order
34
+ end
35
+
36
+ def edit
37
+ render text: 'Edit'
38
+ end
39
+
40
+ def order_by_customer_date
41
+ render json: @order
42
+ end
43
+ end
@@ -0,0 +1,25 @@
1
+ load File.dirname(__FILE__) + '/schema.rb'
2
+
3
+ class User < ActiveRecord::Base
4
+ has_many :social_networks
5
+
6
+ enum status: {
7
+ passive: 0,
8
+ pending: 1,
9
+ active: 2,
10
+ locked: 3
11
+ }
12
+
13
+ validates_uniqueness_of :email, case_sensitive: false
14
+ validates_uniqueness_of :username, case_sensitive: false
15
+
16
+ before_save { |record| record.status = 'pending' if record.passive? }
17
+ end
18
+
19
+ class Customer < ActiveRecord::Base
20
+ has_many :orders, dependent: :destroy
21
+ end
22
+
23
+ class Order < ActiveRecord::Base
24
+ belongs_to :customer
25
+ end
@@ -0,0 +1,10 @@
1
+ Rails.application.routes.draw do
2
+ get 'user/(:id)' => 'users#show'
3
+
4
+ get 'resend_password/:email' => 'account#resend_password'
5
+ get 'profile/:username' => 'account#profile'
6
+
7
+ get 'customers/:customer_id/orders/:id' => 'orders#show'
8
+ get 'customers/:customer_id/orders/:id/edit' => 'orders#edit', as: :edit
9
+ get 'order_by_customer_date' => 'orders#order_by_customer_date'
10
+ end
@@ -0,0 +1,22 @@
1
+ ActiveRecord::Schema.define do
2
+ self.verbose = false
3
+
4
+ create_table :users, force: true do |t|
5
+ t.integer :status, default: 0
6
+ t.string :name
7
+ t.string :username, unique: true
8
+ t.string :email, unique: true
9
+ t.timestamps null: false
10
+ end
11
+
12
+ create_table :customers, force: true do |t|
13
+ t.string :name
14
+ t.timestamps null: false
15
+ end
16
+
17
+ create_table :orders, force: true do |t|
18
+ t.belongs_to :customer, index: true
19
+ t.datetime :order_date
20
+ t.timestamps null: false
21
+ end
22
+ end
metadata ADDED
@@ -0,0 +1,188 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: controller_setter_pattern
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Rodrigo Casara
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-05-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 3.2.0
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 3.2.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec-rails
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 3.2.1
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 3.2.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: sqlite3
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
+ - !ruby/object:Gem::Dependency
56
+ name: database_cleaner
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 1.4.1
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 1.4.1
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: actionpack
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 4.2.1
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 4.2.1
97
+ - !ruby/object:Gem::Dependency
98
+ name: activesupport
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 4.2.1
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 4.2.1
111
+ - !ruby/object:Gem::Dependency
112
+ name: factory_girl_rails
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 4.5.0
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 4.5.0
125
+ - !ruby/object:Gem::Dependency
126
+ name: faker
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 1.4.3
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: 1.4.3
139
+ description: Pattern for assign instance variables in controllers for use in views,
140
+ etc.
141
+ email:
142
+ - rodrigocasara@gmail.com
143
+ executables: []
144
+ extensions: []
145
+ extra_rdoc_files: []
146
+ files:
147
+ - ".gitignore"
148
+ - ".rspec"
149
+ - Gemfile
150
+ - LICENSE
151
+ - README.md
152
+ - Rakefile
153
+ - controller_setter_pattern.gemspec
154
+ - lib/controller_setter_pattern.rb
155
+ - lib/controller_setter_pattern/action_controller.rb
156
+ - lib/controller_setter_pattern/version.rb
157
+ - spec/controller_setter_pattern_spec.rb
158
+ - spec/factories.rb
159
+ - spec/spec_helper.rb
160
+ - spec/support/controllers.rb
161
+ - spec/support/models.rb
162
+ - spec/support/routes.rb
163
+ - spec/support/schema.rb
164
+ homepage: https://github.com/Casara/controller_setter_pattern
165
+ licenses:
166
+ - MIT
167
+ metadata: {}
168
+ post_install_message:
169
+ rdoc_options: []
170
+ require_paths:
171
+ - lib
172
+ required_ruby_version: !ruby/object:Gem::Requirement
173
+ requirements:
174
+ - - ">="
175
+ - !ruby/object:Gem::Version
176
+ version: '0'
177
+ required_rubygems_version: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - ">="
180
+ - !ruby/object:Gem::Version
181
+ version: '0'
182
+ requirements: []
183
+ rubyforge_project:
184
+ rubygems_version: 2.4.6
185
+ signing_key:
186
+ specification_version: 4
187
+ summary: Pattern for assign instance variables in controllers for use in views, etc.
188
+ test_files: []