ProMotion-XLForm 0.0.2 → 0.0.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1f4516179e94ade36bb17161d5b1c0775dc98e22
4
- data.tar.gz: b0e89a0b694883ed6d6e3e1e4a14ef3ef3605433
3
+ metadata.gz: 55924720d004b7e0a3e9bf60576b3803ef96cfbb
4
+ data.tar.gz: abf8c29c048a7db559d0decee91fdde5adaaf616
5
5
  SHA512:
6
- metadata.gz: d54c52b617a102888760cb0be282046f8dfd8fe9cabc53f2f7524c5ce9c3b75be42ef4d001360f3837332c45e7447a2630145edbdff65bd253ad35b5962d0e4a
7
- data.tar.gz: 10310f4f000a594e79ff2e3a0d13030c70c44bec98e11315ce6226079e4955c1c20400103d4441d646e5039139115e86ec2975c4c790feeb582305a4bb9474b3
6
+ metadata.gz: 89a3c12aa9d571911681e0b54a85a91602218c5534c3c7fceaea08d4dadddf691957478cfd6a4dad4af0eb826556118f328b75c88b19f109b7b015393aac4ff5
7
+ data.tar.gz: fe7a80cedbebf1ecfcf1c540744f2bb5519ae978ea136c5d4e659d72a2df18c0a15c661abd399cd86faedf011d332a01b429dd66cfd0fa7cc14bc9c792991bd7
data/README.md CHANGED
@@ -5,7 +5,7 @@ ProMotion-XLForm provides a PM::XLFormScreen for [ProMotion](https://github.com/
5
5
  ## Warning
6
6
  This gem is currently in very early-stage. Use it at your own risk :)
7
7
 
8
- [![Build Status](https://travis-ci.org/bmichotte/ProMotion-XLForm.svg?branch=master)](https://travis-ci.org/bmichotte/ProMotion-XLForm)
8
+ [![Build Status](https://travis-ci.org/bmichotte/ProMotion-XLForm.svg?branch=master)](https://travis-ci.org/bmichotte/ProMotion-XLForm) [![Gem Version](https://badge.fury.io/rb/ProMotion-XLForm.svg)](http://badge.fury.io/rb/ProMotion-XLForm)
9
9
 
10
10
  ## Installation
11
11
 
@@ -169,18 +169,23 @@ You can create a custom _subform_ with a few options
169
169
 
170
170
  ```ruby
171
171
  {
172
- title: 'Custom',
173
- name: :custom,
172
+ title: 'Custom section',
174
173
  cells: [
175
174
  {
176
- title: 'Some text',
177
- name: :some_text,
178
- type: :text
179
- },
180
- {
181
- title: 'Other text',
182
- name: :some_other_text,
183
- type: :text
175
+ title: 'Custom',
176
+ name: :custom,
177
+ cells: [
178
+ {
179
+ title: 'Some text',
180
+ name: :some_text,
181
+ type: :text
182
+ },
183
+ {
184
+ title: 'Other text',
185
+ name: :some_other_text,
186
+ type: :text
187
+ }
188
+ ]
184
189
  }
185
190
  ]
186
191
  }
@@ -211,6 +216,40 @@ end
211
216
 
212
217
  For a more advanced custom selector, you can set `view_controller_class:`. See [XLForm documentation](https://github.com/xmartlabs/XLForm/#custom-selectors---selector-row-with-a-custom-selector-view-controller) for more informations.
213
218
 
219
+ ### Validators
220
+
221
+ You can add validators to cells.
222
+
223
+ ```ruby
224
+ {
225
+ title: 'Email',
226
+ name: :email,
227
+ type: :email,
228
+ required: true,
229
+ validators: {
230
+ email: true
231
+ }
232
+ }
233
+ ```
234
+
235
+ `:email` and `:url` are available out of the box, as well as `:regex`. You will have to provide a valid regex and a message.
236
+
237
+ ```ruby
238
+ {
239
+ title: 'Only letters',
240
+ name: :letters,
241
+ type: :text,
242
+ required: true,
243
+ validators: {
244
+ regex: { regex: /^[a-zA-Z]+$/, message: "Only letters please !" }
245
+ }
246
+ }
247
+ ```
248
+
249
+ Finally, you can provide a PM::Validator with a `valid?(cell)` method.
250
+
251
+
252
+
214
253
  ## Todo
215
254
  - Validations
216
255
  - Tests
@@ -15,6 +15,9 @@ Motion::Project::App.setup do |app|
15
15
  app.files << File.join(lib_dir_path, "ProMotion/XLForm/xl_sub_form_screen.rb")
16
16
  app.files << File.join(lib_dir_path, "ProMotion/XLForm/xl_form_patch.rb")
17
17
  app.files << File.join(lib_dir_path, "ProMotion/XLForm/value_transformer.rb")
18
+ app.files << File.join(lib_dir_path, "ProMotion/XLForm/validators/validator.rb")
19
+ app.files << File.join(lib_dir_path, "ProMotion/XLForm/validators/url_validator.rb")
20
+ app.files << File.join(lib_dir_path, "ProMotion/XLForm/validators/regex_validator.rb")
18
21
 
19
22
  app.pods do
20
23
  pod 'XLForm', '~> 3.0.0'
@@ -0,0 +1,20 @@
1
+ module ProMotion
2
+ class RegexValidator < ProMotion::Validator
3
+ attr_accessor :regex
4
+
5
+ def initialize(message, regex)
6
+ @message = message
7
+ @regex = regex
8
+ end
9
+
10
+ def valid?(row)
11
+ return nil if row.nil? or row.value.nil? or !row.value.is_a?(String)
12
+
13
+ !@regex.match(row.value).nil?
14
+ end
15
+
16
+ def self.validator(message, regex)
17
+ ProMotion::RegexValidator.new(message, regex)
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,7 @@
1
+ module ProMotion
2
+ class UrlValidator
3
+ def self.validator
4
+ ProMotion::RegexValidator.validator(NSLocalizedString("Invalid url", nil), /^https?:\/\/.*/)
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,18 @@
1
+ module ProMotion
2
+ class Validator
3
+ attr_accessor :message
4
+
5
+ def isValid(row)
6
+ is_valid = nil
7
+ is_valid = valid?(row) if self.respond_to?(:valid?)
8
+
9
+ return nil if is_valid.nil?
10
+ XLFormValidationStatus.formValidationStatusWithMsg(@message, status: is_valid, rowDescriptor: row)
11
+ end
12
+
13
+ def valid?(row)
14
+ mp "You have to override valid?", force_color: :red
15
+ end
16
+
17
+ end
18
+ end
@@ -129,6 +129,40 @@ module ProMotion
129
129
 
130
130
  cell.disabled = !cell_data[:enabled] if cell_data[:enabled]
131
131
 
132
+ # validators
133
+ if cell_data[:validators]
134
+ validators = cell_data[:validators]
135
+ validators.each do |key, value|
136
+ validator = case key
137
+ when :email
138
+ XLFormValidator.emailValidator
139
+ when :regex
140
+ regex = value[:regex]
141
+ if regex.is_a?(String)
142
+ XLFormRegexValidator.formRegexValidatorWithMsg(value[:message], regex: regex)
143
+ elsif regex.is_a?(Regexp)
144
+ ProMotion::RegexValidator.validator(value[:message], regex)
145
+ else
146
+ mp "Invalid regex : #{regex.inspect}. Please provides a Regexp or a String", force_color: :red
147
+ nil
148
+ end
149
+ when :url
150
+ ProMotion::UrlValidator.validator
151
+ else
152
+ if value.is_a?(ProMotion::Validator) or value.respond_to?(:isValid)
153
+ value
154
+ else
155
+ mp "Invalid validator : #{key}", force_color: :red
156
+ nil
157
+ end
158
+ end
159
+
160
+ if validator
161
+ cell.addValidator(validator)
162
+ end
163
+ end
164
+ end
165
+
132
166
  section.addFormRow(cell)
133
167
 
134
168
  # multi sections
@@ -116,6 +116,60 @@ module ProMotion
116
116
  reloadFormRow(cell)
117
117
  end
118
118
 
119
+ def add_cell(cell, opts={})
120
+ if opts[:before]
121
+ row = opts[:before]
122
+ if row.is_a?(Symbol)
123
+ row = cell_with_tag(row)
124
+ end
125
+ self.form.addFormRow(cell, beforeRow: row)
126
+ elsif opts[:after]
127
+ row = opts[:after]
128
+ if row.is_a?(Symbol)
129
+ row = cell_with_tag(row)
130
+ end
131
+ self.form.addFormRow(cell, afterRow: row)
132
+ else
133
+ mp "Don't know where to add cell, please provides either :before or :after", force_color: :red
134
+ end
135
+ end
136
+
137
+ def add_section(section, opts={})
138
+ if opts[:index]
139
+ self.form.addFormSection(section, atIndex: opts[:index])
140
+ elsif opts[:after]
141
+ self.form.addFormSection(section, afterSection: opts[:after])
142
+ else
143
+ self.form.addFormSection(section)
144
+ end
145
+ end
146
+
147
+ def remove_section!(section_or_index)
148
+ if section_or_index.is_a?(XLFormSectionDescriptor)
149
+ self.form.removeFormSection(section_or_index)
150
+ else
151
+ self.form.removeFormSectionAtIndex(section_or_index)
152
+ end
153
+ end
154
+
155
+ def remove_cell!(cell)
156
+ if cell.is_a?(Symbol)
157
+ self.form.removeFormRowWithTag(cell.to_s)
158
+ elsif cell.is_a?(String)
159
+ self.form.removeFormRowWithTag(cell)
160
+ else
161
+ self.form.removeFormRow(cell)
162
+ end
163
+ end
164
+
165
+ def enabled=(value)
166
+ self.form.disabled = !value
167
+ end
168
+
169
+ def enabled?
170
+ !self.form.isDisabled
171
+ end
172
+
119
173
  protected
120
174
  def on_cancel(_)
121
175
  form_options = self.class.get_form_options
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ProMotion-XLForm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Benjamin Michotte
@@ -76,6 +76,9 @@ files:
76
76
  - README.md
77
77
  - lib/ProMotion-XLForm.rb
78
78
  - lib/ProMotion/XLForm/cells/xl_form_image_selector_cell.rb
79
+ - lib/ProMotion/XLForm/validators/regex_validator.rb
80
+ - lib/ProMotion/XLForm/validators/url_validator.rb
81
+ - lib/ProMotion/XLForm/validators/validator.rb
79
82
  - lib/ProMotion/XLForm/value_transformer.rb
80
83
  - lib/ProMotion/XLForm/xl_form.rb
81
84
  - lib/ProMotion/XLForm/xl_form_class_methods.rb