form_stalker 1.0.1 → 1.0.2

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: b32f1eee7efca73e34710b9180b5f1358b8ae1c6
4
- data.tar.gz: 0c85f46173c155550830617e7acbe9bb274e62fb
3
+ metadata.gz: 7c6c157ea0f59610e9e34e86d1ab5dcdb2ca941a
4
+ data.tar.gz: 8e36059c4113539ac839eab25bede83732c53f11
5
5
  SHA512:
6
- metadata.gz: 5b06ab3be3ad932d756530d8d7cdeef49d3f431043847a10b8976197606de7260606bc53e4043ea2b05d6d601edaa0a67eed753b4a45a99ac595d864ff7ef72f
7
- data.tar.gz: af92d5230619f03b7949a58bbd85ead871d5f3b995531a5c980a9a987f44812dda1089800dd2f0e67a665267169b1c01ed5434d6d1ed08436a63aeb2d4dc713e
6
+ metadata.gz: f98838ba9b8f8e36b04b708477a2881dd01bbc82557a844922084aca8a5ade15fdc1b56bb7b0d2a0c5c0a84caad842a92a90b529816f7b48a1e17407198e5171
7
+ data.tar.gz: e3a8ab3349d4c499864846bb57354a64b235a3847134adce93be26eaebe1cd7d73c672d14f6db0f6d5d27f6af035f37ef59ab4d3f1a7609f94f48063cf50acd9
@@ -43,6 +43,10 @@ module FormStalker
43
43
 
44
44
  super(@parser.parse_attributes)
45
45
  end
46
+
47
+ def attributes_before_type_cast
48
+ parser.attributes_before_type_cast
49
+ end
46
50
  end
47
51
  end
48
52
  end
@@ -0,0 +1,44 @@
1
+ require 'form_stalker/data/base'
2
+
3
+ module FormStalker
4
+ module Data
5
+ class CheckLogic < Base
6
+ schema field: :integer, target: :integer
7
+
8
+ def initialize(attributes)
9
+ if attributes.is_a? String
10
+ attributes = Helpers.json_to_hash "{#{js_to_json(attributes)}}"
11
+ end
12
+
13
+ super attributes
14
+ end
15
+
16
+ def parse_fields(fields)
17
+ fields.map(&:to_i)
18
+ end
19
+
20
+ def parse_checks(checks)
21
+ checks.map { |check| CheckLogic.new(check).attributes }
22
+ end
23
+
24
+ protected ####################### PROTECTED ##############################
25
+
26
+ def js_to_json(js_object)
27
+ js_object.split(',').map(&:strip).map do |js_string|
28
+ escape_js_to_json(js_string)
29
+ end.join(', ')
30
+ end
31
+
32
+ private ######################### PRIVATE ################################
33
+
34
+ def escape_js_to_json(js_string)
35
+ string = js_string.tr('"', '\"')
36
+ .tr("'", '"')
37
+ .gsub('{', '{"')
38
+ .gsub(':', '":')
39
+
40
+ "\"#{string}"
41
+ end
42
+ end
43
+ end
44
+ end
@@ -1,4 +1,6 @@
1
1
  require 'form_stalker/data/base'
2
+ require 'form_stalker/data/form_field'
3
+ require 'form_stalker/data/form_fields_logic'
2
4
 
3
5
  module FormStalker
4
6
  module Data
@@ -16,6 +18,14 @@ module FormStalker
16
18
  last_submission_id: :integer,
17
19
  last_submission_time: :datetime
18
20
 
21
+ attr_reader :logic
22
+
23
+ def parse_html(html)
24
+ @logic = FormFieldsLogic.new(html)
25
+
26
+ html
27
+ end
28
+
19
29
  def parse_fields(fields_array)
20
30
  (fields_array || []).map { |fields| FormField.new(fields) }
21
31
  end
@@ -0,0 +1,40 @@
1
+ require 'form_stalker/data/check_logic'
2
+ require 'form_stalker/data/base'
3
+
4
+ module FormStalker
5
+ module Data
6
+ class FormFieldsLogic < Base
7
+ def initialize(html)
8
+ super checks: extract_checks(html),
9
+ calc_field_ids: extract_calc_field_ids(html),
10
+ logic_field_ids: extract_logic_field_ids(html)
11
+ end
12
+
13
+ def parse_calc_field_ids(value)
14
+ Helpers.string_to_array_of_integers(value)
15
+ end
16
+
17
+ def parse_logic_field_ids(value)
18
+ Helpers.string_to_array_of_integers(value)
19
+ end
20
+
21
+ def parse_checks(values)
22
+ values.map { |js_object| CheckLogic.new(js_object).attributes }
23
+ end
24
+
25
+ protected ####################### PROTECTED ##############################
26
+
27
+ def extract_checks(html)
28
+ Helpers.extract_from_regex(html, /.*checks.push\({(.*)}\)/i)
29
+ end
30
+
31
+ def extract_calc_field_ids(html)
32
+ Helpers.extract_from_regex(html, /.*calcFields.*=.*\[(.*)\]/i)[0]
33
+ end
34
+
35
+ def extract_logic_field_ids(html)
36
+ Helpers.extract_from_regex(html, /.*logicFields.*=.*\[(.*)\]/i)[0]
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,17 @@
1
+ module FormStalker
2
+ module Helpers
3
+ module_function
4
+
5
+ def json_to_hash(string)
6
+ JSON.parse(string)
7
+ end
8
+
9
+ def string_to_array_of_integers(string)
10
+ string.delete("'").delete('"').split(',').map(&:to_i)
11
+ end
12
+
13
+ def extract_from_regex(string, regex)
14
+ string.scan(regex).flatten
15
+ end
16
+ end
17
+ end
@@ -1,3 +1,3 @@
1
1
  module FormStalker
2
- VERSION = '1.0.1'.freeze
2
+ VERSION = '1.0.2'.freeze
3
3
  end
data/lib/form_stalker.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'form_stalker/version'
2
+ require 'form_stalker/helpers'
2
3
  require 'form_stalker/client'
3
4
  require 'form_stalker/config'
4
5
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: form_stalker
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - StreetBees Dev Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-01 00:00:00.000000000 Z
11
+ date: 2016-08-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: vcr
@@ -134,9 +134,12 @@ files:
134
134
  - lib/form_stalker/config.rb
135
135
  - lib/form_stalker/connection.rb
136
136
  - lib/form_stalker/data/base.rb
137
+ - lib/form_stalker/data/check_logic.rb
137
138
  - lib/form_stalker/data/form.rb
138
139
  - lib/form_stalker/data/form_field.rb
140
+ - lib/form_stalker/data/form_fields_logic.rb
139
141
  - lib/form_stalker/data/parser.rb
142
+ - lib/form_stalker/helpers.rb
140
143
  - lib/form_stalker/request.rb
141
144
  - lib/form_stalker/response.rb
142
145
  - lib/form_stalker/version.rb