semantic_form_for 0.0.1

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/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ .bundle
2
+
3
+ Gemfile.lock
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gemspec
data/README.markdown ADDED
@@ -0,0 +1,50 @@
1
+ Semantic Forms
2
+ ==============
3
+
4
+ semantic_form_for is a Rails FormBuilder DSL that, like Formtastic, makes it
5
+ easier to create semantically awesome, readily stylable, and wonderfully
6
+ accessible HTML forms in your Rails applications.
7
+
8
+ However, it also tries not to do too much. Rather that trying to guess at
9
+ input types, and provide its own sizeable set of customization options to
10
+ each method, it wraps around the existing Rails field helpers.
11
+
12
+ Dependencies
13
+ ============
14
+
15
+ semantic_form_for depends on Haml. Why? It's what I use, and it was marginally
16
+ easier than writing it for ERB.
17
+
18
+ Syntax
19
+ ======
20
+
21
+ = semantic_form_for @user do |user|
22
+ = user.inputs 'Sign in' do
23
+ = user.email_field :email, :placeholder => 'me@example.com'
24
+ = user.password_field :password
25
+ = user.check_box, :remember, 'Remember me'
26
+
27
+ = user.submit 'Sign in'
28
+
29
+ This is equivalent to the following Haml.
30
+
31
+ = form_for @user do |user|
32
+ %fieldset.inputs
33
+ %legend Sign in
34
+ %ol
35
+ %li#user_email_input
36
+ = user.label :email
37
+ = user.email_field :email, :placeholder => 'me@example.com'
38
+ %li#user_password_input
39
+ = user.label :password
40
+ = user.password_field :password
41
+ %li#user_remember_input
42
+ = user.check_box :remember
43
+ = user.label :remember, 'Remember me'
44
+ %li
45
+ = user.submit_tag 'Sign in'
46
+
47
+ That's it. All of the Rails field helpers you know and love work just like
48
+ their normal FormBuilder counterparts, except for the minor addition of an
49
+ optional second parameter to specify the field's label. Everything else works
50
+ as expected, but gives you more semantic markup for free.
@@ -0,0 +1,82 @@
1
+ require 'semantic_form_for'
2
+
3
+ class SemanticFormFor::FormBuilder < ActionView::Helpers::FormBuilder
4
+ attr_reader :template
5
+ attr_reader :object
6
+ attr_reader :object_name
7
+
8
+ FIELDSETS = [ :inputs, :buttons ]
9
+ INPUTS = [ :check_box, :email_field, :file_field, :hidden_field,
10
+ :number_field, :password_field, :radio_button, :range_field,
11
+ :search_field, :select, :text_area, :text_field,
12
+ :url_field ]
13
+ BUTTONS = [ :image_submit, :submit ]
14
+
15
+ FIELDSETS.each do |set|
16
+ define_method set do |text, &block|
17
+ template.capture_haml do
18
+ template.haml_tag :fieldset, :class => set do
19
+ template.haml_tag(:legend, text) if text
20
+ template.haml_tag(:ol, &block)
21
+ end
22
+ end
23
+ end
24
+ end
25
+
26
+ INPUTS.each do |input|
27
+ define_method input do |attribute, *args|
28
+ options = args.extract_options!
29
+ text = args.shift
30
+
31
+ template.capture_haml do
32
+ template.haml_tag(:li, :id => _li_id(attribute)) do
33
+ # check boxes should have their label and input tag in the reverse
34
+ # order
35
+ if input != :check_box
36
+ template.haml_concat self.label(attribute, text)
37
+ template.haml_concat super(attribute, options)
38
+ else
39
+ template.haml_concat super(attribute, options)
40
+ template.haml_concat self.label(attribute, text)
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+ BUTTONS.each do |button|
48
+ define_method button do |text, options = {}|
49
+ template.capture_haml do
50
+ template.haml_tag(:li, :id => nil) do
51
+ template.haml_concat super(text, options)
52
+ end
53
+ end
54
+ end
55
+ end
56
+
57
+ private
58
+
59
+ def _object_name
60
+ self.object_name.to_s.gsub(/\]\[|[^-a-zA-Z0-9:.]/, "_").sub(/_$/, "")
61
+ end
62
+
63
+ def _object_index
64
+ case
65
+ when options.has_key?(:index) then options[:index]
66
+ when defined?(@auto_index) then @auto_index
67
+ else nil
68
+ end.to_s
69
+ end
70
+
71
+ def _attribute_name(attribute)
72
+ attribute.to_s.gsub(/[\?\/\-]$/, '')
73
+ end
74
+
75
+ def _li_id(attribute)
76
+ [
77
+ _object_name + _object_index,
78
+ _attribute_name(attribute),
79
+ 'input'
80
+ ].join('_')
81
+ end
82
+ end
@@ -0,0 +1,21 @@
1
+ require 'semantic_form_for'
2
+
3
+ module SemanticFormFor::FormHelpers
4
+ [:form_for, :field_for, :remote_form_for].each do |method|
5
+ module_eval do
6
+ define_method "semantic_#{method}" do |record, *args, &block|
7
+ options = args.extract_options!
8
+ options[:builder] = SemanticFormFor::FormBuilder
9
+
10
+ class_names = options[:class] ? options[:class].split(' ') : []
11
+ class_names << case record
12
+ when String, Symbol then record.to_s
13
+ when Array then ActiveModel::Naming.singular(record.last.class)
14
+ else ActiveModel::Naming.singular(record.class)
15
+ end
16
+
17
+ send method, record, *(args << options), &block
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,8 @@
1
+ require 'semantic_form_for'
2
+ require 'rails'
3
+
4
+ class SemanticFormFor::Railtie < Rails::Railtie
5
+ initializer 'semantic_form_for.initialize', :after => :after_initialize do
6
+ ActionView::Base.send :include, SemanticFormFor::FormHelpers
7
+ end
8
+ end
@@ -0,0 +1,3 @@
1
+ module SemanticFormFor
2
+ VERSION = '0.0.1'
3
+ end
@@ -0,0 +1,9 @@
1
+ module SemanticFormFor
2
+ require 'semantic_form_for/version'
3
+
4
+ autoload :FormBuilder, 'semantic_form_for/form_builder'
5
+ autoload :FormHelpers, 'semantic_form_for/form_helpers'
6
+ autoload :Railtie, 'semantic_form_for/railtie'
7
+ end
8
+
9
+ SemanticFormFor::Railtie # trigger loading the Railtie
@@ -0,0 +1,21 @@
1
+ require File.expand_path('../lib/semantic_form_for/version', __FILE__)
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = 'semantic_form_for'
5
+ s.version = SemanticFormFor::VERSION
6
+ s.platform = Gem::Platform::RUBY
7
+ s.authors = [ 'Stephen Touset' ]
8
+ s.email = [ 'stephen@touset.org' ]
9
+ s.homepage = 'http://github.com/stouset/semantic_form_for'
10
+ s.summary = 'Simple HTML5-enabled form builder'
11
+ s.description = 'A custom Rails FormBuilder that assumes HTML5. Because HTML4 is for chumps.'
12
+
13
+ s.required_rubygems_version = '>= 1.3.6'
14
+ s.rubyforge_project = 'semantic_form_for'
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.executables = `git ls-files`.split("\n").map {|f| f =~ /^bin\/(.*)/ ? $1 : nil }.compact
18
+ s.require_path = 'lib'
19
+
20
+ s.add_dependency 'haml', '~> 3.0'
21
+ end
metadata ADDED
@@ -0,0 +1,88 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: semantic_form_for
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - Stephen Touset
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-10-29 00:00:00 -04:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: haml
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ~>
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 3
30
+ - 0
31
+ version: "3.0"
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ description: A custom Rails FormBuilder that assumes HTML5. Because HTML4 is for chumps.
35
+ email:
36
+ - stephen@touset.org
37
+ executables: []
38
+
39
+ extensions: []
40
+
41
+ extra_rdoc_files: []
42
+
43
+ files:
44
+ - .gitignore
45
+ - Gemfile
46
+ - README.markdown
47
+ - lib/semantic_form_for.rb
48
+ - lib/semantic_form_for/form_builder.rb
49
+ - lib/semantic_form_for/form_helpers.rb
50
+ - lib/semantic_form_for/railtie.rb
51
+ - lib/semantic_form_for/version.rb
52
+ - semantic_form_for.gemspec
53
+ has_rdoc: true
54
+ homepage: http://github.com/stouset/semantic_form_for
55
+ licenses: []
56
+
57
+ post_install_message:
58
+ rdoc_options: []
59
+
60
+ require_paths:
61
+ - lib
62
+ required_ruby_version: !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ segments:
68
+ - 0
69
+ version: "0"
70
+ required_rubygems_version: !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ segments:
76
+ - 1
77
+ - 3
78
+ - 6
79
+ version: 1.3.6
80
+ requirements: []
81
+
82
+ rubyforge_project: semantic_form_for
83
+ rubygems_version: 1.3.7
84
+ signing_key:
85
+ specification_version: 3
86
+ summary: Simple HTML5-enabled form builder
87
+ test_files: []
88
+