formotion 1.1.2 → 1.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +16 -0
- data/LIST_OF_ROW_TYPES.md +17 -0
- data/lib/formotion/controller/form_controller.rb +1 -2
- data/lib/formotion/form/form.rb +2 -2
- data/lib/formotion/model/formable.rb +10 -0
- data/lib/formotion/row/row.rb +8 -0
- data/lib/formotion/row_type/back_row.rb +1 -1
- data/lib/formotion/row_type/button.rb +7 -2
- data/lib/formotion/row_type/edit_row.rb +1 -1
- data/lib/formotion/row_type/image_row.rb +1 -1
- data/lib/formotion/row_type/slider_row.rb +1 -1
- data/lib/formotion/row_type/submit_row.rb +1 -1
- data/lib/formotion/row_type/switch_row.rb +1 -1
- data/lib/formotion/version.rb +1 -1
- data/spec/formable/kvo_spec.rb +45 -0
- data/spec/formable/subclass_spec.rb +31 -0
- metadata +8 -4
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,19 @@
|
|
1
|
+
## 1.1.3 - ??
|
2
|
+
|
3
|
+
### Features
|
4
|
+
|
5
|
+
- Support a generic `:button` `RowType` which can be used in conjunction with a `Row`'s `on_tap` method.
|
6
|
+
|
7
|
+
### Bug Fixes
|
8
|
+
|
9
|
+
- Fixed bug where pushing a subform inherited from current controller class, which could cause expected behavior.
|
10
|
+
|
11
|
+
- Fixed crash when a Slider or Switch row type had an empty :title
|
12
|
+
|
13
|
+
- Fixed device crash when taking photo
|
14
|
+
|
15
|
+
- Fixed problems related to KVO-ing `Formable` objects.
|
16
|
+
|
1
17
|
## 1.1.2 - October 6, 2012
|
2
18
|
|
3
19
|
### Bug Fixes
|
data/LIST_OF_ROW_TYPES.md
CHANGED
@@ -18,6 +18,7 @@
|
|
18
18
|
[Template](#template)
|
19
19
|
|
20
20
|
**Buttons**<br/>
|
21
|
+
[Button](#button)<br/>
|
21
22
|
[Submit](#submit)<br/>
|
22
23
|
[Back](#back)<br/>
|
23
24
|
[Edit](#edit)<br/>
|
@@ -343,6 +344,22 @@ Use a `:display_key` to show the value of the subform in the row:
|
|
343
344
|
|
344
345
|
## Buttons
|
345
346
|
|
347
|
+
### <a name="button"></a> Button row
|
348
|
+
|
349
|
+
```ruby
|
350
|
+
{
|
351
|
+
title: "Any Button",
|
352
|
+
type: :button,
|
353
|
+
}
|
354
|
+
|
355
|
+
# later...
|
356
|
+
form.sections[0].rows[0].on_tap do |row|
|
357
|
+
# do something when tapped
|
358
|
+
end
|
359
|
+
```
|
360
|
+
|
361
|
+
The `SubmitRow` triggers the `form.submit` which triggers the defined `on_submit` callback.
|
362
|
+
|
346
363
|
### <a name="submit"></a> Submit row
|
347
364
|
![Submit row](https://github.com/clayallsopp/formotion/wiki/row-types/submit.png)
|
348
365
|
|
@@ -50,7 +50,6 @@ module Formotion
|
|
50
50
|
@form.controller = self
|
51
51
|
end
|
52
52
|
|
53
|
-
|
54
53
|
def viewWillAppear(animated)
|
55
54
|
super
|
56
55
|
|
@@ -59,7 +58,7 @@ module Formotion
|
|
59
58
|
|
60
59
|
# Subview Methods
|
61
60
|
def push_subform(form)
|
62
|
-
@subform_controller =
|
61
|
+
@subform_controller = Formotion::FormController.alloc.initWithForm(form)
|
63
62
|
|
64
63
|
if self.navigationController
|
65
64
|
self.navigationController.pushViewController(@subform_controller, animated: true)
|
data/lib/formotion/form/form.rb
CHANGED
@@ -9,6 +9,8 @@ module Formotion
|
|
9
9
|
attr_accessor prop
|
10
10
|
end
|
11
11
|
|
12
|
+
# Does NOT get called when KVO occurs.
|
13
|
+
# (KVO uses isa swizzling and not proper subclassing)
|
12
14
|
def inherited(subclass)
|
13
15
|
INHERITABLE_ATTRIBUTES.each do |inheritable_attribute|
|
14
16
|
instance_var = "@#{inheritable_attribute}"
|
@@ -17,6 +19,7 @@ module Formotion
|
|
17
19
|
end
|
18
20
|
|
19
21
|
def form_properties
|
22
|
+
@form_properties ||= self.superclass.form_properties if is_kvo_subclass?
|
20
23
|
@form_properties ||= []
|
21
24
|
end
|
22
25
|
|
@@ -38,9 +41,16 @@ module Formotion
|
|
38
41
|
# EX
|
39
42
|
# form_title "Some Settings"
|
40
43
|
def form_title(title = -1)
|
44
|
+
@form_title ||= self.superclass.form_title if is_kvo_subclass?
|
41
45
|
@form_title = title if title != -1
|
42
46
|
@form_title
|
43
47
|
end
|
48
|
+
|
49
|
+
private
|
50
|
+
# Terrible, terrible hack.
|
51
|
+
def is_kvo_subclass?
|
52
|
+
self.to_s =~ /^NSKVONotifying_/
|
53
|
+
end
|
44
54
|
end
|
45
55
|
|
46
56
|
# Creates a Formotion::Form out of the model
|
data/lib/formotion/row/row.rb
CHANGED
@@ -103,6 +103,9 @@ module Formotion
|
|
103
103
|
# callback for what happens when the user
|
104
104
|
# starts editing #text_field.
|
105
105
|
attr_accessor :on_begin_callback
|
106
|
+
# callback for what happens when the user
|
107
|
+
# taps a ButtonRow
|
108
|
+
attr_accessor :on_tap_callback
|
106
109
|
|
107
110
|
# RowType object
|
108
111
|
attr_accessor :object
|
@@ -226,6 +229,11 @@ module Formotion
|
|
226
229
|
self.on_begin_callback = block
|
227
230
|
end
|
228
231
|
|
232
|
+
# Used in :button type rows
|
233
|
+
def on_tap(&block)
|
234
|
+
self.on_tap_callback = block
|
235
|
+
end
|
236
|
+
|
229
237
|
#########################
|
230
238
|
# Methods for making cells
|
231
239
|
# Called in UITableViewDataSource methods
|
@@ -1,7 +1,6 @@
|
|
1
1
|
module Formotion
|
2
2
|
module RowType
|
3
|
-
class
|
4
|
-
|
3
|
+
class ButtonRow < Base
|
5
4
|
def button?
|
6
5
|
true
|
7
6
|
end
|
@@ -25,6 +24,12 @@ module Formotion
|
|
25
24
|
nil
|
26
25
|
end
|
27
26
|
|
27
|
+
def on_select(tableView, tableViewDelegate)
|
28
|
+
# Override in subclasses
|
29
|
+
if self.row.on_tap_callback
|
30
|
+
self.row.on_tap_callback.call(self.row)
|
31
|
+
end
|
32
|
+
end
|
28
33
|
end
|
29
34
|
end
|
30
35
|
end
|
@@ -75,7 +75,7 @@ module Formotion
|
|
75
75
|
end
|
76
76
|
|
77
77
|
if source
|
78
|
-
@camera = BW::Device.camera.any
|
78
|
+
@camera = BW::Device.camera.send((source == :camera) ? :rear : :any)
|
79
79
|
@camera.picture(source_type: source, media_types: [:image]) do |result|
|
80
80
|
if result[:original_image]
|
81
81
|
row.value = result[:original_image]
|
@@ -14,7 +14,7 @@ module Formotion
|
|
14
14
|
slideView.maximumValue = row.range.last
|
15
15
|
slideView.tag = SLIDER_VIEW_TAG
|
16
16
|
slideView.setValue(row.value, animated:true) if row.value
|
17
|
-
slideView.accessibilityLabel = row.title + " Slider"
|
17
|
+
slideView.accessibilityLabel = (row.title || "") + " Slider"
|
18
18
|
|
19
19
|
slideView.when(UIControlEventValueChanged) do
|
20
20
|
break_with_semaphore do
|
@@ -6,7 +6,7 @@ module Formotion
|
|
6
6
|
def build_cell(cell)
|
7
7
|
cell.selectionStyle = UITableViewCellSelectionStyleNone
|
8
8
|
switchView = UISwitch.alloc.initWithFrame(CGRectZero)
|
9
|
-
switchView.accessibilityLabel = row.title + " Switch"
|
9
|
+
switchView.accessibilityLabel = (row.title || "") + " Switch"
|
10
10
|
cell.accessoryView = cell.editingAccessoryView = switchView
|
11
11
|
switchView.setOn(row.value || false, animated:false)
|
12
12
|
switchView.when(UIControlEventValueChanged) do
|
data/lib/formotion/version.rb
CHANGED
@@ -0,0 +1,45 @@
|
|
1
|
+
class User
|
2
|
+
include Formotion::Formable
|
3
|
+
|
4
|
+
attr_accessor :name, :score, :team
|
5
|
+
|
6
|
+
form_property :name, :string
|
7
|
+
form_property :score, :number, transform: lambda { |value| value.to_i }
|
8
|
+
|
9
|
+
form_property :team, :picker, items: ["Red", "Blue", "Green"]
|
10
|
+
|
11
|
+
form_title "Edit User"
|
12
|
+
|
13
|
+
def initialize(name, score, team)
|
14
|
+
self.name = name
|
15
|
+
self.score = score
|
16
|
+
self.team = team
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class ObserverTest
|
21
|
+
include BubbleWrap::KVO
|
22
|
+
|
23
|
+
def users
|
24
|
+
@users ||= [User.new("Harry", 100, "Green"),
|
25
|
+
User.new("Ron", 80, "Blue"),
|
26
|
+
User.new("Hermione", 120, "Red")]
|
27
|
+
end
|
28
|
+
|
29
|
+
def start_observing
|
30
|
+
observe(self.users.first, "team") do |old_value, new_value|
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "Formotion::Formable w/ KVO" do
|
36
|
+
it "should work" do
|
37
|
+
test = ObserverTest.new
|
38
|
+
test.start_observing
|
39
|
+
|
40
|
+
test.users[0].to_form.title.should == test.users[1].to_form.title
|
41
|
+
test.users[0].class.form_properties.should == test.users[1].class.form_properties
|
42
|
+
|
43
|
+
test.unobserve_all
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
class User
|
2
|
+
include Formotion::Formable
|
3
|
+
|
4
|
+
attr_accessor :name, :score, :team
|
5
|
+
|
6
|
+
form_property :name, :string
|
7
|
+
form_property :score, :number, transform: lambda { |value| value.to_i }
|
8
|
+
|
9
|
+
form_property :team, :picker, items: ["Red", "Blue", "Green"]
|
10
|
+
|
11
|
+
form_title "Edit User"
|
12
|
+
|
13
|
+
def initialize(name, score, team)
|
14
|
+
self.name = name
|
15
|
+
self.score = score
|
16
|
+
self.team = team
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class AwesomeUser < User
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "Formotion::Formable w/ Subclasses" do
|
24
|
+
it "should work" do
|
25
|
+
user = User.new("Harry", 100, "Green")
|
26
|
+
awesome = AwesomeUser.new("Clay", 200, "Red")
|
27
|
+
|
28
|
+
user.to_form.title.should == awesome.to_form.title
|
29
|
+
user.class.form_properties.should == awesome.class.form_properties
|
30
|
+
end
|
31
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: formotion
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-10-
|
12
|
+
date: 2012-10-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bubble-wrap
|
@@ -145,6 +145,8 @@ files:
|
|
145
145
|
- lib/formotion/version.rb
|
146
146
|
- spec/form/persist_spec.rb
|
147
147
|
- spec/form_spec.rb
|
148
|
+
- spec/formable/kvo_spec.rb
|
149
|
+
- spec/formable/subclass_spec.rb
|
148
150
|
- spec/formable_spec.rb
|
149
151
|
- spec/functional/character_spec.rb
|
150
152
|
- spec/functional/check_row_spec.rb
|
@@ -194,7 +196,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
194
196
|
version: '0'
|
195
197
|
segments:
|
196
198
|
- 0
|
197
|
-
hash:
|
199
|
+
hash: 397181298113025173
|
198
200
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
199
201
|
none: false
|
200
202
|
requirements:
|
@@ -203,7 +205,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
203
205
|
version: '0'
|
204
206
|
segments:
|
205
207
|
- 0
|
206
|
-
hash:
|
208
|
+
hash: 397181298113025173
|
207
209
|
requirements: []
|
208
210
|
rubyforge_project:
|
209
211
|
rubygems_version: 1.8.23
|
@@ -213,6 +215,8 @@ summary: Making iOS Forms insanely great with RubyMotion
|
|
213
215
|
test_files:
|
214
216
|
- spec/form/persist_spec.rb
|
215
217
|
- spec/form_spec.rb
|
218
|
+
- spec/formable/kvo_spec.rb
|
219
|
+
- spec/formable/subclass_spec.rb
|
216
220
|
- spec/formable_spec.rb
|
217
221
|
- spec/functional/character_spec.rb
|
218
222
|
- spec/functional/check_row_spec.rb
|