formtastic 2.3.1 → 3.0.0.rc

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 (39) hide show
  1. checksums.yaml +8 -8
  2. data/.travis.yml +0 -24
  3. data/Appraisals +0 -8
  4. data/CHANGELOG +0 -16
  5. data/README.textile +2 -2
  6. data/formtastic.gemspec +9 -8
  7. data/lib/formtastic.rb +1 -2
  8. data/lib/formtastic/actions/button_action.rb +1 -8
  9. data/lib/formtastic/helpers/input_helper.rb +2 -0
  10. data/lib/formtastic/inputs.rb +1 -0
  11. data/lib/formtastic/inputs/base.rb +1 -9
  12. data/lib/formtastic/inputs/base/collections.rb +5 -17
  13. data/lib/formtastic/inputs/base/errors.rb +3 -3
  14. data/lib/formtastic/inputs/base/hints.rb +1 -1
  15. data/lib/formtastic/inputs/base/options.rb +1 -1
  16. data/lib/formtastic/inputs/boolean_input.rb +1 -3
  17. data/lib/formtastic/inputs/color_input.rb +42 -0
  18. data/lib/formtastic/inputs/datetime_picker_input.rb +4 -1
  19. data/lib/formtastic/inputs/hidden_input.rb +2 -6
  20. data/lib/formtastic/inputs/select_input.rb +1 -25
  21. data/lib/formtastic/localizer.rb +2 -0
  22. data/lib/formtastic/util.rb +1 -1
  23. data/lib/formtastic/version.rb +1 -1
  24. data/lib/generators/formtastic/install/install_generator.rb +4 -19
  25. data/spec/actions/generic_action_spec.rb +38 -2
  26. data/spec/helpers/input_helper_spec.rb +6 -29
  27. data/spec/inputs/boolean_input_spec.rb +28 -42
  28. data/spec/inputs/color_input_spec.rb +97 -0
  29. data/spec/inputs/hidden_input_spec.rb +11 -28
  30. data/spec/inputs/select_input_spec.rb +6 -107
  31. data/spec/inputs/string_input_spec.rb +13 -1
  32. data/spec/localizer_spec.rb +23 -1
  33. data/spec/spec_helper.rb +2 -0
  34. data/spec/support/custom_macros.rb +5 -2
  35. data/spec/util_spec.rb +15 -22
  36. metadata +32 -32
  37. data/gemfiles/rails_3.0.gemfile +0 -7
  38. data/gemfiles/rails_3.1.gemfile +0 -7
  39. data/lib/formtastic/inputs/base/grouped_collections.rb +0 -77
@@ -110,11 +110,23 @@ describe 'string input' do
110
110
  end
111
111
 
112
112
  describe 'any conditional validation' do
113
+ describe 'proc that calls an instance method' do
114
+ it 'calls the method on the object' do
115
+ @new_post.should_receive(:something?)
116
+ @new_post.class.should_receive(:validators_on).with(:title).at_least(1).and_return([
117
+ active_model_presence_validator([:title], { :unless => -> { something? } })
118
+ ])
119
+ concat(semantic_form_for(@new_post) do |builder|
120
+ concat(builder.input(:title))
121
+ end)
122
+ end
123
+ end
124
+
113
125
  describe 'proc with arity that calls an instance method' do
114
126
  it 'calls the method on the object' do
115
127
  @new_post.should_receive(:something?)
116
128
  @new_post.class.should_receive(:validators_on).with(:title).at_least(1).and_return([
117
- active_model_presence_validator([:title], { :unless => Proc.new { |user| user.something? } })
129
+ active_model_presence_validator([:title], { :unless => ->(user) { user.something? } })
118
130
  ])
119
131
  concat(semantic_form_for(@new_post) do |builder|
120
132
  concat(builder.input(:title))
@@ -101,8 +101,30 @@ describe 'Formtastic::Localizer' do
101
101
  end
102
102
  end
103
103
  end
104
+
105
+ describe "with custom resource name" do
106
+ before do
107
+ ::I18n.backend.store_translations :en, {:formtastic => {
108
+ :labels => {
109
+ :post => { :name => 'POST.NAME' },
110
+ :message => { :name => 'MESSAGE.NAME' }
111
+ }
112
+ }
113
+ }
114
+
115
+ with_config :i18n_lookups_by_default, true do
116
+ semantic_form_for(@new_post, :as => :message) do |builder|
117
+ @localizer = Formtastic::Localizer.new(builder)
118
+ end
119
+ end
120
+ end
121
+
122
+ it "should translate custom key with i18n" do
123
+ @localizer.localize(:name, :name, :label).should == 'MESSAGE.NAME'
124
+ end
125
+ end
104
126
  end
105
127
 
106
128
  end
107
129
 
108
- end
130
+ end
@@ -422,6 +422,7 @@ module FormtasticSpecHelper
422
422
  @new_post.stub(:secret).and_return(1)
423
423
  @new_post.stub(:url)
424
424
  @new_post.stub(:email)
425
+ @new_post.stub(:color)
425
426
  @new_post.stub(:search)
426
427
  @new_post.stub(:phone)
427
428
  @new_post.stub(:time_zone)
@@ -444,6 +445,7 @@ module FormtasticSpecHelper
444
445
  @new_post.stub(:column_for_attribute).with(:country_subdivision).and_return(double('column', :type => :string, :limit => 255))
445
446
  @new_post.stub(:column_for_attribute).with(:country_code).and_return(double('column', :type => :string, :limit => 255))
446
447
  @new_post.stub(:column_for_attribute).with(:email).and_return(double('column', :type => :string, :limit => 255))
448
+ @new_post.stub(:column_for_attribute).with(:color).and_return(double('column', :type => :string, :limit => 255))
447
449
  @new_post.stub(:column_for_attribute).with(:url).and_return(double('column', :type => :string, :limit => 255))
448
450
  @new_post.stub(:column_for_attribute).with(:phone).and_return(double('column', :type => :string, :limit => 255))
449
451
  @new_post.stub(:column_for_attribute).with(:search).and_return(double('column', :type => :string, :limit => 255))
@@ -258,8 +258,11 @@ module CustomMacros
258
258
 
259
259
  def it_should_call_find_on_association_class_when_no_collection_is_provided(as)
260
260
  it "should call find on the association class when no collection is provided" do
261
- ::Author.should_receive(:where)
262
-
261
+ if Formtastic::Util.rails3?
262
+ ::Author.should_receive(:scoped)
263
+ else
264
+ ::Author.should_receive(:where)
265
+ end
263
266
  concat(semantic_form_for(@new_post) do |builder|
264
267
  concat(builder.input(:author, :as => as))
265
268
  end)
@@ -7,50 +7,43 @@ describe 'Formtastic::Util' do
7
7
 
8
8
  subject { Formtastic::Util.deprecated_version_of_rails? }
9
9
 
10
- context '3.0.0' do
11
- before { allow(Formtastic::Util).to receive(:rails_version) { Gem::Version.new("3.0.0") } }
12
- it 'should be true' do
13
- expect(subject).to be_true
14
- end
15
- end
16
-
17
- context '3.1.0' do
18
- before { allow(Formtastic::Util).to receive(:rails_version) { Gem::Version.new("3.1.0") } }
10
+ context '4.0.0' do
11
+ before { allow(Formtastic::Util).to receive(:rails_version) { Gem::Version.new("4.0.0") } }
19
12
  it 'should be true' do
20
13
  expect(subject).to be_true
21
14
  end
22
15
  end
23
16
 
24
- context '3.2.12' do
25
- before { allow(Formtastic::Util).to receive(:rails_version) { Gem::Version.new("3.2.12") } }
17
+ context '4.0.3' do
18
+ before { allow(Formtastic::Util).to receive(:rails_version) { Gem::Version.new("4.0.3") } }
26
19
  it 'should be true' do
27
20
  expect(subject).to be_true
28
21
  end
29
22
  end
30
23
 
31
- context '3.2.13' do
32
- before { allow(Formtastic::Util).to receive(:rails_version) { Gem::Version.new("3.2.13") } }
33
- it 'should be true' do
24
+ context '4.0.4' do
25
+ before { allow(Formtastic::Util).to receive(:rails_version) { Gem::Version.new("4.0.4") } }
26
+ it 'should be false' do
34
27
  expect(subject).to be_false
35
28
  end
36
29
  end
37
30
 
38
- context '3.2.14' do
39
- before { allow(Formtastic::Util).to receive(:rails_version) { Gem::Version.new("3.2.14") } }
40
- it 'should be true' do
31
+ context '4.0.5' do
32
+ before { allow(Formtastic::Util).to receive(:rails_version) { Gem::Version.new("4.0.5") } }
33
+ it 'should be false' do
41
34
  expect(subject).to be_false
42
35
  end
43
36
  end
44
37
 
45
- context '3.3.0' do
46
- before { allow(Formtastic::Util).to receive(:rails_version) { Gem::Version.new("3.3.0") } }
47
- it 'should be true' do
38
+ context '4.1.1' do
39
+ before { allow(Formtastic::Util).to receive(:rails_version) { Gem::Version.new("4.1.1") } }
40
+ it 'should be false' do
48
41
  expect(subject).to be_false
49
42
  end
50
43
  end
51
44
 
52
- context '4.0.0' do
53
- before { allow(Formtastic::Util).to receive(:rails_version) { Gem::Version.new("4.0.0") } }
45
+ context '5.0.0' do
46
+ before { allow(Formtastic::Util).to receive(:rails_version) { Gem::Version.new("5.0.0") } }
54
47
  it 'should be true' do
55
48
  expect(subject).to be_false
56
49
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: formtastic
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.1
4
+ version: 3.0.0.rc
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin French
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-02 00:00:00.000000000 Z
11
+ date: 2014-08-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionpack
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ! '>='
18
18
  - !ruby/object:Gem::Version
19
- version: '3.0'
19
+ version: 3.2.13
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ! '>='
25
25
  - !ruby/object:Gem::Version
26
- version: '3.0'
26
+ version: 3.2.13
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: nokogiri
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -44,28 +44,28 @@ dependencies:
44
44
  requirements:
45
45
  - - ~>
46
46
  - !ruby/object:Gem::Version
47
- version: 2.14.0
47
+ version: '2.14'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ~>
53
53
  - !ruby/object:Gem::Version
54
- version: 2.14.0
54
+ version: '2.14'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec_tag_matchers
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ! '>='
59
+ - - ~>
60
60
  - !ruby/object:Gem::Version
61
- version: 1.0.0
61
+ version: '1.0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ! '>='
66
+ - - ~>
67
67
  - !ruby/object:Gem::Version
68
- version: 1.0.0
68
+ version: '1.0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: hpricot
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -84,16 +84,16 @@ dependencies:
84
84
  name: BlueCloth
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ! '>='
87
+ - - ~>
88
88
  - !ruby/object:Gem::Version
89
- version: '0'
89
+ version: '1.0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ! '>='
94
+ - - ~>
95
95
  - !ruby/object:Gem::Version
96
- version: '0'
96
+ version: '1.0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: yard
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -112,30 +112,30 @@ dependencies:
112
112
  name: colored
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ! '>='
115
+ - - ~>
116
116
  - !ruby/object:Gem::Version
117
- version: '0'
117
+ version: '1.2'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ! '>='
122
+ - - ~>
123
123
  - !ruby/object:Gem::Version
124
- version: '0'
124
+ version: '1.2'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: tzinfo
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - ! '>='
129
+ - - ~>
130
130
  - !ruby/object:Gem::Version
131
- version: '0'
131
+ version: '1.1'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - ! '>='
136
+ - - ~>
137
137
  - !ruby/object:Gem::Version
138
- version: '0'
138
+ version: '1.1'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: ammeter
141
141
  requirement: !ruby/object:Gem::Requirement
@@ -154,16 +154,16 @@ dependencies:
154
154
  name: appraisal
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
- - - '='
157
+ - - ~>
158
158
  - !ruby/object:Gem::Version
159
- version: 1.0.0.beta3
159
+ version: '1.0'
160
160
  type: :development
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
- - - '='
164
+ - - ~>
165
165
  - !ruby/object:Gem::Version
166
- version: 1.0.0.beta3
166
+ version: '1.0'
167
167
  - !ruby/object:Gem::Dependency
168
168
  name: rake
169
169
  requirement: !ruby/object:Gem::Requirement
@@ -184,14 +184,14 @@ dependencies:
184
184
  requirements:
185
185
  - - ! '>='
186
186
  - !ruby/object:Gem::Version
187
- version: '0'
187
+ version: 3.2.13
188
188
  type: :development
189
189
  prerelease: false
190
190
  version_requirements: !ruby/object:Gem::Requirement
191
191
  requirements:
192
192
  - - ! '>='
193
193
  - !ruby/object:Gem::Version
194
- version: '0'
194
+ version: 3.2.13
195
195
  description: A Rails form builder plugin/gem with semantically rich and accessible
196
196
  markup
197
197
  email:
@@ -216,8 +216,6 @@ files:
216
216
  - app/assets/stylesheets/formtastic_ie6.css
217
217
  - app/assets/stylesheets/formtastic_ie7.css
218
218
  - formtastic.gemspec
219
- - gemfiles/rails_3.0.gemfile
220
- - gemfiles/rails_3.1.gemfile
221
219
  - gemfiles/rails_3.2.gemfile
222
220
  - gemfiles/rails_4.0.4.gemfile
223
221
  - gemfiles/rails_4.gemfile
@@ -252,7 +250,6 @@ files:
252
250
  - lib/formtastic/inputs/base/datetime_pickerish.rb
253
251
  - lib/formtastic/inputs/base/errors.rb
254
252
  - lib/formtastic/inputs/base/fileish.rb
255
- - lib/formtastic/inputs/base/grouped_collections.rb
256
253
  - lib/formtastic/inputs/base/hints.rb
257
254
  - lib/formtastic/inputs/base/html.rb
258
255
  - lib/formtastic/inputs/base/labelling.rb
@@ -266,6 +263,7 @@ files:
266
263
  - lib/formtastic/inputs/base/wrapping.rb
267
264
  - lib/formtastic/inputs/boolean_input.rb
268
265
  - lib/formtastic/inputs/check_boxes_input.rb
266
+ - lib/formtastic/inputs/color_input.rb
269
267
  - lib/formtastic/inputs/country_input.rb
270
268
  - lib/formtastic/inputs/date_picker_input.rb
271
269
  - lib/formtastic/inputs/date_select_input.rb
@@ -320,6 +318,7 @@ files:
320
318
  - spec/i18n_spec.rb
321
319
  - spec/inputs/boolean_input_spec.rb
322
320
  - spec/inputs/check_boxes_input_spec.rb
321
+ - spec/inputs/color_input_spec.rb
323
322
  - spec/inputs/country_input_spec.rb
324
323
  - spec/inputs/custom_input_spec.rb
325
324
  - spec/inputs/date_picker_input_spec.rb
@@ -367,7 +366,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
367
366
  requirements:
368
367
  - - ! '>='
369
368
  - !ruby/object:Gem::Version
370
- version: '0'
369
+ version: 1.9.3
371
370
  required_rubygems_version: !ruby/object:Gem::Requirement
372
371
  requirements:
373
372
  - - ! '>='
@@ -399,6 +398,7 @@ test_files:
399
398
  - spec/i18n_spec.rb
400
399
  - spec/inputs/boolean_input_spec.rb
401
400
  - spec/inputs/check_boxes_input_spec.rb
401
+ - spec/inputs/color_input_spec.rb
402
402
  - spec/inputs/country_input_spec.rb
403
403
  - spec/inputs/custom_input_spec.rb
404
404
  - spec/inputs/date_picker_input_spec.rb
@@ -1,7 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "rails", "~> 3.0.0"
6
-
7
- gemspec :path=>".././"
@@ -1,7 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "rails", "~> 3.1.0"
6
-
7
- gemspec :path=>".././"
@@ -1,77 +0,0 @@
1
- module Formtastic
2
- module Inputs
3
- module Base
4
- module GroupedCollections
5
-
6
- def raw_grouped_collection
7
- @raw_grouped_collection ||= raw_collection.map { |option| option.send(options[:group_by]) }.uniq
8
- end
9
-
10
- def grouped_collection
11
- @grouped_collection ||= raw_grouped_collection.sort_by { |group_item| group_item.send(group_label_method) }
12
- end
13
-
14
- def group_label_method
15
- @group_label_method ||= (group_label_method_from_options || group_label_method_from_grouped_collection)
16
- end
17
-
18
- def group_label_method_from_options
19
- options[:group_label]
20
- end
21
-
22
- def group_label_method_from_grouped_collection
23
- label_and_value_method_from_collection(raw_grouped_collection).first
24
- end
25
-
26
- def group_association
27
- @group_association ||= (group_association_from_options || group_association_from_reflection)
28
- end
29
-
30
- def group_association_from_options
31
- options[:group_association]
32
- end
33
-
34
- def group_by
35
- options[:group_by]
36
- end
37
-
38
- def group_association_from_reflection
39
- method_to_group_association_by = reflection.klass.reflect_on_association(group_by)
40
- group_class = method_to_group_association_by.klass
41
-
42
- # This will return in the normal case
43
- return method.to_s.pluralize.to_sym if group_class.reflect_on_association(method.to_s.pluralize)
44
-
45
- # This is for belongs_to associations named differently than their class
46
- # form.input :parent, :group_by => :customer
47
- # eg.
48
- # class Project
49
- # belongs_to :parent, :class_name => 'Project', :foreign_key => 'parent_id'
50
- # belongs_to :customer
51
- # end
52
- # class Customer
53
- # has_many :projects
54
- # end
55
- group_method = group_class.to_s.underscore.pluralize.to_sym
56
- return group_method if group_class.reflect_on_association(group_method) # :projects
57
-
58
- # This is for has_many associations named differently than their class
59
- # eg.
60
- # class Project
61
- # belongs_to :parent, :class_name => 'Project', :foreign_key => 'parent_id'
62
- # belongs_to :customer
63
- # end
64
- # class Customer
65
- # has_many :tasks, :class_name => 'Project', :foreign_key => 'customer_id'
66
- # end
67
- possible_associations = group_class.reflect_on_all_associations(:has_many).find_all {|assoc| assoc.klass == reflection.klass }
68
- return possible_associations.first.name.to_sym if possible_associations.count == 1
69
-
70
- raise "Cannot infer group association for #{method} grouped by #{group_by}, there were #{possible_associations.empty? ? 'no' : possible_associations.size} possible associations. Please specify using :group_association"
71
- end
72
-
73
- end
74
- end
75
- end
76
- end
77
-