JunKikuchi-block-html 0.0.1 → 0.0.2

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/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