formula 0.3.5 → 0.3.6
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/LICENSE +1 -1
- data/README.rdoc +6 -6
- data/lib/formula.rb +143 -143
- data/lib/formula/railtie.rb +1 -1
- data/lib/formula/version.rb +1 -1
- data/lib/generators/attached/templates/_form.html.haml +6 -0
- data/test/dummy/app/assets/javascripts/application.js +2 -1
- data/test/dummy/app/assets/javascripts/{contacts.js → main.js.coffee} +0 -0
- data/test/dummy/app/assets/stylesheets/application.css +4 -168
- data/test/dummy/app/assets/stylesheets/main.css.scss +6 -0
- data/test/dummy/app/controllers/application_controller.rb +56 -0
- data/test/dummy/app/controllers/contacts_controller.rb +15 -8
- data/test/dummy/app/controllers/main_controller.rb +2 -2
- data/test/dummy/app/controllers/sessions_controller.rb +37 -0
- data/test/dummy/app/controllers/users_controller.rb +46 -0
- data/test/dummy/app/helpers/sessions_helper.rb +2 -0
- data/test/dummy/app/helpers/users_helper.rb +2 -0
- data/test/dummy/app/models/contact.rb +6 -6
- data/test/dummy/app/models/group.rb +3 -3
- data/test/dummy/app/models/session.rb +39 -0
- data/test/dummy/app/models/user.rb +19 -0
- data/test/dummy/app/views/contacts/_form.html.haml +12 -0
- data/test/dummy/app/views/contacts/edit.html.haml +6 -0
- data/test/dummy/app/views/contacts/index.html.haml +21 -0
- data/test/dummy/app/views/contacts/new.html.haml +6 -0
- data/test/dummy/app/views/layouts/application.html.haml +23 -0
- data/test/dummy/app/views/main/index.html.haml +7 -0
- data/test/dummy/app/views/sessions/_fields.html.haml +3 -0
- data/test/dummy/app/views/sessions/_form.html.haml +5 -0
- data/test/dummy/app/views/sessions/_modal.html.haml +12 -0
- data/test/dummy/app/views/sessions/new.html.haml +5 -0
- data/test/dummy/app/views/sessions/new.js.haml +2 -0
- data/test/dummy/app/views/users/_fields.html.haml +4 -0
- data/test/dummy/app/views/users/_form.html.haml +5 -0
- data/test/dummy/app/views/users/_modal.html.haml +12 -0
- data/test/dummy/app/views/users/edit.html.haml +6 -0
- data/test/dummy/app/views/users/edit.js.haml +2 -0
- data/test/dummy/app/views/users/new.html.haml +6 -0
- data/test/dummy/app/views/users/new.js.haml +2 -0
- data/test/dummy/config/initializers/formula.rb +9 -0
- data/test/dummy/config/routes.rb +5 -3
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/migrate/20110109175811_create_contacts.rb +3 -3
- data/test/dummy/db/migrate/20120226213733_create_users.rb +11 -0
- data/test/dummy/db/schema.rb +9 -1
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/development.log +517 -8877
- data/test/dummy/log/test.log +125 -1276
- data/test/dummy/test/fixtures/users.yml +11 -0
- data/test/dummy/test/functional/sessions_controller_test.rb +7 -0
- data/test/dummy/test/functional/users_controller_test.rb +7 -0
- data/test/dummy/test/unit/helpers/sessions_helper_test.rb +4 -0
- data/test/dummy/test/unit/helpers/users_helper_test.rb +4 -0
- data/test/dummy/test/unit/user_test.rb +4 -0
- data/test/dummy/tmp/cache/assets/C78/B50/sprockets%2F50c7787472c6f1d292b210d9089ab021 +0 -0
- data/test/dummy/tmp/cache/assets/CA7/750/sprockets%2F26520da197942c10bb08b879dd27a335 +0 -0
- data/test/dummy/tmp/cache/assets/CB7/2E0/sprockets%2F122b94d05b802dec569597f372446e3e +0 -0
- data/test/dummy/tmp/cache/assets/CB9/500/sprockets%2Ff73079569d09e1dbf3d2610999b612d0 +0 -0
- data/test/dummy/tmp/cache/assets/{CFB/150/sprockets%2Ff5209763c82e66ecdff0f9583166f557 → CB9/B60/sprockets%2Fe7b839a0806e5c20e5018197f56cd656} +0 -0
- data/test/dummy/tmp/cache/assets/CBB/9B0/sprockets%2Fb718278187c3db586a420ec889c2950b +0 -0
- data/test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
- data/test/dummy/tmp/cache/assets/CDA/AB0/sprockets%2F4c7fc412b88cba24c365e12622902d79 +0 -0
- data/test/dummy/tmp/cache/assets/CDE/810/sprockets%2Fe9a718cd714105529e1126df281d5b9b +0 -0
- data/test/dummy/tmp/cache/assets/CDF/F20/sprockets%2Fafb369756d4161e56d25623705a1e4cf +0 -0
- data/test/dummy/tmp/cache/assets/D02/B20/sprockets%2F8424bdf2fc431411608e3a8ad4b12d77 +0 -0
- data/test/dummy/tmp/cache/assets/D07/020/sprockets%2F48a47b7a23025cf73408c7eb161fac38 +0 -0
- data/test/dummy/tmp/cache/assets/D11/7D0/sprockets%2F3eb85317d2ba89b1dd70fa28790a5943 +0 -0
- data/test/dummy/tmp/cache/assets/D1E/300/sprockets%2Fccb7b47689ba77b4d03c884f375b9154 +0 -0
- data/test/dummy/tmp/cache/assets/D2B/FC0/sprockets%2F90966edb48c329529d676f9a992db3da +0 -0
- data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/test/dummy/tmp/cache/assets/D3E/520/sprockets%2F0c368fc7951f5ee15b407bf530a5df25 +0 -0
- data/test/dummy/tmp/cache/assets/D48/6E0/sprockets%2Fee6b9dc867c5bc23c4c70f38549b2371 +0 -0
- data/test/dummy/tmp/cache/assets/D4A/E30/sprockets%2F058c4112a2f16c6d9a8499fffa24e6f7 +0 -0
- data/test/dummy/tmp/cache/assets/D4E/110/sprockets%2Fd604658b4f6b260ccdc967ed53b9926e +0 -0
- data/test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/test/dummy/tmp/cache/assets/D62/170/sprockets%2F75a5cc23ce1b2511be2ff95407e62d1e +0 -0
- data/test/dummy/tmp/cache/assets/D6C/090/sprockets%2F51b52949eefd109c700dc0ad8bd96d42 +0 -0
- data/test/dummy/tmp/cache/assets/D6C/210/sprockets%2Fc38fd401489a552f8716adf4aedaa325 +0 -0
- data/test/dummy/tmp/cache/assets/D6E/060/sprockets%2Fc0f3f19ea49926baf1623d4e12bc8f64 +0 -0
- data/test/dummy/tmp/cache/assets/{D2F/290/sprockets%2Fd5c244ec777cb5719f86d085df9f8816 → D76/4D0/sprockets%2F8a096b6dd59bfda3e461617a95524eaf} +0 -0
- data/test/dummy/tmp/cache/assets/D7B/CF0/sprockets%2Fd500cd67c78fa2fc96993e6cdd3050f6 +0 -0
- data/test/dummy/tmp/cache/assets/D93/910/sprockets%2Fb3f07cff0c2b5450dff46b72d29ec320 +0 -0
- data/test/dummy/tmp/cache/assets/D9B/350/sprockets%2Fb77ea162d3f4a5a427c1f2a6cd9db666 +0 -0
- data/test/dummy/tmp/cache/assets/D9F/6A0/sprockets%2F415cba7de981a2df5af982b546bbf064 +0 -0
- data/test/dummy/tmp/cache/assets/DBC/7B0/sprockets%2Fbd0fd218d2e084da2a4a3026cf71a9ef +0 -0
- data/test/dummy/tmp/cache/assets/DC2/AF0/sprockets%2F3cd60b3d8a714ddcdc4256558f0aedc0 +0 -0
- data/test/dummy/tmp/cache/assets/{D84/210/sprockets%2Fabd0103ccec2b428ac62c94e4c40b384 → DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994} +0 -0
- data/test/dummy/tmp/cache/assets/DDD/DA0/sprockets%2Ffef9a2b73f2ed6a6042b5f4cd88279df +0 -0
- data/test/dummy/tmp/cache/assets/DDF/F90/sprockets%2Ffdb9a7e2104ed9ab57d12896fdb5f9d7 +0 -0
- data/test/dummy/tmp/cache/assets/{CF7/670/sprockets%2F00b214e322c484fcc1555dafaa240947 → DE1/6A0/sprockets%2Fcae9aba95894da8a28fa8a5387dc565f} +0 -0
- data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/test/dummy/tmp/cache/assets/E1B/AD0/sprockets%2F150cafe2db298a20f82fbadac1d7a7e2 +0 -0
- data/test/dummy/tmp/cache/assets/{D6B/5D0/sprockets%2F48da0deeef45ff0cac611596e0774114 → E1D/010/sprockets%2Fdffad412d86bfdfbb1f307d711da21d3} +0 -0
- data/test/dummy/tmp/cache/assets/E3D/7F0/sprockets%2Faa9db9e2e4799a861f0fff2d7ab09cee +0 -0
- data/test/dummy/tmp/cache/assets/E55/150/sprockets%2F7ade5edd1b6d232bd5eab48b3bdc64c8 +0 -0
- data/test/dummy/tmp/cache/sass/570e82feeccb881a24a9919fb3feaf73dcbe19fa/_bootstrap.scssc +0 -0
- data/test/dummy/tmp/cache/sass/900d735417fe8d5104d4de0e0165ff7cb5492466/main.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_accordion.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_alerts.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_breadcrumbs.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_button-groups.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_buttons.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_carousel.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_close.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_code.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_component-animations.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_dropdowns.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_forms.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_grid.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_hero-unit.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_labels-badges.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_layouts.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_mixins.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_modals.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_navbar.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_navs.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_pager.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_pagination.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_popovers.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_progress-bars.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_reset.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_scaffolding.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_sprites.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_tables.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_thumbnails.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_tooltip.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_type.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_utilities.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_variables.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_wells.scssc +0 -0
- data/test/dummy/tmp/pids/server.pid +1 -0
- metadata +251 -65
- data/test/dummy/app/assets/javascripts/main.js +0 -0
- data/test/dummy/app/assets/stylesheets/contacts.css +0 -0
- data/test/dummy/app/assets/stylesheets/main.css +0 -0
- data/test/dummy/app/views/contacts/_form.html.erb +0 -21
- data/test/dummy/app/views/contacts/edit.html.erb +0 -4
- data/test/dummy/app/views/contacts/index.html.erb +0 -19
- data/test/dummy/app/views/contacts/new.html.erb +0 -4
- data/test/dummy/app/views/layouts/application.html.erb +0 -14
- data/test/dummy/app/views/main/index.html.erb +0 -9
- data/test/dummy/tmp/cache/assets/BAB/A00/sprockets%2F347f335128024408181207cbc0461526 +0 -0
- data/test/dummy/tmp/cache/assets/C77/F30/sprockets%2F021780432569bfa6c8135d5d4111f2e8 +0 -0
- data/test/dummy/tmp/cache/assets/C89/150/sprockets%2F1ff78c0e818b9e0311560396b734719e +0 -0
- data/test/dummy/tmp/cache/assets/CE1/BA0/sprockets%2F263ecf6bc5196b70405d900e7c44c946 +0 -0
- data/test/dummy/tmp/cache/assets/D06/B40/sprockets%2F25fca4643219052b0d5c66cf2c71f72f +0 -0
- data/test/dummy/tmp/cache/assets/D11/430/sprockets%2F25ea8d6063b1eb98361b1196f2fce807 +0 -0
- data/test/dummy/tmp/cache/assets/D24/5A0/sprockets%2F3a89b583dd80975d1e0968e730de5bc9 +0 -0
- data/test/dummy/tmp/cache/assets/D2D/490/sprockets%2F52514897c01dab621a0d9892aafb1ea2 +0 -0
- data/test/dummy/tmp/cache/assets/D54/ED0/sprockets%2F71c9fa01091d432b131da3bb73faf3d4 +0 -177
- data/test/dummy/tmp/cache/assets/D84/170/sprockets%2Fd09fc89236193cb0ff9deb09b97c648d +0 -0
- data/test/dummy/tmp/cache/assets/DA5/7E0/sprockets%2F87a5f378354ce6e80dda84ab1cfd06f3 +0 -0
- data/test/dummy/tmp/cache/assets/DA7/530/sprockets%2Fe36b8fcf5914a3a6bf058abfe7367b19 +0 -0
- data/test/dummy/tmp/cache/assets/DAA/470/sprockets%2Faa2b19ddf75cee55d7f2822e3da55779 +0 -0
data/LICENSE
CHANGED
data/README.rdoc
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
= Formula
|
|
2
2
|
|
|
3
|
-
Formula is a Rails form helper that generates awesome markup. The project
|
|
3
|
+
Formula is a Rails form helper that generates awesome markup. The project lets users create semantically beautiful forms without introducing too much syntax.
|
|
4
4
|
|
|
5
5
|
== Requirements
|
|
6
6
|
|
|
@@ -17,7 +17,7 @@ The gem is tested with:
|
|
|
17
17
|
== Installation
|
|
18
18
|
|
|
19
19
|
gem install formula
|
|
20
|
-
|
|
20
|
+
|
|
21
21
|
== Examples
|
|
22
22
|
|
|
23
23
|
<% formula_form_for @user do |f| %>
|
|
@@ -31,14 +31,14 @@ The gem is tested with:
|
|
|
31
31
|
<%= f.input :password, label: "Password:", hint: "Must be at least six characters." %>
|
|
32
32
|
<%= f.button 'Save' %>
|
|
33
33
|
<% end %>
|
|
34
|
-
|
|
34
|
+
|
|
35
35
|
<% formula_form_for @company do |f|
|
|
36
36
|
<%= f.input :url, container: { class: 'grid-04' }, input: { class: 'fill' } %>
|
|
37
37
|
<%= f.input :phone, container: { class: 'grid-04' }, input: { class: 'fill' } %>
|
|
38
38
|
<%= f.input :email, container: { class: 'grid-04' }, input: { class: 'fill' } %>
|
|
39
39
|
<%= f.button 'Save', button: { class: 'fancy' } %>
|
|
40
40
|
<% end %>
|
|
41
|
-
|
|
41
|
+
|
|
42
42
|
<% formula_form_for @user do |f| %>
|
|
43
43
|
<%= f.input :email, label: "Email:" %>
|
|
44
44
|
<%= f.input :password, label: "Password:" %>
|
|
@@ -49,7 +49,7 @@ The gem is tested with:
|
|
|
49
49
|
<% end %>
|
|
50
50
|
<%= f.button 'Save', button: { class: 'fancy' } %>
|
|
51
51
|
<% end %>
|
|
52
|
-
|
|
52
|
+
|
|
53
53
|
<% formula_form_for @user do |f| %>
|
|
54
54
|
<%= f.block :favourite %>
|
|
55
55
|
<% @favourites.each do |favourite| %>
|
|
@@ -69,4 +69,4 @@ The gem is tested with:
|
|
|
69
69
|
|
|
70
70
|
== Copyright
|
|
71
71
|
|
|
72
|
-
Copyright (c) 2010 -
|
|
72
|
+
Copyright (c) 2010 - 2012 Kevin Sylvestre. See LICENSE for details.
|
data/lib/formula.rb
CHANGED
|
@@ -1,76 +1,76 @@
|
|
|
1
1
|
module Formula
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
|
|
3
|
+
|
|
4
4
|
require 'formula/railtie' if defined?(Rails)
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
|
|
6
|
+
|
|
7
7
|
# Default class assigned to block (<div class="block">...</div>).
|
|
8
8
|
mattr_accessor :block_class
|
|
9
9
|
@@block_class = 'block'
|
|
10
|
-
|
|
10
|
+
|
|
11
11
|
# Default class assigned to input (<div class="input">...</div>).
|
|
12
12
|
mattr_accessor :input_class
|
|
13
13
|
@@input_class = 'input'
|
|
14
|
-
|
|
14
|
+
|
|
15
15
|
# Default class assigned to association (<div class="association">...</div>).
|
|
16
16
|
mattr_accessor :association_class
|
|
17
17
|
@@association_class = 'association'
|
|
18
|
-
|
|
18
|
+
|
|
19
19
|
# Default class assigned to block with errors (<div class="block errors">...</div>).
|
|
20
20
|
mattr_accessor :block_error_class
|
|
21
21
|
@@block_error_class = 'errors'
|
|
22
|
-
|
|
22
|
+
|
|
23
23
|
# Default class assigned to input with errors (<div class="input errors">...</div>).
|
|
24
24
|
mattr_accessor :input_error_class
|
|
25
25
|
@@input_error_class = false
|
|
26
|
-
|
|
26
|
+
|
|
27
27
|
# Default class assigned to input with errors (<div class="association errors">...</div>).
|
|
28
28
|
mattr_accessor :association_error_class
|
|
29
29
|
@@association_error_class = false
|
|
30
|
-
|
|
30
|
+
|
|
31
31
|
# Default class assigned to error (<div class="error">...</div>).
|
|
32
32
|
mattr_accessor :error_class
|
|
33
33
|
@@error_class = 'error'
|
|
34
|
-
|
|
34
|
+
|
|
35
35
|
# Default class assigned to hint (<div class="hint">...</div>).
|
|
36
36
|
mattr_accessor :hint_class
|
|
37
37
|
@@hint_class = 'hint'
|
|
38
|
-
|
|
38
|
+
|
|
39
39
|
# Default tag assigned to block (<div class="input">...</div>).
|
|
40
40
|
mattr_accessor :block_tag
|
|
41
41
|
@@block_tag = :div
|
|
42
|
-
|
|
42
|
+
|
|
43
43
|
# Default tag assigned to input (<div class="input">...</div>).
|
|
44
44
|
mattr_accessor :input_tag
|
|
45
45
|
@@input_tag = :div
|
|
46
|
-
|
|
46
|
+
|
|
47
47
|
# Default tag assigned to association (<div class="association">...</div>).
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
48
|
+
mattr_accessor :association_tag
|
|
49
|
+
@@association_tag = :div
|
|
50
|
+
|
|
51
51
|
# Default tag assigned to error (<div class="error">...</div>).
|
|
52
52
|
mattr_accessor :error_tag
|
|
53
53
|
@@error_tag = :div
|
|
54
|
-
|
|
54
|
+
|
|
55
55
|
# Default tag assigned to hint (<div class="hint">...</div>).
|
|
56
56
|
mattr_accessor :hint_tag
|
|
57
57
|
@@hint_tag = :div
|
|
58
|
-
|
|
58
|
+
|
|
59
59
|
# Method for file.
|
|
60
60
|
mattr_accessor :file
|
|
61
61
|
@@file = [:file?]
|
|
62
|
-
|
|
62
|
+
|
|
63
63
|
# Default as.
|
|
64
64
|
mattr_accessor :default_as
|
|
65
65
|
@@default_as = :string
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
|
|
67
|
+
|
|
68
68
|
class FormulaFormBuilder < ActionView::Helpers::FormBuilder
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
# Generate a form button.
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
# Generate a form button.
|
|
72
72
|
#
|
|
73
|
-
# Options:
|
|
73
|
+
# Options:
|
|
74
74
|
#
|
|
75
75
|
# * :container - add custom options to the container
|
|
76
76
|
# * :button - add custom options to the button
|
|
@@ -84,23 +84,23 @@ module Formula
|
|
|
84
84
|
# <div class="block">
|
|
85
85
|
# <%= f.submit("Save")
|
|
86
86
|
# </div>
|
|
87
|
-
|
|
87
|
+
|
|
88
88
|
def button(value = nil, options = {})
|
|
89
89
|
options[:button] ||= {}
|
|
90
|
-
|
|
90
|
+
|
|
91
91
|
options[:container] ||= {}
|
|
92
92
|
options[:container][:class] = arrayorize(options[:container][:class]) << ::Formula.block_class
|
|
93
|
-
|
|
94
|
-
|
|
93
|
+
|
|
94
|
+
|
|
95
95
|
@template.content_tag(::Formula.block_tag, options[:container]) do
|
|
96
96
|
submit value, options[:button]
|
|
97
97
|
end
|
|
98
98
|
end
|
|
99
|
-
|
|
100
|
-
|
|
99
|
+
|
|
100
|
+
|
|
101
101
|
# Basic container generator for use with blocks.
|
|
102
102
|
#
|
|
103
|
-
# Options:
|
|
103
|
+
# Options:
|
|
104
104
|
#
|
|
105
105
|
# * :hint - specify a hint to be displayed ('We promise not to spam you.', etc.)
|
|
106
106
|
# * :label - override the default label used ('Name:', 'URL:', etc.)
|
|
@@ -120,34 +120,34 @@ module Formula
|
|
|
120
120
|
# <div class="hint">Please use your full name.</div>
|
|
121
121
|
# <div class="error">...</div>
|
|
122
122
|
# </div>
|
|
123
|
-
|
|
123
|
+
|
|
124
124
|
def block(method = nil, options = {}, &block)
|
|
125
125
|
options[:error] ||= error(method) if method
|
|
126
|
-
|
|
126
|
+
|
|
127
127
|
components = "".html_safe
|
|
128
|
-
|
|
128
|
+
|
|
129
129
|
if method
|
|
130
130
|
components << self.label(method, options[:label]) if options[:label] or options[:label].nil? and method
|
|
131
131
|
end
|
|
132
|
-
|
|
132
|
+
|
|
133
133
|
components << @template.capture(&block)
|
|
134
|
-
|
|
134
|
+
|
|
135
135
|
options[:container] ||= {}
|
|
136
136
|
options[:container][:class] = arrayorize(options[:container][:class]) << ::Formula.block_class << method
|
|
137
137
|
options[:container][:class] << ::Formula.block_error_class if ::Formula.block_error_class.present? and error?(method)
|
|
138
|
-
|
|
138
|
+
|
|
139
139
|
components << @template.content_tag(::Formula.hint_tag , options[:hint ], :class => ::Formula.hint_class ) if options[:hint ]
|
|
140
140
|
components << @template.content_tag(::Formula.error_tag, options[:error], :class => ::Formula.error_class) if options[:error]
|
|
141
|
-
|
|
141
|
+
|
|
142
142
|
@template.content_tag(::Formula.block_tag, options[:container]) do
|
|
143
143
|
components
|
|
144
144
|
end
|
|
145
145
|
end
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
# Generate a suitable form input for a given method by performing introspection on the type.
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
# Generate a suitable form input for a given method by performing introspection on the type.
|
|
149
149
|
#
|
|
150
|
-
# Options:
|
|
150
|
+
# Options:
|
|
151
151
|
#
|
|
152
152
|
# * :as - override the default type used (:url, :email, :phone, :password, :number, :text)
|
|
153
153
|
# * :label - override the default label used ('Name:', 'URL:', etc.)
|
|
@@ -190,42 +190,42 @@ module Formula
|
|
|
190
190
|
# <div class="error">...</div>
|
|
191
191
|
# </div>
|
|
192
192
|
# </div>
|
|
193
|
-
|
|
193
|
+
|
|
194
194
|
def input(method, options = {})
|
|
195
195
|
options[:as] ||= as(method)
|
|
196
196
|
options[:input] ||= {}
|
|
197
|
-
|
|
197
|
+
|
|
198
198
|
return hidden_field method, options[:input] if options[:as] == :hidden
|
|
199
|
-
|
|
199
|
+
|
|
200
200
|
klass = [::Formula.input_class, options[:as]]
|
|
201
201
|
klass << ::Formula.input_error_class if ::Formula.input_error_class.present? and error?(method)
|
|
202
|
-
|
|
202
|
+
|
|
203
203
|
self.block(method, options) do
|
|
204
204
|
@template.content_tag(::Formula.input_tag, :class => klass) do
|
|
205
205
|
case options[:as]
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
206
|
+
when :text then text_area method, options[:input]
|
|
207
|
+
when :file then file_field method, options[:input]
|
|
208
|
+
when :string then text_field method, options[:input]
|
|
209
|
+
when :password then password_field method, options[:input]
|
|
210
|
+
when :boolean then check_box method, options[:input]
|
|
211
|
+
when :url then url_field method, options[:input]
|
|
212
|
+
when :email then email_field method, options[:input]
|
|
213
|
+
when :phone then phone_field method, options[:input]
|
|
214
|
+
when :number then number_field method, options[:input]
|
|
215
|
+
when :country then country_select method, options[:input]
|
|
216
|
+
when :date then date_select method, options[:input], options[:input].delete(:html) || {}
|
|
217
|
+
when :time then time_select method, options[:input], options[:input].delete(:html) || {}
|
|
218
|
+
when :datetime then datetime_select method, options[:input], options[:input].delete(:html) || {}
|
|
219
|
+
when :select then select method, options[:choices], options[:input], options[:input].delete(:html) || {}
|
|
220
220
|
end
|
|
221
221
|
end
|
|
222
222
|
end
|
|
223
223
|
end
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
# Generate a suitable form association for a given method by performing introspection on the type.
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
# Generate a suitable form association for a given method by performing introspection on the type.
|
|
227
227
|
#
|
|
228
|
-
# Options:
|
|
228
|
+
# Options:
|
|
229
229
|
#
|
|
230
230
|
# * :label - override the default label used ('Name:', 'URL:', etc.)
|
|
231
231
|
# * :error - override the default error used ('invalid', 'incorrect', etc.)
|
|
@@ -268,30 +268,30 @@ module Formula
|
|
|
268
268
|
# <div class="error">...</div>
|
|
269
269
|
# </div>
|
|
270
270
|
# </div>
|
|
271
|
-
|
|
272
|
-
|
|
271
|
+
|
|
272
|
+
|
|
273
273
|
def association(method, collection, value, text, options = {})
|
|
274
274
|
options[:as] ||= :select
|
|
275
275
|
options[:association] ||= {}
|
|
276
|
-
|
|
276
|
+
|
|
277
277
|
klass = [::Formula.association_class, options[:as]]
|
|
278
278
|
klass << ::Formula.association_error_class if ::Formula.association_error_class.present? and error?(method)
|
|
279
|
-
|
|
279
|
+
|
|
280
280
|
self.block(method, options) do
|
|
281
281
|
@template.content_tag(::Formula.association_tag, :class => klass) do
|
|
282
282
|
case options[:as]
|
|
283
|
-
|
|
283
|
+
when :select then collection_select :"#{method}_id", collection, value, text,
|
|
284
284
|
options[:association], options[:association].delete(:html) || {}
|
|
285
285
|
end
|
|
286
286
|
end
|
|
287
287
|
end
|
|
288
288
|
end
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
# Introspection on the column to determine how to render a method. The method is used to
|
|
289
|
+
|
|
290
|
+
|
|
291
|
+
private
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
# Introspection on the column to determine how to render a method. The method is used to
|
|
295
295
|
# identify a method type (if the method corresponds to a column)
|
|
296
296
|
#
|
|
297
297
|
# Returns:
|
|
@@ -305,16 +305,16 @@ module Formula
|
|
|
305
305
|
# * :date - for columns of type 'date'
|
|
306
306
|
# * :time - for columns of type 'time'
|
|
307
307
|
# * nil - for unkown columns
|
|
308
|
-
|
|
308
|
+
|
|
309
309
|
def type(method)
|
|
310
310
|
column = @object.column_for_attribute(method) if @object.respond_to?(:column_for_attribute)
|
|
311
311
|
return column.type if column
|
|
312
312
|
end
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
# Introspection on an association to determine if a method is a file. This
|
|
313
|
+
|
|
314
|
+
|
|
315
|
+
# Introspection on an association to determine if a method is a file. This
|
|
316
316
|
# is determined by the methods ability to respond to file methods.
|
|
317
|
-
|
|
317
|
+
|
|
318
318
|
def file?(method)
|
|
319
319
|
@files ||= {}
|
|
320
320
|
@files[method] ||= begin
|
|
@@ -322,9 +322,9 @@ module Formula
|
|
|
322
322
|
file && ::Formula.file.any? { |method| file.respond_to?(method) }
|
|
323
323
|
end
|
|
324
324
|
end
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
# Introspection on the field and method to determine how to render a method. The method is
|
|
325
|
+
|
|
326
|
+
|
|
327
|
+
# Introspection on the field and method to determine how to render a method. The method is
|
|
328
328
|
# used to generate form element types.
|
|
329
329
|
#
|
|
330
330
|
# Returns:
|
|
@@ -339,68 +339,68 @@ module Formula
|
|
|
339
339
|
# * :time - for time column
|
|
340
340
|
# * :text - for time column
|
|
341
341
|
# * :string - for all other cases
|
|
342
|
-
|
|
342
|
+
|
|
343
343
|
def as(method)
|
|
344
|
-
|
|
344
|
+
|
|
345
345
|
case "#{method}"
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
346
|
+
when /url/ then return :url
|
|
347
|
+
when /email/ then return :email
|
|
348
|
+
when /phone/ then return :phone
|
|
349
|
+
when /password/ then return :password
|
|
350
350
|
end
|
|
351
|
-
|
|
351
|
+
|
|
352
352
|
case type(method)
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
353
|
+
when :string then return :string
|
|
354
|
+
when :integer then return :number
|
|
355
|
+
when :float then return :number
|
|
356
|
+
when :decimal then return :number
|
|
357
|
+
when :timestamp then return :datetime
|
|
358
|
+
when :datetime then return :datetime
|
|
359
|
+
when :date then return :date
|
|
360
|
+
when :time then return :time
|
|
361
|
+
when :text then return :text
|
|
362
362
|
end
|
|
363
|
-
|
|
363
|
+
|
|
364
364
|
return :file if file?(method)
|
|
365
|
-
|
|
365
|
+
|
|
366
366
|
return ::Formula.default_as
|
|
367
|
-
|
|
367
|
+
|
|
368
368
|
end
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
# Generate error messages by combining all errors on an object into a comma seperated string
|
|
372
|
-
# representation.
|
|
373
|
-
|
|
369
|
+
|
|
370
|
+
|
|
371
|
+
# Generate error messages by combining all errors on an object into a comma seperated string
|
|
372
|
+
# representation.
|
|
373
|
+
|
|
374
374
|
def error(method)
|
|
375
375
|
errors = @object.errors[method] if @object
|
|
376
376
|
errors.to_sentence if errors.present?
|
|
377
377
|
end
|
|
378
|
-
|
|
379
|
-
|
|
378
|
+
|
|
379
|
+
|
|
380
380
|
# Identify if error message exists for a given method by checking for the presence of the object
|
|
381
381
|
# followed by the presence of errors.
|
|
382
|
-
|
|
382
|
+
|
|
383
383
|
def error?(method)
|
|
384
384
|
@object.present? and @object.errors[method].present?
|
|
385
385
|
end
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
# Create an array from a string, a symbol, or an undefined value. The default is to return
|
|
386
|
+
|
|
387
|
+
|
|
388
|
+
# Create an array from a string, a symbol, or an undefined value. The default is to return
|
|
389
389
|
# the value and assume it has already is valid.
|
|
390
|
-
|
|
390
|
+
|
|
391
391
|
def arrayorize(value)
|
|
392
392
|
case value
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
393
|
+
when nil then return []
|
|
394
|
+
when String then value.to_s.split
|
|
395
|
+
when Symbol then value.to_s.split
|
|
396
|
+
else value
|
|
397
397
|
end
|
|
398
398
|
end
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
399
|
+
|
|
400
|
+
|
|
401
|
+
public
|
|
402
|
+
|
|
403
|
+
|
|
404
404
|
# Generates a wrapper around fields_form with :builder set to FormulaFormBuilder.
|
|
405
405
|
#
|
|
406
406
|
# Supports:
|
|
@@ -418,22 +418,22 @@ module Formula
|
|
|
418
418
|
# <%= company_f.input :url %>
|
|
419
419
|
# <%= company_f.input :phone %>
|
|
420
420
|
# <% end %>
|
|
421
|
-
|
|
421
|
+
|
|
422
422
|
def formula_fields_for(record_or_name_or_array, *args, &block)
|
|
423
423
|
options = args.extract_options!
|
|
424
424
|
options[:builder] ||= self.class
|
|
425
425
|
fields_for(record_or_name_or_array, *(args << options), &block)
|
|
426
426
|
end
|
|
427
|
-
|
|
427
|
+
|
|
428
428
|
alias :fieldsula_for :formula_fields_for
|
|
429
429
|
|
|
430
430
|
|
|
431
431
|
end
|
|
432
|
-
|
|
432
|
+
|
|
433
433
|
module FormulaFormHelper
|
|
434
434
|
@@builder = ::Formula::FormulaFormBuilder
|
|
435
|
-
|
|
436
|
-
|
|
435
|
+
|
|
436
|
+
|
|
437
437
|
# Generates a wrapper around form_for with :builder set to FormulaFormBuilder.
|
|
438
438
|
#
|
|
439
439
|
# Supports:
|
|
@@ -450,16 +450,16 @@ module Formula
|
|
|
450
450
|
# <%= f.input :email %>
|
|
451
451
|
# <%= f.input :password %>
|
|
452
452
|
# <% end %>
|
|
453
|
-
|
|
453
|
+
|
|
454
454
|
def formula_form_for(record_or_name_or_array, *args, &proc)
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
455
|
+
options = args.extract_options!
|
|
456
|
+
options[:builder] ||= @@builder
|
|
457
|
+
form_for(record_or_name_or_array, *(args << options), &proc)
|
|
458
458
|
end
|
|
459
|
-
|
|
459
|
+
|
|
460
460
|
alias :formula_for :formula_form_for
|
|
461
|
-
|
|
462
|
-
|
|
461
|
+
|
|
462
|
+
|
|
463
463
|
# Generates a wrapper around fields_for with :builder set to FormulaFormBuilder.
|
|
464
464
|
#
|
|
465
465
|
# Supports:
|
|
@@ -477,15 +477,15 @@ module Formula
|
|
|
477
477
|
# <%= company_f.input :url %>
|
|
478
478
|
# <%= company_f.input :phone %>
|
|
479
479
|
# <% end %>
|
|
480
|
-
|
|
480
|
+
|
|
481
481
|
def formula_fields_for(record_or_name_or_array, *args, &block)
|
|
482
482
|
options = args.extract_options!
|
|
483
483
|
options[:builder] ||= @@builder
|
|
484
484
|
fields_for(record_or_name_or_array, *(args << options), &block)
|
|
485
485
|
end
|
|
486
|
-
|
|
487
|
-
alias :fieldsula_for :formula_fields_for
|
|
488
|
-
|
|
486
|
+
|
|
487
|
+
alias :fieldsula_for :formula_fields_for
|
|
488
|
+
|
|
489
489
|
end
|
|
490
|
-
|
|
491
|
-
end
|
|
490
|
+
|
|
491
|
+
end
|