formotion 1.6 → 1.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/.travis.yml +0 -3
  4. data/Gemfile +4 -1
  5. data/LIST_OF_ROW_TYPES.md +58 -6
  6. data/Rakefile +6 -2
  7. data/app/app_delegate.rb +6 -0
  8. data/examples/KitchenSink/Gemfile +2 -1
  9. data/examples/KitchenSink/Rakefile +9 -4
  10. data/examples/KitchenSink/app/app_delegate.rb +20 -5
  11. data/examples/KitchenSink/resources/arrow-up.png +0 -0
  12. data/examples/KitchenSink/resources/arrow-up@2x.png +0 -0
  13. data/examples/KitchenSink/resources/email.png +0 -0
  14. data/examples/KitchenSink/resources/email@2x.png +0 -0
  15. data/examples/Persistence/app/app_delegate.rb +2 -0
  16. data/examples/Persistence/app/controller.rb +66 -0
  17. data/lib/formotion/controller/form_controller.rb +1 -1
  18. data/lib/formotion/form/form.rb +14 -5
  19. data/lib/formotion/model/formable.rb +8 -6
  20. data/lib/formotion/patch/ui_text_field.rb +15 -1
  21. data/lib/formotion/row/row.rb +19 -3
  22. data/lib/formotion/row/row_cell_builder.rb +48 -2
  23. data/lib/formotion/row_type/button.rb +2 -2
  24. data/lib/formotion/row_type/date_row.rb +8 -1
  25. data/lib/formotion/row_type/image_row.rb +2 -2
  26. data/lib/formotion/row_type/map_row.rb +60 -23
  27. data/lib/formotion/row_type/object_row.rb +2 -2
  28. data/lib/formotion/row_type/picker_row.rb +32 -0
  29. data/lib/formotion/row_type/string_row.rb +5 -2
  30. data/lib/formotion/row_type/web_link_row.rb +48 -0
  31. data/lib/formotion/version.rb +1 -1
  32. data/resources/camera.png +0 -0
  33. data/resources/camera@2x.png +0 -0
  34. data/spec/functional/map_row_spec.rb +151 -4
  35. data/spec/functional/web_link_row_spec.rb +35 -0
  36. data/spec/row_spec.rb +109 -1
  37. data/spec/row_type/web_link_spec.rb +23 -0
  38. metadata +13 -2
@@ -1,3 +1,3 @@
1
1
  module Formotion
2
- VERSION = "1.6"
2
+ VERSION = "1.7"
3
3
  end
Binary file
Binary file
@@ -21,8 +21,8 @@ describe "FormController/MapRow" do
21
21
  def map_row
22
22
  @form.row(:map)
23
23
  end
24
-
25
- it "should only one pin" do
24
+
25
+ it "should have only one pin" do
26
26
  map_row.object.annotations.size.should == 1
27
27
  end
28
28
 
@@ -31,7 +31,7 @@ describe "FormController/MapRow" do
31
31
  coord.latitude.should == 47.5
32
32
  coord.longitude.should == 8.5
33
33
  end
34
-
34
+
35
35
  it "should set a new pin with new position" do
36
36
  map_row.value = CLLocationCoordinate2D.new(48.5, 9.5)
37
37
  wait 1 do
@@ -42,4 +42,151 @@ describe "FormController/MapRow" do
42
42
  end
43
43
  end
44
44
 
45
- end
45
+ it "should have the default map type" do
46
+ wait 1 do
47
+ map_row.object.map.mapType.should == MKMapTypeStandard
48
+ end
49
+ end
50
+
51
+ it "should allow map interaction" do
52
+ wait 1 do
53
+ map_row.object.map.isUserInteractionEnabled.should == true
54
+ end
55
+ end
56
+
57
+ end
58
+
59
+ describe "FormController/MapRow MapType" do
60
+ tests Formotion::FormController
61
+
62
+ # By default, `tests` uses @controller.init
63
+ # this isn't ideal for our case, so override.
64
+ def controller
65
+ row_settings = {
66
+ title: "Map",
67
+ key: :map,
68
+ type: :map,
69
+ value: {
70
+ coord: CLLocationCoordinate2D.new(48.5, 9.5),
71
+ type: MKMapTypeHybrid,
72
+ enabled: false
73
+ }
74
+ }
75
+ @form ||= Formotion::Form.new(
76
+ sections: [{
77
+ rows:[row_settings]
78
+ }])
79
+
80
+ @controller ||= Formotion::FormController.alloc.initWithForm(@form)
81
+ end
82
+
83
+ def map_row
84
+ @form.row(:map)
85
+ end
86
+
87
+ it "should have the hybrid map type" do
88
+ wait 1 do
89
+ map_row.object.map.mapType.should == MKMapTypeHybrid
90
+ end
91
+ end
92
+
93
+ it "should not allow map interaction" do
94
+ wait 1 do
95
+ map_row.object.map.isUserInteractionEnabled.should == false
96
+ end
97
+ end
98
+
99
+ end
100
+
101
+ describe "FormController/MapRow Pin" do
102
+ tests Formotion::FormController
103
+
104
+ # By default, `tests` uses @controller.init
105
+ # this isn't ideal for our case, so override.
106
+ def controller
107
+ row_settings = {
108
+ title: "Map",
109
+ key: :map,
110
+ type: :map,
111
+ value: {
112
+ coord: CLLocationCoordinate2D.new(48.5, 9.5),
113
+ pin: {
114
+ coord: CLLocationCoordinate2D.new(48.4, 9.4),
115
+ title: "Formotion",
116
+ subtitle: "Is Awesome"
117
+ }
118
+ }
119
+ }
120
+ @form ||= Formotion::Form.new(
121
+ sections: [{
122
+ rows:[row_settings]
123
+ }])
124
+
125
+ @controller ||= Formotion::FormController.alloc.initWithForm(@form)
126
+ end
127
+
128
+ def map_row
129
+ @form.row(:map)
130
+ end
131
+
132
+ it "should have only one pin" do
133
+ map_row.object.annotations.size.should == 1
134
+ end
135
+
136
+ it "should be a pin at the predefined position" do
137
+ coord = map_row.object.annotations[0].coordinate
138
+ coord.latitude.should.be.close 48.4, 0.2
139
+ coord.longitude.should.be.close 9.4, 0.2
140
+ end
141
+
142
+ it "should be different than the map center" do
143
+ pin_coord = map_row.object.annotations[0].coordinate
144
+ map_center = map_row.object.map.centerCoordinate
145
+
146
+ pin_coord.should.not.be.same_as map_center
147
+ end
148
+
149
+ it "should have a title" do
150
+ pin = map_row.object.annotations[0]
151
+ pin.title.should == "Formotion"
152
+ end
153
+
154
+ it "should have a subtitle" do
155
+ pin = map_row.object.annotations[0]
156
+ pin.subtitle.should == "Is Awesome"
157
+ end
158
+
159
+ end
160
+
161
+ describe "FormController/MapRow No Pin" do
162
+ tests Formotion::FormController
163
+
164
+ # By default, `tests` uses @controller.init
165
+ # this isn't ideal for our case, so override.
166
+ def controller
167
+ row_settings = {
168
+ title: "Map",
169
+ key: :map,
170
+ type: :map,
171
+ value: {
172
+ coord: CLLocationCoordinate2D.new(48.5, 9.5),
173
+ pin: nil
174
+ }
175
+ }
176
+ @form ||= Formotion::Form.new(
177
+ sections: [{
178
+ rows:[row_settings]
179
+ }])
180
+
181
+ @controller ||= Formotion::FormController.alloc.initWithForm(@form)
182
+ end
183
+
184
+ def map_row
185
+ @form.row(:map)
186
+ end
187
+
188
+ it "should have zero pins" do
189
+ map_row.object.annotations.size.should == 0
190
+ end
191
+
192
+ end
@@ -0,0 +1,35 @@
1
+ describe "FormController/WebLinkRow" do
2
+ tests Formotion::FormController
3
+
4
+ # By default, `tests` uses @controller.init
5
+ # this isn't ideal for our case, so override.
6
+ def controller
7
+ row_settings = {
8
+ title: "WebLink",
9
+ key: :web_link,
10
+ type: :web_link,
11
+ value: "http://www.rubymotion.com"
12
+ }
13
+ @form ||= Formotion::Form.new(
14
+ sections: [{
15
+ rows:[row_settings]
16
+ }])
17
+
18
+ @controller ||= Formotion::FormController.alloc.initWithForm(@form)
19
+ end
20
+
21
+ def weblink_row
22
+ @form.row(:web_link)
23
+ end
24
+
25
+ it "should accept a string" do
26
+ weblink_row.value.should == "http://www.rubymotion.com"
27
+ end
28
+
29
+ it "should accept a NSURL" do
30
+ weblink_row.value = NSURL.URLWithString("http://www.rubymotion.com")
31
+ weblink_row.value.is_a?(NSURL).should == true
32
+ weblink_row.value.absoluteString.should == "http://www.rubymotion.com"
33
+ end
34
+
35
+ end
data/spec/row_spec.rb CHANGED
@@ -1,4 +1,29 @@
1
1
  describe "Rows" do
2
+
3
+ before do
4
+ @image_name = "tags_row"
5
+ @image = UIImage.imageNamed(@image_name)
6
+ @remote_image_url = "http://placekitten.com/80/80?t=#{Time.now.to_i}"
7
+ @remote_placeholder_image_name = 'camera'
8
+ @remote_placeholder_image = UIImage.imageNamed(@remote_placeholder_image_name)
9
+
10
+ string_hash = {title: "TITLE", subtitle: "SUBTITLE", image: @image_name, type: :object, section: Formotion::Section.new({index: 0})}
11
+ @string_image_row = Formotion::Row.new(string_hash)
12
+ @string_image_row.index = 0
13
+
14
+ image_hash = string_hash.merge({image: @image})
15
+ @image_row = Formotion::Row.new(image_hash)
16
+ @image_row.index = 0
17
+
18
+ remote_image_hash = image_hash.merge({image: @remote_image_url})
19
+ @remote_image_row = Formotion::Row.new(remote_image_hash)
20
+ @remote_image_row.index = 0
21
+
22
+ remote_placeholder_image_hash = remote_image_hash.merge({image_placeholder: @remote_placeholder_image})
23
+ @remote_placeholder_image_row = Formotion::Row.new(remote_placeholder_image_hash)
24
+ @remote_placeholder_image_row.index = 0
25
+ end
26
+
2
27
  it "method_missing should work" do
3
28
  r = Formotion::Row.new
4
29
  r.title = "LABEL"
@@ -13,6 +38,89 @@ describe "Rows" do
13
38
  r = Formotion::Row.new(hash)
14
39
  r.title.should == "TITLE"
15
40
  r.subtitle.should == "SUBTITLE"
41
+ r.image.should == nil
42
+ end
43
+
44
+ it "should set an image on the cell with a String" do
45
+ @string_image_row.image.should == @image_name
46
+
47
+ cell = @string_image_row.make_cell
48
+ cell.imageView.image.should.not == nil
49
+ end
50
+
51
+ it "should set an image on the cell with a UIImage" do
52
+ @image_row.image.should == @image
53
+
54
+ cell = @image_row.make_cell
55
+ cell.imageView.image.should == @image
56
+ end
57
+
58
+ it "should change the image after cell creation" do
59
+ @image_row.image.should == @image
60
+
61
+ cell = @image_row.make_cell
62
+ cell.imageView.image.should == @image
63
+
64
+ new_image = UIImage.imageNamed("camera")
65
+ @image_row.image = new_image
66
+
67
+ cell.imageView.image.should.not == @image
68
+ cell.imageView.image.should == new_image
69
+ end
70
+
71
+ it "should set an image on the cell using a remote URL" do
72
+
73
+ @remote_image_row.image.should == @remote_image_url
74
+
75
+ cell = @remote_image_row.make_cell
76
+
77
+ wait 1 do
78
+ cell.imageView.image.should != nil
79
+ cell.imageView.image.is_a?(UIImage).should == true
80
+ end
81
+
82
+ end
83
+
84
+ it "should set a remote image with a placeholder" do
85
+ @remote_placeholder_image_row.image.should == @remote_image_url
86
+ @remote_placeholder_image_row.image_placeholder.should == @remote_placeholder_image
87
+
88
+ cell = @remote_placeholder_image_row.make_cell
89
+
90
+ wait 1 do
91
+ cell.imageView.image.size.should != @remote_placeholder_image.size
92
+ end
93
+ end
94
+
95
+ it "should set a remote image after another image has already been set" do
96
+ cell = @remote_placeholder_image_row.make_cell
97
+
98
+ wait 1 do
99
+ img = cell.imageView.image
100
+ cell.imageView.image.size.should != @remote_placeholder_image.size
101
+
102
+ @remote_placeholder_image_row.image = "http://placekitten.com/80/80?t=#{Time.now.to_i}"
103
+ wait 1 do
104
+ cell.imageView.image.should != img
105
+ end
106
+ end
107
+
108
+ end
109
+
110
+ it "should set a local image after a remote image has already been set" do
111
+ cell = @remote_placeholder_image_row.make_cell
112
+
113
+ wait 1 do
114
+ img = cell.imageView.image
115
+ cell.imageView.image.size.should != @remote_placeholder_image.size
116
+
117
+ new_image = UIImage.imageNamed("camera")
118
+ @remote_placeholder_image_row.image = new_image
119
+
120
+ cell.imageView.image.should.not == img
121
+ cell.imageView.image.should == new_image
122
+ end
123
+
16
124
  end
17
125
 
18
126
  it "the question mark methods should work" do
@@ -31,4 +139,4 @@ describe "Rows" do
31
139
  r.items = lambda { [1, 2, 3].reverse }
32
140
  r.items.should == [3, 2, 1]
33
141
  end
34
- end
142
+ end
@@ -0,0 +1,23 @@
1
+ describe "Web Link Row" do
2
+ tests_row :web_link
3
+
4
+ before do
5
+ @link_url = "http://www.rubymotion.com"
6
+ end
7
+
8
+ it "should initialize with correct settings" do
9
+ @row.object.class.should == Formotion::RowType::WebLinkRow
10
+ end
11
+
12
+ it "should have a cell indicator" do
13
+ cell = @row.make_cell
14
+ cell.accessoryType.should == UITableViewCellAccessoryDisclosureIndicator
15
+ end
16
+
17
+ it "should accept a string value" do
18
+ @row.value = @link_url
19
+ cell = @row.make_cell
20
+ @row.value.is_a?(String).should == true
21
+ end
22
+
23
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: formotion
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.6'
4
+ version: '1.7'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Clay Allsopp
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-06 00:00:00.000000000 Z
11
+ date: 2014-02-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bubble-wrap
@@ -82,6 +82,10 @@ files:
82
82
  - examples/KitchenSink/README.md
83
83
  - examples/KitchenSink/Rakefile
84
84
  - examples/KitchenSink/app/app_delegate.rb
85
+ - examples/KitchenSink/resources/arrow-up.png
86
+ - examples/KitchenSink/resources/arrow-up@2x.png
87
+ - examples/KitchenSink/resources/email.png
88
+ - examples/KitchenSink/resources/email@2x.png
85
89
  - examples/KitchenSink/spec/main_spec.rb
86
90
  - examples/Login/.gitignore
87
91
  - examples/Login/Rakefile
@@ -162,9 +166,12 @@ files:
162
166
  - lib/formotion/row_type/tags_row.rb
163
167
  - lib/formotion/row_type/template_row.rb
164
168
  - lib/formotion/row_type/text_row.rb
169
+ - lib/formotion/row_type/web_link_row.rb
165
170
  - lib/formotion/row_type/web_view_row.rb
166
171
  - lib/formotion/section/section.rb
167
172
  - lib/formotion/version.rb
173
+ - resources/camera.png
174
+ - resources/camera@2x.png
168
175
  - resources/tags_row-selected.png
169
176
  - resources/tags_row-selected@2x.png
170
177
  - resources/tags_row.png
@@ -189,6 +196,7 @@ files:
189
196
  - spec/functional/template_row_ext_spec.rb
190
197
  - spec/functional/template_row_spec.rb
191
198
  - spec/functional/text_row_spec.rb
199
+ - spec/functional/web_link_row_spec.rb
192
200
  - spec/functional/web_view_row_spec.rb
193
201
  - spec/helpers/row_test_helpers.rb
194
202
  - spec/row_spec.rb
@@ -211,6 +219,7 @@ files:
211
219
  - spec/row_type/switch_spec.rb
212
220
  - spec/row_type/template_spec.rb
213
221
  - spec/row_type/text_spec.rb
222
+ - spec/row_type/web_link_spec.rb
214
223
  - spec/section_spec.rb
215
224
  - spec/support/ui_control_wrap_extension.rb
216
225
  homepage: https://github.com/clayallsopp/Formotion
@@ -258,6 +267,7 @@ test_files:
258
267
  - spec/functional/template_row_ext_spec.rb
259
268
  - spec/functional/template_row_spec.rb
260
269
  - spec/functional/text_row_spec.rb
270
+ - spec/functional/web_link_row_spec.rb
261
271
  - spec/functional/web_view_row_spec.rb
262
272
  - spec/helpers/row_test_helpers.rb
263
273
  - spec/row_spec.rb
@@ -280,5 +290,6 @@ test_files:
280
290
  - spec/row_type/switch_spec.rb
281
291
  - spec/row_type/template_spec.rb
282
292
  - spec/row_type/text_spec.rb
293
+ - spec/row_type/web_link_spec.rb
283
294
  - spec/section_spec.rb
284
295
  - spec/support/ui_control_wrap_extension.rb