JunKikuchi-block-html 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.0.2
@@ -1,114 +1,106 @@
1
1
  class BlockHTML
2
- def self.normalize_model_name(model)
3
- model.class.name.gsub(/::/, '_').downcase
4
- end
5
-
6
- def normalize_params(_name, params)
7
- if @model.nil?
8
- id = params[:id] || _name
9
- name = _name
10
- else
11
- model_name = self.class.normalize_model_name(@model)
12
- id = params[:id] || "#{model_name}_#{_name}"
13
- name = "#{model_name}[#{_name}]"
2
+ class Form < BlockHTML
3
+ def tag(tag, attrs={}, &block)
4
+ self << Tag.new(nil, tag, attrs, @env_instance, &block)
14
5
  end
15
6
 
16
- value = @model[_name.to_sym] unless @model.nil?
17
- value ||= params[:value] || params[:default] || nil
18
-
19
- label = params[:label] || _name
7
+ def form(attrs={}, &block)
8
+ tag(:form, attrs, &block)
9
+ end
20
10
 
21
- errors = @model.errors[_name.to_sym] unless @model.nil?
22
- errors ||= params[:error] || []
11
+ class Tag < BlockHTML::Tag
12
+ def initialize(model, name, attrs={}, env_instance=nil, &block)
13
+ @model = model
14
+ super(name, attrs, env_instance, &block)
15
+ end
23
16
 
24
- [id, name, value, label, errors]
25
- end
26
- private :normalize_params
17
+ def tag(tag, attrs={}, &block)
18
+ self << Tag.new(@model, tag, attrs, @env_instance, &block)
19
+ end
27
20
 
28
- def error_tag(bhtml, errors)
29
- bhtml.tag(:div, :class => :form_error_messages) do |div|
30
- errors.each do |error|
31
- div.tag(:p, :class => :form_error_message) do |_p|
32
- _p.text error
33
- end
21
+ def model(model, &block)
22
+ @model = model
23
+ block.call(self)
24
+ @model = nil
34
25
  end
35
- end unless errors.empty?
36
- end
37
- private :error_tag
38
26
 
39
- def form(attrs={}, &block)
40
- tag :form, attrs do |form|
41
- form.tag :dl, &block
42
- end
43
- end
27
+ def errors(name, params={})
28
+ return if @model.nil? || @model.errors[name].empty?
44
29
 
45
- def for(model, &block)
46
- @model = model
47
- block.call self
48
- @model = nil
49
- end
30
+ tag(:div, params) {
31
+ @model.errors.on(name).each do |val|
32
+ tag(:p).text(val)
33
+ end
34
+ }
35
+ end
50
36
 
51
- #
52
- # params[:id]
53
- # params[:value]
54
- # params[:default]
55
- # params[:label]
56
- #
57
- def edit(_name, params={})
58
- id, name, value, label, errors = normalize_params(_name, params)
37
+ def edit(name, attrs={})
38
+ self << Element::Input.new(
39
+ @model,
40
+ attrs.merge(:name => name, :type => :text)
41
+ )
42
+ end
59
43
 
60
- tag(:dt).tag(:label, :for => id).text label
61
- tag(:dd) do |dd|
62
- dd.tag :input,
63
- :type => :text,
64
- :id => id,
65
- :name => name,
66
- :value => value
67
- error_tag(dd, errors)
68
- end
69
- end
44
+ %w(file hidden).each do |type|
45
+ class_eval %Q{
46
+ def #{type}(name, attrs={})
47
+ self << Element::Input.new(
48
+ @model,
49
+ attrs.merge(:name => name, :type => :#{type})
50
+ )
51
+ end
52
+ }
53
+ end
70
54
 
71
- def password(_name, params={})
72
- id, name, value, label, errors = normalize_params(_name, params)
55
+ %w(submit reset button radio).each do |type|
56
+ class_eval %Q{
57
+ def #{type}(name, attrs={})
58
+ self << Element::Button.new(
59
+ @model,
60
+ attrs.merge(:name => name, :type => :#{type})
61
+ )
62
+ end
63
+ }
64
+ end
73
65
 
74
- tag(:dt).tag(:label, :for => id).text label
75
- tag(:dd) do |dd|
76
- dd.tag :input,
77
- :type => :password,
78
- :id => id,
79
- :name => name
80
- error_tag(dd, errors)
66
+ def checkbox(name, attrs={})
67
+ self << Element::Checkbox.new(
68
+ @model,
69
+ attrs.merge(:name => name, :type => :checkbox)
70
+ )
71
+ end
81
72
  end
82
- end
83
-
84
- def checkbox(_name, params={})
85
- id, name, value, label, errors = normalize_params(_name, params)
86
73
 
87
- attrs = {
88
- :type => 'submit',
89
- :id => id,
90
- :name => name
91
- }
92
- attrs[:checked] = '' if value
74
+ class Element < BlockHTML
75
+ def initialize(model, attrs)
76
+ super()
77
+ @model = model
78
+ @attrs = attrs
79
+ @name = @attrs[:name]
80
+ @id = @attrs[:id] || @name
81
+ @value = @model ? @model.__send__(@name) : @attrs[:value]
82
+ end
93
83
 
94
- tag(:dt).tag(:label, :for => id).text label
95
- tag(:dd) do |dd|
96
- dd.tag :input, attrs
97
- error_tag(dd, errors)
98
- end
99
- end
84
+ class Input < Element
85
+ def initialize(model, attrs)
86
+ super(model, attrs)
87
+ tag(:input, @attrs.merge(:id => @id, :value => @value))
88
+ end
89
+ end
100
90
 
101
- def submit(_name, params={})
102
- id, name, value, label, errors = normalize_params(_name, params)
91
+ class Button < Element
92
+ def initialize(model, attrs)
93
+ super(model, attrs)
94
+ tag(:input, @attrs.merge(:id => @id, :value => @value || @name))
95
+ end
96
+ end
103
97
 
104
- tag(:dt).text
105
- tag(:dd) do |dd|
106
- dd.tag :input,
107
- :type => :submit,
108
- :id => id,
109
- :name => name,
110
- :value => label || name
111
- error_tag(dd, errors)
98
+ class Checkbox < Element
99
+ def initialize(model, attrs)
100
+ super(model, attrs)
101
+ tag(:input, @value ? @attrs.merge(:checked => '') : @attrs)
102
+ end
103
+ end
112
104
  end
113
105
  end
114
106
  end
data/lib/block-html.rb CHANGED
@@ -71,6 +71,12 @@ class BlockHTML
71
71
  self
72
72
  end
73
73
 
74
+ def form(attrs={}, &block)
75
+ self << Form.new(@env_instance) {
76
+ form(attrs, &block)
77
+ }
78
+ end
79
+
74
80
  def render(renderer)
75
81
  each do |node|
76
82
  node.render(renderer)
@@ -140,14 +146,6 @@ class BlockHTML
140
146
  super(env_instance, &block)
141
147
  end
142
148
 
143
- def [](key)
144
- @attrs[key]
145
- end
146
-
147
- def []=(key, val)
148
- @attrs[key] = val
149
- end
150
-
151
149
  def render(renderer)
152
150
  renderer.tag(self, @name, @attrs)
153
151
  end
@@ -291,4 +289,6 @@ class BlockHTML
291
289
  @buf
292
290
  end
293
291
  end
292
+
293
+ autoload :Form, 'block-html/form'
294
294
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: JunKikuchi-block-html
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jun Kikuchi
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-08-26 00:00:00 -07:00
12
+ date: 2009-09-06 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -33,6 +33,7 @@ files:
33
33
  - spec/block-html_spec.rb
34
34
  has_rdoc: false
35
35
  homepage: http://github.com/JunKikuchi/block-html
36
+ licenses:
36
37
  post_install_message:
37
38
  rdoc_options:
38
39
  - --charset=UTF-8
@@ -53,7 +54,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
53
54
  requirements: []
54
55
 
55
56
  rubyforge_project:
56
- rubygems_version: 1.2.0
57
+ rubygems_version: 1.3.5
57
58
  signing_key:
58
59
  specification_version: 3
59
60
  summary: block-html