message_block 1.0.3 → 1.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +1 -1
- data/README.rdoc +5 -2
- data/assets/images/back.gif +0 -0
- data/assets/images/confirmation.gif +0 -0
- data/assets/images/error.gif +0 -0
- data/assets/images/info.gif +0 -0
- data/assets/images/notice.gif +0 -0
- data/assets/images/warn.gif +0 -0
- data/assets/stylesheets/message_block.css +9 -19
- data/lib/message_block/helpers.rb +4 -4
- data/lib/message_block/version.rb +2 -2
- data/spec/message_block/helpers_spec.rb +20 -18
- data/spec/spec_helper.rb +42 -35
- metadata +4 -11
- data/CHANGELOG.rdoc +0 -15
- data/assets/images/back_m.gif +0 -0
- data/assets/images/confirmation_m.gif +0 -0
- data/assets/images/error_m.gif +0 -0
- data/assets/images/info_m.gif +0 -0
- data/assets/images/notice_m.gif +0 -0
- data/assets/images/warn_m.gif +0 -0
data/Gemfile.lock
CHANGED
data/README.rdoc
CHANGED
@@ -33,7 +33,7 @@ the helper <tt><%= message_block %></tt>:
|
|
33
33
|
|
34
34
|
The first argument specifies a hash options:
|
35
35
|
|
36
|
-
* <tt>:on</tt> - specifies one or many model names for which to check error messages.
|
36
|
+
* <tt>:on</tt> - specifies one or many model names for which to check error messages. You can specify the special value of :all which will grab all view assignments that contain an ActiveModel "errors" method.
|
37
37
|
* <tt>:model_error_type</tt> - specifies the message type to use for validation errors; defaults to 'error'
|
38
38
|
* <tt>:flash_types</tt> - specifies the keys to check in the flash hash. Messages will be grouped in ul
|
39
39
|
lists according to this type. Defaults to: %w(back confirm error info warn)
|
@@ -43,6 +43,7 @@ The first argument specifies a hash options:
|
|
43
43
|
* <tt>:container</tt> - specifies which block-level element to contain the errors (defaults to :div).
|
44
44
|
|
45
45
|
=== Example
|
46
|
+
|
46
47
|
Imagine you have a form for entering a user and a comment:
|
47
48
|
|
48
49
|
<%= message_block :on => [:user, :comment] %>
|
@@ -74,6 +75,8 @@ given that both user and comment fail ActiveRecord validation:
|
|
74
75
|
</ul>
|
75
76
|
</div>
|
76
77
|
|
78
|
+
Note that instead of manually specifying models you wish to report errors on, you can instead use the special <tt>:all</tt> value which will automatically use all view assign values that contain an ActiveModel::Errors "errors" method.
|
79
|
+
|
77
80
|
=== Ajax & JavaScript Integration
|
78
81
|
|
79
82
|
Sometimes you'll want to use the message block pattern within JavaScript. Wouldn't it be nice to just populate
|
@@ -128,4 +131,4 @@ This could be useful if you're interacting with stuff via Ajax, for example:
|
|
128
131
|
|
129
132
|
// Do something...
|
130
133
|
}
|
131
|
-
});
|
134
|
+
});
|
data/assets/images/back.gif
CHANGED
Binary file
|
Binary file
|
data/assets/images/error.gif
CHANGED
Binary file
|
data/assets/images/info.gif
CHANGED
Binary file
|
data/assets/images/notice.gif
CHANGED
Binary file
|
data/assets/images/warn.gif
CHANGED
Binary file
|
@@ -1,11 +1,11 @@
|
|
1
1
|
.message_block {
|
2
2
|
clear: both;
|
3
|
-
margin
|
4
|
-
margin-bottom: 0.3em;
|
3
|
+
margin: 12px 0;
|
5
4
|
}
|
6
5
|
|
7
6
|
.message_block ul {
|
8
|
-
|
7
|
+
border-bottom: 1px solid #ecd757;
|
8
|
+
border-top: 1px solid #ecd757;
|
9
9
|
list-style: none;
|
10
10
|
padding: 10px;
|
11
11
|
}
|
@@ -14,31 +14,21 @@
|
|
14
14
|
}
|
15
15
|
|
16
16
|
.message_block ul.error {
|
17
|
-
|
18
|
-
border-bottom: 1px solid #ecd757;
|
19
|
-
background: #fcf6d0 url(../../images/message_block/error_m.gif) 1em 50% no-repeat;
|
17
|
+
background: #fcf6d0 url(../../images/message_block/error.gif) 16px 50% no-repeat;
|
20
18
|
}
|
21
19
|
|
22
20
|
.message_block ul.info {
|
23
|
-
|
24
|
-
border-bottom: 1px solid #ecd757;
|
25
|
-
background: #fcf6d0 url(../../images/message_block/info_m.gif) 1em 50% no-repeat;
|
21
|
+
background: #fcf6d0 url(../../images/message_block/info.gif) 16px 50% no-repeat;
|
26
22
|
}
|
27
23
|
|
28
24
|
.message_block ul.notice {
|
29
|
-
|
30
|
-
border-bottom: 1px solid #ecd757;
|
31
|
-
background: #fcf6d0 url(../../images/message_block/notice_m.gif) 1em 50% no-repeat;
|
25
|
+
background: #fcf6d0 url(../../images/message_block/notice.gif) 16px 50% no-repeat;
|
32
26
|
}
|
33
27
|
|
34
28
|
.message_block ul.confirm {
|
35
|
-
|
36
|
-
border-bottom: 1px solid #ecd757;
|
37
|
-
background: #fcf6d0 url(../../images/message_block/confirmation_m.gif) 1em 50% no-repeat;
|
29
|
+
background: #fcf6d0 url(../../images/message_block/confirmation.gif) 16px 50% no-repeat;
|
38
30
|
}
|
39
31
|
|
40
32
|
.message_block ul.warn {
|
41
|
-
|
42
|
-
|
43
|
-
background: #fcf6d0 url(../../images/message_block/warn_m.gif) 1em 50% no-repeat;
|
44
|
-
}
|
33
|
+
background: #fcf6d0 url(../../images/message_block/warn.gif) 1em 50% no-repeat;
|
34
|
+
}
|
@@ -2,8 +2,6 @@ module MessageBlock
|
|
2
2
|
module Helpers
|
3
3
|
|
4
4
|
def message_block(options = {})
|
5
|
-
options.assert_valid_keys(:on, :model_error_type, :flash_types, :html, :id, :class, :container)
|
6
|
-
|
7
5
|
options[:model_error_type] ||= :error
|
8
6
|
options[:flash_types] ||= [:notice, :back, :confirm, :error, :info, :warn].sort_by(&:to_s)
|
9
7
|
options[:on] ||= controller.controller_name.split('/').last.gsub(/\_controller$/, '').singularize.to_sym
|
@@ -27,12 +25,14 @@ module MessageBlock
|
|
27
25
|
|
28
26
|
options[:on] = [options[:on]] unless options[:on].is_a?(Array)
|
29
27
|
model_objects = options[:on].map do |model_object|
|
30
|
-
if model_object
|
28
|
+
if model_object == :all
|
29
|
+
assigns.values.select {|o| o.respond_to?(:errors) && o.errors.is_a?(ActiveModel::Errors) }
|
30
|
+
elsif model_object.instance_of?(String) or model_object.instance_of?(Symbol)
|
31
31
|
instance_variable_get("@#{model_object}")
|
32
32
|
else
|
33
33
|
model_object
|
34
34
|
end
|
35
|
-
end.select {|m| !m.nil? }
|
35
|
+
end.flatten.select {|m| !m.nil? }
|
36
36
|
|
37
37
|
model_errors = model_objects.inject([]) {|b, m| b += m.errors.full_messages }
|
38
38
|
|
@@ -1,3 +1,3 @@
|
|
1
1
|
module MessageBlock
|
2
|
-
VERSION = "1.0.
|
3
|
-
end
|
2
|
+
VERSION = "1.0.4"
|
3
|
+
end
|
@@ -5,12 +5,9 @@ describe MessageBlock::Helpers do
|
|
5
5
|
include MessageBlock::Helpers
|
6
6
|
|
7
7
|
before do
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
it "should not accept invalid options" do
|
13
|
-
lambda { message_block :invalid => "option" }.should raise_error(ArgumentError)
|
8
|
+
@post = Post.new
|
9
|
+
@user = User.new
|
10
|
+
stub!(:assigns).and_return(:user => @user, :post => @post)
|
14
11
|
end
|
15
12
|
|
16
13
|
it "should accept valid options" do
|
@@ -28,40 +25,45 @@ describe MessageBlock::Helpers do
|
|
28
25
|
message_block.should == %(<div class="message_block" id="message_block"></div>)
|
29
26
|
end
|
30
27
|
|
31
|
-
it "should automatically find post
|
28
|
+
it "should automatically find post errors with posts controller" do
|
32
29
|
@controller = posts_controller
|
33
30
|
output = message_block
|
34
|
-
output.should == %(<div class="message_block" id="message_block"><ul class="error"><li>
|
31
|
+
output.should == %(<div class="message_block" id="message_block"><ul class="error"><li>name can't be blank</li></ul></div>)
|
35
32
|
end
|
36
33
|
|
37
34
|
it "should give no error for post" do
|
38
35
|
output = message_block(:on => :post)
|
39
|
-
output.should == %(<div class="message_block" id="message_block"><ul class="error"><li>
|
36
|
+
output.should == %(<div class="message_block" id="message_block"><ul class="error"><li>name can't be blank</li></ul></div>)
|
40
37
|
end
|
41
38
|
|
42
39
|
it "should give error for user" do
|
43
40
|
output = message_block(:on => :user)
|
44
|
-
output.should == %(<div class="message_block" id="message_block"><ul class="error"><li>
|
41
|
+
output.should == %(<div class="message_block" id="message_block"><ul class="error"><li>name can't be blank</li></ul></div>)
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should give error for both user and post when using :all" do
|
45
|
+
output = message_block(:on => :all)
|
46
|
+
output.should == %(<div class="message_block" id="message_block"><ul class="error"><li>name can't be blank</li><li>name can't be blank</li></ul></div>)
|
45
47
|
end
|
46
48
|
|
47
49
|
it "should give errors for both post and user" do
|
48
50
|
output = message_block(:on => [:post, :user])
|
49
|
-
output.should == %(<div class="message_block" id="message_block"><ul class="error"><li>
|
51
|
+
output.should == %(<div class="message_block" id="message_block"><ul class="error"><li>name can't be blank</li><li>name can't be blank</li></ul></div>)
|
50
52
|
end
|
51
53
|
|
52
54
|
it "should give errors for both post and user in the correct order" do
|
53
55
|
output = message_block(:on => [:user, :post])
|
54
|
-
output.should == %(<div class="message_block" id="message_block"><ul class="error"><li>
|
56
|
+
output.should == %(<div class="message_block" id="message_block"><ul class="error"><li>name can't be blank</li><li>name can't be blank</li></ul></div>)
|
55
57
|
end
|
56
58
|
|
57
59
|
it "should give error for user given direct instance variable" do
|
58
60
|
output = message_block(:on => @user)
|
59
|
-
output.should == %(<div class="message_block" id="message_block"><ul class="error"><li>
|
61
|
+
output.should == %(<div class="message_block" id="message_block"><ul class="error"><li>name can't be blank</li></ul></div>)
|
60
62
|
end
|
61
63
|
|
62
64
|
it "should respect model error type" do
|
63
65
|
output = message_block(:on => :user, :model_error_type => "fail")
|
64
|
-
output.should == %(<div class="message_block" id="message_block"><ul class="fail"><li>
|
66
|
+
output.should == %(<div class="message_block" id="message_block"><ul class="fail"><li>name can't be blank</li></ul></div>)
|
65
67
|
end
|
66
68
|
|
67
69
|
it "should be able to specify id for containing div" do
|
@@ -81,12 +83,12 @@ describe MessageBlock::Helpers do
|
|
81
83
|
|
82
84
|
it "should be able to specify container option as false" do
|
83
85
|
output = message_block(:on => :post, :container => false)
|
84
|
-
output.should == %(<ul class="error"><li>
|
86
|
+
output.should == %(<ul class="error"><li>name can't be blank</li></ul>)
|
85
87
|
end
|
86
88
|
|
87
89
|
it "should be able to specify container option" do
|
88
90
|
output = message_block(:on => :post, :container => :fieldset)
|
89
|
-
output.should == %(<fieldset class="message_block" id="message_block"><ul class="error"><li>
|
91
|
+
output.should == %(<fieldset class="message_block" id="message_block"><ul class="error"><li>name can't be blank</li></ul></fieldset>)
|
90
92
|
end
|
91
93
|
|
92
94
|
it "should be able to see flash error string" do
|
@@ -118,7 +120,7 @@ describe MessageBlock::Helpers do
|
|
118
120
|
it "should be able to see flash error alongside model error" do
|
119
121
|
flash[:error] = "Error A"
|
120
122
|
output = message_block(:on => :post)
|
121
|
-
output.should == %(<div class="message_block" id="message_block"><ul class="error"><li>Error A</li><li>
|
123
|
+
output.should == %(<div class="message_block" id="message_block"><ul class="error"><li>Error A</li><li>name can't be blank</li></ul></div>)
|
122
124
|
end
|
123
125
|
|
124
126
|
it "should be safe for html inside flash messages" do
|
@@ -127,4 +129,4 @@ describe MessageBlock::Helpers do
|
|
127
129
|
output.should == %(<div class="message_block" id="message_block"><ul class="error"><li>Error <strong>A</strong></li><li>Error <strong>B</strong></li></ul></div>)
|
128
130
|
end
|
129
131
|
|
130
|
-
end
|
132
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,54 +1,61 @@
|
|
1
1
|
require "rubygems"
|
2
2
|
require "message_block"
|
3
3
|
require "active_support"
|
4
|
+
require "active_model"
|
4
5
|
require "action_pack"
|
5
6
|
require "action_view"
|
6
7
|
|
7
8
|
require File.dirname(__FILE__) + '/../init'
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-
Post = Struct.new("Post", :title, :author_name)
|
12
|
-
User = Struct.new("User", :email)
|
10
|
+
class Post
|
11
|
+
extend ActiveModel::Naming
|
13
12
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
def empty?() false end
|
29
|
-
def count() 1 end
|
30
|
-
def full_messages() [ "Author name can't be empty" ] end
|
31
|
-
end.new
|
13
|
+
attr_accessor :name
|
14
|
+
attr_reader :errors
|
15
|
+
|
16
|
+
def initialize
|
17
|
+
@errors = ActiveModel::Errors.new(self)
|
18
|
+
@errors.add(:name, "can't be blank")
|
19
|
+
end
|
20
|
+
|
21
|
+
def read_attribute_for_validation(attr)
|
22
|
+
send(attr)
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.human_attribute_name(attr, options = {})
|
26
|
+
attr
|
32
27
|
end
|
33
28
|
|
34
|
-
|
35
|
-
|
29
|
+
def self.lookup_ancestors
|
30
|
+
[self]
|
31
|
+
end
|
36
32
|
end
|
37
33
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
34
|
+
class User
|
35
|
+
extend ActiveModel::Naming
|
36
|
+
|
37
|
+
attr_accessor :name
|
38
|
+
attr_reader :errors
|
39
|
+
|
40
|
+
def initialize
|
41
|
+
@errors = ActiveModel::Errors.new(self)
|
42
|
+
@errors.add(:name, "can't be blank")
|
47
43
|
end
|
48
44
|
|
49
|
-
|
45
|
+
def read_attribute_for_validation(attr)
|
46
|
+
send(attr)
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.human_attribute_name(attr, options = {})
|
50
|
+
attr
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.lookup_ancestors
|
54
|
+
[self]
|
55
|
+
end
|
50
56
|
end
|
51
57
|
|
58
|
+
|
52
59
|
def controller
|
53
60
|
@controller ||= Class.new {
|
54
61
|
def controller_name
|
@@ -67,4 +74,4 @@ end
|
|
67
74
|
|
68
75
|
def flash
|
69
76
|
@flash ||= {}
|
70
|
-
end
|
77
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: message_block
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 31
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 1.0.
|
9
|
+
- 4
|
10
|
+
version: 1.0.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Ben Hughes
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2011-04-15 00:00:00 -04:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -114,21 +114,14 @@ files:
|
|
114
114
|
- spec/message_block/helpers_spec.rb
|
115
115
|
- spec/spec_helper.rb
|
116
116
|
- assets/images/back.gif
|
117
|
-
- assets/images/back_m.gif
|
118
117
|
- assets/images/confirmation.gif
|
119
|
-
- assets/images/confirmation_m.gif
|
120
118
|
- assets/images/error.gif
|
121
|
-
- assets/images/error_m.gif
|
122
119
|
- assets/images/info.gif
|
123
|
-
- assets/images/info_m.gif
|
124
120
|
- assets/images/notice.gif
|
125
|
-
- assets/images/notice_m.gif
|
126
121
|
- assets/images/warn.gif
|
127
|
-
- assets/images/warn_m.gif
|
128
122
|
- assets/javascripts/message_block.js
|
129
123
|
- assets/stylesheets/message_block.css
|
130
124
|
- rails/init.rb
|
131
|
-
- CHANGELOG.rdoc
|
132
125
|
- Gemfile
|
133
126
|
- Gemfile.lock
|
134
127
|
- LICENSE
|
data/CHANGELOG.rdoc
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
== [2010-10-13] 1.0.1 Removed Rails 2.3 Compatibility, Cucumber Overhaul
|
2
|
-
|
3
|
-
* Issues with loading rake tasks in Rails 2.3; removing compatibility
|
4
|
-
* Revamped Cucumber invocation to use Rails 3 with 'gem "message_block", :path => "..."'
|
5
|
-
* Upgraded RSpec to 2.0
|
6
|
-
|
7
|
-
== [2010-10-13] 1.0.0 Major Updates
|
8
|
-
|
9
|
-
* Finally updated to be a Gem
|
10
|
-
* Internal refactoring
|
11
|
-
* Converted tests to RSpec
|
12
|
-
* New cucumber features
|
13
|
-
* Added support for Rails 3.0
|
14
|
-
|
15
|
-
== 0.1.0 Initial Beta Version
|
data/assets/images/back_m.gif
DELETED
Binary file
|
Binary file
|
data/assets/images/error_m.gif
DELETED
Binary file
|
data/assets/images/info_m.gif
DELETED
Binary file
|
data/assets/images/notice_m.gif
DELETED
Binary file
|
data/assets/images/warn_m.gif
DELETED
Binary file
|