effective_resources 0.4.9 → 0.4.10

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
  SHA1:
3
- metadata.gz: 67493a1a7367667c97c119a2f4604a67e66c7d23
4
- data.tar.gz: 9b22dc43ff5b95533a283b2ca3e8524c24ff149b
3
+ metadata.gz: 57a9fea58220e51746d9c8467b84e884a3039049
4
+ data.tar.gz: 3252c3a12d1dbff7591df1f8cbab3d9ea4961ddf
5
5
  SHA512:
6
- metadata.gz: 2198031b19ebf08866385301e3e9b3891a34f0447a1d19caba6dd3cd5b827005b61994294d99a248ff407c3eb561900dd73a74975be274050a0351b21e4dc0fc
7
- data.tar.gz: 4893defdbbbbde5e8d963565258d4bea255a398a44f7af0b957fcb09a5b59d015105bb4505d4b6c9852b73a1331c61bf31c51fbfe4a8b55be93921b21326fb7c
6
+ metadata.gz: e869b9eb37fe264c797927817fb67f30abf8415217e572ac2dd628ac6e15105e4f425f807bca12f690d01c908cc61b2fad5fe3f67eb2178a7c61b0e88486d2b4
7
+ data.tar.gz: cd024f08251b9b0ebcbfa22e7e3671b281bcaa603675c10eea7ca89fc05f90f32eddbae710e68a95277c13da844a2e08384f79b4ad6f936bd029abe1710a4e4a
data/README.md CHANGED
@@ -32,21 +32,31 @@ Add to your contoller:
32
32
  class PostsController < ApplicationController
33
33
  include Effective::CrudController
34
34
 
35
- member_action :something
35
+ # Sets the @page_title in a before_filter
36
+ page_title 'My Posts', only: [:index]
36
37
 
37
- protected
38
+ # All queries and objects will be built with this scope
39
+ resource_scope -> { current_user.posts }
38
40
 
39
- # If it's a Hash of attributes, the controller will call .where(attributes)
40
- # and the attributes will be used to initialize the datatable on index
41
- #
42
- # If it's an ActiveRecord scope, or symbol, we initialize a datatable with {resource_scope: true}
43
- # and leave it as a TODO for the datatable to do the right thin .
44
- def post_scope
45
- {client_id: current_user.client_id}
46
- # Post.where(client_id: current_user.client_id)
47
- # :approved
41
+ # Similar to above, with block syntax
42
+ resource_scope do
43
+ Post.active.where(user: current_user)
48
44
  end
49
45
 
46
+ # When GET request, will render the approve page
47
+ # When POST|PATCH|PUT request, will call @post.approve! and do the right thing
48
+ member_action :approve
49
+
50
+ # When GET request, will render an index page scoped to this method (if it's a scope on the model i.e. Post.approved)
51
+ collection_action :approved
52
+
53
+ # When POST|PATCH|PUT request, will call @post.approve! on each post as per params[:ids]
54
+ # Created with effective_datatables bulk actions in mind
55
+ collection_action :bulk_approve
56
+
57
+ protected
58
+
59
+ # The permitted parameters for this post. Other recognized method names are posts_params and permitted_params
50
60
  def post_params
51
61
  params.require(:post).permit(:id, :title, :body)
52
62
  end
@@ -58,11 +68,13 @@ end
58
68
 
59
69
  Implements the 7 RESTful actions: `index`, `new`, `create`, `show`, `edit`, `update`, `destroy`.
60
70
 
61
- - Loads an appropriate `@post` type instance
71
+ - Loads an appropriate `@posts` or `@post` type instance variable.
62
72
  - Sets a `@page_title` (effective_pages).
63
73
  - Calls authorize as per the configured `EffectiveResources.authorization_method` (flow through to CanCan or Pundit)
64
74
  - Does the create/update save
65
75
  - Sets a `flash[:success]` and redirects on success, or sets a `flash.now[:danger]` and renders on error.
76
+ - Does the right thing with member and collection actions
77
+ - Intelligently redirects based on commit message
66
78
 
67
79
  ## Helpers
68
80
 
@@ -101,10 +101,10 @@ module Effective
101
101
  resource.created_by ||= current_user if resource.respond_to?(:created_by=)
102
102
 
103
103
  if resource.save
104
- flash[:success] = "Successfully created #{resource_human_name}"
104
+ flash[:success] = flash_success(resource)
105
105
  redirect_to(resource_redirect_path)
106
106
  else
107
- flash.now[:danger] = "Unable to create #{resource_human_name}: #{resource.errors.full_messages.to_sentence}"
107
+ flash.now[:danger] = flash_danger(resource)
108
108
  render :new
109
109
  end
110
110
  end
@@ -130,10 +130,10 @@ module Effective
130
130
  EffectiveResources.authorized?(self, :update, resource)
131
131
 
132
132
  if resource.update_attributes(send(resource_params_method_name))
133
- flash[:success] = "Successfully updated #{resource_human_name}"
133
+ flash[:success] = flash_success(resource)
134
134
  redirect_to(resource_redirect_path)
135
135
  else
136
- flash.now[:danger] = "Unable to update #{resource_human_name}: #{resource.errors.full_messages.to_sentence}"
136
+ flash.now[:danger] = flash_danger(resource)
137
137
  render :edit
138
138
  end
139
139
  end
@@ -145,9 +145,9 @@ module Effective
145
145
  EffectiveResources.authorized?(self, :destroy, resource)
146
146
 
147
147
  if resource.destroy
148
- flash[:success] = "Successfully deleted #{resource_human_name}"
148
+ flash[:success] = flash_success(resource, :delete)
149
149
  else
150
- flash[:danger] = "Unable to delete #{resource_human_name}: #{resource.errors.full_messages.to_sentence}"
150
+ flash[:danger] = flash_danger(resource, :delete)
151
151
  end
152
152
 
153
153
  if request.referer.present? && !request.referer.include?(effective_resource.show_path)
@@ -164,10 +164,10 @@ module Effective
164
164
  begin
165
165
  resource.public_send("#{action}!") || raise("failed to #{action} #{resource}")
166
166
 
167
- flash[:success] = "Successfully #{action_verb(action)} #{resource_human_name}"
167
+ flash[:success] = flash_success(resource, action)
168
168
  redirect_back(fallback_location: resource_redirect_path)
169
169
  rescue => e
170
- flash.now[:danger] = "Unable to #{action} #{resource_human_name}: #{resource.errors.full_messages.to_sentence.presence || e.message}"
170
+ flash.now[:danger] = flash_danger(resource, action, e: e)
171
171
 
172
172
  referer = request.referer.to_s
173
173
 
@@ -0,0 +1,47 @@
1
+ module Effective
2
+ module FlashMessages
3
+ extend ActiveSupport::Concern
4
+
5
+ # flash[:success] = flash_success(@post)
6
+ def flash_success(resource, action = nil, name: nil)
7
+ raise 'expected an ActiveRecord resource' unless (name || resource.class.respond_to?(:model_name))
8
+
9
+ action ||= :save
10
+ name ||= resource.class.model_name.human
11
+
12
+ "#{name.to_s.titleize} was successfully #{action}#{(action.to_s.end_with?('e') ? 'd' : 'ed')}"
13
+ end
14
+
15
+ # flash.now[:danger] = flash_danger(@post)
16
+ def flash_danger(resource, action = nil, e: nil, name: nil)
17
+ raise 'expected an ActiveRecord resource' unless resource.respond_to?(:errors) && (name || resource.class.respond_to?(:model_name))
18
+
19
+ action ||= resource.respond_to?(:new_record?) ? (resource.new_record? ? :create : :update) : :save
20
+ name ||= resource.class.model_name.human
21
+ messages = flash_errors(resource, e: e)
22
+
23
+ ["Unable to #{action} #{name.to_s.downcase}", (": #{messages}." if messages)].compact.join.html_safe
24
+ end
25
+
26
+ # flash.now[:danger] = "Unable to accept: #{flash_errors(@post)}"
27
+ def flash_errors(resource, e: nil)
28
+ raise 'expected an ActiveRecord resource' unless resource.respond_to?(:errors)
29
+
30
+ messages = resource.errors.map do |attribute, message|
31
+ if message[0] == message[0].upcase # If the error begins with a capital letter
32
+ message
33
+ elsif attribute == :base
34
+ "#{resource.class.model_name.human.downcase} #{message}"
35
+ elsif attribute.to_s.end_with?('_ids')
36
+ "#{resource.class.human_attribute_name(attribute.to_s[0..-5].pluralize).downcase} #{message}"
37
+ else
38
+ "#{resource.class.human_attribute_name(attribute).downcase} #{message}"
39
+ end
40
+ end
41
+
42
+ messages << e.message if messages.blank? && e && e.respond_to?(:message)
43
+
44
+ messages.to_sentence.presence
45
+ end
46
+ end
47
+ end
@@ -15,7 +15,7 @@ module EffectiveResourcesHelper
15
15
 
16
16
  def simple_form_save(form, options = {class: 'form-actions'}, &block)
17
17
  content_tag(:div, class: options[:class]) do
18
- form.button(:submit, 'Save', data: { disable_with: 'Saving...' }) + (capture(&:block) if block_given?)
18
+ form.button(:submit, 'Save', data: { disable_with: 'Saving...' }) + (capture(&block) if block_given?)
19
19
  end
20
20
  end
21
21
 
@@ -23,7 +23,7 @@ module Effective
23
23
  controller_routes.map { |route| route.defaults[:action] if is_get_member?(route) }.compact - crud_actions
24
24
  end
25
25
 
26
- # GET actions
26
+ # POST/PUT/PATCH actions
27
27
  def member_post_actions
28
28
  controller_routes.map { |route| route.defaults[:action] if is_post_member?(route) }.compact - crud_actions
29
29
  end
@@ -9,5 +9,12 @@ module EffectiveResources
9
9
  eval File.read("#{config.root}/config/effective_resources.rb")
10
10
  end
11
11
 
12
+ # Register the flash_messages concern so that it can be called in ActionController
13
+ initializer 'effective_resources.action_controller' do |app|
14
+ ActiveSupport.on_load :action_controller do
15
+ include(Effective::FlashMessages)
16
+ end
17
+ end
18
+
12
19
  end
13
20
  end
@@ -1,3 +1,3 @@
1
1
  module EffectiveResources
2
- VERSION = '0.4.9'.freeze
2
+ VERSION = '0.4.10'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_resources
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.9
4
+ version: 0.4.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-02 00:00:00.000000000 Z
11
+ date: 2017-10-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -36,6 +36,7 @@ files:
36
36
  - app/assets/javascripts/effective_resources.js
37
37
  - app/assets/javascripts/effective_resources/effective_ujs.js
38
38
  - app/controllers/concerns/effective/crud_controller.rb
39
+ - app/controllers/concerns/effective/flash_messages.rb
39
40
  - app/helpers/effective_resources_helper.rb
40
41
  - app/models/effective/access_denied.rb
41
42
  - app/models/effective/attribute.rb