crud_responder 0.2.6 → 0.3.0

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: f03f86ecfa0f4780b38e8b5359df48d958015346
4
- data.tar.gz: 58ff64d312c19cc00b1367eb59afaf4e110e601d
3
+ metadata.gz: f1540ab291ed39557bbeadca726c8e779a42efc5
4
+ data.tar.gz: 5a10265472340364d6827b3b41525e0bdf20532d
5
5
  SHA512:
6
- metadata.gz: 53aa1a797d679fa3f9a1796ed6ee3bb681bf88fcbc80e59ef6e0f7eb13503ce82c9145c0d9f2e1664af32337f077566b06fbe54ef148b643ea4b1db1dda887a9
7
- data.tar.gz: a09b0c75931263b586d8d0f7a92301effa1089a2a155e88429975383003911b2c3cc1bb3752fb34d6726695df1d58ae6a41461b7fd45b7ada641ba1565e33723
6
+ metadata.gz: 0b9269aaca320514db7978f60bc35542fea2131565f58b4f0e6c3cf37fdd51f8ca9420fe7077bce5eab59a7c472d008fe870f2e5e9e8cff91bf499d4eae04d61
7
+ data.tar.gz: d677683035184027b7da066e8c20c24dced83a3d1e7c2660694191ff0b3e714f9901422d895ab46b6ee10a56e7e51fd48095bc10cda92c647ceb04ab483bdb6a
data/README.md CHANGED
@@ -117,7 +117,7 @@ end
117
117
  ```
118
118
  By default you will be redirected to object show, objects index or back in this order. And render :new when creating object and :edit when updating.
119
119
 
120
- You can specify `error_url` instead of `error_action` to be redirected instead of action render in case of error.
120
+ You can specify `error_url` instead of `error_action` to be redirected instead of action render in case of error:
121
121
  ```ruby
122
122
  def create
123
123
  @post = Post.new(post_params)
@@ -125,6 +125,14 @@ def create
125
125
  # will redirect to root_path in case of success or to https://google.com otherwise
126
126
  end
127
127
  ```
128
+ You can specify custom flash messages:
129
+ ```ruby
130
+ def create
131
+ @post = Post.new(post_params)
132
+ crud_respond @post, success_message: 'Yep :)', error_message: 'Nope :('
133
+ # will render flash 'Yep :)' on success or 'Nope :(' on failure instead of default ones
134
+ end
135
+ ```
128
136
 
129
137
  You can also specify per-controller default options:
130
138
  ```ruby
@@ -177,7 +185,6 @@ Now your controllers are skinny again! Also, you are forced to think in terms of
177
185
 
178
186
  ## TODO
179
187
 
180
- * Customizing flash messages
181
188
  * Support for pure API controllers (which is much simpler)
182
189
  * Testing
183
190
 
@@ -0,0 +1,34 @@
1
+ module CrudResponder
2
+ class CallerExtractor
3
+ attr_reader :kaller
4
+
5
+ def initialize(kaller)
6
+ @kaller = kaller
7
+ end
8
+
9
+ def name
10
+ kaller[0][/`.*'/][1..-2]
11
+ end
12
+
13
+ def method
14
+ if name =~ /destroy/
15
+ :destroy
16
+ else
17
+ :save
18
+ end
19
+ end
20
+
21
+ def action
22
+ case name
23
+ when /destroy/
24
+ :destroy
25
+ when /update/
26
+ :update
27
+ when /create/
28
+ :create
29
+ else
30
+ name.to_sym
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,35 @@
1
+ require 'crud_responder/caller_extractor'
2
+
3
+ module CrudResponder
4
+ class DefaultNotification
5
+ attr_reader :object, :kaller
6
+
7
+ def initialize(object, kaller)
8
+ @object = object
9
+ @kaller = kaller
10
+ end
11
+
12
+ def text(ok)
13
+ t_key = "flash.actions.#{CallerExtractor.new(kaller).action}.#{ok ? 'notice' : 'alert'}"
14
+ if ok
15
+ I18n.t(t_key, resource_name: resource_name, resource_desc: resource_desc)
16
+ else
17
+ I18n.t(t_key, resource_name: resource_name, resource_desc: resource_desc, errors: errors)
18
+ end
19
+ end
20
+
21
+ private
22
+
23
+ def errors
24
+ object.errors.full_messages.to_sentence
25
+ end
26
+
27
+ def resource_desc
28
+ object.to_s
29
+ end
30
+
31
+ def resource_name
32
+ object.try(:model_name).try(:human) || object.class.name
33
+ end
34
+ end
35
+ end
@@ -33,6 +33,14 @@ module CrudResponder
33
33
  nil
34
34
  end
35
35
 
36
+ def success_message
37
+ nil # lazily calcucalted in DefaultNotification
38
+ end
39
+
40
+ def error_message
41
+ nil # lazily calcucalted in DefaultNotification
42
+ end
43
+
36
44
  private
37
45
 
38
46
  attr_reader :method, :object
@@ -1,3 +1,3 @@
1
1
  module CrudResponder
2
- VERSION = '0.2.6'
2
+ VERSION = '0.3.0'
3
3
  end
@@ -1,29 +1,32 @@
1
+ require 'action_view/helpers/text_helper'
2
+
1
3
  require 'crud_responder/version'
2
4
  require 'crud_responder/default_options'
3
- require 'action_view/helpers/text_helper'
5
+ require 'crud_responder/default_notification'
6
+ require 'crud_responder/caller_extractor'
4
7
 
5
8
  module CrudResponder
6
9
  include ActionView::Helpers::TextHelper
7
10
 
8
- protected
9
-
10
11
  def crud_respond(object, opts = {})
11
- method = opts.fetch(:method, method_by_caller(caller))
12
+ method = opts.fetch(:method, CallerExtractor.new(caller).method)
12
13
  options = final_options(opts, method, object)
13
- if perform(caller, object, method)
14
- success(options)
14
+ if object.public_send(method)
15
+ success(options, object, caller)
15
16
  else
16
- error(options)
17
+ error(options, object, caller)
17
18
  end
18
19
  end
19
20
 
20
21
  private
21
22
 
22
- def success(options)
23
+ def success(options, object, kaller)
24
+ flash_success(options[:success_message] || DefaultNotification.new(object, kaller).text(true))
23
25
  redirect_to options[:success_url]
24
26
  end
25
27
 
26
- def error(options)
28
+ def error(options, object, kaller)
29
+ flash_error(options[:error_message] || DefaultNotification.new(object, kaller).text(false))
27
30
  if options[:error_url]
28
31
  redirect_to options[:error_url]
29
32
  else
@@ -56,46 +59,6 @@ module CrudResponder
56
59
  result.fetch(opt, nil)
57
60
  end
58
61
 
59
- def caller_name(kaller)
60
- kaller[0][/`.*'/][1..-2]
61
- end
62
-
63
- def method_by_caller(kaller)
64
- if caller_name(kaller) =~ /destroy/
65
- :destroy
66
- else
67
- :save
68
- end
69
- end
70
-
71
- def perform(kaller, object, method)
72
- ok = object.public_send(method)
73
- t_key = "flash.actions.#{action_by_caller(kaller)}.#{ok ? 'notice' : 'alert'}"
74
- if ok
75
- flash_success I18n.t(t_key, resource_name: resource_name_by_object(object), resource_desc: object.to_s)
76
- else
77
- flash_error I18n.t(t_key, resource_name: resource_name_by_object(object), resource_desc: object.to_s, errors: object.errors.full_messages.to_sentence)
78
- end
79
- ok
80
- end
81
-
82
- def action_by_caller(kaller)
83
- case caller_name(kaller)
84
- when /destroy/
85
- :destroy
86
- when /update/
87
- :update
88
- when /create/
89
- :create
90
- else
91
- "unknown_action_from_#{caller_name(kaller)}".to_sym
92
- end
93
- end
94
-
95
- def resource_name_by_object(object)
96
- object.try(:model_name).try(:human) || object.class.name
97
- end
98
-
99
62
  def flash_success(msg)
100
63
  flash[:notice] = truncate_message(msg)
101
64
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crud_responder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oleg Antonyan
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-03-29 00:00:00.000000000 Z
11
+ date: 2016-05-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -135,6 +135,8 @@ files:
135
135
  - config/locales/ru.yml
136
136
  - crud_responder.gemspec
137
137
  - lib/crud_responder.rb
138
+ - lib/crud_responder/caller_extractor.rb
139
+ - lib/crud_responder/default_notification.rb
138
140
  - lib/crud_responder/default_options.rb
139
141
  - lib/crud_responder/version.rb
140
142
  - lib/generators/crud_responder/install_generator.rb