formal 0.0.2 → 0.0.3

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/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/README.md CHANGED
@@ -38,6 +38,10 @@ f.text_area
38
38
  f.select
39
39
  f.email_field
40
40
  f.search_field
41
+ f.telephone_field
42
+ f.number_field
43
+ f.file_field
44
+ f.range_field
41
45
  ```
42
46
 
43
47
  __Example:__
@@ -58,7 +62,7 @@ Also provided is a helper for a label with a checkbox __inside__ it (which is
58
62
  also wrapped in a ```<dt>```). Use:
59
63
 
60
64
  ```ruby
61
- f.checkbox_with_label :published
65
+ f.check_box_with_label :published
62
66
  ```
63
67
 
64
68
  which returns:
data/Rakefile CHANGED
@@ -1,2 +1,11 @@
1
1
  #!/usr/bin/env rake
2
2
  require "bundler/gem_tasks"
3
+ require 'rspec/core/rake_task'
4
+
5
+ desc 'Default: run tests.'
6
+ task :default => :spec
7
+
8
+ desc 'Run formal tests.'
9
+ RSpec::Core::RakeTask.new('spec') do |t|
10
+ t.pattern = FileList['spec/**/*_spec.rb']
11
+ end
data/formal.gemspec CHANGED
@@ -6,7 +6,7 @@ Gem::Specification.new do |gem|
6
6
  gem.email = [""]
7
7
  gem.description = %q{Helpful form builder used by Rocketeers}
8
8
  gem.summary = %q{A form builder that wraps form fields the way we like it at Hashrocket}
9
- gem.homepage = ""
9
+ gem.homepage = "http://github.com/mrmicahcooper/formal"
10
10
 
11
11
  gem.files = `git ls-files`.split($\)
12
12
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
@@ -14,4 +14,6 @@ Gem::Specification.new do |gem|
14
14
  gem.name = "formal"
15
15
  gem.require_paths = ["lib"]
16
16
  gem.version = Formal::VERSION
17
+
18
+ gem.add_development_dependency("rspec-rails")
17
19
  end
@@ -1,3 +1,3 @@
1
1
  module Formal
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
data/lib/formal.rb CHANGED
@@ -5,7 +5,7 @@ module Formal
5
5
 
6
6
  ActionView::Base.field_error_proc = proc { |input, instance| input }
7
7
 
8
- @@field_helper_methods = %w(label_tag text_field password_field text_area select email_field search_field)
8
+ @@field_helper_methods = %w(label_tag text_field password_field text_area select email_field search_field telephone_field number_field file_field range_field)
9
9
 
10
10
  def label(method, text = nil, options = {}, &block)
11
11
  text = text || method.to_s.humanize
@@ -23,7 +23,8 @@ module Formal
23
23
 
24
24
  @@field_helper_methods.each do |method_name|
25
25
  define_method method_name do |*args|
26
- if object.errors.any?
26
+ method_name = args.first
27
+ if object.errors[method_name].present?
27
28
  @template.content_tag(:dd, super(*args), class: 'error')
28
29
  else
29
30
  @template.content_tag(:dd, super(*args))
@@ -36,6 +37,6 @@ module Formal
36
37
  box = [check_box(method, *args).html_safe, text].join(" ")
37
38
  label(method, box, *args)
38
39
  end
39
-
40
40
  end
41
+
41
42
  end
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+
3
+ describe Formal do
4
+ include FormalSpecHelper
5
+
6
+ before do
7
+ @post = Post.new
8
+ @output = ''
9
+ end
10
+
11
+ it 'should yield the formal builder' do
12
+ form_for(@post, builder: Formal::Builder) do |f|
13
+ f.should be_kind_of(Formal::Builder)
14
+ end
15
+ end
16
+
17
+ it 'should wrap input inside dd tag' do
18
+ with_builder do |f|
19
+ f.text_field :body
20
+ end
21
+
22
+ expected = %q{<dd><input id="post_body" name="post[body]" size="30" type="text" /></dd>}
23
+ output.should include(expected)
24
+ end
25
+
26
+ it 'should wrap check box with label inside' do
27
+ with_builder do |f|
28
+ f.check_box_with_label :published
29
+ end
30
+ expected = %q{<dt><label for="post_published"><input name="post[published]" type="hidden" value="0" /><input id="post_published" name="post[published]" type="checkbox" value="1" /> published</label></dt>}
31
+ output.should include(expected)
32
+ end
33
+
34
+ context "with error" do
35
+ let(:invalid_post) { InvalidPost.new }
36
+
37
+ it 'should add error class ONLY to the erroneous dd tag' do
38
+ with_builder(invalid_post) { |f| f.text_field :body }
39
+ expected_error = %q{<dd class="error"><input id="invalid_post_body" name="invalid_post[body]" size="30" type="text" /></dd>}
40
+ output.should include(expected_error)
41
+ end
42
+
43
+ it "does not add the error class to non erroneous dd tags" do
44
+ with_builder(invalid_post) { |f| f.text_field :title }
45
+ expected_error = %q{<dd><input id="invalid_post_title" name="invalid_post[title]" size="30" type="text" /></dd>}
46
+ output.should include(expected_error)
47
+ end
48
+
49
+ end
50
+ end
@@ -0,0 +1,56 @@
1
+ require 'action_view'
2
+ require 'active_model'
3
+
4
+ require File.expand_path(File.join(File.dirname(__FILE__), '../lib/formal'))
5
+ require 'formal'
6
+
7
+ class Post < Struct.new(:body, :published)
8
+ extend ActiveModel::Naming
9
+ include ActiveModel::Conversion
10
+
11
+ def persisted?
12
+ false
13
+ end
14
+
15
+ def errors
16
+ {}
17
+ end
18
+ end
19
+
20
+ class InvalidPost < Struct.new(:body, :title)
21
+ extend ActiveModel::Naming
22
+ include ActiveModel::Conversion
23
+
24
+ def persisted?
25
+ false
26
+ end
27
+
28
+ def errors
29
+ { :body => ["can't be blank"] }
30
+ end
31
+ end
32
+
33
+ module FormalSpecHelper
34
+ include ActionView::Context if defined?(ActionView::Context)
35
+ include ActionController::RecordIdentifier
36
+ include ActionView::Helpers::FormHelper
37
+
38
+ def posts_path(*args)
39
+ "/posts"
40
+ end
41
+ alias :invalid_posts_path :posts_path
42
+
43
+ def protect_against_forgery?
44
+ false
45
+ end
46
+
47
+ def with_builder(model = Post.new)
48
+ @output = form_for(model, builder: Formal::Builder) do |f|
49
+ yield f
50
+ end
51
+ end
52
+
53
+ def output
54
+ @output
55
+ end
56
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: formal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,8 +10,24 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-09-27 00:00:00.000000000 Z
14
- dependencies: []
13
+ date: 2012-11-09 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rspec-rails
17
+ requirement: !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ! '>='
29
+ - !ruby/object:Gem::Version
30
+ version: '0'
15
31
  description: Helpful form builder used by Rocketeers
16
32
  email:
17
33
  - ''
@@ -20,6 +36,7 @@ extensions: []
20
36
  extra_rdoc_files: []
21
37
  files:
22
38
  - .gitignore
39
+ - .rspec
23
40
  - Gemfile
24
41
  - LICENSE
25
42
  - README.md
@@ -27,7 +44,9 @@ files:
27
44
  - formal.gemspec
28
45
  - lib/formal.rb
29
46
  - lib/formal/version.rb
30
- homepage: ''
47
+ - spec/formal_spec.rb
48
+ - spec/spec_helper.rb
49
+ homepage: http://github.com/mrmicahcooper/formal
31
50
  licenses: []
32
51
  post_install_message:
33
52
  rdoc_options: []
@@ -51,4 +70,6 @@ rubygems_version: 1.8.24
51
70
  signing_key:
52
71
  specification_version: 3
53
72
  summary: A form builder that wraps form fields the way we like it at Hashrocket
54
- test_files: []
73
+ test_files:
74
+ - spec/formal_spec.rb
75
+ - spec/spec_helper.rb