script_core 0.1.0 → 0.1.1
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/.rubocop.yml +131 -36
- data/Gemfile +2 -2
- data/lib/script_core/executable.rb +1 -1
- data/lib/script_core/message_processor.rb +48 -48
- data/lib/script_core/version.rb +1 -1
- data/lib/tasks/script_core.rake +47 -31
- data/spec/dummy/app/controllers/application_controller.rb +11 -11
- data/spec/dummy/app/controllers/fields/application_controller.rb +14 -14
- data/spec/dummy/app/controllers/fields/choices_controller.rb +8 -10
- data/spec/dummy/app/controllers/fields/options_controller.rb +6 -6
- data/spec/dummy/app/controllers/fields/validations_controller.rb +6 -6
- data/spec/dummy/app/controllers/forms/application_controller.rb +4 -4
- data/spec/dummy/app/controllers/forms/fields_controller.rb +8 -8
- data/spec/dummy/app/controllers/forms/formulas/application_controller.rb +7 -7
- data/spec/dummy/app/controllers/forms/formulas/playgrounds_controller.rb +6 -6
- data/spec/dummy/app/controllers/forms/formulas_controller.rb +8 -8
- data/spec/dummy/app/controllers/forms_controller.rb +8 -8
- data/spec/dummy/app/controllers/nested_forms/application_controller.rb +4 -4
- data/spec/dummy/app/controllers/nested_forms/fields_controller.rb +8 -8
- data/spec/dummy/app/controllers/playgrounds_controller.rb +3 -3
- data/spec/dummy/app/controllers/time_zones_controller.rb +1 -3
- data/spec/dummy/app/lib/script_engine.rb +1 -1
- data/spec/dummy/app/models/concerns/fields/validations/exclusion.rb +1 -1
- data/spec/dummy/app/models/concerns/fields/validations/format.rb +1 -1
- data/spec/dummy/app/models/concerns/fields/validations/inclusion.rb +1 -1
- data/spec/dummy/app/models/concerns/fields/validations/length.rb +1 -1
- data/spec/dummy/app/models/field.rb +25 -25
- data/spec/dummy/app/models/field_options.rb +55 -61
- data/spec/dummy/app/models/fields/date_field.rb +5 -5
- data/spec/dummy/app/models/fields/datetime_field.rb +5 -5
- data/spec/dummy/app/models/fields/integer_field.rb +4 -4
- data/spec/dummy/app/models/fields/multiple_nested_form_field.rb +2 -4
- data/spec/dummy/app/models/fields/multiple_select_field.rb +6 -8
- data/spec/dummy/app/models/fields/nested_form_field.rb +2 -4
- data/spec/dummy/app/models/fields/options/date_field.rb +5 -5
- data/spec/dummy/app/models/fields/options/datetime_field.rb +5 -5
- data/spec/dummy/app/models/fields/select_field.rb +5 -5
- data/spec/dummy/app/{decorators → overrides}/.keep +0 -0
- data/spec/dummy/app/presenters/concerns/fields/presenter_for_number_field.rb +1 -1
- data/spec/dummy/app/views/_form_core/fields/_multiple_nested_form_field.html.erb +2 -2
- data/spec/dummy/app/views/_form_core/fields/_multiple_select_field.html.erb +10 -2
- data/spec/dummy/app/views/_form_core/fields/_nested_form.html.erb +3 -1
- data/spec/dummy/app/views/_form_core/fields/_nested_form_field.html.erb +2 -2
- data/spec/dummy/app/views/_form_core/fields/_select_field.html.erb +9 -2
- data/spec/dummy/config/application.rb +8 -1
- data/spec/dummy/db/migrate/20180916202025_create_forms.form_core.rb +1 -1
- data/spec/dummy/lib/monkey_patches/big_decimal.rb +4 -4
- data/spec/dummy/lib/monkey_patches/date.rb +4 -4
- data/spec/dummy/lib/monkey_patches/time.rb +4 -4
- data/spec/dummy/test/application_system_test_case.rb +7 -0
- data/spec/script_core/message_processor_spec.rb +4 -4
- data/spec/script_core/service_process_spec.rb +4 -4
- data/spec/script_core/stat_spec.rb +2 -2
- data/spec/script_core_spec.rb +10 -10
- metadata +4 -3
@@ -7,16 +7,16 @@ class ApplicationController < ActionController::Base
|
|
7
7
|
|
8
8
|
private
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
def set_time_zone(&block)
|
11
|
+
Time.use_zone(current_time_zone, &block)
|
12
|
+
end
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
14
|
+
def current_time_zone
|
15
|
+
@current_time_zone ||=
|
16
|
+
if session[:current_time_zone].present?
|
17
|
+
ActiveSupport::TimeZone[session[:current_time_zone]] || ActiveSupport::TimeZone["UTC"]
|
18
|
+
else
|
19
|
+
ActiveSupport::TimeZone["UTC"]
|
20
|
+
end
|
21
|
+
end
|
22
22
|
end
|
@@ -5,21 +5,21 @@ class Fields::ApplicationController < ApplicationController
|
|
5
5
|
|
6
6
|
protected
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
8
|
+
# Use callbacks to share common setup or constraints between actions.
|
9
|
+
def set_field
|
10
|
+
@field = Field.find(params[:field_id])
|
11
|
+
end
|
12
12
|
|
13
|
-
|
14
|
-
|
13
|
+
def fields_url
|
14
|
+
form = @field.form
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
16
|
+
case form
|
17
|
+
when Form
|
18
|
+
form_fields_url(form)
|
19
|
+
when NestedForm
|
20
|
+
nested_form_fields_url(form)
|
21
|
+
else
|
22
|
+
raise "Unknown form: #{form.class}"
|
23
|
+
end
|
23
24
|
end
|
24
|
-
end
|
25
25
|
end
|
@@ -34,17 +34,15 @@ def destroy
|
|
34
34
|
|
35
35
|
private
|
36
36
|
|
37
|
-
|
38
|
-
|
39
|
-
redirect_to fields_url
|
37
|
+
def require_attach_choices!
|
38
|
+
redirect_to fields_url unless @field.attached_choices?
|
40
39
|
end
|
41
|
-
end
|
42
40
|
|
43
|
-
|
44
|
-
|
45
|
-
|
41
|
+
def choice_params
|
42
|
+
params.require(:choice).permit(:label)
|
43
|
+
end
|
46
44
|
|
47
|
-
|
48
|
-
|
49
|
-
|
45
|
+
def set_choice
|
46
|
+
@choice = @field.choices.find(params[:id])
|
47
|
+
end
|
50
48
|
end
|
@@ -16,11 +16,11 @@ def update
|
|
16
16
|
|
17
17
|
private
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
def set_options
|
20
|
+
@options = @field.options
|
21
|
+
end
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
23
|
+
def options_params
|
24
|
+
params.fetch(:options, {}).permit!
|
25
|
+
end
|
26
26
|
end
|
@@ -16,11 +16,11 @@ def update
|
|
16
16
|
|
17
17
|
private
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
def set_validations
|
20
|
+
@validations = @field.validations
|
21
|
+
end
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
23
|
+
def validations_params
|
24
|
+
params.fetch(:validations, {}).permit!
|
25
|
+
end
|
26
26
|
end
|
@@ -7,8 +7,8 @@ class Forms::ApplicationController < ApplicationController
|
|
7
7
|
|
8
8
|
protected
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
# Use callbacks to share common setup or constraints between actions.
|
11
|
+
def set_form
|
12
|
+
@form = Form.find(params[:form_id])
|
13
|
+
end
|
14
14
|
end
|
@@ -44,13 +44,13 @@ def destroy
|
|
44
44
|
|
45
45
|
private
|
46
46
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
47
|
+
# Use callbacks to share common setup or constraints between actions.
|
48
|
+
def set_field
|
49
|
+
@field = @form.fields.find(params[:id])
|
50
|
+
end
|
51
51
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
52
|
+
# Only allow a trusted parameter "white list" through.
|
53
|
+
def field_params
|
54
|
+
params.fetch(:field, {}).permit(:name, :label, :hint, :accessibility, :type)
|
55
|
+
end
|
56
56
|
end
|
@@ -7,13 +7,13 @@ class Formulas::ApplicationController < ApplicationController
|
|
7
7
|
|
8
8
|
protected
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
# Use callbacks to share common setup or constraints between actions.
|
11
|
+
def set_form
|
12
|
+
@form = Form.find(params[:form_id])
|
13
|
+
end
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
def set_formula
|
16
|
+
@formula = @form.formulas.find(params[:formula_id])
|
17
|
+
end
|
18
18
|
end
|
19
19
|
end
|
@@ -18,12 +18,12 @@ def create
|
|
18
18
|
|
19
19
|
private
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
|
21
|
+
def set_virtual_model
|
22
|
+
@virtual_model = @form.to_virtual_model
|
23
|
+
end
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
|
25
|
+
def form_record_params
|
26
|
+
params.fetch(:form_record, {}).permit!
|
27
|
+
end
|
28
28
|
end
|
29
29
|
end
|
@@ -44,13 +44,13 @@ def destroy
|
|
44
44
|
|
45
45
|
private
|
46
46
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
47
|
+
# Use callbacks to share common setup or constraints between actions.
|
48
|
+
def set_formula
|
49
|
+
@formula = @form.formulas.find(params[:id])
|
50
|
+
end
|
51
51
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
52
|
+
# Only allow a trusted parameter "white list" through.
|
53
|
+
def formula_params
|
54
|
+
params.fetch(:formula, {}).permit(:name, :body)
|
55
|
+
end
|
56
56
|
end
|
@@ -46,13 +46,13 @@ def destroy
|
|
46
46
|
|
47
47
|
private
|
48
48
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
49
|
+
# Use callbacks to share common setup or constraints between actions.
|
50
|
+
def set_form
|
51
|
+
@form = Form.find(params[:id])
|
52
|
+
end
|
53
53
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
54
|
+
# Only allow a trusted parameter "white list" through.
|
55
|
+
def form_params
|
56
|
+
params.fetch(:form, {}).permit(:title, :description)
|
57
|
+
end
|
58
58
|
end
|
@@ -5,8 +5,8 @@ class NestedForms::ApplicationController < ApplicationController
|
|
5
5
|
|
6
6
|
protected
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
8
|
+
# Use callbacks to share common setup or constraints between actions.
|
9
|
+
def set_nested_form
|
10
|
+
@nested_form = NestedForm.find(params[:nested_form_id])
|
11
|
+
end
|
12
12
|
end
|
@@ -38,13 +38,13 @@ def destroy
|
|
38
38
|
|
39
39
|
private
|
40
40
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
41
|
+
# Use callbacks to share common setup or constraints between actions.
|
42
|
+
def set_field
|
43
|
+
@field = @nested_form.fields.find(params[:id])
|
44
|
+
end
|
45
45
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
46
|
+
# Only allow a trusted parameter "white list" through.
|
47
|
+
def field_params
|
48
|
+
params.fetch(:field, {}).permit(:name, :label, :hint, :accessibility, :type)
|
49
|
+
end
|
50
50
|
end
|
@@ -3,9 +3,7 @@
|
|
3
3
|
class TimeZonesController < ApplicationController
|
4
4
|
def update
|
5
5
|
@time_zone = ActiveSupport::TimeZone[params[:time_zone]]
|
6
|
-
unless @time_zone
|
7
|
-
return render :not_found
|
8
|
-
end
|
6
|
+
return render :not_found unless @time_zone
|
9
7
|
|
10
8
|
session[:current_time_zone] = params[:time_zone]
|
11
9
|
|
@@ -21,7 +21,7 @@ def run(string, payload: nil, instruction_quota_start: nil)
|
|
21
21
|
payload: payload
|
22
22
|
},
|
23
23
|
instruction_quota_start: instruction_quota_start,
|
24
|
-
environment_variables: {"TZ" => Time.zone.name}
|
24
|
+
environment_variables: { "TZ" => Time.zone.name }
|
25
25
|
end
|
26
26
|
|
27
27
|
def run_inline(string, payload: nil, instruction_quota_start: nil)
|
@@ -25,7 +25,7 @@ class ExclusionOptions < FieldOptions
|
|
25
25
|
def interpret_to(model, field_name, _accessibility, _options = {})
|
26
26
|
return if self.in.empty?
|
27
27
|
|
28
|
-
options = {in: self.in}
|
28
|
+
options = { in: self.in }
|
29
29
|
options[:message] = message if message.present?
|
30
30
|
|
31
31
|
model.validates field_name, exclusion: options, allow_blank: true
|
@@ -33,7 +33,7 @@ def interpret_to(model, field_name, _accessibility, _options = {})
|
|
33
33
|
|
34
34
|
with = Regexp.new(self.with)
|
35
35
|
|
36
|
-
options = {with: with}
|
36
|
+
options = { with: with }
|
37
37
|
options[:message] = message if message.present?
|
38
38
|
|
39
39
|
model.validates field_name, format: options, allow_blank: true
|
@@ -25,7 +25,7 @@ class InclusionOptions < FieldOptions
|
|
25
25
|
def interpret_to(model, field_name, _accessibility, _options = {})
|
26
26
|
return if self.in.empty?
|
27
27
|
|
28
|
-
options = {in: self.in}
|
28
|
+
options = { in: self.in }
|
29
29
|
options[:message] = message if message.present?
|
30
30
|
|
31
31
|
model.validates field_name, inclusion: options, allow_blank: true
|
@@ -43,7 +43,7 @@ def interpret_to(model, field_name, _accessibility, _options = {})
|
|
43
43
|
return if minimum.zero? && maximum.zero? && is.zero?
|
44
44
|
|
45
45
|
if is.positive?
|
46
|
-
model.validates field_name, length: {is: is}, allow_blank: true
|
46
|
+
model.validates field_name, length: { is: is }, allow_blank: true
|
47
47
|
return
|
48
48
|
end
|
49
49
|
|
@@ -37,31 +37,31 @@ def type_key
|
|
37
37
|
|
38
38
|
protected
|
39
39
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
40
|
+
def interpret_validations_to(model, accessibility, overrides = {})
|
41
|
+
return unless accessibility == :read_and_write
|
42
|
+
|
43
|
+
validations_overrides = overrides.fetch(:validations) { {} }
|
44
|
+
validations =
|
45
|
+
if validations_overrides.any?
|
46
|
+
self.validations.dup.update(validations_overrides)
|
47
|
+
else
|
48
|
+
self.validations
|
49
|
+
end
|
50
|
+
|
51
|
+
validations.interpret_to(model, name, accessibility)
|
52
|
+
end
|
53
|
+
|
54
|
+
def interpret_extra_to(model, accessibility, overrides = {})
|
55
|
+
options_overrides = overrides.fetch(:options) { {} }
|
56
|
+
options =
|
57
|
+
if options_overrides.any?
|
58
|
+
self.options.dup.update(options_overrides)
|
59
|
+
else
|
60
|
+
self.options
|
61
|
+
end
|
62
|
+
|
63
|
+
options.interpret_to(model, name, accessibility)
|
64
|
+
end
|
65
65
|
end
|
66
66
|
|
67
67
|
require_dependency "fields"
|
@@ -17,82 +17,76 @@ def serializable_hash(options = {})
|
|
17
17
|
|
18
18
|
private
|
19
19
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
20
|
+
def _assign_attribute(k, v)
|
21
|
+
if self.class._embeds_reflections.key?(k)
|
22
|
+
public_send("#{k}_attributes=", v)
|
23
|
+
elsif respond_to?("#{k}=")
|
24
|
+
public_send("#{k}=", v)
|
25
|
+
end
|
25
26
|
end
|
26
|
-
end
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
28
|
+
class << self
|
29
|
+
def _embeds_reflections
|
30
|
+
_reflections.select { |_, v| v.is_a? ActiveEntity::Reflection::EmbeddedAssociationReflection }
|
31
|
+
end
|
32
32
|
|
33
|
-
|
34
|
-
|
35
|
-
|
33
|
+
def model_version
|
34
|
+
1
|
35
|
+
end
|
36
36
|
|
37
|
-
|
38
|
-
|
39
|
-
|
37
|
+
def root_key_for_serialization
|
38
|
+
"#{self}.#{model_version}"
|
39
|
+
end
|
40
40
|
|
41
|
-
|
42
|
-
|
41
|
+
def dump(obj)
|
42
|
+
return YAML.dump({}) unless obj
|
43
43
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
44
|
+
serializable_hash =
|
45
|
+
if obj.respond_to?(:serializable_hash)
|
46
|
+
obj.serializable_hash
|
47
|
+
elsif obj.respond_to?(:to_hash)
|
48
|
+
obj.to_hash
|
49
|
+
else
|
50
|
+
raise ArgumentError, "`obj` required can be cast to `Hash` -- #{obj.class}"
|
51
|
+
end.stringify_keys
|
52
52
|
|
53
|
-
|
54
|
-
|
55
|
-
data.reverse_merge! obj.raw_attributes
|
56
|
-
end
|
53
|
+
data = { root_key_for_serialization => serializable_hash }
|
54
|
+
data.reverse_merge! obj.raw_attributes if keeping_old_serialization
|
57
55
|
|
58
|
-
|
59
|
-
|
56
|
+
YAML.dump(data)
|
57
|
+
end
|
60
58
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
59
|
+
def load(yaml_or_hash)
|
60
|
+
case yaml_or_hash
|
61
|
+
when Hash
|
62
|
+
load_from_hash(yaml_or_hash)
|
63
|
+
when String
|
64
|
+
load_from_yaml(yaml_or_hash)
|
65
|
+
else
|
66
|
+
new
|
67
|
+
end
|
69
68
|
end
|
70
|
-
end
|
71
69
|
|
72
|
-
|
73
|
-
|
74
|
-
|
70
|
+
WHITELIST_CLASSES = [BigDecimal, Date, Time, Symbol].freeze
|
71
|
+
def load_from_yaml(yaml)
|
72
|
+
return new if yaml.blank?
|
75
73
|
|
76
|
-
|
77
|
-
return new
|
78
|
-
end
|
74
|
+
return new unless yaml.is_a?(String) && /^---/.match?(yaml)
|
79
75
|
|
80
|
-
|
81
|
-
|
82
|
-
return new
|
83
|
-
end
|
76
|
+
decoded = YAML.safe_load(yaml, WHITELIST_CLASSES)
|
77
|
+
return new unless decoded.is_a? Hash
|
84
78
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
79
|
+
record = new decoded[root_key_for_serialization]
|
80
|
+
record.raw_attributes = decoded.freeze
|
81
|
+
record
|
82
|
+
end
|
89
83
|
|
90
|
-
|
91
|
-
|
84
|
+
def load_from_hash(hash)
|
85
|
+
return new if hash.blank?
|
92
86
|
|
93
|
-
|
94
|
-
|
95
|
-
|
87
|
+
record = new hash[root_key_for_serialization]
|
88
|
+
record.raw_attributes = hash.freeze
|
89
|
+
record
|
90
|
+
end
|
96
91
|
end
|
97
|
-
end
|
98
92
|
end
|