formtastic 1.1.0 → 1.2.0.beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. data/MIT-LICENSE +1 -1
  2. data/README.textile +80 -66
  3. data/generators/form/form_generator.rb +37 -46
  4. data/generators/formtastic/formtastic_generator.rb +10 -8
  5. data/lib/formtastic.rb +318 -227
  6. data/lib/formtastic/i18n.rb +8 -6
  7. data/lib/formtastic/layout_helper.rb +6 -4
  8. data/lib/formtastic/railtie.rb +3 -1
  9. data/lib/formtastic/util.rb +2 -0
  10. data/lib/generators/formtastic/form/form_generator.rb +5 -7
  11. data/lib/generators/formtastic/install/install_generator.rb +2 -9
  12. data/lib/generators/templates/_form.html.erb +5 -0
  13. data/lib/generators/templates/_form.html.haml +4 -0
  14. data/{generators/formtastic → lib/generators}/templates/formtastic.css +25 -11
  15. data/{generators/formtastic → lib/generators}/templates/formtastic.rb +19 -2
  16. data/{generators/formtastic → lib/generators}/templates/formtastic_changes.css +0 -0
  17. metadata +58 -98
  18. data/Rakefile +0 -127
  19. data/generators/form/templates/view__form.html.erb +0 -5
  20. data/generators/form/templates/view__form.html.haml +0 -4
  21. data/generators/formtastic_stylesheets/formtastic_stylesheets_generator.rb +0 -16
  22. data/init.rb +0 -5
  23. data/rails/init.rb +0 -2
  24. data/spec/buttons_spec.rb +0 -166
  25. data/spec/commit_button_spec.rb +0 -401
  26. data/spec/custom_builder_spec.rb +0 -98
  27. data/spec/defaults_spec.rb +0 -20
  28. data/spec/error_proc_spec.rb +0 -27
  29. data/spec/errors_spec.rb +0 -105
  30. data/spec/form_helper_spec.rb +0 -142
  31. data/spec/helpers/layout_helper_spec.rb +0 -21
  32. data/spec/i18n_spec.rb +0 -152
  33. data/spec/include_blank_spec.rb +0 -74
  34. data/spec/input_spec.rb +0 -786
  35. data/spec/inputs/boolean_input_spec.rb +0 -104
  36. data/spec/inputs/check_boxes_input_spec.rb +0 -426
  37. data/spec/inputs/country_input_spec.rb +0 -118
  38. data/spec/inputs/date_input_spec.rb +0 -168
  39. data/spec/inputs/datetime_input_spec.rb +0 -310
  40. data/spec/inputs/file_input_spec.rb +0 -34
  41. data/spec/inputs/hidden_input_spec.rb +0 -78
  42. data/spec/inputs/numeric_input_spec.rb +0 -44
  43. data/spec/inputs/password_input_spec.rb +0 -46
  44. data/spec/inputs/radio_input_spec.rb +0 -243
  45. data/spec/inputs/select_input_spec.rb +0 -546
  46. data/spec/inputs/string_input_spec.rb +0 -64
  47. data/spec/inputs/text_input_spec.rb +0 -34
  48. data/spec/inputs/time_input_spec.rb +0 -206
  49. data/spec/inputs/time_zone_input_spec.rb +0 -110
  50. data/spec/inputs_spec.rb +0 -476
  51. data/spec/label_spec.rb +0 -89
  52. data/spec/semantic_errors_spec.rb +0 -98
  53. data/spec/semantic_fields_for_spec.rb +0 -45
  54. data/spec/spec.opts +0 -2
  55. data/spec/spec_helper.rb +0 -289
  56. data/spec/support/custom_macros.rb +0 -494
  57. data/spec/support/output_buffer.rb +0 -4
  58. data/spec/support/test_environment.rb +0 -45
data/Rakefile DELETED
@@ -1,127 +0,0 @@
1
- # coding: utf-8
2
- require 'rubygems'
3
- require 'rake'
4
- require 'rake/rdoctask'
5
-
6
- begin
7
- gem 'rspec', '>= 1.2.6'
8
- gem 'rspec-rails', '>= 1.2.6'
9
- require 'spec'
10
- require 'spec/rake/spectask'
11
- rescue LoadError
12
- begin
13
- require 'rspec/core/rake_task.rb'
14
- require 'rspec/core/version'
15
- rescue LoadError
16
- puts "[formtastic:] RSpec - or one of it's dependencies - is not available. Install it with: sudo gem install rspec-rails"
17
- end
18
- end
19
-
20
- begin
21
- GEM = "formtastic"
22
- AUTHOR = "Justin French"
23
- EMAIL = "justin@indent.com.au"
24
- SUMMARY = "A Rails form builder plugin/gem with semantically rich and accessible markup"
25
- HOMEPAGE = "http://github.com/justinfrench/formtastic/tree/master"
26
- INSTALL_MESSAGE = %q{
27
- ========================================================================
28
- Thanks for installing Formtastic!
29
- ------------------------------------------------------------------------
30
- You can now (optionally) run the generator to copy some stylesheets and
31
- a config initializer into your application:
32
- rails generator formastic:install # Rails 3
33
- ./script/generate formtastic # Rails 2
34
-
35
- To generate some semantic form markup for your existing models, just run:
36
- rails generate formtastic:form MODEL_NAME # Rails 3
37
- ./script/generate form MODEL_NAME # Rails 2
38
-
39
- Find out more and get involved:
40
- http://github.com/justinfrench/formtastic
41
- http://groups.google.com.au/group/formtastic
42
- ========================================================================
43
- }
44
-
45
- gem 'jeweler', '>= 1.0.0'
46
- require 'jeweler'
47
-
48
- Jeweler::Tasks.new do |s|
49
- s.name = GEM
50
- s.summary = SUMMARY
51
- s.email = EMAIL
52
- s.homepage = HOMEPAGE
53
- s.description = SUMMARY
54
- s.author = AUTHOR
55
- s.post_install_message = INSTALL_MESSAGE
56
-
57
- s.require_path = 'lib'
58
- s.files = %w(MIT-LICENSE README.textile Rakefile init.rb) + Dir.glob("{rails,lib,generators,spec}/**/*")
59
-
60
- # Runtime dependencies: When installing Formtastic these will be checked if they are installed.
61
- # Will be offered to install these if they are not already installed.
62
- s.add_dependency 'activesupport', '>= 2.3.0'
63
- s.add_dependency 'actionpack', '>= 2.3.0'
64
- s.add_dependency 'i18n', '>= 0.4.0'
65
-
66
- # Development dependencies. Not installed by default.
67
- # Install with: sudo gem install formtastic --development
68
- s.add_development_dependency 'rspec-rails', '>= 1.2.6'
69
- s.add_development_dependency 'rspec_tag_matchers', '>= 1.0.0'
70
- end
71
-
72
- Jeweler::GemcutterTasks.new
73
- rescue LoadError
74
- puts "[formtastic:] Jeweler - or one of its dependencies - is not available. Install it with: sudo gem install jeweler -s http://gemcutter.org"
75
- end
76
-
77
- desc 'Default: run unit specs.'
78
- task :default => :spec
79
-
80
- desc 'Generate documentation for the formtastic plugin.'
81
- Rake::RDocTask.new(:rdoc) do |rdoc|
82
- rdoc.rdoc_dir = 'rdoc'
83
- rdoc.title = 'Formtastic'
84
- rdoc.options << '--line-numbers' << '--inline-source'
85
- rdoc.rdoc_files.include('README.textile')
86
- rdoc.rdoc_files.include('lib/**/*.rb')
87
- end
88
-
89
- if defined?(Spec)
90
- desc 'Test the formtastic plugin.'
91
- Spec::Rake::SpecTask.new('spec') do |t|
92
- t.spec_files = FileList['spec/**/*_spec.rb']
93
- t.spec_opts = ["-c"]
94
- end
95
-
96
- desc 'Test the formtastic plugin with specdoc formatting and colors'
97
- Spec::Rake::SpecTask.new('specdoc') do |t|
98
- t.spec_files = FileList['spec/**/*_spec.rb']
99
- t.spec_opts = ["--format specdoc", "-c"]
100
- end
101
-
102
- desc "Run all examples with RCov"
103
- Spec::Rake::SpecTask.new('examples_with_rcov') do |t|
104
- t.spec_files = FileList['spec/**/*_spec.rb']
105
- t.rcov = true
106
- t.rcov_opts = ['--exclude', 'spec,Library']
107
- end
108
- end
109
-
110
- if defined?(RSpec)
111
- desc 'Test the formtastic plugin.'
112
- RSpec::Core::RakeTask.new('spec') do |t|
113
- t.pattern = FileList['spec/**/*_spec.rb']
114
- end
115
-
116
- desc 'Test the formtastic plugin with specdoc formatting and colors'
117
- RSpec::Core::RakeTask.new('specdoc') do |t|
118
- t.pattern = FileList['spec/**/*_spec.rb']
119
- end
120
-
121
- desc "Run all examples with RCov"
122
- RSpec::Core::RakeTask.new('examples_with_rcov') do |t|
123
- t.pattern = FileList['spec/**/*_spec.rb']
124
- t.rcov = true
125
- t.rcov_opts = ['--exclude', 'spec,Library']
126
- end
127
- end
@@ -1,5 +0,0 @@
1
- <%% f.inputs do %>
2
- <% attributes.each do |attribute| -%>
3
- <%%= f.input :<%= attribute.name %>, :label => '<%= attribute.name.humanize %>' %>
4
- <% end -%>
5
- <%% end %>
@@ -1,4 +0,0 @@
1
- - f.inputs do
2
- <% attributes.each do |attribute| -%>
3
- = f.input :<%= attribute.name %>, :label => '<%= attribute.name.humanize %>'
4
- <% end -%>
@@ -1,16 +0,0 @@
1
- class FormtasticStylesheetsGenerator < Rails::Generator::Base
2
-
3
- def initialize(*runtime_args)
4
- puts %q{
5
- ===================================================
6
- Please run `./script/generate formtastic` instead.
7
- ===================================================
8
- }
9
- end
10
-
11
- def manifest
12
- record do |m|
13
- end
14
- end
15
-
16
- end
data/init.rb DELETED
@@ -1,5 +0,0 @@
1
- # coding: utf-8
2
- require 'formtastic'
3
- require 'formtastic/layout_helper'
4
- ActionView::Base.send :include, Formtastic::SemanticFormHelper
5
- ActionView::Base.send :include, Formtastic::LayoutHelper
data/rails/init.rb DELETED
@@ -1,2 +0,0 @@
1
- # coding: utf-8
2
- require File.expand_path(File.join(File.dirname(__FILE__), "..", "init"))
data/spec/buttons_spec.rb DELETED
@@ -1,166 +0,0 @@
1
- # coding: utf-8
2
- require 'spec_helper'
3
-
4
- describe 'SemanticFormBuilder#buttons' do
5
-
6
- include FormtasticSpecHelper
7
-
8
- before do
9
- @output_buffer = ''
10
- mock_everything
11
- end
12
-
13
- describe 'with a block' do
14
- describe 'when no options are provided' do
15
- before do
16
- @form = semantic_form_for(@new_post) do |builder|
17
- buttons = builder.buttons do
18
- concat('hello')
19
- end
20
- concat(buttons)
21
- end
22
- end
23
-
24
- it 'should render a fieldset inside the form, with a class of "inputs"' do
25
- output_buffer.concat(@form) if Formtastic::Util.rails3?
26
- output_buffer.should have_tag("form fieldset.buttons")
27
- end
28
-
29
- it 'should render an ol inside the fieldset' do
30
- output_buffer.concat(@form) if Formtastic::Util.rails3?
31
- output_buffer.should have_tag("form fieldset.buttons ol")
32
- end
33
-
34
- it 'should render the contents of the block inside the ol' do
35
- output_buffer.concat(@form) if Formtastic::Util.rails3?
36
- output_buffer.should have_tag("form fieldset.buttons ol", /hello/)
37
- end
38
-
39
- it 'should not render a legend inside the fieldset' do
40
- output_buffer.concat(@form) if Formtastic::Util.rails3?
41
- output_buffer.should_not have_tag("form fieldset.buttons legend")
42
- end
43
- end
44
-
45
- describe 'when a :name option is provided' do
46
- before do
47
- @legend_text = "Advanced options"
48
-
49
- @form = semantic_form_for(@new_post) do |builder|
50
- builder.buttons :name => @legend_text do
51
- end
52
- end
53
- end
54
- it 'should render a fieldset inside the form' do
55
- output_buffer.concat(@form) if Formtastic::Util.rails3?
56
- output_buffer.should have_tag("form fieldset legend", /#{@legend_text}/)
57
- end
58
- end
59
-
60
- describe 'when other options are provided' do
61
- before do
62
- @id_option = 'advanced'
63
- @class_option = 'wide'
64
-
65
- @form = semantic_form_for(@new_post) do |builder|
66
- builder.buttons :id => @id_option, :class => @class_option do
67
- end
68
- end
69
- end
70
- it 'should pass the options into the fieldset tag as attributes' do
71
- output_buffer.concat(@form) if Formtastic::Util.rails3?
72
- output_buffer.should have_tag("form fieldset##{@id_option}")
73
- output_buffer.should have_tag("form fieldset.#{@class_option}")
74
- end
75
- end
76
-
77
- end
78
-
79
- describe 'without a block' do
80
-
81
- describe 'with no args (default buttons)' do
82
-
83
- before do
84
- @form = semantic_form_for(@new_post) do |builder|
85
- concat(builder.buttons)
86
- end
87
- end
88
-
89
- it 'should render a form' do
90
- output_buffer.concat(@form) if Formtastic::Util.rails3?
91
- output_buffer.should have_tag('form')
92
- end
93
-
94
- it 'should render a buttons fieldset inside the form' do
95
- output_buffer.concat(@form) if Formtastic::Util.rails3?
96
- output_buffer.should have_tag('form fieldset.buttons')
97
- end
98
-
99
- it 'should not render a legend in the fieldset' do
100
- output_buffer.concat(@form) if Formtastic::Util.rails3?
101
- output_buffer.should_not have_tag('form fieldset.buttons legend')
102
- end
103
-
104
- it 'should render an ol in the fieldset' do
105
- output_buffer.concat(@form) if Formtastic::Util.rails3?
106
- output_buffer.should have_tag('form fieldset.buttons ol')
107
- end
108
-
109
- it 'should render a list item in the ol for each default button' do
110
- output_buffer.concat(@form) if Formtastic::Util.rails3?
111
- output_buffer.should have_tag('form fieldset.buttons ol li', :count => 1)
112
- end
113
-
114
- it 'should render a commit list item for the commit button' do
115
- output_buffer.concat(@form) if Formtastic::Util.rails3?
116
- output_buffer.should have_tag('form fieldset.buttons ol li.commit')
117
- end
118
-
119
- end
120
-
121
- describe 'with button names as args' do
122
-
123
- before do
124
- @form = semantic_form_for(@new_post) do |builder|
125
- concat(builder.buttons(:commit))
126
- end
127
- end
128
-
129
- it 'should render a form with a fieldset containing a list item for each button arg' do
130
- output_buffer.concat(@form) if Formtastic::Util.rails3?
131
- output_buffer.should have_tag('form > fieldset.buttons > ol > li', :count => 1)
132
- output_buffer.should have_tag('form > fieldset.buttons > ol > li.commit')
133
- end
134
-
135
- end
136
-
137
- describe 'with button names as args and an options hash' do
138
-
139
- before do
140
- @form = semantic_form_for(@new_post) do |builder|
141
- concat(builder.buttons(:commit, :name => "Now click a button", :id => "my-id"))
142
- end
143
- end
144
-
145
- it 'should render a form with a fieldset containing a list item for each button arg' do
146
- output_buffer.concat(@form) if Formtastic::Util.rails3?
147
- output_buffer.should have_tag('form > fieldset.buttons > ol > li', :count => 1)
148
- output_buffer.should have_tag('form > fieldset.buttons > ol > li.commit', :count => 1)
149
- end
150
-
151
- it 'should pass the options down to the fieldset' do
152
- output_buffer.concat(@form) if Formtastic::Util.rails3?
153
- output_buffer.should have_tag('form > fieldset#my-id.buttons')
154
- end
155
-
156
- it 'should use the special :name option as a text for the legend tag' do
157
- output_buffer.concat(@form) if Formtastic::Util.rails3?
158
- output_buffer.should have_tag('form > fieldset#my-id.buttons > legend', /Now click a button/)
159
- end
160
-
161
- end
162
-
163
- end
164
-
165
- end
166
-
@@ -1,401 +0,0 @@
1
- # coding: utf-8
2
- require 'spec_helper'
3
-
4
- describe 'SemanticFormBuilder#commit_button' do
5
-
6
- include FormtasticSpecHelper
7
-
8
- before do
9
- @output_buffer = ''
10
- mock_everything
11
- end
12
-
13
- describe 'when used on any record' do
14
-
15
- before do
16
- @new_post.stub!(:new_record?).and_return(false)
17
- @form = semantic_form_for(@new_post) do |builder|
18
- concat(builder.commit_button)
19
- end
20
- end
21
-
22
- it 'should render a commit li' do
23
- output_buffer.concat(@form) if Formtastic::Util.rails3?
24
- output_buffer.should have_tag('li.commit')
25
- end
26
-
27
- it 'should render an input with a type attribute of "submit"' do
28
- output_buffer.concat(@form) if Formtastic::Util.rails3?
29
- output_buffer.should have_tag('li.commit input[@type="submit"]')
30
- end
31
-
32
- it 'should render an input with a name attribute of "commit"' do
33
- output_buffer.concat(@form) if Formtastic::Util.rails3?
34
- output_buffer.should have_tag('li.commit input[@name="commit"]')
35
- end
36
-
37
- it 'should pass options given in :button_html to the button' do
38
- @new_post.stub!(:new_record?).and_return(false)
39
- form = semantic_form_for(@new_post) do |builder|
40
- concat(builder.commit_button('text', :button_html => {:class => 'my_class', :id => 'my_id'}))
41
- end
42
-
43
- output_buffer.concat(form) if Formtastic::Util.rails3?
44
- output_buffer.should have_tag('li.commit input#my_id')
45
- output_buffer.should have_tag('li.commit input.my_class')
46
- end
47
-
48
- end
49
-
50
- describe "its accesskey" do
51
-
52
- it 'should allow nil default' do
53
- with_config :default_commit_button_accesskey, nil do
54
- output_buffer.should_not have_tag('li.commit input[@accesskey]')
55
- end
56
- end
57
-
58
- it 'should use the default if set' do
59
- with_config :default_commit_button_accesskey, 's' do
60
- @new_post.stub!(:new_record?).and_return(false)
61
- form = semantic_form_for(@new_post) do |builder|
62
- concat(builder.commit_button('text', :button_html => {}))
63
- end
64
- output_buffer.concat(form) if Formtastic::Util.rails3?
65
- output_buffer.should have_tag('li.commit input[@accesskey="s"]')
66
- end
67
- end
68
-
69
- it 'should use the value set in options over the default' do
70
- with_config :default_commit_button_accesskey, 's' do
71
- @new_post.stub!(:new_record?).and_return(false)
72
- form = semantic_form_for(@new_post) do |builder|
73
- concat(builder.commit_button('text', :accesskey => 'o'))
74
- end
75
- output_buffer.concat(form) if Formtastic::Util.rails3?
76
- output_buffer.should_not have_tag('li.commit input[@accesskey="s"]')
77
- output_buffer.should have_tag('li.commit input[@accesskey="o"]')
78
- end
79
- end
80
-
81
- it 'should use the value set in button_html over options' do
82
- with_config :default_commit_button_accesskey, 's' do
83
- @new_post.stub!(:new_record?).and_return(false)
84
- form = semantic_form_for(@new_post) do |builder|
85
- concat(builder.commit_button('text', :accesskey => 'o', :button_html => {:accesskey => 't'}))
86
- end
87
- output_buffer.concat(form) if Formtastic::Util.rails3?
88
- output_buffer.should_not have_tag('li.commit input[@accesskey="s"]')
89
- output_buffer.should_not have_tag('li.commit input[@accesskey="o"]')
90
- output_buffer.should have_tag('li.commit input[@accesskey="t"]')
91
- end
92
- end
93
-
94
- end
95
-
96
- describe 'when the first option is a string and the second is a hash' do
97
-
98
- before do
99
- @new_post.stub!(:new_record?).and_return(false)
100
- @form = semantic_form_for(@new_post) do |builder|
101
- concat(builder.commit_button("a string", :button_html => { :class => "pretty"}))
102
- end
103
- end
104
-
105
- it "should render the string as the value of the button" do
106
- output_buffer.concat(@form) if Formtastic::Util.rails3?
107
- output_buffer.should have_tag('li input[@value="a string"]')
108
- end
109
-
110
- it "should deal with the options hash" do
111
- output_buffer.concat(@form) if Formtastic::Util.rails3?
112
- output_buffer.should have_tag('li input.pretty')
113
- end
114
-
115
- end
116
-
117
- describe 'when the first option is a hash' do
118
-
119
- before do
120
- @new_post.stub!(:new_record?).and_return(false)
121
- @form = semantic_form_for(@new_post) do |builder|
122
- concat(builder.commit_button(:button_html => { :class => "pretty"}))
123
- end
124
- end
125
-
126
- it "should deal with the options hash" do
127
- output_buffer.concat(@form) if Formtastic::Util.rails3?
128
- output_buffer.should have_tag('li input.pretty')
129
- end
130
-
131
- end
132
-
133
- describe 'label' do
134
-
135
- # No object
136
- describe 'when used without object' do
137
- describe 'when explicit label is provided' do
138
- it 'should render an input with the explicitly specified label' do
139
- form = semantic_form_for(:post, :url => 'http://example.com') do |builder|
140
- concat(builder.commit_button("Click!"))
141
- end
142
- output_buffer.concat(form) if Formtastic::Util.rails3?
143
- output_buffer.should have_tag('li.commit input[@value="Click!"][@class~="submit"]')
144
- end
145
- end
146
-
147
- describe 'when no explicit label is provided' do
148
- describe 'when no I18n-localized label is provided' do
149
- before do
150
- ::I18n.backend.store_translations :en, :formtastic => {:submit => 'Submit %{model}'}
151
- end
152
-
153
- after do
154
- ::I18n.backend.reload!
155
- end
156
-
157
- it 'should render an input with default I18n-localized label (fallback)' do
158
- form = semantic_form_for(:post, :url => 'http://example.com') do |builder|
159
- concat(builder.commit_button)
160
- end
161
- output_buffer.concat(form) if Formtastic::Util.rails3?
162
- output_buffer.should have_tag('li.commit input[@value="Submit Post"][@class~="submit"]')
163
- end
164
- end
165
-
166
- describe 'when I18n-localized label is provided' do
167
- before do
168
- ::I18n.backend.store_translations :en,
169
- :formtastic => {
170
- :actions => {
171
- :submit => 'Custom Submit',
172
- }
173
- }
174
- ::Formtastic::SemanticFormBuilder.i18n_lookups_by_default = true
175
- end
176
-
177
- after do
178
- ::I18n.backend.reload!
179
- end
180
-
181
- it 'should render an input with localized label (I18n)' do
182
- ::I18n.backend.store_translations :en,
183
- :formtastic => {
184
- :actions => {
185
- :post => {
186
- :submit => 'Custom Submit %{model}'
187
- }
188
- }
189
- }
190
- form = semantic_form_for(:post, :url => 'http://example.com') do |builder|
191
- concat(builder.commit_button)
192
- end
193
- output_buffer.concat(form) if Formtastic::Util.rails3?
194
- output_buffer.should have_tag(%Q{li.commit input[@value="Custom Submit Post"][@class~="submit"]})
195
- end
196
-
197
- it 'should render an input with anoptional localized label (I18n) - if first is not set' do
198
- form = semantic_form_for(:post, :url => 'http://example.com') do |builder|
199
- concat(builder.commit_button)
200
- end
201
- output_buffer.concat(form) if Formtastic::Util.rails3?
202
- output_buffer.should have_tag(%Q{li.commit input[@value="Custom Submit"][@class~="submit"]})
203
- end
204
-
205
- end
206
- end
207
- end
208
-
209
- # New record
210
- describe 'when used on a new record' do
211
- before do
212
- @new_post.stub!(:new_record?).and_return(true)
213
- end
214
-
215
- describe 'when explicit label is provided' do
216
- it 'should render an input with the explicitly specified label' do
217
- form = semantic_form_for(@new_post) do |builder|
218
- concat(builder.commit_button("Click!"))
219
- end
220
- output_buffer.concat(form) if Formtastic::Util.rails3?
221
- output_buffer.should have_tag('li.commit input[@value="Click!"][@class~="create"]')
222
- end
223
- end
224
-
225
- describe 'when no explicit label is provided' do
226
- describe 'when no I18n-localized label is provided' do
227
- before do
228
- ::I18n.backend.store_translations :en, :formtastic => {:create => 'Create %{model}'}
229
- end
230
-
231
- after do
232
- ::I18n.backend.reload!
233
- end
234
-
235
- it 'should render an input with default I18n-localized label (fallback)' do
236
- form = semantic_form_for(@new_post) do |builder|
237
- concat(builder.commit_button)
238
- end
239
- output_buffer.concat(form) if Formtastic::Util.rails3?
240
- output_buffer.should have_tag('li.commit input[@value="Create Post"][@class~="create"]')
241
- end
242
- end
243
-
244
- describe 'when I18n-localized label is provided' do
245
- before do
246
- ::I18n.backend.store_translations :en,
247
- :formtastic => {
248
- :actions => {
249
- :create => 'Custom Create',
250
- }
251
- }
252
- ::Formtastic::SemanticFormBuilder.i18n_lookups_by_default = true
253
- end
254
-
255
- after do
256
- ::I18n.backend.reload!
257
- end
258
-
259
- it 'should render an input with localized label (I18n)' do
260
- ::I18n.backend.store_translations :en,
261
- :formtastic => {
262
- :actions => {
263
- :post => {
264
- :create => 'Custom Create %{model}'
265
- }
266
- }
267
- }
268
- form = semantic_form_for(@new_post) do |builder|
269
- concat(builder.commit_button)
270
- end
271
- output_buffer.concat(form) if Formtastic::Util.rails3?
272
- output_buffer.should have_tag(%Q{li.commit input[@value="Custom Create Post"][@class~="create"]})
273
- end
274
-
275
- it 'should render an input with anoptional localized label (I18n) - if first is not set' do
276
- form = semantic_form_for(@new_post) do |builder|
277
- concat(builder.commit_button)
278
- end
279
- output_buffer.concat(form) if Formtastic::Util.rails3?
280
- output_buffer.should have_tag(%Q{li.commit input[@value="Custom Create"][@class~="create"]})
281
- end
282
-
283
- end
284
- end
285
- end
286
-
287
- # Existing record
288
- describe 'when used on an existing record' do
289
- before do
290
- @new_post.stub!(:new_record?).and_return(false)
291
- end
292
-
293
- describe 'when explicit label is provided' do
294
- it 'should render an input with the explicitly specified label' do
295
- form = semantic_form_for(@new_post) do |builder|
296
- concat(builder.commit_button("Click!"))
297
- end
298
- output_buffer.concat(form) if Formtastic::Util.rails3?
299
- output_buffer.should have_tag('li.commit input[@value="Click!"][@class~="update"]')
300
- end
301
- end
302
-
303
- describe 'when no explicit label is provided' do
304
- describe 'when no I18n-localized label is provided' do
305
- before do
306
- ::I18n.backend.store_translations :en, :formtastic => {:update => 'Save %{model}'}
307
- end
308
-
309
- after do
310
- ::I18n.backend.reload!
311
- end
312
-
313
- it 'should render an input with default I18n-localized label (fallback)' do
314
- form = semantic_form_for(@new_post) do |builder|
315
- concat(builder.commit_button)
316
- end
317
- output_buffer.concat(form) if Formtastic::Util.rails3?
318
- output_buffer.should have_tag('li.commit input[@value="Save Post"][@class~="update"]')
319
- end
320
- end
321
-
322
- describe 'when I18n-localized label is provided' do
323
- before do
324
- ::I18n.backend.reload!
325
- ::I18n.backend.store_translations :en,
326
- :formtastic => {
327
- :actions => {
328
- :update => 'Custom Save',
329
- }
330
- }
331
- ::Formtastic::SemanticFormBuilder.i18n_lookups_by_default = true
332
- end
333
-
334
- after do
335
- ::I18n.backend.reload!
336
- end
337
-
338
- it 'should render an input with localized label (I18n)' do
339
- ::I18n.backend.store_translations :en,
340
- :formtastic => {
341
- :actions => {
342
- :post => {
343
- :update => 'Custom Save %{model}'
344
- }
345
- }
346
- }
347
- form = semantic_form_for(@new_post) do |builder|
348
- concat(builder.commit_button)
349
- end
350
- output_buffer.concat(form) if Formtastic::Util.rails3?
351
- output_buffer.should have_tag(%Q{li.commit input[@value="Custom Save Post"][@class~="update"]})
352
- end
353
-
354
- it 'should render an input with anoptional localized label (I18n) - if first is not set' do
355
- form = semantic_form_for(@new_post) do |builder|
356
- concat(builder.commit_button)
357
- end
358
- output_buffer.concat(form) if Formtastic::Util.rails3?
359
- output_buffer.should have_tag(%Q{li.commit input[@value="Custom Save"][@class~="update"]})
360
- ::I18n.backend.store_translations :en, :formtastic => {}
361
- end
362
-
363
- end
364
- end
365
- end
366
- end
367
-
368
- describe 'when the model is two words' do
369
- before do
370
- output_buffer = ''
371
- class ::UserPost
372
- extend ActiveModel::Naming if defined?(ActiveModel::Naming)
373
- include ActiveModel::Conversion if defined?(ActiveModel::Conversion)
374
-
375
- def id
376
- end
377
-
378
- def persisted?
379
- end
380
-
381
- # Rails does crappy human_name
382
- def self.human_name
383
- "User post"
384
- end
385
- end
386
- @new_user_post = ::UserPost.new
387
-
388
- @new_user_post.stub!(:new_record?).and_return(true)
389
- @form = semantic_form_for(@new_user_post, :url => '') do |builder|
390
- concat(builder.commit_button())
391
- end
392
- end
393
-
394
- it "should render the string as the value of the button" do
395
- output_buffer.concat(@form) if Formtastic::Util.rails3?
396
- output_buffer.should have_tag('li input[@value="Create User post"]')
397
- end
398
-
399
- end
400
-
401
- end