motion_model 0.5.0 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ ZTY0YmQxMmY0NmY3OWZmNjQ0M2ZkMGY0YTViOWEwZTE2N2JiZjM1YQ==
5
+ data.tar.gz: !binary |-
6
+ YTU5OTViYjhmYzg5ODE0ZDUyNDM2M2QyMjNjYTNmMjZkYjM1MjJkNA==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ ZTg2NzFmZjdiODVhNjJiODk2YzRiOWQ5OTI4ZmZlYjU2MmQ2MjY2M2I5OWY1
10
+ OWQzN2MyZWRiYmFjNTdmMzhlMTYwMzdkMDNkZWZjZDNmNjBhMTNhYzk5NGNh
11
+ M2E5MTAyYTU0MzVmYmViMjIzN2ZiZmY2ZTE5MjU3YTM5ZjRkMDE=
12
+ data.tar.gz: !binary |-
13
+ MDI5Njc4YTVkYmZkMGY1YzkwMGJiNjI0NDM0MzdiMzQ3YjcwMDZiODBjZmQ4
14
+ Y2Y0MDI1Y2Q1MTZjYTI3MjJmMmYwODI5YjExMGQ3NGE1MTA0YTQ5YzBmMTEz
15
+ MmIyNjNhZjY1MDg0MmNlZTcwM2ZmNGYwZTljZmQyNGMxZTkzMjM=
data/README.md CHANGED
@@ -244,8 +244,8 @@ Here are some sample validations:
244
244
 
245
245
  validate :field_name, :presence => true
246
246
  validate :field_name, :length => 5..8 # specify a range
247
- validate :field_name, :email
248
- validate :field_name, :format
247
+ validate :field_name, :email => true
248
+ validate :field_name, :format => /\A\d?\d-\d?\d-\d\d\Z/ # expected string format would be like '12-12-12'
249
249
 
250
250
  The framework is sufficiently flexible that you can add in custom validators like so:
251
251
 
@@ -278,7 +278,7 @@ of save:
278
278
 
279
279
  Method | Meaning
280
280
  -----------------------|---------------------------
281
- `save(options)` |Just saves the data if it is valid (passes validations) or if you have specified `:validate => false`
281
+ `save(options)` |Just saves the data if it is valid (passes validations) or if you have specified `:validate => false` for `options`
282
282
  `save!` |Saves the data if it is valid, otherwise raises a `MotionModel::Validatable::RecordInvalid` exception
283
283
 
284
284
  Model Instances and Unique IDs
@@ -689,19 +689,19 @@ If you want to pass additional information on to Formotion, simply include it in
689
689
 
690
690
  There are two alternate syntaxes for calling this. The initial, or "legacy" syntax is as follows:
691
691
 
692
- ```
692
+ ```ruby
693
693
  to_formotion(form_title, expose_auto_date_fields, first_section_title)
694
694
  ```
695
695
 
696
696
  In the legacy syntax, all arguments are optional and sensible defaults are chosen. However, when you want to tune how your form is presented, the syntax gets a bit burdensome. The alternate syntax is:
697
697
 
698
- ```
698
+ ```ruby
699
699
  to_formotion(options)
700
700
  ```
701
701
 
702
702
  The options hash looks a lot like a Formotion hash might, except without the data. Here is an example:
703
703
 
704
- ```
704
+ ```ruby
705
705
  {title: 'A very fine form',
706
706
  sections: [
707
707
  {title: 'First Section',
@@ -715,7 +715,7 @@ The options hash looks a lot like a Formotion hash might, except without the dat
715
715
 
716
716
  Note that in this syntax, you can specify a button in the fields array:
717
717
 
718
- ```
718
+ ```ruby
719
719
  {title: 'A very fine form',
720
720
  sections: [
721
721
  {title: 'First Section',
@@ -729,6 +729,21 @@ Note that in this syntax, you can specify a button in the fields array:
729
729
 
730
730
  This specifies exactly what titles and fields appear where and in what order.
731
731
 
732
+ Finally, you can specify a button:
733
+
734
+ ```ruby
735
+ {title: 'A very fine form',
736
+ sections: [
737
+ {title: 'First Section',
738
+ fields: [:name, :gender]
739
+ },
740
+ {title: 'Second Section',
741
+ fields: [:address, :city, :state, {type: :submit, title: 'Ok'}],
742
+ {type: :button, title: 'add now!!!'}
743
+ }
744
+ ]}
745
+ ```
746
+
732
747
  ### How Values Are Produced for Formotion
733
748
 
734
749
  MotionModel has sensible defaults for each type supported, so any field of `:date`
@@ -39,7 +39,7 @@ module MotionModel
39
39
  end
40
40
 
41
41
  def translate_case(item, case_sensitive)#nodoc
42
- item = item.underscore if case_sensitive === false && item.respond_to?(:underscore)
42
+ item = item.downcase if case_sensitive === false && item.respond_to?(:downcase)
43
43
  item
44
44
  end
45
45
 
@@ -164,6 +164,7 @@ module MotionModel
164
164
  end
165
165
 
166
166
  def do_update(options = {})
167
+ self
167
168
  end
168
169
 
169
170
  def do_delete
@@ -34,6 +34,8 @@ module MotionModel
34
34
  end
35
35
 
36
36
  def default_hash_for(column, value)
37
+ value = value.to_f if is_date_time?(column)
38
+
37
39
  {:key => column.to_sym,
38
40
  :title => column.to_s.humanize,
39
41
  :type => FORMOTION_MAP[column_type(column)],
@@ -14,8 +14,13 @@ module MotionModel
14
14
  raise ex
15
15
  end
16
16
 
17
+ unless validation_type.is_a?(Hash)
18
+ ex = ValidationSpecificationError.new('validation_type is not a hash')
19
+ raise ex
20
+ end
21
+
17
22
  if validation_type == {}
18
- ex = ValidationSpecificationError.new('validation type not present or not a hash')
23
+ ex = ValidationSpecificationError.new('validation_type hash is empty')
19
24
  raise ex
20
25
  end
21
26
 
data/motion/version.rb CHANGED
@@ -4,5 +4,5 @@
4
4
  # or forward port their code to take advantage
5
5
  # of adapters.
6
6
  module MotionModel
7
- VERSION = "0.5.0"
7
+ VERSION = "0.5.1"
8
8
  end
data/spec/finder_spec.rb CHANGED
@@ -87,6 +87,11 @@ describe 'finders' do
87
87
  results.length.should == 3
88
88
  end
89
89
 
90
+ it 'handles case-insensitive queries as default' do
91
+ task = Task.create :name => 'camelCase'
92
+ Task.find(:name).eq('camelcase').all.length.should == 1
93
+ end
94
+
90
95
  it 'handles case-sensitive queries' do
91
96
  task = Task.create :name => 'Bob'
92
97
  Task.find(:name).eq('bob', :case_sensitive => true).all.length.should == 0
@@ -180,5 +180,18 @@ describe "formotion" do
180
180
  result[:sections][0][:rows][2].should.has_key?(:type)
181
181
  result[:sections][0][:rows][2][:type].should == :submit
182
182
  end
183
+
184
+ it "creates date as a float in the formotion hash" do
185
+ result = @subject.new_to_formotion(
186
+ sections: [
187
+ {title: 'name', fields: [:name, :date, {title: 'Submit', type: :submit}]},
188
+ {title: 'address', fields: [:location]}
189
+ ]
190
+ )
191
+ date_row = result[:sections][0][:rows][1]
192
+ date_row.should.has_key?(:type)
193
+ date_row[:type].should == :date
194
+ date_row[:value].class.should == Float
195
+ end
183
196
  end
184
197
  end
@@ -58,5 +58,11 @@ describe "lifecycle hooks" do
58
58
  it "calls after_save hook on save" do
59
59
  lambda{@task.save}.should.change{@task.after_save_called}
60
60
  end
61
+
62
+ it "calls after_save hook on update" do
63
+ task = Task.last
64
+ task.instance_variable_set("@after_save_called", false)
65
+ lambda{task.save}.should.change{task.after_save_called}
66
+ end
61
67
  end
62
68
  end
@@ -146,6 +146,21 @@ describe "validations" do
146
146
  task.validate_for(:some_day, 'a-12-12').should == false
147
147
  end
148
148
  end
149
+
150
+ describe "validation syntax" do
151
+ it "validates correctly when the expected hash syntax is used" do
152
+ task = ValidatableTask.new(@valid_tasks)
153
+ task.valid?.should == true
154
+ end
155
+
156
+ it "raises a ValidationSpecificationError when a non-Hash validation_type argument is passed to validate" do
157
+ lambda { ValidatableTask::validate(:field_name, :not_a_hash) }.should.raise
158
+ end
159
+
160
+ it "raises a ValidationSpecificationError when no validation_type argument is passed to validate" do
161
+ lambda { ValidatableTask::validate(:field_name) }.should.raise
162
+ end
163
+ end
149
164
  end
150
165
 
151
166
  class VTask
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: motion_model
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
5
- prerelease:
4
+ version: 0.5.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Steve Ross
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-11-27 00:00:00.000000000 Z
11
+ date: 2014-03-20 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: bubble-wrap
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ! '>='
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ! '>='
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: motion-support
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ! '>='
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ! '>='
44
39
  - !ruby/object:Gem::Version
@@ -93,27 +88,26 @@ files:
93
88
  - spec/validation_spec.rb
94
89
  homepage: https://github.com/sxross/MotionModel
95
90
  licenses: []
91
+ metadata: {}
96
92
  post_install_message:
97
93
  rdoc_options: []
98
94
  require_paths:
99
95
  - lib
100
96
  required_ruby_version: !ruby/object:Gem::Requirement
101
- none: false
102
97
  requirements:
103
98
  - - ! '>='
104
99
  - !ruby/object:Gem::Version
105
100
  version: '0'
106
101
  required_rubygems_version: !ruby/object:Gem::Requirement
107
- none: false
108
102
  requirements:
109
103
  - - ! '>='
110
104
  - !ruby/object:Gem::Version
111
105
  version: '0'
112
106
  requirements: []
113
107
  rubyforge_project:
114
- rubygems_version: 1.8.24
108
+ rubygems_version: 2.1.10
115
109
  signing_key:
116
- specification_version: 3
110
+ specification_version: 4
117
111
  summary: Simple model and validation mixins for RubyMotion
118
112
  test_files:
119
113
  - spec/adapter_spec.rb