case_form 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/CHANGELOG.rdoc +1 -0
- data/MIT-LICENSE.rdoc +20 -0
- data/Manifest +86 -0
- data/README.rdoc +0 -0
- data/Rakefile +30 -0
- data/TODO.rdoc +7 -0
- data/case_form.gemspec +31 -0
- data/lib/case_form.rb +88 -0
- data/lib/case_form/associations.rb +50 -0
- data/lib/case_form/buttons.rb +175 -0
- data/lib/case_form/core_ext/form_helper.rb +54 -0
- data/lib/case_form/core_ext/layout_helper.rb +16 -0
- data/lib/case_form/core_ext/sentence_error.rb +38 -0
- data/lib/case_form/element.rb +40 -0
- data/lib/case_form/element/base.rb +95 -0
- data/lib/case_form/element/button.rb +64 -0
- data/lib/case_form/element/error.rb +54 -0
- data/lib/case_form/element/errors/complex_error.rb +107 -0
- data/lib/case_form/element/errors/simple_error.rb +76 -0
- data/lib/case_form/element/fieldset.rb +35 -0
- data/lib/case_form/element/hint.rb +54 -0
- data/lib/case_form/element/input.rb +106 -0
- data/lib/case_form/element/inputs/collection/checkbox_input.rb +36 -0
- data/lib/case_form/element/inputs/collection/radio_input.rb +27 -0
- data/lib/case_form/element/inputs/collection/select_input.rb +22 -0
- data/lib/case_form/element/inputs/collection_input.rb +89 -0
- data/lib/case_form/element/inputs/datetime/date_input.rb +45 -0
- data/lib/case_form/element/inputs/datetime/date_time_input.rb +50 -0
- data/lib/case_form/element/inputs/datetime/time_input.rb +34 -0
- data/lib/case_form/element/inputs/datetime/time_zone_input.rb +24 -0
- data/lib/case_form/element/inputs/file_input.rb +13 -0
- data/lib/case_form/element/inputs/hidden_input.rb +17 -0
- data/lib/case_form/element/inputs/number_input.rb +42 -0
- data/lib/case_form/element/inputs/search_input.rb +32 -0
- data/lib/case_form/element/inputs/string_input.rb +18 -0
- data/lib/case_form/element/inputs/text_input.rb +19 -0
- data/lib/case_form/element/label.rb +52 -0
- data/lib/case_form/element/nested_model.rb +105 -0
- data/lib/case_form/element/nested_models/handle.rb +18 -0
- data/lib/case_form/element/nested_models/handles/destructor_handle.rb +47 -0
- data/lib/case_form/element/nested_models/handles/generator_handle.rb +55 -0
- data/lib/case_form/element_ext/associationable.rb +54 -0
- data/lib/case_form/element_ext/columnable.rb +21 -0
- data/lib/case_form/element_ext/naming.rb +17 -0
- data/lib/case_form/element_ext/validationable.rb +13 -0
- data/lib/case_form/errors.rb +189 -0
- data/lib/case_form/form_builder.rb +11 -0
- data/lib/case_form/inputs.rb +1095 -0
- data/lib/case_form/labels.rb +102 -0
- data/lib/case_form/version.rb +6 -0
- data/lib/generators/case_form/install_generator.rb +33 -0
- data/lib/generators/case_form/templates/case_form.rb +63 -0
- data/lib/generators/case_form/templates/javascripts/jquery.case_form.js +10 -0
- data/lib/generators/case_form/templates/javascripts/prototype.case_form.js +0 -0
- data/lib/generators/case_form/templates/locales/en.yml +28 -0
- data/lib/generators/case_form/templates/locales/pl.yml +28 -0
- data/lib/generators/case_form/templates/stylesheets/stylesheet.css +93 -0
- data/lib/generators/case_form/templates/stylesheets/stylesheet_changes.css +1 -0
- data/lib/generators/case_form/uninstall_generator.rb +30 -0
- data/rails/init.rb +1 -0
- data/test/element/button_test.rb +85 -0
- data/test/element/errors/complex_error_test.rb +140 -0
- data/test/element/errors/simple_error_test.rb +92 -0
- data/test/element/fieldset_test.rb +28 -0
- data/test/element/hint_test.rb +81 -0
- data/test/element/input_test.rb +197 -0
- data/test/element/inputs/collection/checkbox_input_test.rb +176 -0
- data/test/element/inputs/collection/radio_input_test.rb +156 -0
- data/test/element/inputs/collection/select_input_test.rb +152 -0
- data/test/element/inputs/datetime/date_input_test.rb +160 -0
- data/test/element/inputs/datetime/datetime_input_test.rb +227 -0
- data/test/element/inputs/datetime/time_input_test.rb +72 -0
- data/test/element/inputs/datetime/time_zone_input_test.rb +42 -0
- data/test/element/inputs/file_input_test.rb +13 -0
- data/test/element/inputs/hidden_input_test.rb +13 -0
- data/test/element/inputs/number_input_test.rb +50 -0
- data/test/element/inputs/search_input_test.rb +13 -0
- data/test/element/inputs/string_input_test.rb +33 -0
- data/test/element/inputs/text_input_test.rb +13 -0
- data/test/element/label_test.rb +62 -0
- data/test/element/nested_model_test.rb +163 -0
- data/test/element/nested_models/handles/destructor_handle_test.rb +35 -0
- data/test/element/nested_models/handles/generator_handle_test.rb +27 -0
- data/test/form_builder_test.rb +25 -0
- data/test/form_helper_test.rb +15 -0
- data/test/lib/models.rb +268 -0
- data/test/test_helper.rb +74 -0
- metadata +235 -0
| @@ -0,0 +1,27 @@ | |
| 1 | 
            +
            # coding: utf-8
         | 
| 2 | 
            +
            require 'test_helper'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            class GeneratorHandleTest < ActionView::TestCase
         | 
| 5 | 
            +
              def generator_case_form_for(object, association, options={})
         | 
| 6 | 
            +
                concat(case_form_for(object) { |f| concat(f.new_object(association, options)) })
         | 
| 7 | 
            +
              end
         | 
| 8 | 
            +
              
         | 
| 9 | 
            +
              test "should generate generator" do
         | 
| 10 | 
            +
                generator_case_form_for(@user, :projects)
         | 
| 11 | 
            +
                assert_select "input[type=text]", 2
         | 
| 12 | 
            +
                assert_select "a[data-action=new]", 1
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
              
         | 
| 15 | 
            +
              test "should generate generator with :text option" do
         | 
| 16 | 
            +
                text = "Dodaj"
         | 
| 17 | 
            +
                generator_case_form_for(@user, :projects, :text => text)
         | 
| 18 | 
            +
                assert_select "input[type=text]", 2
         | 
| 19 | 
            +
                assert_select "a[data-action=new]", text
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
              
         | 
| 22 | 
            +
              test "should generate generator with :fields option" do
         | 
| 23 | 
            +
                generator_case_form_for(@user, :projects, :fields => :name)
         | 
| 24 | 
            +
                assert_select "input[type=text]", 1
         | 
| 25 | 
            +
                assert_select "a[data-action=new]", 1
         | 
| 26 | 
            +
              end
         | 
| 27 | 
            +
            end
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            require 'test_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class FormBuilderTest < ActionView::TestCase
         | 
| 4 | 
            +
              test 'should case_form_for be an instance of CaseForm::FormBuilder' do
         | 
| 5 | 
            +
                case_form_for(@user) { |f| assert f.instance_of?(CaseForm::FormBuilder) }
         | 
| 6 | 
            +
              end
         | 
| 7 | 
            +
              
         | 
| 8 | 
            +
              test 'should case_fields_for be an instance of CaseForm::FormBuilder' do
         | 
| 9 | 
            +
                case_fields_for(@user) { |f| assert f.instance_of?(CaseForm::FormBuilder) }
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
              
         | 
| 12 | 
            +
              test 'should remote_case_form_for be an instance of CaseForm::FormBuilder' do
         | 
| 13 | 
            +
                remote_case_form_for(@user) { |f| assert f.instance_of?(CaseForm::FormBuilder) }
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
              
         | 
| 16 | 
            +
              test "should generate <form> attributes" do
         | 
| 17 | 
            +
                concat(case_form_for(@user) { |f| })
         | 
| 18 | 
            +
                assert_select "form.case_form"
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
              
         | 
| 21 | 
            +
              test "should generate remote <form> attributes" do
         | 
| 22 | 
            +
                concat(remote_case_form_for(@user) { |f| })
         | 
| 23 | 
            +
                assert_select "form[data-remote=true]"
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
| @@ -0,0 +1,15 @@ | |
| 1 | 
            +
            require 'test_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class FormHelperTest < ActionView::TestCase
         | 
| 4 | 
            +
              test "should exist case_form_for method" do
         | 
| 5 | 
            +
                assert ActionView::Helpers.method_defined?(:case_form_for)
         | 
| 6 | 
            +
              end
         | 
| 7 | 
            +
              
         | 
| 8 | 
            +
              test "should exist case_field_for method" do
         | 
| 9 | 
            +
                assert ActionView::Helpers.method_defined?(:case_fields_for)
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
              
         | 
| 12 | 
            +
              test "should exist remote_case_form_for method" do
         | 
| 13 | 
            +
                assert ActionView::Helpers.method_defined?(:remote_case_form_for)
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
            end
         | 
    
        data/test/lib/models.rb
    ADDED
    
    | @@ -0,0 +1,268 @@ | |
| 1 | 
            +
            # Require OpenStruct class
         | 
| 2 | 
            +
            require 'ostruct'
         | 
| 3 | 
            +
            require 'active_model'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            class Column
         | 
| 6 | 
            +
              attr_accessor :name, :type, :null, :default, :limit, :precision, :scale
         | 
| 7 | 
            +
              
         | 
| 8 | 
            +
              def initialize(*args)
         | 
| 9 | 
            +
                @name      = args[0]
         | 
| 10 | 
            +
                @type      = args[1]
         | 
| 11 | 
            +
                @null      = args[2]
         | 
| 12 | 
            +
                @default   = args[3]
         | 
| 13 | 
            +
                @limit     = args[4]
         | 
| 14 | 
            +
                @precision = args[5]
         | 
| 15 | 
            +
                @scale     = args[6]
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
            end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            class Association
         | 
| 20 | 
            +
              attr_accessor :klass, :macro
         | 
| 21 | 
            +
              
         | 
| 22 | 
            +
              def initialize(*args)
         | 
| 23 | 
            +
                @klass = args[0].constantize
         | 
| 24 | 
            +
                @macro = args[1]
         | 
| 25 | 
            +
              end
         | 
| 26 | 
            +
            end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
            class BaseModel
         | 
| 29 | 
            +
              extend ActiveModel::Naming
         | 
| 30 | 
            +
              include ActiveModel::Conversion
         | 
| 31 | 
            +
              include ActiveModel::Validations
         | 
| 32 | 
            +
              
         | 
| 33 | 
            +
              # columns: type, null, default, limit, precision, scale
         | 
| 34 | 
            +
              class_inheritable_accessor :associations, :all_columns, :all_content_columns
         | 
| 35 | 
            +
              
         | 
| 36 | 
            +
              attr_accessor :id
         | 
| 37 | 
            +
              
         | 
| 38 | 
            +
              def initialize(attributes={})
         | 
| 39 | 
            +
                attributes.each do |k, v|
         | 
| 40 | 
            +
                  send("#{k}=", v) if respond_to?("#{k}=")
         | 
| 41 | 
            +
                end
         | 
| 42 | 
            +
              end
         | 
| 43 | 
            +
              
         | 
| 44 | 
            +
              def self.reflect_on_association(attribute)
         | 
| 45 | 
            +
                association = self.associations[attribute.to_sym]
         | 
| 46 | 
            +
                return unless association
         | 
| 47 | 
            +
                attr_name = case association[1]
         | 
| 48 | 
            +
                when :has_many   then :"#{attribute.to_s.singularize}_ids"
         | 
| 49 | 
            +
                when :belongs_to then :"#{attribute}_id"
         | 
| 50 | 
            +
                when :has_one    then :"#{attribute}"
         | 
| 51 | 
            +
                end
         | 
| 52 | 
            +
                class_eval { attr_accessor attr_name }
         | 
| 53 | 
            +
                Association.new(*association)
         | 
| 54 | 
            +
              end
         | 
| 55 | 
            +
              
         | 
| 56 | 
            +
              def self.columns
         | 
| 57 | 
            +
                columns = []
         | 
| 58 | 
            +
                self.all_columns.each do |col|
         | 
| 59 | 
            +
                  columns << Column.new(*col)
         | 
| 60 | 
            +
                end
         | 
| 61 | 
            +
                columns
         | 
| 62 | 
            +
              end
         | 
| 63 | 
            +
              
         | 
| 64 | 
            +
              def self.content_columns
         | 
| 65 | 
            +
                columns = []
         | 
| 66 | 
            +
                self.all_content_columns.each { |col| columns << Column.new(*col) }
         | 
| 67 | 
            +
                columns
         | 
| 68 | 
            +
              end
         | 
| 69 | 
            +
              
         | 
| 70 | 
            +
              def column_for_attribute(attribute)
         | 
| 71 | 
            +
                args = [attribute.to_sym, self.all_columns[attribute.to_sym]].flatten
         | 
| 72 | 
            +
                Column.new(*args)
         | 
| 73 | 
            +
              end
         | 
| 74 | 
            +
              
         | 
| 75 | 
            +
              def new_record?
         | 
| 76 | 
            +
                false
         | 
| 77 | 
            +
              end
         | 
| 78 | 
            +
              
         | 
| 79 | 
            +
              def persisted?
         | 
| 80 | 
            +
                true
         | 
| 81 | 
            +
              end
         | 
| 82 | 
            +
              
         | 
| 83 | 
            +
              def _destroy
         | 
| 84 | 
            +
                false
         | 
| 85 | 
            +
              end
         | 
| 86 | 
            +
              
         | 
| 87 | 
            +
              def self.human_name
         | 
| 88 | 
            +
                self.class
         | 
| 89 | 
            +
              end
         | 
| 90 | 
            +
            end
         | 
| 91 | 
            +
             | 
| 92 | 
            +
            class Country < BaseModel
         | 
| 93 | 
            +
              self.associations = { 
         | 
| 94 | 
            +
                :users    => ["User", :has_many]
         | 
| 95 | 
            +
              }
         | 
| 96 | 
            +
              self.all_columns = {
         | 
| 97 | 
            +
                :id        => [:integer, false],
         | 
| 98 | 
            +
                :name      => [:string, false, nil, 250],
         | 
| 99 | 
            +
                :continent => [:string, false, nil, 250]
         | 
| 100 | 
            +
              }
         | 
| 101 | 
            +
              self.all_content_columns = self.all_columns.keys - [:id]
         | 
| 102 | 
            +
              
         | 
| 103 | 
            +
              attr_accessor *self.all_columns.keys
         | 
| 104 | 
            +
              attr_accessor *self.associations.keys
         | 
| 105 | 
            +
              
         | 
| 106 | 
            +
              def self.all
         | 
| 107 | 
            +
                [new(:id => 1, :name => "Poland", :continent => "Europe"), 
         | 
| 108 | 
            +
                 new(:id => 2, :name => "Germany", :continent => "Europe"),
         | 
| 109 | 
            +
                 new(:id => 3, :name => "France", :continent => "Europe"),
         | 
| 110 | 
            +
                 new(:id => 4, :name => "Spain", :continent => "Europe"),
         | 
| 111 | 
            +
                 new(:id => 5, :name => "US", :continent => "North America")]
         | 
| 112 | 
            +
              end
         | 
| 113 | 
            +
              
         | 
| 114 | 
            +
              def self.priority
         | 
| 115 | 
            +
                self.all[1..3]
         | 
| 116 | 
            +
              end
         | 
| 117 | 
            +
              
         | 
| 118 | 
            +
              def short
         | 
| 119 | 
            +
                self.name[0...3]
         | 
| 120 | 
            +
              end
         | 
| 121 | 
            +
              
         | 
| 122 | 
            +
              def non_id
         | 
| 123 | 
            +
                self.name[0]
         | 
| 124 | 
            +
              end
         | 
| 125 | 
            +
            end
         | 
| 126 | 
            +
             | 
| 127 | 
            +
            class User < BaseModel
         | 
| 128 | 
            +
              self.associations = { 
         | 
| 129 | 
            +
                :country          => [ "Country", :belongs_to],
         | 
| 130 | 
            +
                :special_country  => [ "Country", :belongs_to],
         | 
| 131 | 
            +
                :profile          => [ "Profile", :has_one],
         | 
| 132 | 
            +
                :special_profile  => [ "Profile", :has_one],
         | 
| 133 | 
            +
                :projects         => [ "Project", :has_many],
         | 
| 134 | 
            +
                :special_projects => [ "Project", :has_many],
         | 
| 135 | 
            +
                :des_projects     => [ "Project", :has_many]
         | 
| 136 | 
            +
              }
         | 
| 137 | 
            +
              self.all_columns = {
         | 
| 138 | 
            +
                :id          => [:integer, false],
         | 
| 139 | 
            +
                :country_id  => [:integer, true],
         | 
| 140 | 
            +
                :firstname   => [:string, true, "Enter firstname", 200],
         | 
| 141 | 
            +
                :lastname    => [:string, false, nil, 250],
         | 
| 142 | 
            +
                :description => [:text, true],
         | 
| 143 | 
            +
                :created_at  => [:datetime, true],
         | 
| 144 | 
            +
                :updated_at  => [:datetime, true],
         | 
| 145 | 
            +
                :login_at    => [:timestamp, true],
         | 
| 146 | 
            +
                :born_at     => [:date, true],
         | 
| 147 | 
            +
                :admin       => [:boolean, true],
         | 
| 148 | 
            +
                :height      => [:decimal, false, nil, 10, 5, 3],
         | 
| 149 | 
            +
                :weight      => [:float, false],
         | 
| 150 | 
            +
                :age         => [:integer, false],
         | 
| 151 | 
            +
                :user_zone   => [:string, false]
         | 
| 152 | 
            +
              }
         | 
| 153 | 
            +
              self.all_content_columns = self.all_columns.keys - [:id, :country_id]
         | 
| 154 | 
            +
              
         | 
| 155 | 
            +
              attr_accessor *self.all_columns.keys
         | 
| 156 | 
            +
              attr_accessor *self.associations.keys
         | 
| 157 | 
            +
              
         | 
| 158 | 
            +
              attr_accessor :password_confirmation, :twitter_url, :file_path, :mobile_phone, :birthday_at, :user_zone
         | 
| 159 | 
            +
              alias_method :birthday_on, :birthday_at
         | 
| 160 | 
            +
              
         | 
| 161 | 
            +
              def self.nested_attributes_options
         | 
| 162 | 
            +
                options = {}
         | 
| 163 | 
            +
                self.associations.keys.each { |a| options[a] = { :allow_destroy => false, :update_only => false } }
         | 
| 164 | 
            +
                options[:projects][:allow_destroy] = true
         | 
| 165 | 
            +
                options
         | 
| 166 | 
            +
              end
         | 
| 167 | 
            +
              
         | 
| 168 | 
            +
              def build_country
         | 
| 169 | 
            +
                Country.new(:id => nil, :name => nil, :continent => nil)
         | 
| 170 | 
            +
              end
         | 
| 171 | 
            +
              
         | 
| 172 | 
            +
              def country_attributes=(*); end;
         | 
| 173 | 
            +
              
         | 
| 174 | 
            +
              def build_profile
         | 
| 175 | 
            +
                Profile.new(:user_id => self.id, :id => nil, :email => nil, :twitter => nil)
         | 
| 176 | 
            +
              end
         | 
| 177 | 
            +
              
         | 
| 178 | 
            +
              def profile_attributes=(*); end;
         | 
| 179 | 
            +
              
         | 
| 180 | 
            +
              def projects_attributes=(*); end;
         | 
| 181 | 
            +
              alias_method :des_projects_attributes=, :projects_attributes=
         | 
| 182 | 
            +
              
         | 
| 183 | 
            +
              def special_projects
         | 
| 184 | 
            +
                Project.extra
         | 
| 185 | 
            +
              end
         | 
| 186 | 
            +
            end
         | 
| 187 | 
            +
             | 
| 188 | 
            +
            class ValidUser < User
         | 
| 189 | 
            +
              self.associations = User.associations
         | 
| 190 | 
            +
              self.all_columns = User.all_columns
         | 
| 191 | 
            +
              self.all_content_columns = User.all_content_columns
         | 
| 192 | 
            +
              
         | 
| 193 | 
            +
              attr_accessor *self.all_columns.keys
         | 
| 194 | 
            +
              attr_accessor *self.associations.keys
         | 
| 195 | 
            +
              
         | 
| 196 | 
            +
              validates :firstname, :length => {:minimum => 3, :maximum => 40}, :presence => true
         | 
| 197 | 
            +
              validates :lastname, :email, :presence => true
         | 
| 198 | 
            +
              
         | 
| 199 | 
            +
              attr_accessor :valid_height
         | 
| 200 | 
            +
              validates :valid_height, :length => { :minimum => 0, :maximum => 280 }
         | 
| 201 | 
            +
              attr_accessor :min_height
         | 
| 202 | 
            +
              attr_accessor :max_height
         | 
| 203 | 
            +
              validates :min_height, :length => { :minimum => 0 }
         | 
| 204 | 
            +
              validates :max_height, :length => { :maximum => 280 }
         | 
| 205 | 
            +
            end
         | 
| 206 | 
            +
             | 
| 207 | 
            +
            class InvalidUser < User
         | 
| 208 | 
            +
              self.associations = User.associations
         | 
| 209 | 
            +
              self.all_columns = User.all_columns
         | 
| 210 | 
            +
              self.all_content_columns = User.all_content_columns
         | 
| 211 | 
            +
              
         | 
| 212 | 
            +
              attr_accessor *self.all_columns.keys
         | 
| 213 | 
            +
              attr_accessor *self.associations.keys
         | 
| 214 | 
            +
              
         | 
| 215 | 
            +
              attr_reader :errors
         | 
| 216 | 
            +
              
         | 
| 217 | 
            +
              def initialize(options={})
         | 
| 218 | 
            +
                super(options)
         | 
| 219 | 
            +
                @errors = ActiveModel::Errors.new(self)
         | 
| 220 | 
            +
                @errors.add(:base, "Some base error")
         | 
| 221 | 
            +
                @errors.add(:firstname, "can't be blank")
         | 
| 222 | 
            +
                @errors.add(:firstname, "should match confirmation")
         | 
| 223 | 
            +
                @errors.add(:firstname, "is too short")
         | 
| 224 | 
            +
                @errors.add(:lastname, "can't be blank")
         | 
| 225 | 
            +
              end
         | 
| 226 | 
            +
            end
         | 
| 227 | 
            +
             | 
| 228 | 
            +
            class Profile < BaseModel
         | 
| 229 | 
            +
              self.associations = { 
         | 
| 230 | 
            +
                :user     => [ "User", :belongs_to]
         | 
| 231 | 
            +
              }
         | 
| 232 | 
            +
              self.all_columns = {
         | 
| 233 | 
            +
                :id       => [:integer, false],
         | 
| 234 | 
            +
                :user_id  => [:integer, false],
         | 
| 235 | 
            +
                :email    => [:string, false, nil, 250],
         | 
| 236 | 
            +
                :twitter  => [:string, false, nil, 250]
         | 
| 237 | 
            +
              }
         | 
| 238 | 
            +
              self.all_content_columns = self.all_columns.keys - [:id, :user_id]
         | 
| 239 | 
            +
              
         | 
| 240 | 
            +
              attr_accessor *self.all_columns.keys
         | 
| 241 | 
            +
              attr_accessor *self.associations.keys
         | 
| 242 | 
            +
            end
         | 
| 243 | 
            +
             | 
| 244 | 
            +
            class Project < BaseModel
         | 
| 245 | 
            +
              self.associations = { 
         | 
| 246 | 
            +
                :user     => [ "User", :belongs_to ]
         | 
| 247 | 
            +
              }
         | 
| 248 | 
            +
              self.all_columns = {
         | 
| 249 | 
            +
                :id       => [:integer, false],
         | 
| 250 | 
            +
                :user_id  => [:integer, false],
         | 
| 251 | 
            +
                :name     => [:string, false, nil, 250],
         | 
| 252 | 
            +
                :address  => [:string, false]
         | 
| 253 | 
            +
              }
         | 
| 254 | 
            +
              self.all_content_columns = self.all_columns.keys - [:id, :user_id]
         | 
| 255 | 
            +
              
         | 
| 256 | 
            +
              attr_accessor *self.all_columns.keys
         | 
| 257 | 
            +
              attr_accessor *self.associations.keys
         | 
| 258 | 
            +
              
         | 
| 259 | 
            +
              def self.all
         | 
| 260 | 
            +
                all = []
         | 
| 261 | 
            +
                5.times { |i| all << Project.new(:id => i, :name => "EXTRA Project #{i}", :address => "Address #{i}") }
         | 
| 262 | 
            +
                all
         | 
| 263 | 
            +
              end
         | 
| 264 | 
            +
              
         | 
| 265 | 
            +
              def self.extra
         | 
| 266 | 
            +
                self.all[1..3]
         | 
| 267 | 
            +
              end
         | 
| 268 | 
            +
            end
         | 
    
        data/test/test_helper.rb
    ADDED
    
    | @@ -0,0 +1,74 @@ | |
| 1 | 
            +
            require 'rubygems'
         | 
| 2 | 
            +
            require 'test/unit'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            gem 'actionpack', '3.0.0'
         | 
| 5 | 
            +
            gem 'activemodel', '3.0.0'
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            require 'active_model'
         | 
| 8 | 
            +
            require 'action_controller'
         | 
| 9 | 
            +
            require 'action_view'
         | 
| 10 | 
            +
            require 'action_view/template'
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            # Require CaseForm
         | 
| 13 | 
            +
            $:.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
         | 
| 14 | 
            +
            require 'case_form'
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            # Require at last
         | 
| 17 | 
            +
            require 'action_view/test_case'
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            # Require fake objects
         | 
| 20 | 
            +
            require 'lib/models'
         | 
| 21 | 
            +
             | 
| 22 | 
            +
            class ActionView::TestCase
         | 
| 23 | 
            +
              setup do
         | 
| 24 | 
            +
                generate_virtual_models
         | 
| 25 | 
            +
              end
         | 
| 26 | 
            +
              
         | 
| 27 | 
            +
              # Generate fake models
         | 
| 28 | 
            +
              def generate_virtual_models
         | 
| 29 | 
            +
                @user = User.new(
         | 
| 30 | 
            +
                  :id => 1, 
         | 
| 31 | 
            +
                  :firstname => "John", 
         | 
| 32 | 
            +
                  :lastname => "Doe", 
         | 
| 33 | 
            +
                  :email => "john@doe.com", 
         | 
| 34 | 
            +
                  :admin => true, 
         | 
| 35 | 
            +
                  :description => "User note", 
         | 
| 36 | 
            +
                  :age => 18, 
         | 
| 37 | 
            +
                  :height => 188, 
         | 
| 38 | 
            +
                  :weight => 82.5)
         | 
| 39 | 
            +
                @valid_user = ValidUser.new({
         | 
| 40 | 
            +
                  :id => 1, 
         | 
| 41 | 
            +
                  :firstname => "John", 
         | 
| 42 | 
            +
                  :lastname => "Doe", 
         | 
| 43 | 
            +
                  :email => "john@doe.com", 
         | 
| 44 | 
            +
                  :admin => true, 
         | 
| 45 | 
            +
                  :height => 188})
         | 
| 46 | 
            +
                @invalid_user = InvalidUser.new({
         | 
| 47 | 
            +
                  :id => 1,
         | 
| 48 | 
            +
                  :firstname => "J"})
         | 
| 49 | 
            +
                
         | 
| 50 | 
            +
                @country = Country.new({:id => 1, :name => "Poland", :continent => "Europe"})
         | 
| 51 | 
            +
                @profile = Profile.new({:user_id => 1, :id => 1, :email => "example@mail.com", :twitter => @example})
         | 
| 52 | 
            +
                @projects = []
         | 
| 53 | 
            +
                2.times { |i| @projects << Project.new({:user_id => 1, :id => i, :name => "Project #{i}", :address => "Address #{i}"}) }
         | 
| 54 | 
            +
                
         | 
| 55 | 
            +
                @user.country = @country
         | 
| 56 | 
            +
                @user.profile = @profile
         | 
| 57 | 
            +
                @user.projects = @projects
         | 
| 58 | 
            +
              end
         | 
| 59 | 
            +
              
         | 
| 60 | 
            +
              def cf_config(key)
         | 
| 61 | 
            +
                CaseForm.send(key)
         | 
| 62 | 
            +
              end
         | 
| 63 | 
            +
              
         | 
| 64 | 
            +
              # Define some routes path
         | 
| 65 | 
            +
              def users_path(*args); '/users'; end
         | 
| 66 | 
            +
              alias_method :users_url, :users_path
         | 
| 67 | 
            +
              alias_method :valid_users_path, :users_path
         | 
| 68 | 
            +
              alias_method :invalid_users_path, :users_path
         | 
| 69 | 
            +
              
         | 
| 70 | 
            +
              def user_path(user); "/users/#{user.to_param}"; end
         | 
| 71 | 
            +
              alias_method :user_url, :user_path
         | 
| 72 | 
            +
              alias_method :valid_user_path, :user_path
         | 
| 73 | 
            +
              alias_method :invalid_user_path, :user_path
         | 
| 74 | 
            +
            end
         | 
    
        metadata
    ADDED
    
    | @@ -0,0 +1,235 @@ | |
| 1 | 
            +
            --- !ruby/object:Gem::Specification 
         | 
| 2 | 
            +
            name: case_form
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            +
              prerelease: false
         | 
| 5 | 
            +
              segments: 
         | 
| 6 | 
            +
              - 0
         | 
| 7 | 
            +
              - 0
         | 
| 8 | 
            +
              - 3
         | 
| 9 | 
            +
              version: 0.0.3
         | 
| 10 | 
            +
            platform: ruby
         | 
| 11 | 
            +
            authors: 
         | 
| 12 | 
            +
            - ""
         | 
| 13 | 
            +
            autorequire: 
         | 
| 14 | 
            +
            bindir: bin
         | 
| 15 | 
            +
            cert_chain: []
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            date: 2010-10-14 00:00:00 +02:00
         | 
| 18 | 
            +
            default_executable: 
         | 
| 19 | 
            +
            dependencies: []
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            description: ""
         | 
| 22 | 
            +
            email: ""
         | 
| 23 | 
            +
            executables: []
         | 
| 24 | 
            +
             | 
| 25 | 
            +
            extensions: []
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            extra_rdoc_files: 
         | 
| 28 | 
            +
            - CHANGELOG.rdoc
         | 
| 29 | 
            +
            - README.rdoc
         | 
| 30 | 
            +
            - TODO.rdoc
         | 
| 31 | 
            +
            - lib/case_form.rb
         | 
| 32 | 
            +
            - lib/case_form/associations.rb
         | 
| 33 | 
            +
            - lib/case_form/buttons.rb
         | 
| 34 | 
            +
            - lib/case_form/core_ext/form_helper.rb
         | 
| 35 | 
            +
            - lib/case_form/core_ext/layout_helper.rb
         | 
| 36 | 
            +
            - lib/case_form/core_ext/sentence_error.rb
         | 
| 37 | 
            +
            - lib/case_form/element.rb
         | 
| 38 | 
            +
            - lib/case_form/element/base.rb
         | 
| 39 | 
            +
            - lib/case_form/element/button.rb
         | 
| 40 | 
            +
            - lib/case_form/element/error.rb
         | 
| 41 | 
            +
            - lib/case_form/element/errors/complex_error.rb
         | 
| 42 | 
            +
            - lib/case_form/element/errors/simple_error.rb
         | 
| 43 | 
            +
            - lib/case_form/element/fieldset.rb
         | 
| 44 | 
            +
            - lib/case_form/element/hint.rb
         | 
| 45 | 
            +
            - lib/case_form/element/input.rb
         | 
| 46 | 
            +
            - lib/case_form/element/inputs/collection/checkbox_input.rb
         | 
| 47 | 
            +
            - lib/case_form/element/inputs/collection/radio_input.rb
         | 
| 48 | 
            +
            - lib/case_form/element/inputs/collection/select_input.rb
         | 
| 49 | 
            +
            - lib/case_form/element/inputs/collection_input.rb
         | 
| 50 | 
            +
            - lib/case_form/element/inputs/datetime/date_input.rb
         | 
| 51 | 
            +
            - lib/case_form/element/inputs/datetime/date_time_input.rb
         | 
| 52 | 
            +
            - lib/case_form/element/inputs/datetime/time_input.rb
         | 
| 53 | 
            +
            - lib/case_form/element/inputs/datetime/time_zone_input.rb
         | 
| 54 | 
            +
            - lib/case_form/element/inputs/file_input.rb
         | 
| 55 | 
            +
            - lib/case_form/element/inputs/hidden_input.rb
         | 
| 56 | 
            +
            - lib/case_form/element/inputs/number_input.rb
         | 
| 57 | 
            +
            - lib/case_form/element/inputs/search_input.rb
         | 
| 58 | 
            +
            - lib/case_form/element/inputs/string_input.rb
         | 
| 59 | 
            +
            - lib/case_form/element/inputs/text_input.rb
         | 
| 60 | 
            +
            - lib/case_form/element/label.rb
         | 
| 61 | 
            +
            - lib/case_form/element/nested_model.rb
         | 
| 62 | 
            +
            - lib/case_form/element/nested_models/handle.rb
         | 
| 63 | 
            +
            - lib/case_form/element/nested_models/handles/destructor_handle.rb
         | 
| 64 | 
            +
            - lib/case_form/element/nested_models/handles/generator_handle.rb
         | 
| 65 | 
            +
            - lib/case_form/element_ext/associationable.rb
         | 
| 66 | 
            +
            - lib/case_form/element_ext/columnable.rb
         | 
| 67 | 
            +
            - lib/case_form/element_ext/naming.rb
         | 
| 68 | 
            +
            - lib/case_form/element_ext/validationable.rb
         | 
| 69 | 
            +
            - lib/case_form/errors.rb
         | 
| 70 | 
            +
            - lib/case_form/form_builder.rb
         | 
| 71 | 
            +
            - lib/case_form/inputs.rb
         | 
| 72 | 
            +
            - lib/case_form/labels.rb
         | 
| 73 | 
            +
            - lib/case_form/version.rb
         | 
| 74 | 
            +
            - lib/generators/case_form/install_generator.rb
         | 
| 75 | 
            +
            - lib/generators/case_form/templates/case_form.rb
         | 
| 76 | 
            +
            - lib/generators/case_form/templates/javascripts/jquery.case_form.js
         | 
| 77 | 
            +
            - lib/generators/case_form/templates/javascripts/prototype.case_form.js
         | 
| 78 | 
            +
            - lib/generators/case_form/templates/locales/en.yml
         | 
| 79 | 
            +
            - lib/generators/case_form/templates/locales/pl.yml
         | 
| 80 | 
            +
            - lib/generators/case_form/templates/stylesheets/stylesheet.css
         | 
| 81 | 
            +
            - lib/generators/case_form/templates/stylesheets/stylesheet_changes.css
         | 
| 82 | 
            +
            - lib/generators/case_form/uninstall_generator.rb
         | 
| 83 | 
            +
            files: 
         | 
| 84 | 
            +
            - CHANGELOG.rdoc
         | 
| 85 | 
            +
            - MIT-LICENSE.rdoc
         | 
| 86 | 
            +
            - Manifest
         | 
| 87 | 
            +
            - README.rdoc
         | 
| 88 | 
            +
            - Rakefile
         | 
| 89 | 
            +
            - TODO.rdoc
         | 
| 90 | 
            +
            - lib/case_form.rb
         | 
| 91 | 
            +
            - lib/case_form/associations.rb
         | 
| 92 | 
            +
            - lib/case_form/buttons.rb
         | 
| 93 | 
            +
            - lib/case_form/core_ext/form_helper.rb
         | 
| 94 | 
            +
            - lib/case_form/core_ext/layout_helper.rb
         | 
| 95 | 
            +
            - lib/case_form/core_ext/sentence_error.rb
         | 
| 96 | 
            +
            - lib/case_form/element.rb
         | 
| 97 | 
            +
            - lib/case_form/element/base.rb
         | 
| 98 | 
            +
            - lib/case_form/element/button.rb
         | 
| 99 | 
            +
            - lib/case_form/element/error.rb
         | 
| 100 | 
            +
            - lib/case_form/element/errors/complex_error.rb
         | 
| 101 | 
            +
            - lib/case_form/element/errors/simple_error.rb
         | 
| 102 | 
            +
            - lib/case_form/element/fieldset.rb
         | 
| 103 | 
            +
            - lib/case_form/element/hint.rb
         | 
| 104 | 
            +
            - lib/case_form/element/input.rb
         | 
| 105 | 
            +
            - lib/case_form/element/inputs/collection/checkbox_input.rb
         | 
| 106 | 
            +
            - lib/case_form/element/inputs/collection/radio_input.rb
         | 
| 107 | 
            +
            - lib/case_form/element/inputs/collection/select_input.rb
         | 
| 108 | 
            +
            - lib/case_form/element/inputs/collection_input.rb
         | 
| 109 | 
            +
            - lib/case_form/element/inputs/datetime/date_input.rb
         | 
| 110 | 
            +
            - lib/case_form/element/inputs/datetime/date_time_input.rb
         | 
| 111 | 
            +
            - lib/case_form/element/inputs/datetime/time_input.rb
         | 
| 112 | 
            +
            - lib/case_form/element/inputs/datetime/time_zone_input.rb
         | 
| 113 | 
            +
            - lib/case_form/element/inputs/file_input.rb
         | 
| 114 | 
            +
            - lib/case_form/element/inputs/hidden_input.rb
         | 
| 115 | 
            +
            - lib/case_form/element/inputs/number_input.rb
         | 
| 116 | 
            +
            - lib/case_form/element/inputs/search_input.rb
         | 
| 117 | 
            +
            - lib/case_form/element/inputs/string_input.rb
         | 
| 118 | 
            +
            - lib/case_form/element/inputs/text_input.rb
         | 
| 119 | 
            +
            - lib/case_form/element/label.rb
         | 
| 120 | 
            +
            - lib/case_form/element/nested_model.rb
         | 
| 121 | 
            +
            - lib/case_form/element/nested_models/handle.rb
         | 
| 122 | 
            +
            - lib/case_form/element/nested_models/handles/destructor_handle.rb
         | 
| 123 | 
            +
            - lib/case_form/element/nested_models/handles/generator_handle.rb
         | 
| 124 | 
            +
            - lib/case_form/element_ext/associationable.rb
         | 
| 125 | 
            +
            - lib/case_form/element_ext/columnable.rb
         | 
| 126 | 
            +
            - lib/case_form/element_ext/naming.rb
         | 
| 127 | 
            +
            - lib/case_form/element_ext/validationable.rb
         | 
| 128 | 
            +
            - lib/case_form/errors.rb
         | 
| 129 | 
            +
            - lib/case_form/form_builder.rb
         | 
| 130 | 
            +
            - lib/case_form/inputs.rb
         | 
| 131 | 
            +
            - lib/case_form/labels.rb
         | 
| 132 | 
            +
            - lib/case_form/version.rb
         | 
| 133 | 
            +
            - lib/generators/case_form/install_generator.rb
         | 
| 134 | 
            +
            - lib/generators/case_form/templates/case_form.rb
         | 
| 135 | 
            +
            - lib/generators/case_form/templates/javascripts/jquery.case_form.js
         | 
| 136 | 
            +
            - lib/generators/case_form/templates/javascripts/prototype.case_form.js
         | 
| 137 | 
            +
            - lib/generators/case_form/templates/locales/en.yml
         | 
| 138 | 
            +
            - lib/generators/case_form/templates/locales/pl.yml
         | 
| 139 | 
            +
            - lib/generators/case_form/templates/stylesheets/stylesheet.css
         | 
| 140 | 
            +
            - lib/generators/case_form/templates/stylesheets/stylesheet_changes.css
         | 
| 141 | 
            +
            - lib/generators/case_form/uninstall_generator.rb
         | 
| 142 | 
            +
            - rails/init.rb
         | 
| 143 | 
            +
            - test/element/button_test.rb
         | 
| 144 | 
            +
            - test/element/errors/complex_error_test.rb
         | 
| 145 | 
            +
            - test/element/errors/simple_error_test.rb
         | 
| 146 | 
            +
            - test/element/fieldset_test.rb
         | 
| 147 | 
            +
            - test/element/hint_test.rb
         | 
| 148 | 
            +
            - test/element/input_test.rb
         | 
| 149 | 
            +
            - test/element/inputs/collection/checkbox_input_test.rb
         | 
| 150 | 
            +
            - test/element/inputs/collection/radio_input_test.rb
         | 
| 151 | 
            +
            - test/element/inputs/collection/select_input_test.rb
         | 
| 152 | 
            +
            - test/element/inputs/datetime/date_input_test.rb
         | 
| 153 | 
            +
            - test/element/inputs/datetime/datetime_input_test.rb
         | 
| 154 | 
            +
            - test/element/inputs/datetime/time_input_test.rb
         | 
| 155 | 
            +
            - test/element/inputs/datetime/time_zone_input_test.rb
         | 
| 156 | 
            +
            - test/element/inputs/file_input_test.rb
         | 
| 157 | 
            +
            - test/element/inputs/hidden_input_test.rb
         | 
| 158 | 
            +
            - test/element/inputs/number_input_test.rb
         | 
| 159 | 
            +
            - test/element/inputs/search_input_test.rb
         | 
| 160 | 
            +
            - test/element/inputs/string_input_test.rb
         | 
| 161 | 
            +
            - test/element/inputs/text_input_test.rb
         | 
| 162 | 
            +
            - test/element/label_test.rb
         | 
| 163 | 
            +
            - test/element/nested_model_test.rb
         | 
| 164 | 
            +
            - test/element/nested_models/handles/destructor_handle_test.rb
         | 
| 165 | 
            +
            - test/element/nested_models/handles/generator_handle_test.rb
         | 
| 166 | 
            +
            - test/form_builder_test.rb
         | 
| 167 | 
            +
            - test/form_helper_test.rb
         | 
| 168 | 
            +
            - test/lib/models.rb
         | 
| 169 | 
            +
            - test/test_helper.rb
         | 
| 170 | 
            +
            - case_form.gemspec
         | 
| 171 | 
            +
            has_rdoc: true
         | 
| 172 | 
            +
            homepage: ""
         | 
| 173 | 
            +
            licenses: []
         | 
| 174 | 
            +
             | 
| 175 | 
            +
            post_install_message: 
         | 
| 176 | 
            +
            rdoc_options: 
         | 
| 177 | 
            +
            - --line-numbers
         | 
| 178 | 
            +
            - --inline-source
         | 
| 179 | 
            +
            - --title
         | 
| 180 | 
            +
            - Case_form
         | 
| 181 | 
            +
            - --main
         | 
| 182 | 
            +
            - README.rdoc
         | 
| 183 | 
            +
            require_paths: 
         | 
| 184 | 
            +
            - lib
         | 
| 185 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement 
         | 
| 186 | 
            +
              none: false
         | 
| 187 | 
            +
              requirements: 
         | 
| 188 | 
            +
              - - ">="
         | 
| 189 | 
            +
                - !ruby/object:Gem::Version 
         | 
| 190 | 
            +
                  segments: 
         | 
| 191 | 
            +
                  - 0
         | 
| 192 | 
            +
                  version: "0"
         | 
| 193 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement 
         | 
| 194 | 
            +
              none: false
         | 
| 195 | 
            +
              requirements: 
         | 
| 196 | 
            +
              - - ">="
         | 
| 197 | 
            +
                - !ruby/object:Gem::Version 
         | 
| 198 | 
            +
                  segments: 
         | 
| 199 | 
            +
                  - 1
         | 
| 200 | 
            +
                  - 2
         | 
| 201 | 
            +
                  version: "1.2"
         | 
| 202 | 
            +
            requirements: []
         | 
| 203 | 
            +
             | 
| 204 | 
            +
            rubyforge_project: case_form
         | 
| 205 | 
            +
            rubygems_version: 1.3.7
         | 
| 206 | 
            +
            signing_key: 
         | 
| 207 | 
            +
            specification_version: 3
         | 
| 208 | 
            +
            summary: ""
         | 
| 209 | 
            +
            test_files: 
         | 
| 210 | 
            +
            - test/element/button_test.rb
         | 
| 211 | 
            +
            - test/element/errors/complex_error_test.rb
         | 
| 212 | 
            +
            - test/element/errors/simple_error_test.rb
         | 
| 213 | 
            +
            - test/element/fieldset_test.rb
         | 
| 214 | 
            +
            - test/element/hint_test.rb
         | 
| 215 | 
            +
            - test/element/input_test.rb
         | 
| 216 | 
            +
            - test/element/inputs/collection/checkbox_input_test.rb
         | 
| 217 | 
            +
            - test/element/inputs/collection/radio_input_test.rb
         | 
| 218 | 
            +
            - test/element/inputs/collection/select_input_test.rb
         | 
| 219 | 
            +
            - test/element/inputs/datetime/date_input_test.rb
         | 
| 220 | 
            +
            - test/element/inputs/datetime/datetime_input_test.rb
         | 
| 221 | 
            +
            - test/element/inputs/datetime/time_input_test.rb
         | 
| 222 | 
            +
            - test/element/inputs/datetime/time_zone_input_test.rb
         | 
| 223 | 
            +
            - test/element/inputs/file_input_test.rb
         | 
| 224 | 
            +
            - test/element/inputs/hidden_input_test.rb
         | 
| 225 | 
            +
            - test/element/inputs/number_input_test.rb
         | 
| 226 | 
            +
            - test/element/inputs/search_input_test.rb
         | 
| 227 | 
            +
            - test/element/inputs/string_input_test.rb
         | 
| 228 | 
            +
            - test/element/inputs/text_input_test.rb
         | 
| 229 | 
            +
            - test/element/label_test.rb
         | 
| 230 | 
            +
            - test/element/nested_model_test.rb
         | 
| 231 | 
            +
            - test/element/nested_models/handles/destructor_handle_test.rb
         | 
| 232 | 
            +
            - test/element/nested_models/handles/generator_handle_test.rb
         | 
| 233 | 
            +
            - test/form_builder_test.rb
         | 
| 234 | 
            +
            - test/form_helper_test.rb
         | 
| 235 | 
            +
            - test/test_helper.rb
         |