formtastic 1.1.0 → 1.2.0.beta
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/MIT-LICENSE +1 -1
- data/README.textile +80 -66
- data/generators/form/form_generator.rb +37 -46
- data/generators/formtastic/formtastic_generator.rb +10 -8
- data/lib/formtastic.rb +318 -227
- data/lib/formtastic/i18n.rb +8 -6
- data/lib/formtastic/layout_helper.rb +6 -4
- data/lib/formtastic/railtie.rb +3 -1
- data/lib/formtastic/util.rb +2 -0
- data/lib/generators/formtastic/form/form_generator.rb +5 -7
- data/lib/generators/formtastic/install/install_generator.rb +2 -9
- data/lib/generators/templates/_form.html.erb +5 -0
- data/lib/generators/templates/_form.html.haml +4 -0
- data/{generators/formtastic → lib/generators}/templates/formtastic.css +25 -11
- data/{generators/formtastic → lib/generators}/templates/formtastic.rb +19 -2
- data/{generators/formtastic → lib/generators}/templates/formtastic_changes.css +0 -0
- metadata +58 -98
- data/Rakefile +0 -127
- data/generators/form/templates/view__form.html.erb +0 -5
- data/generators/form/templates/view__form.html.haml +0 -4
- data/generators/formtastic_stylesheets/formtastic_stylesheets_generator.rb +0 -16
- data/init.rb +0 -5
- data/rails/init.rb +0 -2
- data/spec/buttons_spec.rb +0 -166
- data/spec/commit_button_spec.rb +0 -401
- data/spec/custom_builder_spec.rb +0 -98
- data/spec/defaults_spec.rb +0 -20
- data/spec/error_proc_spec.rb +0 -27
- data/spec/errors_spec.rb +0 -105
- data/spec/form_helper_spec.rb +0 -142
- data/spec/helpers/layout_helper_spec.rb +0 -21
- data/spec/i18n_spec.rb +0 -152
- data/spec/include_blank_spec.rb +0 -74
- data/spec/input_spec.rb +0 -786
- data/spec/inputs/boolean_input_spec.rb +0 -104
- data/spec/inputs/check_boxes_input_spec.rb +0 -426
- data/spec/inputs/country_input_spec.rb +0 -118
- data/spec/inputs/date_input_spec.rb +0 -168
- data/spec/inputs/datetime_input_spec.rb +0 -310
- data/spec/inputs/file_input_spec.rb +0 -34
- data/spec/inputs/hidden_input_spec.rb +0 -78
- data/spec/inputs/numeric_input_spec.rb +0 -44
- data/spec/inputs/password_input_spec.rb +0 -46
- data/spec/inputs/radio_input_spec.rb +0 -243
- data/spec/inputs/select_input_spec.rb +0 -546
- data/spec/inputs/string_input_spec.rb +0 -64
- data/spec/inputs/text_input_spec.rb +0 -34
- data/spec/inputs/time_input_spec.rb +0 -206
- data/spec/inputs/time_zone_input_spec.rb +0 -110
- data/spec/inputs_spec.rb +0 -476
- data/spec/label_spec.rb +0 -89
- data/spec/semantic_errors_spec.rb +0 -98
- data/spec/semantic_fields_for_spec.rb +0 -45
- data/spec/spec.opts +0 -2
- data/spec/spec_helper.rb +0 -289
- data/spec/support/custom_macros.rb +0 -494
- data/spec/support/output_buffer.rb +0 -4
- data/spec/support/test_environment.rb +0 -45
    
        data/spec/custom_builder_spec.rb
    DELETED
    
    | @@ -1,98 +0,0 @@ | |
| 1 | 
            -
            # coding: utf-8
         | 
| 2 | 
            -
            require 'spec_helper'
         | 
| 3 | 
            -
             | 
| 4 | 
            -
            describe 'Formtastic::SemanticFormHelper.builder' do
         | 
| 5 | 
            -
             | 
| 6 | 
            -
              include FormtasticSpecHelper
         | 
| 7 | 
            -
              
         | 
| 8 | 
            -
              class MyCustomFormBuilder < ::Formtastic::SemanticFormBuilder
         | 
| 9 | 
            -
                def awesome_input(method, options)
         | 
| 10 | 
            -
                  self.text_field(method)
         | 
| 11 | 
            -
                end
         | 
| 12 | 
            -
              end
         | 
| 13 | 
            -
              
         | 
| 14 | 
            -
              before do
         | 
| 15 | 
            -
                @output_buffer = ''
         | 
| 16 | 
            -
                mock_everything
         | 
| 17 | 
            -
              end
         | 
| 18 | 
            -
              
         | 
| 19 | 
            -
              it 'is the Formtastic::SemanticFormBuilder by default' do
         | 
| 20 | 
            -
                ::Formtastic::SemanticFormHelper.builder.should == ::Formtastic::SemanticFormBuilder
         | 
| 21 | 
            -
              end
         | 
| 22 | 
            -
              
         | 
| 23 | 
            -
              it 'can be configured to use your own custom form builder' do
         | 
| 24 | 
            -
                # Set it to a custom builder class
         | 
| 25 | 
            -
                ::Formtastic::SemanticFormHelper.builder = MyCustomFormBuilder
         | 
| 26 | 
            -
                ::Formtastic::SemanticFormHelper.builder.should == MyCustomFormBuilder
         | 
| 27 | 
            -
                
         | 
| 28 | 
            -
                # Reset it to the default
         | 
| 29 | 
            -
                ::Formtastic::SemanticFormHelper.builder = ::Formtastic::SemanticFormBuilder
         | 
| 30 | 
            -
                ::Formtastic::SemanticFormHelper.builder.should == ::Formtastic::SemanticFormBuilder
         | 
| 31 | 
            -
              end
         | 
| 32 | 
            -
             | 
| 33 | 
            -
              it 'should allow custom settings per form builder subclass' do
         | 
| 34 | 
            -
                with_config(:all_fields_required_by_default, true) do
         | 
| 35 | 
            -
                  MyCustomFormBuilder.all_fields_required_by_default = false
         | 
| 36 | 
            -
             | 
| 37 | 
            -
                  MyCustomFormBuilder.all_fields_required_by_default.should be_false
         | 
| 38 | 
            -
                  ::Formtastic::SemanticFormBuilder.all_fields_required_by_default.should be_true
         | 
| 39 | 
            -
                end
         | 
| 40 | 
            -
              end
         | 
| 41 | 
            -
             | 
| 42 | 
            -
              describe "when using a custom builder" do
         | 
| 43 | 
            -
                
         | 
| 44 | 
            -
                before do
         | 
| 45 | 
            -
                  @new_post.stub!(:title)
         | 
| 46 | 
            -
                  ::Formtastic::SemanticFormHelper.builder = MyCustomFormBuilder
         | 
| 47 | 
            -
                end
         | 
| 48 | 
            -
                
         | 
| 49 | 
            -
                after do
         | 
| 50 | 
            -
                  ::Formtastic::SemanticFormHelper.builder = ::Formtastic::SemanticFormBuilder
         | 
| 51 | 
            -
                end
         | 
| 52 | 
            -
                
         | 
| 53 | 
            -
                describe "semantic_form_for" do
         | 
| 54 | 
            -
                  
         | 
| 55 | 
            -
                  it "should yield an instance of the custom builder" do
         | 
| 56 | 
            -
                    semantic_form_for(@new_post) do |builder|
         | 
| 57 | 
            -
                      builder.class.should == MyCustomFormBuilder
         | 
| 58 | 
            -
                    end
         | 
| 59 | 
            -
                  end
         | 
| 60 | 
            -
                  
         | 
| 61 | 
            -
                  it "should allow me to call my custom input" do
         | 
| 62 | 
            -
                    semantic_form_for(@new_post) do |builder|
         | 
| 63 | 
            -
                      concat(builder.input(:title, :as => :awesome))
         | 
| 64 | 
            -
                    end
         | 
| 65 | 
            -
                  end
         | 
| 66 | 
            -
                
         | 
| 67 | 
            -
                end
         | 
| 68 | 
            -
             | 
| 69 | 
            -
                describe "semantic_fields_for" do
         | 
| 70 | 
            -
             | 
| 71 | 
            -
                  it "should yield an instance of the parent form builder" do
         | 
| 72 | 
            -
                    semantic_form_for(@new_post) do |builder|
         | 
| 73 | 
            -
                      builder.semantic_fields_for(:author) do |nested_builder|
         | 
| 74 | 
            -
                        nested_builder.class.should == MyCustomFormBuilder
         | 
| 75 | 
            -
                      end
         | 
| 76 | 
            -
                    end
         | 
| 77 | 
            -
                  end
         | 
| 78 | 
            -
             | 
| 79 | 
            -
                end
         | 
| 80 | 
            -
                
         | 
| 81 | 
            -
              end
         | 
| 82 | 
            -
             | 
| 83 | 
            -
              describe "when using a builder passed to form options" do
         | 
| 84 | 
            -
             | 
| 85 | 
            -
                describe "semantic_fields_for" do
         | 
| 86 | 
            -
             | 
| 87 | 
            -
                  it "should yield an instance of the parent form builder" do
         | 
| 88 | 
            -
                    semantic_form_for(@new_post, :builder => MyCustomFormBuilder) do |builder|
         | 
| 89 | 
            -
                      builder.semantic_fields_for(:author) do |nested_builder|
         | 
| 90 | 
            -
                        nested_builder.class.should == MyCustomFormBuilder
         | 
| 91 | 
            -
                      end
         | 
| 92 | 
            -
                    end
         | 
| 93 | 
            -
                  end
         | 
| 94 | 
            -
             | 
| 95 | 
            -
                end
         | 
| 96 | 
            -
             | 
| 97 | 
            -
              end
         | 
| 98 | 
            -
            end
         | 
    
        data/spec/defaults_spec.rb
    DELETED
    
    | @@ -1,20 +0,0 @@ | |
| 1 | 
            -
            # coding: utf-8
         | 
| 2 | 
            -
            require 'spec_helper'
         | 
| 3 | 
            -
             | 
| 4 | 
            -
            describe 'Formtastic::SemanticFormBuilder-defaults' do
         | 
| 5 | 
            -
              
         | 
| 6 | 
            -
              # Note: This spec might make better sense somewhere else. Just temporary.
         | 
| 7 | 
            -
              
         | 
| 8 | 
            -
              describe "required string" do
         | 
| 9 | 
            -
                
         | 
| 10 | 
            -
                it "should render proc with I18n correctly" do
         | 
| 11 | 
            -
                  ::I18n.backend.store_translations :en, :formtastic => {:required => 'Haha!'}
         | 
| 12 | 
            -
                  
         | 
| 13 | 
            -
                  required_string = Formtastic::SemanticFormBuilder.required_string
         | 
| 14 | 
            -
                  required_string = required_string.is_a?(::Proc) ? required_string.call : required_string.to_s
         | 
| 15 | 
            -
                  required_string.should == %{<abbr title="Haha!">*</abbr>}
         | 
| 16 | 
            -
                end
         | 
| 17 | 
            -
                
         | 
| 18 | 
            -
              end
         | 
| 19 | 
            -
              
         | 
| 20 | 
            -
            end
         | 
    
        data/spec/error_proc_spec.rb
    DELETED
    
    | @@ -1,27 +0,0 @@ | |
| 1 | 
            -
            # coding: utf-8
         | 
| 2 | 
            -
            require 'spec_helper'
         | 
| 3 | 
            -
             | 
| 4 | 
            -
            describe 'Rails field_error_proc' do
         | 
| 5 | 
            -
              
         | 
| 6 | 
            -
              include FormtasticSpecHelper
         | 
| 7 | 
            -
              
         | 
| 8 | 
            -
              before do
         | 
| 9 | 
            -
                @output_buffer = ''
         | 
| 10 | 
            -
                mock_everything
         | 
| 11 | 
            -
              end
         | 
| 12 | 
            -
              
         | 
| 13 | 
            -
              it "should not be overridden globally for all form builders" do
         | 
| 14 | 
            -
                current_field_error_proc = ::ActionView::Base.field_error_proc
         | 
| 15 | 
            -
                
         | 
| 16 | 
            -
                semantic_form_for(@new_post) do |builder|
         | 
| 17 | 
            -
                  ::ActionView::Base.field_error_proc.should_not == current_field_error_proc
         | 
| 18 | 
            -
                end
         | 
| 19 | 
            -
                
         | 
| 20 | 
            -
                ::ActionView::Base.field_error_proc.should == current_field_error_proc
         | 
| 21 | 
            -
                
         | 
| 22 | 
            -
                form_for(@new_post) do |builder|
         | 
| 23 | 
            -
                  ::ActionView::Base.field_error_proc.should == current_field_error_proc
         | 
| 24 | 
            -
                end
         | 
| 25 | 
            -
              end
         | 
| 26 | 
            -
              
         | 
| 27 | 
            -
            end
         | 
    
        data/spec/errors_spec.rb
    DELETED
    
    | @@ -1,105 +0,0 @@ | |
| 1 | 
            -
            # coding: utf-8
         | 
| 2 | 
            -
            require 'spec_helper'
         | 
| 3 | 
            -
             | 
| 4 | 
            -
            describe 'SemanticFormBuilder#errors_on' do
         | 
| 5 | 
            -
              
         | 
| 6 | 
            -
              include FormtasticSpecHelper
         | 
| 7 | 
            -
              
         | 
| 8 | 
            -
              before do
         | 
| 9 | 
            -
                @output_buffer = ''
         | 
| 10 | 
            -
                mock_everything
         | 
| 11 | 
            -
                @title_errors = ['must not be blank', 'must be longer than 10 characters', 'must be awesome']
         | 
| 12 | 
            -
                @errors = mock('errors')
         | 
| 13 | 
            -
                @new_post.stub!(:errors).and_return(@errors)
         | 
| 14 | 
            -
              end
         | 
| 15 | 
            -
              
         | 
| 16 | 
            -
              describe 'when there are errors' do
         | 
| 17 | 
            -
                before do
         | 
| 18 | 
            -
                  @errors.stub!(:[]).with(:title).and_return(@title_errors)
         | 
| 19 | 
            -
                end
         | 
| 20 | 
            -
                
         | 
| 21 | 
            -
                it 'should render a paragraph with the errors joined into a sentence when inline_errors config is :sentence' do
         | 
| 22 | 
            -
                  ::Formtastic::SemanticFormBuilder.inline_errors = :sentence
         | 
| 23 | 
            -
                  semantic_form_for(@new_post) do |builder|
         | 
| 24 | 
            -
                    builder.errors_on(:title).should have_tag('p.inline-errors', @title_errors.to_sentence)
         | 
| 25 | 
            -
                  end
         | 
| 26 | 
            -
                end
         | 
| 27 | 
            -
                
         | 
| 28 | 
            -
                it 'should render an unordered list with the class errors when inline_errors config is :list' do
         | 
| 29 | 
            -
                  ::Formtastic::SemanticFormBuilder.inline_errors = :list
         | 
| 30 | 
            -
                  semantic_form_for(@new_post) do |builder|
         | 
| 31 | 
            -
                    builder.errors_on(:title).should have_tag('ul.errors')
         | 
| 32 | 
            -
                    @title_errors.each do |error|
         | 
| 33 | 
            -
                      builder.errors_on(:title).should have_tag('ul.errors li', error)
         | 
| 34 | 
            -
                    end
         | 
| 35 | 
            -
                  end
         | 
| 36 | 
            -
                end
         | 
| 37 | 
            -
             | 
| 38 | 
            -
                it 'should render a paragraph with the first error when inline_errors config is :first' do
         | 
| 39 | 
            -
                  ::Formtastic::SemanticFormBuilder.inline_errors = :first
         | 
| 40 | 
            -
                  semantic_form_for(@new_post) do |builder|
         | 
| 41 | 
            -
                    builder.errors_on(:title).should have_tag('p.inline-errors', @title_errors.first)
         | 
| 42 | 
            -
                  end
         | 
| 43 | 
            -
                end
         | 
| 44 | 
            -
                
         | 
| 45 | 
            -
                it 'should return nil when inline_errors config is :none' do
         | 
| 46 | 
            -
                  ::Formtastic::SemanticFormBuilder.inline_errors = :none
         | 
| 47 | 
            -
                  semantic_form_for(@new_post) do |builder|
         | 
| 48 | 
            -
                    builder.errors_on(:title).should be_nil
         | 
| 49 | 
            -
                  end
         | 
| 50 | 
            -
                end
         | 
| 51 | 
            -
                
         | 
| 52 | 
            -
              end
         | 
| 53 | 
            -
              
         | 
| 54 | 
            -
              describe 'when there are no errors (nil)' do
         | 
| 55 | 
            -
                before do
         | 
| 56 | 
            -
                  @errors.stub!(:[]).with(:title).and_return(nil)
         | 
| 57 | 
            -
                end
         | 
| 58 | 
            -
                
         | 
| 59 | 
            -
                it 'should return nil when inline_errors config is :sentence, :list or :none' do
         | 
| 60 | 
            -
                  [:sentence, :list, :none].each do |config|
         | 
| 61 | 
            -
                    ::Formtastic::SemanticFormBuilder.inline_errors = config
         | 
| 62 | 
            -
                    semantic_form_for(@new_post) do |builder|
         | 
| 63 | 
            -
                      builder.errors_on(:title).should be_nil
         | 
| 64 | 
            -
                    end
         | 
| 65 | 
            -
                  end
         | 
| 66 | 
            -
                end
         | 
| 67 | 
            -
              end
         | 
| 68 | 
            -
              
         | 
| 69 | 
            -
              describe 'when there are no errors (empty array)' do
         | 
| 70 | 
            -
                before do
         | 
| 71 | 
            -
                  @errors.stub!(:[]).with(:title).and_return([])
         | 
| 72 | 
            -
                end
         | 
| 73 | 
            -
                
         | 
| 74 | 
            -
                it 'should return nil when inline_errors config is :sentence, :list or :none' do
         | 
| 75 | 
            -
                  [:sentence, :list, :none].each do |config|
         | 
| 76 | 
            -
                    ::Formtastic::SemanticFormBuilder.inline_errors = config
         | 
| 77 | 
            -
                    semantic_form_for(@new_post) do |builder|
         | 
| 78 | 
            -
                      builder.errors_on(:title).should be_nil
         | 
| 79 | 
            -
                    end
         | 
| 80 | 
            -
                  end
         | 
| 81 | 
            -
                end
         | 
| 82 | 
            -
              end
         | 
| 83 | 
            -
              
         | 
| 84 | 
            -
              
         | 
| 85 | 
            -
              describe 'when there are errors on the association and column' do
         | 
| 86 | 
            -
                
         | 
| 87 | 
            -
                it "should list all unique errors" do
         | 
| 88 | 
            -
                  ::Formtastic::SemanticFormBuilder.inline_errors = :list
         | 
| 89 | 
            -
                  ::Post.stub!(:reflections).and_return({:author => mock('reflection', :options => {}, :macro => :belongs_to)})
         | 
| 90 | 
            -
                  
         | 
| 91 | 
            -
                  @errors.stub!(:[]).with(:author).and_return(['must not be blank'])
         | 
| 92 | 
            -
                  @errors.stub!(:[]).with(:author_id).and_return(['is already taken', 'must not be blank']) # note the duplicate of association
         | 
| 93 | 
            -
                  
         | 
| 94 | 
            -
                  form = semantic_form_for(@new_post) do |builder|
         | 
| 95 | 
            -
                    concat(builder.input(:author))
         | 
| 96 | 
            -
                  end
         | 
| 97 | 
            -
                  output_buffer.concat(form) if Formtastic::Util.rails3?
         | 
| 98 | 
            -
                  output_buffer.should have_tag("ul.errors li", /must not be blank/, :count => 1)
         | 
| 99 | 
            -
                  output_buffer.should have_tag("ul.errors li", /is already taken/, :count => 1)
         | 
| 100 | 
            -
                end
         | 
| 101 | 
            -
                
         | 
| 102 | 
            -
              end
         | 
| 103 | 
            -
              
         | 
| 104 | 
            -
            end
         | 
| 105 | 
            -
             | 
    
        data/spec/form_helper_spec.rb
    DELETED
    
    | @@ -1,142 +0,0 @@ | |
| 1 | 
            -
            # coding: utf-8
         | 
| 2 | 
            -
            require 'spec_helper'
         | 
| 3 | 
            -
             | 
| 4 | 
            -
            describe 'SemanticFormHelper' do
         | 
| 5 | 
            -
              
         | 
| 6 | 
            -
              include FormtasticSpecHelper
         | 
| 7 | 
            -
              
         | 
| 8 | 
            -
              before do
         | 
| 9 | 
            -
                @output_buffer = ''
         | 
| 10 | 
            -
                mock_everything
         | 
| 11 | 
            -
              end
         | 
| 12 | 
            -
              
         | 
| 13 | 
            -
              describe '#semantic_form_for' do
         | 
| 14 | 
            -
             | 
| 15 | 
            -
                it 'yields an instance of SemanticFormBuilder' do
         | 
| 16 | 
            -
                  semantic_form_for(@new_post, :url => '/hello') do |builder|
         | 
| 17 | 
            -
                    builder.class.should == ::Formtastic::SemanticFormBuilder
         | 
| 18 | 
            -
                  end
         | 
| 19 | 
            -
                end
         | 
| 20 | 
            -
             | 
| 21 | 
            -
                it 'adds a class of "formtastic" to the generated form' do
         | 
| 22 | 
            -
                  form = semantic_form_for(@new_post, :url => '/hello') do |builder|
         | 
| 23 | 
            -
                  end
         | 
| 24 | 
            -
                  output_buffer.concat(form) if Formtastic::Util.rails3?
         | 
| 25 | 
            -
                  output_buffer.should have_tag("form.formtastic")
         | 
| 26 | 
            -
                end
         | 
| 27 | 
            -
             | 
| 28 | 
            -
                it 'adds class matching the object name to the generated form when a symbol is provided' do
         | 
| 29 | 
            -
                  form = semantic_form_for(@new_post, :url => '/hello') do |builder|
         | 
| 30 | 
            -
                  end
         | 
| 31 | 
            -
                  output_buffer.concat(form) if Formtastic::Util.rails3?
         | 
| 32 | 
            -
                  output_buffer.should have_tag("form.post")
         | 
| 33 | 
            -
             | 
| 34 | 
            -
                  form = semantic_form_for(:project, :url => '/hello') do |builder|
         | 
| 35 | 
            -
                  end
         | 
| 36 | 
            -
                  output_buffer.concat(form) if Formtastic::Util.rails3?
         | 
| 37 | 
            -
                  output_buffer.should have_tag("form.project")
         | 
| 38 | 
            -
                end
         | 
| 39 | 
            -
             | 
| 40 | 
            -
                it 'adds class matching the object\'s class to the generated form when an object is provided' do
         | 
| 41 | 
            -
                  form = semantic_form_for(@new_post) do |builder|
         | 
| 42 | 
            -
                  end
         | 
| 43 | 
            -
                  output_buffer.concat(form) if Formtastic::Util.rails3?
         | 
| 44 | 
            -
                  output_buffer.should have_tag("form.post")
         | 
| 45 | 
            -
                end
         | 
| 46 | 
            -
             | 
| 47 | 
            -
                it 'adds a namespaced class to the generated form' do
         | 
| 48 | 
            -
                  form = semantic_form_for(::Namespaced::Post.new, :url => '/hello') do |builder|
         | 
| 49 | 
            -
                  end
         | 
| 50 | 
            -
                  output_buffer.concat(form) if Formtastic::Util.rails3?
         | 
| 51 | 
            -
                  output_buffer.should have_tag("form.namespaced_post")
         | 
| 52 | 
            -
                end
         | 
| 53 | 
            -
             | 
| 54 | 
            -
                describe 'allows :html options' do
         | 
| 55 | 
            -
                  before(:each) do
         | 
| 56 | 
            -
                     @form = semantic_form_for(@new_post, :url => '/hello', :html => { :id => "something-special", :class => "something-extra", :multipart => true }) do |builder|
         | 
| 57 | 
            -
                    end
         | 
| 58 | 
            -
                  end
         | 
| 59 | 
            -
             | 
| 60 | 
            -
                  it 'to add a id of "something-special" to generated form' do
         | 
| 61 | 
            -
                    output_buffer.concat(@form) if Formtastic::Util.rails3?
         | 
| 62 | 
            -
                    output_buffer.should have_tag("form#something-special")
         | 
| 63 | 
            -
                  end
         | 
| 64 | 
            -
             | 
| 65 | 
            -
                  it 'to add a class of "something-extra" to generated form' do
         | 
| 66 | 
            -
                    output_buffer.concat(@form) if Formtastic::Util.rails3?
         | 
| 67 | 
            -
                    output_buffer.should have_tag("form.something-extra")
         | 
| 68 | 
            -
                  end
         | 
| 69 | 
            -
             | 
| 70 | 
            -
                  it 'to add enctype="multipart/form-data"' do
         | 
| 71 | 
            -
                    output_buffer.concat(@form) if Formtastic::Util.rails3?
         | 
| 72 | 
            -
                    output_buffer.should have_tag('form[@enctype="multipart/form-data"]')
         | 
| 73 | 
            -
                  end
         | 
| 74 | 
            -
                end
         | 
| 75 | 
            -
             | 
| 76 | 
            -
                it 'can be called with a resource-oriented style' do
         | 
| 77 | 
            -
                  semantic_form_for(@new_post) do |builder|
         | 
| 78 | 
            -
                    builder.object.class.should == ::Post
         | 
| 79 | 
            -
                    builder.object_name.should == "post"
         | 
| 80 | 
            -
                  end
         | 
| 81 | 
            -
                end
         | 
| 82 | 
            -
                
         | 
| 83 | 
            -
                it 'can be called with a generic style and instance variable' do
         | 
| 84 | 
            -
                  if rails3?
         | 
| 85 | 
            -
                    semantic_form_for(@new_post, :as => :post, :url => new_post_path) do |builder|
         | 
| 86 | 
            -
                      builder.object.class.should == ::Post
         | 
| 87 | 
            -
                      builder.object_name.to_s.should == "post" # TODO: is this forced .to_s a bad assumption somewhere?
         | 
| 88 | 
            -
                    end
         | 
| 89 | 
            -
                  end
         | 
| 90 | 
            -
                  if rails2?
         | 
| 91 | 
            -
                    semantic_form_for(:post, @new_post, :url => new_post_path) do |builder|
         | 
| 92 | 
            -
                      builder.object.class.should == ::Post
         | 
| 93 | 
            -
                      builder.object_name.to_s.should == "post" # TODO: is this forced .to_s a bad assumption somewhere?
         | 
| 94 | 
            -
                    end
         | 
| 95 | 
            -
                  end
         | 
| 96 | 
            -
                end
         | 
| 97 | 
            -
             | 
| 98 | 
            -
                it 'can be called with a generic style and inline object' do
         | 
| 99 | 
            -
                  semantic_form_for(@new_post, :url => new_post_path) do |builder|
         | 
| 100 | 
            -
                    builder.object.class.should == ::Post
         | 
| 101 | 
            -
                    builder.object_name.to_s.should == "post" # TODO: is this forced .to_s a bad assumption somewhere?
         | 
| 102 | 
            -
                  end
         | 
| 103 | 
            -
                end
         | 
| 104 | 
            -
                
         | 
| 105 | 
            -
                describe "with :builder option" do
         | 
| 106 | 
            -
                  it "yields an instance of the given builder" do
         | 
| 107 | 
            -
                    class MyAwesomeCustomBuilder < ::Formtastic::SemanticFormBuilder
         | 
| 108 | 
            -
                    end
         | 
| 109 | 
            -
                    semantic_form_for(@new_post, :url => '/hello', :builder => MyAwesomeCustomBuilder) do |builder|
         | 
| 110 | 
            -
                      builder.class.should == MyAwesomeCustomBuilder
         | 
| 111 | 
            -
                    end
         | 
| 112 | 
            -
                  end
         | 
| 113 | 
            -
                end
         | 
| 114 | 
            -
                
         | 
| 115 | 
            -
              end
         | 
| 116 | 
            -
             | 
| 117 | 
            -
              describe '#semantic_fields_for' do
         | 
| 118 | 
            -
                it 'yields an instance of SemanticFormBuilder' do
         | 
| 119 | 
            -
                  semantic_fields_for(@new_post, :url => '/hello') do |builder|
         | 
| 120 | 
            -
                    builder.class.should == ::Formtastic::SemanticFormBuilder
         | 
| 121 | 
            -
                  end
         | 
| 122 | 
            -
                end
         | 
| 123 | 
            -
              end
         | 
| 124 | 
            -
             | 
| 125 | 
            -
              describe '#semantic_form_remote_for' do
         | 
| 126 | 
            -
                it 'yields an instance of SemanticFormBuilder' do
         | 
| 127 | 
            -
                  semantic_form_remote_for(@new_post, :url => '/hello') do |builder|
         | 
| 128 | 
            -
                    builder.class.should == ::Formtastic::SemanticFormBuilder
         | 
| 129 | 
            -
                  end
         | 
| 130 | 
            -
                end
         | 
| 131 | 
            -
              end
         | 
| 132 | 
            -
             | 
| 133 | 
            -
              describe '#semantic_form_for_remote' do
         | 
| 134 | 
            -
                it 'yields an instance of SemanticFormBuilder' do
         | 
| 135 | 
            -
                  semantic_remote_form_for(@new_post, :url => '/hello') do |builder|
         | 
| 136 | 
            -
                    builder.class.should == ::Formtastic::SemanticFormBuilder
         | 
| 137 | 
            -
                  end
         | 
| 138 | 
            -
                end
         | 
| 139 | 
            -
              end
         | 
| 140 | 
            -
             | 
| 141 | 
            -
            end
         | 
| 142 | 
            -
             | 
| @@ -1,21 +0,0 @@ | |
| 1 | 
            -
            # coding: utf-8
         | 
| 2 | 
            -
            require 'spec_helper'
         | 
| 3 | 
            -
             | 
| 4 | 
            -
            describe Formtastic::LayoutHelper do
         | 
| 5 | 
            -
              
         | 
| 6 | 
            -
              include FormtasticSpecHelper
         | 
| 7 | 
            -
              include Formtastic::LayoutHelper
         | 
| 8 | 
            -
              
         | 
| 9 | 
            -
              describe '#formtastic_stylesheet_link_tag' do
         | 
| 10 | 
            -
                
         | 
| 11 | 
            -
                it 'should render a link to formtastic.css' do
         | 
| 12 | 
            -
                  formtastic_stylesheet_link_tag.should have_tag("link[@href='/stylesheets/formtastic.css']")
         | 
| 13 | 
            -
                end
         | 
| 14 | 
            -
                
         | 
| 15 | 
            -
                it 'should render a link to formtastic_changes.css' do
         | 
| 16 | 
            -
                  formtastic_stylesheet_link_tag.should have_tag("link[@href='/stylesheets/formtastic_changes.css']")
         | 
| 17 | 
            -
                end
         | 
| 18 | 
            -
                
         | 
| 19 | 
            -
              end
         | 
| 20 | 
            -
            end
         | 
| 21 | 
            -
             | 
    
        data/spec/i18n_spec.rb
    DELETED
    
    | @@ -1,152 +0,0 @@ | |
| 1 | 
            -
            # coding: utf-8
         | 
| 2 | 
            -
            require 'spec_helper'
         | 
| 3 | 
            -
             | 
| 4 | 
            -
            describe 'Formtastic::I18n' do
         | 
| 5 | 
            -
              
         | 
| 6 | 
            -
              FORMTASTIC_KEYS = [:required, :yes, :no, :create, :update].freeze
         | 
| 7 | 
            -
              
         | 
| 8 | 
            -
              it "should be defined" do
         | 
| 9 | 
            -
                lambda { ::Formtastic::I18n }.should_not raise_error(::NameError)
         | 
| 10 | 
            -
              end
         | 
| 11 | 
            -
              
         | 
| 12 | 
            -
              describe "default translations" do
         | 
| 13 | 
            -
                it "should be defined" do
         | 
| 14 | 
            -
                  lambda { ::Formtastic::I18n::DEFAULT_VALUES }.should_not raise_error(::NameError)
         | 
| 15 | 
            -
                  ::Formtastic::I18n::DEFAULT_VALUES.is_a?(::Hash).should == true
         | 
| 16 | 
            -
                end
         | 
| 17 | 
            -
                
         | 
| 18 | 
            -
                it "should exists for the core I18n lookup keys" do
         | 
| 19 | 
            -
                  (::Formtastic::I18n::DEFAULT_VALUES.keys & FORMTASTIC_KEYS).size.should == FORMTASTIC_KEYS.size
         | 
| 20 | 
            -
                end
         | 
| 21 | 
            -
              end
         | 
| 22 | 
            -
              
         | 
| 23 | 
            -
              describe "when I18n locales are available" do
         | 
| 24 | 
            -
                
         | 
| 25 | 
            -
                before do
         | 
| 26 | 
            -
                  @formtastic_strings = {
         | 
| 27 | 
            -
                      :yes            => 'Default Yes',
         | 
| 28 | 
            -
                      :no             => 'Default No',
         | 
| 29 | 
            -
                      :create         => 'Default Create %{model}',
         | 
| 30 | 
            -
                      :update         => 'Default Update %{model}',
         | 
| 31 | 
            -
                      :custom_scope   => {
         | 
| 32 | 
            -
                          :duck           => 'Duck',
         | 
| 33 | 
            -
                          :duck_pond      => '%{ducks} ducks in a pond'
         | 
| 34 | 
            -
                        }
         | 
| 35 | 
            -
                    }
         | 
| 36 | 
            -
                  ::I18n.backend.store_translations :en, :formtastic => @formtastic_strings
         | 
| 37 | 
            -
                end
         | 
| 38 | 
            -
             | 
| 39 | 
            -
                after do
         | 
| 40 | 
            -
                  ::I18n.backend.reload!
         | 
| 41 | 
            -
                end
         | 
| 42 | 
            -
                
         | 
| 43 | 
            -
                it "should translate core strings correctly" do
         | 
| 44 | 
            -
                  ::I18n.backend.store_translations :en, {:formtastic => {:required => 'Default Required'}}
         | 
| 45 | 
            -
                  ::Formtastic::I18n.t(:required).should  == "Default Required"
         | 
| 46 | 
            -
                  ::Formtastic::I18n.t(:yes).should       == "Default Yes"
         | 
| 47 | 
            -
                  ::Formtastic::I18n.t(:no).should        == "Default No"
         | 
| 48 | 
            -
                  ::Formtastic::I18n.t(:create, :model => 'Post').should == "Default Create Post"
         | 
| 49 | 
            -
                  ::Formtastic::I18n.t(:update, :model => 'Post').should == "Default Update Post"
         | 
| 50 | 
            -
                end
         | 
| 51 | 
            -
                
         | 
| 52 | 
            -
                it "should all belong to scope 'formtastic'" do
         | 
| 53 | 
            -
                  ::Formtastic::I18n.t(:duck, :scope => [:custom_scope]).should == 'Duck'
         | 
| 54 | 
            -
                end
         | 
| 55 | 
            -
                
         | 
| 56 | 
            -
                it "should override default I18n lookup args if these are specified" do
         | 
| 57 | 
            -
                  ::Formtastic::I18n.t(:duck_pond, :scope => [:custom_scope], :ducks => 15).should == '15 ducks in a pond'
         | 
| 58 | 
            -
                end
         | 
| 59 | 
            -
                
         | 
| 60 | 
            -
                it "should be possible to override default values" do
         | 
| 61 | 
            -
                  ::Formtastic::I18n.t(:required, :default => 'Nothing found!').should == 'Nothing found!'
         | 
| 62 | 
            -
                end
         | 
| 63 | 
            -
                
         | 
| 64 | 
            -
              end
         | 
| 65 | 
            -
              
         | 
| 66 | 
            -
              describe "when no I18n locales are available" do
         | 
| 67 | 
            -
                
         | 
| 68 | 
            -
                before do
         | 
| 69 | 
            -
                  ::I18n.backend.reload!
         | 
| 70 | 
            -
                end
         | 
| 71 | 
            -
             | 
| 72 | 
            -
                it "should use default strings" do
         | 
| 73 | 
            -
                  (::Formtastic::I18n::DEFAULT_VALUES.keys).each do |key|
         | 
| 74 | 
            -
                    ::Formtastic::I18n.t(key, :model => '%{model}').should == ::Formtastic::I18n::DEFAULT_VALUES[key]
         | 
| 75 | 
            -
                  end
         | 
| 76 | 
            -
                end
         | 
| 77 | 
            -
                
         | 
| 78 | 
            -
              end
         | 
| 79 | 
            -
              
         | 
| 80 | 
            -
              describe "I18n string lookups" do
         | 
| 81 | 
            -
                
         | 
| 82 | 
            -
                include FormtasticSpecHelper
         | 
| 83 | 
            -
                
         | 
| 84 | 
            -
                before do
         | 
| 85 | 
            -
                  @output_buffer = ''
         | 
| 86 | 
            -
                  mock_everything
         | 
| 87 | 
            -
                  
         | 
| 88 | 
            -
                  ::I18n.backend.store_translations :en, :formtastic => {
         | 
| 89 | 
            -
                      :labels => {
         | 
| 90 | 
            -
                          :title    => "Hello world!",
         | 
| 91 | 
            -
                          :post     => {:title => "Hello post!"},
         | 
| 92 | 
            -
                          :project  => {:title => "Hello project!", :task => {:name => "Hello task name!"}},
         | 
| 93 | 
            -
                          :line_item => {:name => "Hello line item name!"}
         | 
| 94 | 
            -
                        }
         | 
| 95 | 
            -
                    }
         | 
| 96 | 
            -
                  ::Formtastic::SemanticFormBuilder.i18n_lookups_by_default = true
         | 
| 97 | 
            -
                  
         | 
| 98 | 
            -
                  @new_post.stub!(:title)
         | 
| 99 | 
            -
                  @new_post.stub!(:column_for_attribute).with(:title).and_return(mock('column', :type => :string, :limit => 255))
         | 
| 100 | 
            -
                end
         | 
| 101 | 
            -
                
         | 
| 102 | 
            -
                after do
         | 
| 103 | 
            -
                  ::I18n.backend.reload!
         | 
| 104 | 
            -
                  ::Formtastic::SemanticFormBuilder.i18n_lookups_by_default = false
         | 
| 105 | 
            -
                end
         | 
| 106 | 
            -
                
         | 
| 107 | 
            -
                it "lookup scopes should be defined" do
         | 
| 108 | 
            -
                  lambda { ::Formtastic::I18n::SCOPES }.should_not raise_error(::NameError)
         | 
| 109 | 
            -
                end
         | 
| 110 | 
            -
                
         | 
| 111 | 
            -
                it "should be able to translate with namespaced object" do
         | 
| 112 | 
            -
                  form = semantic_form_for(@new_post) do |builder|
         | 
| 113 | 
            -
                    concat(builder.input(:title))
         | 
| 114 | 
            -
                  end
         | 
| 115 | 
            -
                  output_buffer.concat(form) if Formtastic::Util.rails3?
         | 
| 116 | 
            -
                  output_buffer.should have_tag("form label", /Hello post!/)
         | 
| 117 | 
            -
                end
         | 
| 118 | 
            -
                
         | 
| 119 | 
            -
                it "should be able to translate without form-object" do
         | 
| 120 | 
            -
                  form = semantic_form_for(:project, :url => 'http://test.host') do |builder|
         | 
| 121 | 
            -
                    concat(builder.input(:title))
         | 
| 122 | 
            -
                  end
         | 
| 123 | 
            -
                  output_buffer.concat(form) if Formtastic::Util.rails3?
         | 
| 124 | 
            -
                  output_buffer.should have_tag("form label", /Hello project!/)
         | 
| 125 | 
            -
                end
         | 
| 126 | 
            -
                
         | 
| 127 | 
            -
                it 'should be able to translate nested objects with nested translations' do
         | 
| 128 | 
            -
                  form = semantic_form_for(:project, :url => 'http://test.host') do |builder|
         | 
| 129 | 
            -
                    builder.semantic_fields_for(:task) do |f|
         | 
| 130 | 
            -
                      concat(f.input(:name))
         | 
| 131 | 
            -
                    end
         | 
| 132 | 
            -
                  end
         | 
| 133 | 
            -
                  output_buffer.concat(form) if Formtastic::Util.rails3?
         | 
| 134 | 
            -
                  output_buffer.should have_tag("form label", /Hello task name!/)
         | 
| 135 | 
            -
                end
         | 
| 136 | 
            -
             | 
| 137 | 
            -
                it 'should be able to translated nested objects with top level translations' do
         | 
| 138 | 
            -
                  form = semantic_form_for(:order, :url => 'http://test.host') do |builder|
         | 
| 139 | 
            -
                    builder.semantic_fields_for(:line_item) do |f|
         | 
| 140 | 
            -
                      concat(f.input(:name))
         | 
| 141 | 
            -
                    end
         | 
| 142 | 
            -
                  end
         | 
| 143 | 
            -
                  output_buffer.concat(form) if Formtastic::Util.rails3?
         | 
| 144 | 
            -
                  output_buffer.should have_tag("form label", /Hello line item name!/)
         | 
| 145 | 
            -
                end
         | 
| 146 | 
            -
             | 
| 147 | 
            -
             | 
| 148 | 
            -
                # TODO: Add spec for namespaced models?
         | 
| 149 | 
            -
                
         | 
| 150 | 
            -
              end
         | 
| 151 | 
            -
              
         | 
| 152 | 
            -
            end
         |