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.
Files changed (88) hide show
  1. data/CHANGELOG.rdoc +1 -0
  2. data/MIT-LICENSE.rdoc +20 -0
  3. data/Manifest +86 -0
  4. data/README.rdoc +0 -0
  5. data/Rakefile +30 -0
  6. data/TODO.rdoc +7 -0
  7. data/case_form.gemspec +31 -0
  8. data/lib/case_form.rb +88 -0
  9. data/lib/case_form/associations.rb +50 -0
  10. data/lib/case_form/buttons.rb +175 -0
  11. data/lib/case_form/core_ext/form_helper.rb +54 -0
  12. data/lib/case_form/core_ext/layout_helper.rb +16 -0
  13. data/lib/case_form/core_ext/sentence_error.rb +38 -0
  14. data/lib/case_form/element.rb +40 -0
  15. data/lib/case_form/element/base.rb +95 -0
  16. data/lib/case_form/element/button.rb +64 -0
  17. data/lib/case_form/element/error.rb +54 -0
  18. data/lib/case_form/element/errors/complex_error.rb +107 -0
  19. data/lib/case_form/element/errors/simple_error.rb +76 -0
  20. data/lib/case_form/element/fieldset.rb +35 -0
  21. data/lib/case_form/element/hint.rb +54 -0
  22. data/lib/case_form/element/input.rb +106 -0
  23. data/lib/case_form/element/inputs/collection/checkbox_input.rb +36 -0
  24. data/lib/case_form/element/inputs/collection/radio_input.rb +27 -0
  25. data/lib/case_form/element/inputs/collection/select_input.rb +22 -0
  26. data/lib/case_form/element/inputs/collection_input.rb +89 -0
  27. data/lib/case_form/element/inputs/datetime/date_input.rb +45 -0
  28. data/lib/case_form/element/inputs/datetime/date_time_input.rb +50 -0
  29. data/lib/case_form/element/inputs/datetime/time_input.rb +34 -0
  30. data/lib/case_form/element/inputs/datetime/time_zone_input.rb +24 -0
  31. data/lib/case_form/element/inputs/file_input.rb +13 -0
  32. data/lib/case_form/element/inputs/hidden_input.rb +17 -0
  33. data/lib/case_form/element/inputs/number_input.rb +42 -0
  34. data/lib/case_form/element/inputs/search_input.rb +32 -0
  35. data/lib/case_form/element/inputs/string_input.rb +18 -0
  36. data/lib/case_form/element/inputs/text_input.rb +19 -0
  37. data/lib/case_form/element/label.rb +52 -0
  38. data/lib/case_form/element/nested_model.rb +105 -0
  39. data/lib/case_form/element/nested_models/handle.rb +18 -0
  40. data/lib/case_form/element/nested_models/handles/destructor_handle.rb +47 -0
  41. data/lib/case_form/element/nested_models/handles/generator_handle.rb +55 -0
  42. data/lib/case_form/element_ext/associationable.rb +54 -0
  43. data/lib/case_form/element_ext/columnable.rb +21 -0
  44. data/lib/case_form/element_ext/naming.rb +17 -0
  45. data/lib/case_form/element_ext/validationable.rb +13 -0
  46. data/lib/case_form/errors.rb +189 -0
  47. data/lib/case_form/form_builder.rb +11 -0
  48. data/lib/case_form/inputs.rb +1095 -0
  49. data/lib/case_form/labels.rb +102 -0
  50. data/lib/case_form/version.rb +6 -0
  51. data/lib/generators/case_form/install_generator.rb +33 -0
  52. data/lib/generators/case_form/templates/case_form.rb +63 -0
  53. data/lib/generators/case_form/templates/javascripts/jquery.case_form.js +10 -0
  54. data/lib/generators/case_form/templates/javascripts/prototype.case_form.js +0 -0
  55. data/lib/generators/case_form/templates/locales/en.yml +28 -0
  56. data/lib/generators/case_form/templates/locales/pl.yml +28 -0
  57. data/lib/generators/case_form/templates/stylesheets/stylesheet.css +93 -0
  58. data/lib/generators/case_form/templates/stylesheets/stylesheet_changes.css +1 -0
  59. data/lib/generators/case_form/uninstall_generator.rb +30 -0
  60. data/rails/init.rb +1 -0
  61. data/test/element/button_test.rb +85 -0
  62. data/test/element/errors/complex_error_test.rb +140 -0
  63. data/test/element/errors/simple_error_test.rb +92 -0
  64. data/test/element/fieldset_test.rb +28 -0
  65. data/test/element/hint_test.rb +81 -0
  66. data/test/element/input_test.rb +197 -0
  67. data/test/element/inputs/collection/checkbox_input_test.rb +176 -0
  68. data/test/element/inputs/collection/radio_input_test.rb +156 -0
  69. data/test/element/inputs/collection/select_input_test.rb +152 -0
  70. data/test/element/inputs/datetime/date_input_test.rb +160 -0
  71. data/test/element/inputs/datetime/datetime_input_test.rb +227 -0
  72. data/test/element/inputs/datetime/time_input_test.rb +72 -0
  73. data/test/element/inputs/datetime/time_zone_input_test.rb +42 -0
  74. data/test/element/inputs/file_input_test.rb +13 -0
  75. data/test/element/inputs/hidden_input_test.rb +13 -0
  76. data/test/element/inputs/number_input_test.rb +50 -0
  77. data/test/element/inputs/search_input_test.rb +13 -0
  78. data/test/element/inputs/string_input_test.rb +33 -0
  79. data/test/element/inputs/text_input_test.rb +13 -0
  80. data/test/element/label_test.rb +62 -0
  81. data/test/element/nested_model_test.rb +163 -0
  82. data/test/element/nested_models/handles/destructor_handle_test.rb +35 -0
  83. data/test/element/nested_models/handles/generator_handle_test.rb +27 -0
  84. data/test/form_builder_test.rb +25 -0
  85. data/test/form_helper_test.rb +15 -0
  86. data/test/lib/models.rb +268 -0
  87. data/test/test_helper.rb +74 -0
  88. metadata +235 -0
data/CHANGELOG.rdoc ADDED
@@ -0,0 +1 @@
1
+ v0.0.1 Initial project
data/MIT-LICENSE.rdoc ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010 Szymon Czarnecki
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Manifest ADDED
@@ -0,0 +1,86 @@
1
+ CHANGELOG.rdoc
2
+ MIT-LICENSE.rdoc
3
+ Manifest
4
+ README.rdoc
5
+ Rakefile
6
+ TODO.rdoc
7
+ lib/case_form.rb
8
+ lib/case_form/associations.rb
9
+ lib/case_form/buttons.rb
10
+ lib/case_form/core_ext/form_helper.rb
11
+ lib/case_form/core_ext/layout_helper.rb
12
+ lib/case_form/core_ext/sentence_error.rb
13
+ lib/case_form/element.rb
14
+ lib/case_form/element/base.rb
15
+ lib/case_form/element/button.rb
16
+ lib/case_form/element/error.rb
17
+ lib/case_form/element/errors/complex_error.rb
18
+ lib/case_form/element/errors/simple_error.rb
19
+ lib/case_form/element/fieldset.rb
20
+ lib/case_form/element/hint.rb
21
+ lib/case_form/element/input.rb
22
+ lib/case_form/element/inputs/collection/checkbox_input.rb
23
+ lib/case_form/element/inputs/collection/radio_input.rb
24
+ lib/case_form/element/inputs/collection/select_input.rb
25
+ lib/case_form/element/inputs/collection_input.rb
26
+ lib/case_form/element/inputs/datetime/date_input.rb
27
+ lib/case_form/element/inputs/datetime/date_time_input.rb
28
+ lib/case_form/element/inputs/datetime/time_input.rb
29
+ lib/case_form/element/inputs/datetime/time_zone_input.rb
30
+ lib/case_form/element/inputs/file_input.rb
31
+ lib/case_form/element/inputs/hidden_input.rb
32
+ lib/case_form/element/inputs/number_input.rb
33
+ lib/case_form/element/inputs/search_input.rb
34
+ lib/case_form/element/inputs/string_input.rb
35
+ lib/case_form/element/inputs/text_input.rb
36
+ lib/case_form/element/label.rb
37
+ lib/case_form/element/nested_model.rb
38
+ lib/case_form/element/nested_models/handle.rb
39
+ lib/case_form/element/nested_models/handles/destructor_handle.rb
40
+ lib/case_form/element/nested_models/handles/generator_handle.rb
41
+ lib/case_form/element_ext/associationable.rb
42
+ lib/case_form/element_ext/columnable.rb
43
+ lib/case_form/element_ext/naming.rb
44
+ lib/case_form/element_ext/validationable.rb
45
+ lib/case_form/errors.rb
46
+ lib/case_form/form_builder.rb
47
+ lib/case_form/inputs.rb
48
+ lib/case_form/labels.rb
49
+ lib/case_form/version.rb
50
+ lib/generators/case_form/install_generator.rb
51
+ lib/generators/case_form/templates/case_form.rb
52
+ lib/generators/case_form/templates/javascripts/jquery.case_form.js
53
+ lib/generators/case_form/templates/javascripts/prototype.case_form.js
54
+ lib/generators/case_form/templates/locales/en.yml
55
+ lib/generators/case_form/templates/locales/pl.yml
56
+ lib/generators/case_form/templates/stylesheets/stylesheet.css
57
+ lib/generators/case_form/templates/stylesheets/stylesheet_changes.css
58
+ lib/generators/case_form/uninstall_generator.rb
59
+ rails/init.rb
60
+ test/element/button_test.rb
61
+ test/element/errors/complex_error_test.rb
62
+ test/element/errors/simple_error_test.rb
63
+ test/element/fieldset_test.rb
64
+ test/element/hint_test.rb
65
+ test/element/input_test.rb
66
+ test/element/inputs/collection/checkbox_input_test.rb
67
+ test/element/inputs/collection/radio_input_test.rb
68
+ test/element/inputs/collection/select_input_test.rb
69
+ test/element/inputs/datetime/date_input_test.rb
70
+ test/element/inputs/datetime/datetime_input_test.rb
71
+ test/element/inputs/datetime/time_input_test.rb
72
+ test/element/inputs/datetime/time_zone_input_test.rb
73
+ test/element/inputs/file_input_test.rb
74
+ test/element/inputs/hidden_input_test.rb
75
+ test/element/inputs/number_input_test.rb
76
+ test/element/inputs/search_input_test.rb
77
+ test/element/inputs/string_input_test.rb
78
+ test/element/inputs/text_input_test.rb
79
+ test/element/label_test.rb
80
+ test/element/nested_model_test.rb
81
+ test/element/nested_models/handles/destructor_handle_test.rb
82
+ test/element/nested_models/handles/generator_handle_test.rb
83
+ test/form_builder_test.rb
84
+ test/form_helper_test.rb
85
+ test/lib/models.rb
86
+ test/test_helper.rb
data/README.rdoc ADDED
File without changes
data/Rakefile ADDED
@@ -0,0 +1,30 @@
1
+ require 'rake'
2
+ require 'echoe'
3
+ require File.join(File.dirname(__FILE__), 'lib', 'case_form', 'version')
4
+
5
+ require 'rake/testtask'
6
+ Rake::TestTask.new(:test) do |test|
7
+ test.libs << 'lib'
8
+ test.libs << 'test'
9
+ test.pattern = 'test/**/*_test.rb'
10
+ test.verbose = true
11
+ end
12
+
13
+ # Require Hanna for RDoc
14
+ require 'hanna/rdoctask'
15
+ desc 'Generate RDoc documentation for the CaseForm gem.'
16
+ Rake::RDocTask.new(:rdoc) do |rdoc|
17
+ rdoc.rdoc_files.include('README.rdoc', 'MIT-LICENSE.rdoc', 'CHANGELOG.rdoc').
18
+ include('lib/**/*.rb').
19
+ exclude('lib/case_form/version.rb')
20
+
21
+ rdoc.main = "README.rdoc" # page to start on
22
+ rdoc.title = "CaseForm documentation"
23
+
24
+ rdoc.rdoc_dir = 'doc' # rdoc output folder
25
+ end
26
+
27
+ desc 'Default: run unit tests.'
28
+ task :default => :test
29
+
30
+ Echoe.new('case_form', CaseForm::VERSION)
data/TODO.rdoc ADDED
@@ -0,0 +1,7 @@
1
+ == TODO LIST
2
+ * dodac GROUP_BY dla select
3
+ * zrobic zaawansowane opcje dla elementow complex_error, np. :header => { :tag => :div, :id => :some_id, :message => :sth }
4
+ * JS dla f.new_object i f.destroy_object
5
+ * placeholders w locales (HTML5)
6
+ * napisac do konca dokumentacje dla metod
7
+ * napisac README
data/case_form.gemspec ADDED
@@ -0,0 +1,31 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{case_form}
5
+ s.version = "0.0.3"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
+ s.authors = [""]
9
+ s.date = %q{2010-10-14}
10
+ s.description = %q{}
11
+ s.email = %q{}
12
+ s.extra_rdoc_files = ["CHANGELOG.rdoc", "README.rdoc", "TODO.rdoc", "lib/case_form.rb", "lib/case_form/associations.rb", "lib/case_form/buttons.rb", "lib/case_form/core_ext/form_helper.rb", "lib/case_form/core_ext/layout_helper.rb", "lib/case_form/core_ext/sentence_error.rb", "lib/case_form/element.rb", "lib/case_form/element/base.rb", "lib/case_form/element/button.rb", "lib/case_form/element/error.rb", "lib/case_form/element/errors/complex_error.rb", "lib/case_form/element/errors/simple_error.rb", "lib/case_form/element/fieldset.rb", "lib/case_form/element/hint.rb", "lib/case_form/element/input.rb", "lib/case_form/element/inputs/collection/checkbox_input.rb", "lib/case_form/element/inputs/collection/radio_input.rb", "lib/case_form/element/inputs/collection/select_input.rb", "lib/case_form/element/inputs/collection_input.rb", "lib/case_form/element/inputs/datetime/date_input.rb", "lib/case_form/element/inputs/datetime/date_time_input.rb", "lib/case_form/element/inputs/datetime/time_input.rb", "lib/case_form/element/inputs/datetime/time_zone_input.rb", "lib/case_form/element/inputs/file_input.rb", "lib/case_form/element/inputs/hidden_input.rb", "lib/case_form/element/inputs/number_input.rb", "lib/case_form/element/inputs/search_input.rb", "lib/case_form/element/inputs/string_input.rb", "lib/case_form/element/inputs/text_input.rb", "lib/case_form/element/label.rb", "lib/case_form/element/nested_model.rb", "lib/case_form/element/nested_models/handle.rb", "lib/case_form/element/nested_models/handles/destructor_handle.rb", "lib/case_form/element/nested_models/handles/generator_handle.rb", "lib/case_form/element_ext/associationable.rb", "lib/case_form/element_ext/columnable.rb", "lib/case_form/element_ext/naming.rb", "lib/case_form/element_ext/validationable.rb", "lib/case_form/errors.rb", "lib/case_form/form_builder.rb", "lib/case_form/inputs.rb", "lib/case_form/labels.rb", "lib/case_form/version.rb", "lib/generators/case_form/install_generator.rb", "lib/generators/case_form/templates/case_form.rb", "lib/generators/case_form/templates/javascripts/jquery.case_form.js", "lib/generators/case_form/templates/javascripts/prototype.case_form.js", "lib/generators/case_form/templates/locales/en.yml", "lib/generators/case_form/templates/locales/pl.yml", "lib/generators/case_form/templates/stylesheets/stylesheet.css", "lib/generators/case_form/templates/stylesheets/stylesheet_changes.css", "lib/generators/case_form/uninstall_generator.rb"]
13
+ s.files = ["CHANGELOG.rdoc", "MIT-LICENSE.rdoc", "Manifest", "README.rdoc", "Rakefile", "TODO.rdoc", "lib/case_form.rb", "lib/case_form/associations.rb", "lib/case_form/buttons.rb", "lib/case_form/core_ext/form_helper.rb", "lib/case_form/core_ext/layout_helper.rb", "lib/case_form/core_ext/sentence_error.rb", "lib/case_form/element.rb", "lib/case_form/element/base.rb", "lib/case_form/element/button.rb", "lib/case_form/element/error.rb", "lib/case_form/element/errors/complex_error.rb", "lib/case_form/element/errors/simple_error.rb", "lib/case_form/element/fieldset.rb", "lib/case_form/element/hint.rb", "lib/case_form/element/input.rb", "lib/case_form/element/inputs/collection/checkbox_input.rb", "lib/case_form/element/inputs/collection/radio_input.rb", "lib/case_form/element/inputs/collection/select_input.rb", "lib/case_form/element/inputs/collection_input.rb", "lib/case_form/element/inputs/datetime/date_input.rb", "lib/case_form/element/inputs/datetime/date_time_input.rb", "lib/case_form/element/inputs/datetime/time_input.rb", "lib/case_form/element/inputs/datetime/time_zone_input.rb", "lib/case_form/element/inputs/file_input.rb", "lib/case_form/element/inputs/hidden_input.rb", "lib/case_form/element/inputs/number_input.rb", "lib/case_form/element/inputs/search_input.rb", "lib/case_form/element/inputs/string_input.rb", "lib/case_form/element/inputs/text_input.rb", "lib/case_form/element/label.rb", "lib/case_form/element/nested_model.rb", "lib/case_form/element/nested_models/handle.rb", "lib/case_form/element/nested_models/handles/destructor_handle.rb", "lib/case_form/element/nested_models/handles/generator_handle.rb", "lib/case_form/element_ext/associationable.rb", "lib/case_form/element_ext/columnable.rb", "lib/case_form/element_ext/naming.rb", "lib/case_form/element_ext/validationable.rb", "lib/case_form/errors.rb", "lib/case_form/form_builder.rb", "lib/case_form/inputs.rb", "lib/case_form/labels.rb", "lib/case_form/version.rb", "lib/generators/case_form/install_generator.rb", "lib/generators/case_form/templates/case_form.rb", "lib/generators/case_form/templates/javascripts/jquery.case_form.js", "lib/generators/case_form/templates/javascripts/prototype.case_form.js", "lib/generators/case_form/templates/locales/en.yml", "lib/generators/case_form/templates/locales/pl.yml", "lib/generators/case_form/templates/stylesheets/stylesheet.css", "lib/generators/case_form/templates/stylesheets/stylesheet_changes.css", "lib/generators/case_form/uninstall_generator.rb", "rails/init.rb", "test/element/button_test.rb", "test/element/errors/complex_error_test.rb", "test/element/errors/simple_error_test.rb", "test/element/fieldset_test.rb", "test/element/hint_test.rb", "test/element/input_test.rb", "test/element/inputs/collection/checkbox_input_test.rb", "test/element/inputs/collection/radio_input_test.rb", "test/element/inputs/collection/select_input_test.rb", "test/element/inputs/datetime/date_input_test.rb", "test/element/inputs/datetime/datetime_input_test.rb", "test/element/inputs/datetime/time_input_test.rb", "test/element/inputs/datetime/time_zone_input_test.rb", "test/element/inputs/file_input_test.rb", "test/element/inputs/hidden_input_test.rb", "test/element/inputs/number_input_test.rb", "test/element/inputs/search_input_test.rb", "test/element/inputs/string_input_test.rb", "test/element/inputs/text_input_test.rb", "test/element/label_test.rb", "test/element/nested_model_test.rb", "test/element/nested_models/handles/destructor_handle_test.rb", "test/element/nested_models/handles/generator_handle_test.rb", "test/form_builder_test.rb", "test/form_helper_test.rb", "test/lib/models.rb", "test/test_helper.rb", "case_form.gemspec"]
14
+ s.homepage = %q{}
15
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Case_form", "--main", "README.rdoc"]
16
+ s.require_paths = ["lib"]
17
+ s.rubyforge_project = %q{case_form}
18
+ s.rubygems_version = %q{1.3.7}
19
+ s.summary = %q{}
20
+ s.test_files = ["test/element/button_test.rb", "test/element/errors/complex_error_test.rb", "test/element/errors/simple_error_test.rb", "test/element/fieldset_test.rb", "test/element/hint_test.rb", "test/element/input_test.rb", "test/element/inputs/collection/checkbox_input_test.rb", "test/element/inputs/collection/radio_input_test.rb", "test/element/inputs/collection/select_input_test.rb", "test/element/inputs/datetime/date_input_test.rb", "test/element/inputs/datetime/datetime_input_test.rb", "test/element/inputs/datetime/time_input_test.rb", "test/element/inputs/datetime/time_zone_input_test.rb", "test/element/inputs/file_input_test.rb", "test/element/inputs/hidden_input_test.rb", "test/element/inputs/number_input_test.rb", "test/element/inputs/search_input_test.rb", "test/element/inputs/string_input_test.rb", "test/element/inputs/text_input_test.rb", "test/element/label_test.rb", "test/element/nested_model_test.rb", "test/element/nested_models/handles/destructor_handle_test.rb", "test/element/nested_models/handles/generator_handle_test.rb", "test/form_builder_test.rb", "test/form_helper_test.rb", "test/test_helper.rb"]
21
+
22
+ if s.respond_to? :specification_version then
23
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
24
+ s.specification_version = 3
25
+
26
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
27
+ else
28
+ end
29
+ else
30
+ end
31
+ end
data/lib/case_form.rb ADDED
@@ -0,0 +1,88 @@
1
+ # coding: utf-8
2
+ require 'action_view'
3
+ require 'case_form/core_ext/sentence_error'
4
+ require 'case_form/core_ext/form_helper'
5
+ require 'case_form/core_ext/layout_helper'
6
+
7
+ module CaseForm
8
+ autoload :FormBuilder, 'case_form/form_builder'
9
+ autoload :Element, 'case_form/element'
10
+ autoload :Inputs, 'case_form/inputs'
11
+ autoload :Associations, 'case_form/associations'
12
+ autoload :Buttons, 'case_form/buttons'
13
+ autoload :Labels, 'case_form/labels'
14
+ autoload :Errors, 'case_form/errors'
15
+
16
+ def self.config
17
+ yield self
18
+ end
19
+
20
+ mattr_accessor :input_elements
21
+ @@input_elements = [:label, :input, :error, :hint]
22
+
23
+ mattr_accessor :nested_model_elements
24
+ @@nested_model_elements = [:nested_model, :destructor, :generator]
25
+
26
+ mattr_accessor :form_buttons
27
+ @@form_buttons = [:commit, :reset]
28
+
29
+ mattr_accessor :locked_columns
30
+ @@locked_columns = [:id, :type, :lock_version, :version,
31
+ :created_at, :updated_at, :created_on, :updated_on]
32
+
33
+ mattr_accessor :input_types
34
+ @@input_types = [:string, :text, :hidden, :password, :search,
35
+ :email, :url, :telephone, :file,
36
+ :datetime, :date, :time, :number, :range,
37
+ :checkbox, :radio, :select,
38
+ :association, :has_many, :has_one, :belongs_to]
39
+
40
+ mattr_accessor :require_symbol
41
+ @@require_symbol = "*"
42
+
43
+ mattr_accessor :all_fields_required
44
+ @@all_fields_required = false
45
+
46
+ mattr_accessor :input_size
47
+ @@input_size = 50
48
+
49
+ mattr_accessor :textarea_cols
50
+ @@textarea_cols = 20
51
+
52
+ mattr_accessor :textarea_rows
53
+ @@textarea_rows = 10
54
+
55
+ mattr_accessor :number_step
56
+ @@number_step = 1
57
+
58
+ mattr_accessor :wrapper_tag
59
+ @@wrapper_tag = :div
60
+
61
+ mattr_accessor :hint_tag
62
+ @@hint_tag = :span
63
+
64
+ mattr_accessor :error_tag
65
+ @@error_tag = :div
66
+
67
+ # :sentence, :list
68
+ mattr_accessor :error_type
69
+ @@error_type = :sentence
70
+
71
+ mattr_accessor :error_connector
72
+ @@error_connector = ", "
73
+
74
+ mattr_accessor :last_error_connector
75
+ @@last_error_connector = " and "
76
+
77
+ mattr_accessor :complex_error_header_tag
78
+ @@complex_error_header_tag = :h2
79
+
80
+ mattr_accessor :complex_error_message_tag
81
+ @@complex_error_message_tag = :p
82
+
83
+ mattr_accessor :collection_label_methods
84
+ @@collection_label_methods = [:to_label, :full_name, :fullname, :name, :title, :login, :email, :value, :to_s]
85
+
86
+ mattr_accessor :collection_value_methods
87
+ @@collection_value_methods = [:id]
88
+ end
@@ -0,0 +1,50 @@
1
+ # coding: utf-8
2
+ module CaseForm
3
+ module Associations
4
+ def association(method, *args, &block)
5
+ association = object.class.reflect_on_association(method)
6
+ raise(ArgumentError, "Association :#{method} not found in #{object.class} model") unless association
7
+
8
+ options = args.extract_options!
9
+
10
+ if options.has_key?(:as) && association.macro != :has_one
11
+ type, input_types = options.delete(:as), [:checkbox, :radio, :select]
12
+ raise(ArgumentError, "Unknown input type: #{type}. Available types: #{input_types.join(', ')}") unless input_types.include?(type.to_sym)
13
+ send(type, method, options)
14
+ elsif block_given? || object.respond_to?("#{method}_attributes=")
15
+ Element::NestedModel.new(self, method, options, &block).generate
16
+ else
17
+ specified_association(method, options)
18
+ end
19
+ end
20
+ alias_method :belongs_to, :association
21
+ alias_method :has_one, :association
22
+ alias_method :has_many, :association
23
+ alias_method :habtm, :association
24
+
25
+ def new_object(method, options={})
26
+ Element::GeneratorHandle.new(self, method, options).generate
27
+ end
28
+
29
+ def destroy_object(options={})
30
+ Element::DestructorHandle.new(self, options).generate
31
+ end
32
+
33
+ def case_fields_for(record_or_name_or_array, *args, &block)
34
+ options = args.extract_options!
35
+ options[:builder] = CaseForm::FormBuilder
36
+ fields_for(record_or_name_or_array, *(args << options), &block)
37
+ end
38
+
39
+ private
40
+ def specified_association(method, options)
41
+ input = case object.class.reflect_on_association(method.to_sym).macro
42
+ when :belongs_to then :select
43
+ when :has_many then :checkbox
44
+ else
45
+ raise(ArgumentError, ":has_one association is supported only with nested attributes!")
46
+ end
47
+ send(input, method, options)
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,175 @@
1
+ # coding: utf-8
2
+ module CaseForm
3
+ module Buttons
4
+ # == Buttons with or without block
5
+ #
6
+ # With no arguments it creates fieldset with buttons defined in CaseForm config
7
+ # (by default :submit and :reset button). Also can create buttons determined in
8
+ # arguments.
9
+ #
10
+ # == Examples:
11
+ #
12
+ # # Create buttons defined in CaseForm config
13
+ #
14
+ # <%= case_form_for(@user) do |f| %>
15
+ # <%= f.buttons %>
16
+ # <% end %>
17
+ #
18
+ # <fieldset class="fieldset">
19
+ # <div class="buttons">
20
+ # <input name="submit" type="submit" value="Create" />
21
+ # </div>
22
+ # <div class="buttons">
23
+ # <input name="reset" type="reset" value="Reset" />
24
+ # </div>
25
+ # </fieldset>
26
+ #
27
+ # # or create buttons defined in arguments
28
+ #
29
+ # <%= case_form_for(@user) do |f| %>
30
+ # <%= f.buttons(:commit) %>
31
+ # <% end %>
32
+ #
33
+ # <fieldset class="fieldset">
34
+ # <div class="buttons">
35
+ # <input name="submit" type="submit" value="Create" />
36
+ # </div>
37
+ # </fieldset>
38
+ #
39
+ # # or create buttons in block
40
+ # <%= case_form_for(@user) do |f| %>
41
+ # <%= f.buttons do %>
42
+ # <%= f.button %>
43
+ # <% end %>
44
+ # <% end %>
45
+ #
46
+ # <fieldset class="fieldset">
47
+ # <div class="buttons">
48
+ # <input name="submit" type="submit" value="Create" />
49
+ # </div>
50
+ # </fieldset>
51
+ #
52
+ # == Default buttons config:
53
+ #
54
+ # * CaseForm.form_buttons
55
+ # * CaseForm.wrapper_tag
56
+ #
57
+ # == Allowed options:
58
+ # * +:id+ - HTML ID
59
+ # * +:class+ - HTML class
60
+ # * +:style+ - not recommended HTML styles (use CSS)
61
+ # * +:text+ - legend for fieldset
62
+ # For more advanced options for each button use block.
63
+ #
64
+ def buttons(*args, &block)
65
+ options = args.extract_options!
66
+ options[:class] ||= :buttons
67
+
68
+ fieldset = Element::Fieldset.new(self, options)
69
+
70
+ if block_given?
71
+ fieldset.generate(&block)
72
+ else
73
+ args = CaseForm.form_buttons if args.empty?
74
+ fieldset.generate(args.collect { |button| send(button) })
75
+ end
76
+ end
77
+
78
+ # == Submit button
79
+ #
80
+ # Creates a basic form submit button.
81
+ #
82
+ # == Examples:
83
+ #
84
+ # # Generate only button
85
+ #
86
+ # <%= case_form_for(@user) do |f| %>
87
+ # <%= f.button
88
+ # <% end %>
89
+ #
90
+ # <div class="buttons">
91
+ # <input name="submit" type="submit" value="Create" />
92
+ # </div>
93
+ #
94
+ # # or in buttons block
95
+ #
96
+ # <%= case_form_for(@user) do |f| %>
97
+ # <%= f.buttons do %>
98
+ # <%= f.button %>
99
+ # <% end %>
100
+ # <% end %>
101
+ #
102
+ # <div class="fieldset">
103
+ # <div class="buttons">
104
+ # <input name="submit" type="submit" value="Create" />
105
+ # </div>
106
+ # </div>
107
+ #
108
+ # == Allowed options:
109
+ # * +:id+ - HTML ID
110
+ # * +:class+ - HTML class
111
+ # * +:style+ - not recommended HTML styles (use CSS)
112
+ # * +:text+ - text on button
113
+ # * +:disabled+ - disabled button
114
+ # * +:as+ - button type (supported values: :submit and :reset)
115
+ #
116
+ # == I18n lookups priority:
117
+ #
118
+ # * 'case_form.buttons.{{model}}.{{button_type}}'
119
+ # * 'case_form.buttons.{{button_type}}'
120
+ # * Create || Update
121
+ #
122
+ def button(options={})
123
+ Element::Button.new(self, options.merge(:as => :submit)).generate
124
+ end
125
+ alias_method :commit, :button
126
+
127
+ # == Reset button
128
+ #
129
+ # Creates a new reset button for forms (support for HTML5).
130
+ #
131
+ # == Examples:
132
+ #
133
+ # # Generate only button
134
+ #
135
+ # <%= case_form_for(@user) do |f| %>
136
+ # <%= f.reset
137
+ # <% end %>
138
+ #
139
+ # <div class="buttons">
140
+ # <input name="reset" type="reset" value="Reset" />
141
+ # </div>
142
+ #
143
+ # # or in buttons block
144
+ #
145
+ # <%= case_form_for(@user) do |f| %>
146
+ # <%= f.buttons do %>
147
+ # <%= f.reset %>
148
+ # <% end %>
149
+ # <% end %>
150
+ #
151
+ # <div class="fieldset">
152
+ # <div class="buttons">
153
+ # <input name="reset" type="reset" value="Reset" />
154
+ # </div>
155
+ # </div>
156
+ #
157
+ # == Allowed options:
158
+ # * +:id+ - HTML ID
159
+ # * +:class+ - HTML class
160
+ # * +:style+ - not recommended HTML styles (use CSS)
161
+ # * +:text+ - text on button
162
+ # * +:disabled+ - disabled button
163
+ # * +:as+ - button type (supported values: :submit and :reset)
164
+ #
165
+ # == I18n lookups priority:
166
+ #
167
+ # * 'case_form.buttons.{{model}}.{{button_type}}'
168
+ # * 'case_form.buttons.{{button_type}}'
169
+ # * Reset
170
+ #
171
+ def reset(options={})
172
+ Element::Button.new(self, options.merge(:as => :reset)).generate
173
+ end
174
+ end
175
+ end