ecoportal-api-v2 0.9.1 → 0.9.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 +4 -4
- data/CHANGELOG.md +20 -4
- data/lib/ecoportal/api/common/content/array_model.rb +0 -1
- data/lib/ecoportal/api/common/content/double_model.rb +0 -1
- data/lib/ecoportal/api/v2/page/component/selection_field.rb +17 -65
- data/lib/ecoportal/api/v2/page/component/selection_option.rb +8 -1
- data/lib/ecoportal/api/v2/page/component/selection_options.rb +93 -0
- data/lib/ecoportal/api/v2/page/component.rb +21 -0
- data/lib/ecoportal/api/v2/page/force/binding.rb +4 -0
- data/lib/ecoportal/api/v2/page/force/bindings.rb +0 -1
- data/lib/ecoportal/api/v2/page/forces.rb +1 -0
- data/lib/ecoportal/api/v2/page/section.rb +51 -14
- data/lib/ecoportal/api/v2/page/sections.rb +2 -1
- data/lib/ecoportal/api/v2/page/stages.rb +2 -1
- data/lib/ecoportal/api/v2_version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 172ffff0cc645bf064114c90364ee2a0593ebc6e1d6e1ac4fd5095774c538cc6
|
4
|
+
data.tar.gz: bde0a6b28097ddc8bb971a6f0f1ad622da4d87298651122952bc90cf4686cd10
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9e5f80eb2dfb8623dde76445f5c85e86baa9a14327c3599840e6ef1a3de822cc40b61ba9dad7b6749c40c9cde11af43643571a61003609b9b51571d81c366a2a
|
7
|
+
data.tar.gz: 909755671b618ebe4187ac016ca0c1ea9b75837f70c29639bb0fbdde8ecba39f0855e0c1527de558fce5c4f20754a36bfa03a565bed99704d034f39d630ff074
|
data/CHANGELOG.md
CHANGED
@@ -1,12 +1,31 @@
|
|
1
1
|
# Change Log
|
2
2
|
All notable changes to this project will be documented in this file.
|
3
3
|
|
4
|
-
## [0.9.
|
4
|
+
## [0.9.3] - 2022-09-xx
|
5
5
|
|
6
6
|
### Added
|
7
7
|
### Changed
|
8
8
|
### Fixed
|
9
|
+
- Remove debugging message
|
9
10
|
|
11
|
+
## [0.9.2] - 2022-09-29
|
12
|
+
|
13
|
+
### Added
|
14
|
+
- `Ecoportal::API::V2::Page::Component::SelectionOption#delete!`
|
15
|
+
- `Ecoportal::API::V2::Page::Component#delete!`
|
16
|
+
- `Ecoportal::API::V2::Page::Component#move` to move to another section or side of the same
|
17
|
+
- `Ecoportal::API::V2::Page::Component#unattach!` to detach the component from any section
|
18
|
+
- `Ecoportal::API::V2::Page::Component::SelectionOption#delete!`
|
19
|
+
- `Ecoportal::API::V2::Page::Component::Binding#delete!`
|
20
|
+
- `Ecoportal::API::V2::Page::Section#remove_component!` to simplify the removal of a field from the section
|
21
|
+
|
22
|
+
### Changed
|
23
|
+
- `Ecoportal::API::V2::Page::Component::SelectionField#options`
|
24
|
+
- **added** and moved logics to `Ecoportal::API::V2::Page::Component::SelectionOptions`
|
25
|
+
- `Ecoportal::API::V2::Page::Component::SelectionOption#name` to return `#value` when it's empty
|
26
|
+
|
27
|
+
### Fixed
|
28
|
+
- Remove debugging message
|
10
29
|
|
11
30
|
## [0.9.1] - 2022-09-26
|
12
31
|
|
@@ -16,9 +35,6 @@ All notable changes to this project will be documented in this file.
|
|
16
35
|
### Changed
|
17
36
|
- `Ecoportal::API::V2::Page::Force`, logic around `helpers` (remote forces)
|
18
37
|
- **breaking change**: `script` is not writable anymore. You should use `custom_script` instead.
|
19
|
-
|
20
|
-
### Fixed
|
21
|
-
|
22
38
|
|
23
39
|
## [0.8.33] - 2022-09-23
|
24
40
|
|
@@ -7,8 +7,7 @@ module Ecoportal
|
|
7
7
|
passboolean :multiple, :flat, :other
|
8
8
|
passthrough :other_desc
|
9
9
|
passthrough :data_type
|
10
|
-
|
11
|
-
embeds_many :options, klass: "Ecoportal::API::V2::Page::Component::SelectionOption", order_key: :weight
|
10
|
+
embeds_many :options, enum_class: "Ecoportal::API::V2::Page::Component::SelectionOptions"
|
12
11
|
|
13
12
|
def numeric?
|
14
13
|
self.data_type == "num"
|
@@ -19,12 +18,12 @@ module Ecoportal
|
|
19
18
|
end
|
20
19
|
|
21
20
|
def numeric!(&block)
|
22
|
-
|
21
|
+
options.ordered.each {|opt| opt.numeric!(&block)}
|
23
22
|
self.data_type = "num"
|
24
23
|
end
|
25
24
|
|
26
25
|
def text!(&block)
|
27
|
-
|
26
|
+
options.ordered.each {|opt| opt.text!(&block)}
|
28
27
|
self.data_type = "str"
|
29
28
|
end
|
30
29
|
|
@@ -33,7 +32,7 @@ module Ecoportal
|
|
33
32
|
end
|
34
33
|
|
35
34
|
def select(value_name, by_name: false)
|
36
|
-
opt = find_option(value_name, by_name: by_name)
|
35
|
+
opt = options.find_option(value_name, by_name: by_name)
|
37
36
|
sel = selected
|
38
37
|
return true if !multiple && opt == sel
|
39
38
|
sel.selected = false if !multiple && sel
|
@@ -41,7 +40,7 @@ module Ecoportal
|
|
41
40
|
end
|
42
41
|
|
43
42
|
def deselect(value_name, by_name: false)
|
44
|
-
if opt = find_option(value_name, by_name: by_name)
|
43
|
+
if opt = options.find_option(value_name, by_name: by_name)
|
45
44
|
opt.selected = false
|
46
45
|
end
|
47
46
|
end
|
@@ -50,17 +49,17 @@ module Ecoportal
|
|
50
49
|
case
|
51
50
|
when by_value
|
52
51
|
elems = [selected].flatten.compact
|
53
|
-
|
52
|
+
options.hash(elems) do |option|
|
54
53
|
name ? option.name : option
|
55
54
|
end
|
56
55
|
when by_name
|
57
56
|
elems = [selected].flatten.compact
|
58
|
-
|
57
|
+
options.hash(elems, by_name: true) do |option|
|
59
58
|
value ? option.value : option
|
60
59
|
end
|
61
60
|
else
|
62
61
|
if multiple
|
63
|
-
|
62
|
+
options.ordered.select {|opt| opt.selected}
|
64
63
|
else
|
65
64
|
options.find {|opt| opt.selected}
|
66
65
|
end
|
@@ -91,43 +90,23 @@ module Ecoportal
|
|
91
90
|
[name].flatten.compact
|
92
91
|
end
|
93
92
|
|
94
|
-
|
95
|
-
|
96
|
-
options.
|
97
|
-
option.name = name
|
98
|
-
option.value = value
|
99
|
-
if prev = previous_option(option)
|
100
|
-
option.weight = prev.weight
|
101
|
-
end
|
102
|
-
yield(option) if block_given?
|
103
|
-
fix_option_weights!
|
104
|
-
end
|
93
|
+
# @see Ecoportal::API::V2::Component::SelectionOptions#add
|
94
|
+
def add_option(**kargs, &block)
|
95
|
+
options.add(**kargs, &block)
|
105
96
|
end
|
106
97
|
|
107
98
|
def ordered_options
|
108
|
-
options.
|
109
|
-
[option.weight, index]
|
110
|
-
end
|
99
|
+
options.ordered
|
111
100
|
end
|
112
101
|
|
113
|
-
# @
|
114
|
-
# @return [Hash] of **key** _value_ and **value**:
|
115
|
-
# 1. _option_ if `name` is `false`
|
116
|
-
# 2. _name_ if `name` is `true`
|
102
|
+
# @see Ecoportal::API::V2::Component::SelectionOptions#by_value
|
117
103
|
def options_by_value(name: false)
|
118
|
-
|
119
|
-
name ? option.name : option
|
120
|
-
end
|
104
|
+
options.by_value(name: name)
|
121
105
|
end
|
122
106
|
|
123
|
-
# @
|
124
|
-
# @return [Hash] of **key** _name_ and **value**:
|
125
|
-
# 1. _option_ if `value` is `false`
|
126
|
-
# 2. _value_ if `value` is `true`
|
107
|
+
# @see Ecoportal::API::V2::Component::SelectionOptions#by_name
|
127
108
|
def options_by_name(value: false)
|
128
|
-
|
129
|
-
value ? option.value : option
|
130
|
-
end
|
109
|
+
options.by_name(value: value)
|
131
110
|
end
|
132
111
|
|
133
112
|
def to_s(value: true, delimiter: "\n")
|
@@ -198,34 +177,6 @@ module Ecoportal
|
|
198
177
|
end
|
199
178
|
end
|
200
179
|
end
|
201
|
-
|
202
|
-
def fix_option_weights!
|
203
|
-
ordered_options.each_with_index do |option, index|
|
204
|
-
option.weight = index
|
205
|
-
end
|
206
|
-
end
|
207
|
-
|
208
|
-
def previous_option(value)
|
209
|
-
opts = ordered_options
|
210
|
-
pos = opts.index(value) - 1
|
211
|
-
return if pos < 0
|
212
|
-
opts[pos]
|
213
|
-
end
|
214
|
-
|
215
|
-
def find_option(value_name, by_name: false)
|
216
|
-
if by_name
|
217
|
-
opt = options.find {|opt| same_string?(opt.name, value_name)}
|
218
|
-
else
|
219
|
-
opt = options.find {|opt| opt.value == value_name}
|
220
|
-
end
|
221
|
-
end
|
222
|
-
|
223
|
-
def options_hash(elems = ordered_options, by_name: false)
|
224
|
-
elems.each_with_object({}) do |option, hash|
|
225
|
-
key = by_name ? option.name : option.value
|
226
|
-
hash[key] = block_given?? yield(option) : option
|
227
|
-
end
|
228
|
-
end
|
229
180
|
end
|
230
181
|
end
|
231
182
|
end
|
@@ -233,4 +184,5 @@ module Ecoportal
|
|
233
184
|
end
|
234
185
|
end
|
235
186
|
|
187
|
+
require 'ecoportal/api/v2/page/component/selection_options'
|
236
188
|
require 'ecoportal/api/v2/page/component/selection_option'
|
@@ -4,7 +4,6 @@ module Ecoportal
|
|
4
4
|
class Page
|
5
5
|
class Component
|
6
6
|
class SelectionOption < Common::Content::DoubleModel
|
7
|
-
|
8
7
|
class << self
|
9
8
|
def new_doc
|
10
9
|
{
|
@@ -20,6 +19,14 @@ module Ecoportal
|
|
20
19
|
passthrough :weight
|
21
20
|
passboolean :selected
|
22
21
|
|
22
|
+
def name
|
23
|
+
doc["name"] || "#{value}"
|
24
|
+
end
|
25
|
+
|
26
|
+
def delete!
|
27
|
+
_parent.delete!(self)
|
28
|
+
end
|
29
|
+
|
23
30
|
def numeric!
|
24
31
|
self.value = block_given?? yield(value) : to_i(value)
|
25
32
|
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
module Ecoportal
|
2
|
+
module API
|
3
|
+
class V2
|
4
|
+
class Page
|
5
|
+
class Component
|
6
|
+
class SelectionOptions < Common::Content::CollectionModel
|
7
|
+
class_resolver :option_class, "Ecoportal::API::V2::Page::Component::SelectionOption"
|
8
|
+
|
9
|
+
self.klass = :option_class
|
10
|
+
self.order_key = :weight
|
11
|
+
|
12
|
+
def component
|
13
|
+
self._parent
|
14
|
+
end
|
15
|
+
|
16
|
+
def ooze
|
17
|
+
component.ooze
|
18
|
+
end
|
19
|
+
|
20
|
+
def add(value:, name: nil, pos: NOT_USED, before: NOT_USED, after: NOT_USED)
|
21
|
+
opt_doc = items_class.new_doc
|
22
|
+
upsert!(opt_doc, pos: pos, before: before, after: after) do |option|
|
23
|
+
option.name = name
|
24
|
+
option.value = value
|
25
|
+
if prev = previous_option(option)
|
26
|
+
option.weight = prev.weight
|
27
|
+
end
|
28
|
+
yield(option) if block_given?
|
29
|
+
fix_weights!
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def find_option(value_name, by_name: false)
|
34
|
+
if by_name
|
35
|
+
opt = self.find {|opt| same_string?(opt.name, value_name)}
|
36
|
+
else
|
37
|
+
opt = self.find {|opt| opt.value == value_name}
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def ordered
|
42
|
+
self.sort_by.with_index do |option, index|
|
43
|
+
[option.weight, index]
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# @param name [Boolean] whether or not the values of the `Hash` should be the `names`
|
48
|
+
# @return [Hash] of **key** _value_ and **value**:
|
49
|
+
# 1. _option_ if `name` is `false`
|
50
|
+
# 2. _name_ if `name` is `true`
|
51
|
+
def by_value(name: false)
|
52
|
+
hash do |option|
|
53
|
+
name ? option.name : option
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# @param value [Boolean] whether or not the values of the `Hash` should be the `values`
|
58
|
+
# @return [Hash] of **key** _name_ and **value**:
|
59
|
+
# 1. _option_ if `value` is `false`
|
60
|
+
# 2. _value_ if `value` is `true`
|
61
|
+
def by_name(value: false)
|
62
|
+
hash(by_name: true) do |option|
|
63
|
+
value ? option.value : option
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def hash(elems = ordered, by_name: false)
|
68
|
+
elems.each_with_object({}) do |option, hash|
|
69
|
+
key = by_name ? option.name : option.value
|
70
|
+
hash[key] = block_given?? yield(option) : option
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
private
|
75
|
+
|
76
|
+
def fix_weights!
|
77
|
+
ordered.each_with_index do |option, index|
|
78
|
+
option.weight = index
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def previous_option(value)
|
83
|
+
opts = ordered
|
84
|
+
pos = opts.index(value) - 1
|
85
|
+
return if pos < 0
|
86
|
+
opts[pos]
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -118,6 +118,16 @@ module Ecoportal
|
|
118
118
|
!!section
|
119
119
|
end
|
120
120
|
|
121
|
+
# Unattaches the field from any section
|
122
|
+
# @note please make sure to reattach or delete! the field before save
|
123
|
+
def unattach!
|
124
|
+
ooze.sections.select do |sec|
|
125
|
+
sec.component?(id)
|
126
|
+
end.each do |sec|
|
127
|
+
sec.remove_component!(self)
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
121
131
|
# @return [Boolean] whether or not the component has been attached to more than one section.
|
122
132
|
def multi_section?
|
123
133
|
secs = ooze.sections.select {|sec| sec.component?(id)}
|
@@ -144,6 +154,17 @@ module Ecoportal
|
|
144
154
|
forces.count > 0
|
145
155
|
end
|
146
156
|
|
157
|
+
def delete!
|
158
|
+
bindings.each {|b| b.delete!}
|
159
|
+
self.unattach!
|
160
|
+
self._parent.delete!(self)
|
161
|
+
end
|
162
|
+
|
163
|
+
def move(section:, before: nil, after: nil, side: nil)
|
164
|
+
self.unattach!
|
165
|
+
section.add_component(self, before: before, after: after, side: side)
|
166
|
+
end
|
167
|
+
|
147
168
|
def indexable_label(any_length: false)
|
148
169
|
self.class.indexable_label(label, any_length: any_length)
|
149
170
|
end
|
@@ -83,6 +83,27 @@ module Ecoportal
|
|
83
83
|
left_component_ids.to_a | right_component_ids.to_a
|
84
84
|
end
|
85
85
|
|
86
|
+
# @note when removing a component, please make sure to either
|
87
|
+
# add it to another section or to delete! it before save
|
88
|
+
def remove_component!(*comps_or_ids)
|
89
|
+
comps_or_ids.each do |com_or_id|
|
90
|
+
case com_or_id
|
91
|
+
when Ecoportal::API::V2::Page::Component
|
92
|
+
remove_component!(com_or_id.id)
|
93
|
+
when String
|
94
|
+
if split?
|
95
|
+
left_component_ids.delete!(com_or_id)
|
96
|
+
right_component_ids.delete!(com_or_id)
|
97
|
+
else
|
98
|
+
component_ids.delete!(com_or_id)
|
99
|
+
end
|
100
|
+
else
|
101
|
+
msg = "Missuse: com_or_id should be a Component or a String. Given: #{com_or_id.class}"
|
102
|
+
raise ArgumentError.new(msg)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
86
107
|
# @raise [ArgumentError] if `com_or_id` is not of any of the allowed types
|
87
108
|
# @param com_or_id [Ecoportal::API::V2::Page::Component, String] Component or `id` thereof
|
88
109
|
# @return [Boolean] whether or not a component/field belongs to this section.
|
@@ -98,14 +119,32 @@ module Ecoportal
|
|
98
119
|
end
|
99
120
|
end
|
100
121
|
|
122
|
+
# @return[Symbol, Nil] might be `:right`, maybe `:left`, or `nil`
|
123
|
+
def component_side(com_or_id)
|
124
|
+
return nil unless split?
|
125
|
+
case com_or_id
|
126
|
+
when Ecoportal::API::V2::Page::Component
|
127
|
+
component_side(com_or_id.id)
|
128
|
+
when String
|
129
|
+
if left_component_ids.include?(com_or_id)
|
130
|
+
:left
|
131
|
+
elsif right_component_ids.include?(com_or_id)
|
132
|
+
:right
|
133
|
+
end
|
134
|
+
else
|
135
|
+
msg = "Missuse: com_or_id should be a Component or a String. Given: #{com_or_id.class}"
|
136
|
+
raise ArgumentError.new(msg)
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
101
140
|
# It looks up the components that belong to this section.
|
102
141
|
# @return [Array<Ecoportal::API::V2::Page::Component>]
|
103
142
|
def components(side: nil)
|
104
143
|
case side
|
105
144
|
when :right
|
106
|
-
|
145
|
+
right_components
|
107
146
|
when :left
|
108
|
-
|
147
|
+
left_components
|
109
148
|
when NilClass
|
110
149
|
components_by_id(*all_component_ids)
|
111
150
|
else
|
@@ -116,7 +155,7 @@ module Ecoportal
|
|
116
155
|
# It looks up the components that belong to the `left` side of this section.
|
117
156
|
# @raise [Exception] if this is not a `split` section
|
118
157
|
# @return [Array<Ecoportal::API::V2::Page::Component>]
|
119
|
-
def
|
158
|
+
def left_components
|
120
159
|
raise "You are trying to retrieve side components in a Split Section" unless split?
|
121
160
|
components_by_id(*left_component_ids)
|
122
161
|
end
|
@@ -124,7 +163,7 @@ module Ecoportal
|
|
124
163
|
# It looks up the components that belong to the `right` side of this section.
|
125
164
|
# @raise [Exception] if this is not a `split` section
|
126
165
|
# @return [Array<Ecoportal::API::V2::Page::Component>]
|
127
|
-
def
|
166
|
+
def right_components
|
128
167
|
raise "You are trying to retrieve side components in a Split Section" unless split?
|
129
168
|
components_by_id(*right_component_ids)
|
130
169
|
end
|
@@ -159,9 +198,13 @@ module Ecoportal
|
|
159
198
|
end
|
160
199
|
|
161
200
|
if before
|
162
|
-
before_fld = to_component(before, side: side)
|
201
|
+
if before_fld = to_component(before, side: side)
|
202
|
+
side ||= component_side(before_fld)
|
203
|
+
end
|
163
204
|
elsif after
|
164
|
-
after_fld = to_component(after, side: side)
|
205
|
+
if after_fld = to_component(after, side: side)
|
206
|
+
side ||= component_side(after_fld)
|
207
|
+
end
|
165
208
|
end
|
166
209
|
|
167
210
|
if split?
|
@@ -176,20 +219,14 @@ module Ecoportal
|
|
176
219
|
private
|
177
220
|
|
178
221
|
def components_by_id(*ids)
|
179
|
-
|
222
|
+
ooze.components.values_at(*ids).select.with_index do |fld, i|
|
180
223
|
puts "Warning: field id #{ids[i]} points to missing field" if !fld
|
181
224
|
fld && (!block_given? || yield(fld))
|
182
225
|
end
|
183
226
|
end
|
184
227
|
|
185
228
|
def to_component(value, side: nil)
|
186
|
-
|
187
|
-
fields = components(side: side || :left)
|
188
|
-
else
|
189
|
-
fields = components
|
190
|
-
end
|
191
|
-
|
192
|
-
fields.find do |fld|
|
229
|
+
components(side: side).find do |fld|
|
193
230
|
found = nil
|
194
231
|
found ||= fld.id == value.id if value.is_a?(Ecoportal::API::V2::Page::Component)
|
195
232
|
found ||= fld.id == value
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ecoportal-api-v2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Oscar Segura
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-09-
|
11
|
+
date: 2022-09-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -216,6 +216,7 @@ files:
|
|
216
216
|
- lib/ecoportal/api/v2/page/component/rich_text_field.rb
|
217
217
|
- lib/ecoportal/api/v2/page/component/selection_field.rb
|
218
218
|
- lib/ecoportal/api/v2/page/component/selection_option.rb
|
219
|
+
- lib/ecoportal/api/v2/page/component/selection_options.rb
|
219
220
|
- lib/ecoportal/api/v2/page/component/signature_field.rb
|
220
221
|
- lib/ecoportal/api/v2/page/component/tag_field.rb
|
221
222
|
- lib/ecoportal/api/v2/page/components.rb
|