message_block 1.0.3 → 1.0.4
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.
- 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
|