rails_errors2html 1.0.2 → 1.3.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.
@@ -1,5 +1,5 @@
1
1
  module Errors2Html
2
- VERSION = '1.0.2'
2
+ VERSION = '1.3.0'
3
3
 
4
4
  def Errors2Html.version
5
5
  Errors2Html::VERSION
@@ -7,8 +7,9 @@ module Errors2Html
7
7
 
8
8
  def Errors2Html.dependencies
9
9
  {
10
- 'map' => [ 'map' , ' >= 6.2.0' ],
11
- 'rails_view' => [ 'rails_view' , ' >= 1.0.1' ]
10
+ 'fattr' => [ 'fattr' , ' >= 2.2.1' ],
11
+ 'map' => [ 'map' , ' >= 6.2.0' ],
12
+ 'rails_view' => [ 'rails_view' , ' >= 1.0.1' ]
12
13
  }
13
14
  end
14
15
 
@@ -23,10 +24,6 @@ module Errors2Html
23
24
  require(lib)
24
25
  end
25
26
 
26
- class << Errors2Html
27
- attr_accessor :template
28
- end
29
-
30
27
  def Errors2Html.to_html(*args)
31
28
  args.flatten!
32
29
  args.compact!
@@ -35,23 +32,18 @@ module Errors2Html
35
32
 
36
33
  errors = Map.new
37
34
  errors[:global] = []
38
- errors[:fields] = {}
35
+ errors[:fields] = {}
39
36
 
40
37
  args.each do |e|
41
- e.each do |key, messages|
42
- key = key.to_s
43
-
38
+ flatten(e).each do |key, messages|
44
39
  Array(messages).each do |message|
45
40
  at_least_one_error = true
46
41
 
47
- list =
48
- if key =~ /\A(?:[*]|base)\Z/iomx
49
- errors[:global] ||= []
50
- else
51
- errors[:fields][key] ||= []
52
- end
53
-
54
- list.push(message.to_s).uniq!
42
+ if Array(key).join =~ /\A(?:[*]|base)\Z/iomx
43
+ errors.global.push(message.to_s).uniq!
44
+ else
45
+ (errors.fields[key] ||= []).push(message.to_s).uniq!
46
+ end
55
47
  end
56
48
  end
57
49
  end
@@ -67,54 +59,84 @@ module Errors2Html
67
59
  if template
68
60
  View.render(:template => template, :locals => locals)
69
61
  else
70
- View.render(:inline => Template, :locals => locals)
62
+ View.render(:inline => inline, :locals => locals)
71
63
  end
72
64
  end
73
65
 
74
- def to_html
75
- Errors2Html.to_html(self)
66
+ def Errors2Html.flatten(hashlike)
67
+ case hashlike
68
+ when Map
69
+ hash = Hash.new
70
+ hashlike.depth_first_each do |key, value|
71
+ index = key.pop if key.last.is_a?(Integer)
72
+ (hash[key] ||= []).push(value)
73
+ end
74
+ hash
75
+ else
76
+ hashlike.respond_to?(:to_hash) ? hashlike.to_hash : hashlike
77
+ end
76
78
  end
77
79
 
78
- def to_s
79
- to_html
80
- end
80
+ Fattr(:inline) do
81
+ <<-erb
82
+ <div class="errors2html errors-summary">
83
+ <h4 class="errors-caption">Sorry, we encountered some errors:</h4>
84
+
85
+ <% unless errors.global.empty? %>
81
86
 
82
- Template = <<-erb
83
- <div class="errors2html errors-summary">
84
- <h4 class="errors-caption">Sorry, we encountered some errors:</h4>
85
-
86
- <% unless errors.global.empty? %>
87
- <ul class="errors-global-list">
88
- <% errors.global.each do |message| %>
89
- <li class="errors-message">
90
- <%= message %>
91
- </li>
92
- <% end %>
93
- </ul>
94
- <% end %>
95
-
96
- <% unless errors.fields.empty? %>
97
- <dl class="errors-fields-list">
98
- <%
99
- errors.fields.each do |key, messages|
100
- title = Array(key).join(" ").titleize
101
- %>
102
- <dt class="errors-title">
103
- <%= title %>
104
- </dt>
105
-
106
- <% Array(messages).each do |message| %>
107
- <dd class="errors-message">
87
+ <ul class="errors-global-list">
88
+ <% errors.global.each do |message| %>
89
+ <li class="errors-message">
108
90
  <%= message %>
109
- </dd>
91
+ </li>
110
92
  <% end %>
111
- <% end %>
112
- </dl>
113
- <% end %>
114
- </div>
115
- erb
93
+ </ul>
94
+ <% end %>
95
+
96
+ <% unless errors.fields.empty? %>
97
+
98
+ <dl class="errors-fields-list">
99
+ <%
100
+ errors.fields.each do |key, messages|
101
+ title = Array(key).join(" ").titleize
102
+ %>
103
+ <dt class="errors-title">
104
+ <%= title %>
105
+ </dt>
106
+ <% Array(messages).each do |message| %>
107
+ <dd class="errors-message">
108
+ <%= message %>
109
+ </dd>
110
+
111
+ <% end %>
112
+ <% end %>
113
+ </dl>
114
+ <% end %>
115
+ </div>
116
+ erb
117
+ end
118
+
119
+ Fattr(:template){ nil }
120
+
121
+ module Mixin
122
+ def to_html
123
+ ::Errors2Html.to_html(self)
124
+ end
125
+
126
+ def to_s
127
+ to_html
128
+ end
129
+ end
116
130
  end
117
131
 
118
- require 'active_model' unless defined?(ActiveModel)
119
- ActiveModel::Errors.send(:include, Errors2Html)
132
+ ##
133
+ #
134
+ require 'active_model' unless defined?(ActiveModel)
135
+
136
+ ActiveModel::Errors.send(:include, Errors2Html::Mixin)
120
137
 
138
+ ActiveModel::Errors.class_eval do
139
+ def inspect(*args, &block)
140
+ to_hash.inspect(*args, &block)
141
+ end
142
+ end
@@ -3,7 +3,7 @@
3
3
 
4
4
  Gem::Specification::new do |spec|
5
5
  spec.name = "rails_errors2html"
6
- spec.version = "1.0.2"
6
+ spec.version = "1.3.0"
7
7
  spec.platform = Gem::Platform::RUBY
8
8
  spec.summary = "rails_errors2html"
9
9
  spec.description = "<%= form_for @post do %> <%= @post.errors.to_html %>"
@@ -25,6 +25,8 @@ Gem::Specification::new do |spec|
25
25
  spec.test_files = nil
26
26
 
27
27
 
28
+ spec.add_dependency(*["fattr", " >= 2.2.1"])
29
+
28
30
  spec.add_dependency(*["map", " >= 6.2.0"])
29
31
 
30
32
  spec.add_dependency(*["rails_view", " >= 1.0.1"])
@@ -3,6 +3,8 @@ require_relative '../test/testing.rb'
3
3
 
4
4
  Testing Errors2Html do
5
5
 
6
+ ##
7
+ #
6
8
  testing 'simple rendering' do
7
9
  errors = ActiveModel::Errors.new(base = Map.new)
8
10
  errors.add :base, 'error on base'
@@ -22,7 +24,6 @@ Testing Errors2Html do
22
24
  <dt class="errors-title">
23
25
  Field
24
26
  </dt>
25
-
26
27
  <dd class="errors-message">
27
28
  error on field
28
29
  </dd>
@@ -30,8 +31,58 @@ Testing Errors2Html do
30
31
  </div>
31
32
  __
32
33
 
33
- compress = proc do |string|
34
- end
34
+ assert{ compress(errors.to_html) == compress(expected) }
35
+ assert{ compress(errors) == compress(expected) }
36
+ end
37
+
38
+
39
+ ##
40
+ #
41
+ testing 'map-y errors' do
42
+ errors = Map.new
43
+ errors.set '*', 'error on base'
44
+ errors.set 'field', 'error on field'
45
+ errors.set 'a', 'b', 'c', %w'one two three'
46
+ errors.extend(Errors2Html::Mixin)
47
+
48
+ expected = <<-__
49
+ <div class="errors2html errors-summary">
50
+ <h4 class="errors-caption">Sorry, we encountered some errors:</h4>
51
+
52
+
53
+ <ul class="errors-global-list">
54
+ <li class="errors-message">
55
+ error on base
56
+ </li>
57
+ </ul>
58
+
59
+
60
+ <dl class="errors-fields-list">
61
+ <dt class="errors-title">
62
+ Field
63
+ </dt>
64
+ <dd class="errors-message">
65
+ error on field
66
+ </dd>
67
+
68
+ <dt class="errors-title">
69
+ A B C
70
+ </dt>
71
+ <dd class="errors-message">
72
+ one
73
+ </dd>
74
+
75
+ <dd class="errors-message">
76
+ two
77
+ </dd>
78
+
79
+ <dd class="errors-message">
80
+ three
81
+ </dd>
82
+
83
+ </dl>
84
+ </div>
85
+ __
35
86
 
36
87
  assert{ compress(errors.to_html) == compress(expected) }
37
88
  assert{ compress(errors) == compress(expected) }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_errors2html
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -11,6 +11,22 @@ bindir: bin
11
11
  cert_chain: []
12
12
  date: 2012-12-08 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: fattr
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 2.2.1
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 2.2.1
14
30
  - !ruby/object:Gem::Dependency
15
31
  name: map
16
32
  requirement: !ruby/object:Gem::Requirement