puppet 4.7.1-universal-darwin → 4.8.0-universal-darwin
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- data/Gemfile +0 -3
- data/MAINTAINERS +76 -0
- data/README.md +0 -6
- data/Rakefile +2 -2
- data/lib/puppet/agent.rb +3 -3
- data/lib/puppet/application/apply.rb +1 -1
- data/lib/puppet/configurer.rb +2 -2
- data/lib/puppet/data_providers.rb +1 -0
- data/lib/puppet/data_providers/data_adapter.rb +1 -0
- data/lib/puppet/data_providers/data_function_support.rb +1 -0
- data/lib/puppet/data_providers/function_env_data_provider.rb +1 -0
- data/lib/puppet/data_providers/function_module_data_provider.rb +1 -0
- data/lib/puppet/data_providers/hiera_config.rb +1 -0
- data/lib/puppet/data_providers/hiera_env_data_provider.rb +1 -0
- data/lib/puppet/data_providers/hiera_interpolate.rb +1 -0
- data/lib/puppet/data_providers/hiera_module_data_provider.rb +1 -0
- data/lib/puppet/data_providers/hiera_support.rb +1 -2
- data/lib/puppet/data_providers/json_data_provider_factory.rb +2 -0
- data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -0
- data/lib/puppet/defaults.rb +20 -1
- data/lib/puppet/environments.rb +5 -2
- data/lib/puppet/face/catalog.rb +1 -1
- data/lib/puppet/face/epp.rb +57 -11
- data/lib/puppet/face/module/install.rb +6 -6
- data/lib/puppet/functions.rb +23 -24
- data/lib/puppet/functions/alert.rb +14 -0
- data/lib/puppet/functions/binary_file.rb +25 -0
- data/lib/puppet/functions/break.rb +22 -0
- data/lib/puppet/functions/contain.rb +33 -0
- data/lib/puppet/functions/crit.rb +14 -0
- data/lib/puppet/functions/debug.rb +14 -0
- data/lib/puppet/functions/emerg.rb +14 -0
- data/lib/puppet/functions/epp.rb +1 -1
- data/lib/puppet/functions/err.rb +14 -0
- data/lib/puppet/functions/find_file.rb +31 -0
- data/lib/puppet/functions/include.rb +21 -0
- data/lib/puppet/functions/info.rb +14 -0
- data/lib/puppet/functions/new.rb +1 -1
- data/lib/puppet/functions/next.rb +23 -0
- data/lib/puppet/functions/notice.rb +14 -0
- data/lib/puppet/functions/regsubst.rb +12 -16
- data/lib/puppet/functions/require.rb +37 -0
- data/lib/puppet/functions/return.rb +22 -0
- data/lib/puppet/functions/strftime.rb +35 -0
- data/lib/puppet/functions/warning.rb +14 -0
- data/lib/puppet/generate/models/type/type.rb +4 -0
- data/lib/puppet/generate/templates/type/pcore.erb +2 -1
- data/lib/puppet/indirector/face.rb +6 -1
- data/lib/puppet/network/http/error.rb +2 -2
- data/lib/puppet/network/http/handler.rb +2 -2
- data/lib/puppet/node/environment.rb +11 -0
- data/lib/puppet/parser/ast.rb +5 -0
- data/lib/puppet/parser/ast/pops_bridge.rb +17 -4
- data/lib/puppet/parser/compiler.rb +29 -1
- data/lib/puppet/parser/functions.rb +6 -0
- data/lib/puppet/parser/functions/assert_type.rb +1 -1
- data/lib/puppet/parser/functions/binary_file.rb +24 -0
- data/lib/puppet/parser/functions/break.rb +39 -0
- data/lib/puppet/parser/functions/contain.rb +7 -15
- data/lib/puppet/parser/functions/defined.rb +2 -2
- data/lib/puppet/parser/functions/dig.rb +1 -1
- data/lib/puppet/parser/functions/each.rb +1 -1
- data/lib/puppet/parser/functions/epp.rb +2 -2
- data/lib/puppet/parser/functions/filter.rb +1 -1
- data/lib/puppet/parser/functions/find_file.rb +28 -0
- data/lib/puppet/parser/functions/hiera.rb +4 -4
- data/lib/puppet/parser/functions/hiera_array.rb +1 -1
- data/lib/puppet/parser/functions/hiera_hash.rb +1 -1
- data/lib/puppet/parser/functions/hiera_include.rb +1 -1
- data/lib/puppet/parser/functions/include.rb +4 -8
- data/lib/puppet/parser/functions/inline_epp.rb +1 -1
- data/lib/puppet/parser/functions/lest.rb +1 -1
- data/lib/puppet/parser/functions/lookup.rb +4 -2
- data/lib/puppet/parser/functions/map.rb +1 -1
- data/lib/puppet/parser/functions/match.rb +1 -1
- data/lib/puppet/parser/functions/new.rb +414 -18
- data/lib/puppet/parser/functions/next.rb +38 -0
- data/lib/puppet/parser/functions/reduce.rb +1 -1
- data/lib/puppet/parser/functions/regsubst.rb +4 -2
- data/lib/puppet/parser/functions/require.rb +4 -27
- data/lib/puppet/parser/functions/return.rb +71 -0
- data/lib/puppet/parser/functions/reverse_each.rb +1 -1
- data/lib/puppet/parser/functions/scanf.rb +13 -8
- data/lib/puppet/parser/functions/slice.rb +1 -1
- data/lib/puppet/parser/functions/split.rb +1 -1
- data/lib/puppet/parser/functions/step.rb +1 -1
- data/lib/puppet/parser/functions/strftime.rb +185 -0
- data/lib/puppet/parser/functions/then.rb +1 -1
- data/lib/puppet/parser/functions/type.rb +1 -1
- data/lib/puppet/parser/functions/with.rb +3 -3
- data/lib/puppet/parser/resource.rb +8 -5
- data/lib/puppet/parser/scope.rb +1 -1
- data/lib/puppet/plugins/configuration.rb +8 -0
- data/lib/puppet/plugins/data_providers.rb +1 -0
- data/lib/puppet/plugins/data_providers/data_provider.rb +7 -28
- data/lib/puppet/plugins/data_providers/registry.rb +1 -0
- data/lib/puppet/pops.rb +4 -0
- data/lib/puppet/pops/evaluator/access_operator.rb +36 -5
- data/lib/puppet/pops/evaluator/closure.rb +81 -12
- data/lib/puppet/pops/evaluator/compare_operator.rb +24 -1
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +29 -5
- data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +1 -1
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +53 -62
- data/lib/puppet/pops/evaluator/runtime3_support.rb +15 -6
- data/lib/puppet/pops/functions/dispatch.rb +9 -2
- data/lib/puppet/pops/functions/dispatcher.rb +3 -1
- data/lib/puppet/pops/functions/function.rb +19 -2
- data/lib/puppet/pops/issues.rb +9 -0
- data/lib/puppet/pops/label_provider.rb +2 -2
- data/lib/puppet/pops/loader/loader.rb +17 -0
- data/lib/puppet/pops/loader/static_loader.rb +0 -41
- data/lib/puppet/pops/lookup.rb +12 -0
- data/lib/puppet/pops/lookup/context.rb +86 -0
- data/lib/puppet/pops/lookup/explainer.rb +46 -6
- data/lib/puppet/pops/lookup/invocation.rb +19 -0
- data/lib/puppet/pops/lookup/sub_lookup.rb +1 -1
- data/lib/puppet/pops/model/factory.rb +20 -8
- data/lib/puppet/pops/model/model_label_provider.rb +3 -0
- data/lib/puppet/pops/model/model_meta.rb +2 -0
- data/lib/puppet/pops/model/model_tree_dumper.rb +14 -0
- data/lib/puppet/pops/parser/egrammar.ra +11 -6
- data/lib/puppet/pops/parser/eparser.rb +1112 -1086
- data/lib/puppet/pops/parser/heredoc_support.rb +1 -2
- data/lib/puppet/pops/pcore.rb +1 -0
- data/lib/puppet/pops/puppet_stack.rb +3 -3
- data/lib/puppet/pops/resource/param.rb +5 -1
- data/lib/puppet/pops/resource/resource_type_impl.rb +8 -4
- data/lib/puppet/pops/resource/resource_type_set.pcore +1 -0
- data/lib/puppet/pops/serialization/abstract_reader.rb +19 -2
- data/lib/puppet/pops/serialization/abstract_writer.rb +16 -3
- data/lib/puppet/pops/serialization/deserializer.rb +5 -1
- data/lib/puppet/pops/serialization/extension.rb +2 -0
- data/lib/puppet/pops/serialization/json.rb +76 -26
- data/lib/puppet/pops/serialization/serializer.rb +5 -1
- data/lib/puppet/pops/serialization/time_factory.rb +2 -1
- data/lib/puppet/pops/time/timespan.rb +718 -0
- data/lib/puppet/pops/time/timestamp.rb +148 -0
- data/lib/puppet/pops/types/p_binary_type.rb +220 -0
- data/lib/puppet/pops/types/p_object_type.rb +12 -6
- data/lib/puppet/pops/types/p_sensitive_type.rb +5 -1
- data/lib/puppet/pops/types/p_timespan_type.rb +141 -0
- data/lib/puppet/pops/types/p_timestamp_type.rb +69 -0
- data/lib/puppet/pops/types/string_converter.rb +62 -0
- data/lib/puppet/pops/types/type_asserter.rb +1 -1
- data/lib/puppet/pops/types/type_calculator.rb +17 -3
- data/lib/puppet/pops/types/type_factory.rb +35 -1
- data/lib/puppet/pops/types/type_formatter.rb +64 -11
- data/lib/puppet/pops/types/type_mismatch_describer.rb +110 -61
- data/lib/puppet/pops/types/type_parser.rb +18 -4
- data/lib/puppet/pops/types/types.rb +98 -63
- data/lib/puppet/pops/validation.rb +9 -1
- data/lib/puppet/pops/validation/checker4_0.rb +7 -0
- data/lib/puppet/property.rb +1 -1
- data/lib/puppet/provider.rb +3 -6
- data/lib/puppet/provider/mcx/mcxcontent.rb +1 -1
- data/lib/puppet/provider/mount/parsed.rb +18 -4
- data/lib/puppet/provider/nameservice/directoryservice.rb +15 -7
- data/lib/puppet/provider/package/gem.rb +6 -1
- data/lib/puppet/provider/package/pip.rb +0 -1
- data/lib/puppet/provider/package/pkg.rb +5 -1
- data/lib/puppet/provider/package/pkgng.rb +1 -1
- data/lib/puppet/provider/package/yum.rb +10 -0
- data/lib/puppet/provider/service/launchd.rb +1 -0
- data/lib/puppet/provider/user/directoryservice.rb +6 -6
- data/lib/puppet/provider/yumrepo/inifile.rb +1 -1
- data/lib/puppet/provider/zpool/zpool.rb +1 -1
- data/lib/puppet/resource.rb +54 -12
- data/lib/puppet/resource/capability_finder.rb +15 -9
- data/lib/puppet/resource/catalog.rb +25 -6
- data/lib/puppet/resource/type.rb +3 -1
- data/lib/puppet/settings.rb +1 -1
- data/lib/puppet/settings/environment_conf.rb +12 -4
- data/lib/puppet/syntax_checkers/base64.rb +41 -0
- data/lib/puppet/syntax_checkers/json.rb +0 -2
- data/lib/puppet/transaction.rb +6 -0
- data/lib/puppet/transaction/additional_resource_generator.rb +5 -0
- data/lib/puppet/transaction/report.rb +7 -2
- data/lib/puppet/type.rb +2 -1
- data/lib/puppet/type/file/checksum.rb +1 -0
- data/lib/puppet/type/file/content.rb +4 -4
- data/lib/puppet/type/mount.rb +44 -0
- data/lib/puppet/type/ssh_authorized_key.rb +1 -1
- data/lib/puppet/type/tidy.rb +3 -0
- data/lib/puppet/type/user.rb +12 -6
- data/lib/puppet/util/log.rb +25 -0
- data/lib/puppet/util/plist.rb +8 -3
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet_x.rb +7 -1
- data/spec/integration/application/apply_spec.rb +118 -0
- data/spec/integration/parser/compiler_spec.rb +28 -0
- data/spec/integration/parser/pcore_resource_spec.rb +40 -3
- data/spec/integration/provider/mount_spec.rb +2 -1
- data/spec/integration/util/windows/principal_spec.rb +2 -2
- data/spec/integration/util/windows/registry_spec.rb +4 -4
- data/spec/lib/puppet_spec/compiler.rb +5 -1
- data/spec/lib/puppet_spec/unindent.rb +5 -0
- data/spec/shared_contexts/types_setup.rb +6 -0
- data/spec/shared_examples/rhel_package_provider.rb +16 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/unit/agent_spec.rb +11 -0
- data/spec/unit/application/lookup_spec.rb +94 -3
- data/spec/unit/capability_spec.rb +22 -0
- data/spec/unit/configurer_spec.rb +8 -0
- data/spec/unit/face/epp_face_spec.rb +22 -3
- data/spec/unit/functions/assert_type_spec.rb +3 -3
- data/spec/unit/functions/binary_file_spec.rb +46 -0
- data/spec/unit/functions/break_spec.rb +89 -0
- data/spec/unit/{parser/functions → functions}/contain_spec.rb +68 -3
- data/spec/unit/functions/find_file_spec.rb +69 -0
- data/spec/unit/functions/include_spec.rb +175 -0
- data/spec/unit/functions/logging_spec.rb +54 -0
- data/spec/unit/functions/lookup_spec.rb +3 -3
- data/spec/unit/functions/new_spec.rb +105 -5
- data/spec/unit/functions/next_spec.rb +93 -0
- data/spec/unit/functions/require_spec.rb +83 -0
- data/spec/unit/functions/return_spec.rb +105 -0
- data/spec/unit/{parser/functions → functions}/shared.rb +14 -11
- data/spec/unit/functions/strftime_spec.rb +152 -0
- data/spec/unit/functions4_spec.rb +22 -0
- data/spec/unit/indirector/face_spec.rb +10 -2
- data/spec/unit/network/http/error_spec.rb +1 -2
- data/spec/unit/network/http/handler_spec.rb +6 -5
- data/spec/unit/parser/functions/hiera_array_spec.rb +1 -1
- data/spec/unit/parser/functions/hiera_hash_spec.rb +1 -1
- data/spec/unit/parser/functions/hiera_include_spec.rb +1 -1
- data/spec/unit/parser/functions/hiera_spec.rb +1 -1
- data/spec/unit/parser/functions/lookup_spec.rb +1 -1
- data/spec/unit/parser/functions/regsubst_spec.rb +1 -1
- data/spec/unit/parser/functions/split_spec.rb +1 -1
- data/spec/unit/pops/evaluator/access_ops_spec.rb +81 -1
- data/spec/unit/pops/evaluator/arithmetic_ops_spec.rb +170 -0
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +29 -4
- data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +112 -4
- data/spec/unit/pops/loaders/dependency_loader_spec.rb +12 -0
- data/spec/unit/pops/loaders/static_loader_spec.rb +0 -26
- data/spec/unit/pops/lookup/context_spec.rb +149 -0
- data/spec/unit/pops/parser/parse_functions_spec.rb +19 -0
- data/spec/unit/pops/parser/parse_lambda_spec.rb +19 -0
- data/spec/unit/pops/puppet_stack_spec.rb +1 -1
- data/spec/unit/pops/resource/resource_type_impl_spec.rb +74 -0
- data/spec/unit/pops/serialization/packer_spec.rb +34 -14
- data/spec/unit/pops/serialization/serialization_spec.rb +67 -5
- data/spec/unit/pops/time/timespan_spec.rb +121 -0
- data/spec/unit/pops/types/p_binary_type_spec.rb +243 -0
- data/spec/unit/pops/types/p_object_type_spec.rb +7 -7
- data/spec/unit/pops/types/p_sensitive_type_spec.rb +1 -1
- data/spec/unit/pops/types/p_timespan_type_spec.rb +273 -0
- data/spec/unit/pops/types/p_timestamp_type_spec.rb +311 -0
- data/spec/unit/pops/types/p_type_set_type_spec.rb +13 -13
- data/spec/unit/pops/types/ruby_generator_spec.rb +12 -12
- data/spec/unit/pops/types/string_converter_spec.rb +89 -0
- data/spec/unit/pops/types/type_asserter_spec.rb +3 -3
- data/spec/unit/pops/types/type_calculator_spec.rb +113 -5
- data/spec/unit/pops/types/type_formatter_spec.rb +40 -0
- data/spec/unit/pops/types/type_mismatch_describer_spec.rb +49 -38
- data/spec/unit/pops/types/type_parser_spec.rb +87 -4
- data/spec/unit/pops/types/types_spec.rb +1 -1
- data/spec/unit/pops/validator/validator_spec.rb +23 -0
- data/spec/unit/provider/mount/parsed_spec.rb +47 -29
- data/spec/unit/provider/package/pkg_spec.rb +109 -99
- data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +1 -0
- data/spec/unit/provider/user/aix_spec.rb +1 -1
- data/spec/unit/provider/user/directoryservice_spec.rb +101 -30
- data/spec/unit/resource/capability_finder_spec.rb +29 -7
- data/spec/unit/resource/catalog_spec.rb +127 -0
- data/spec/unit/ssl/certificate_request_spec.rb +1 -1
- data/spec/unit/transaction/additional_resource_generator_spec.rb +30 -0
- data/spec/unit/transaction/persistence_spec.rb +1 -6
- data/spec/unit/transaction/report_spec.rb +23 -0
- data/spec/unit/transaction_spec.rb +38 -0
- data/spec/unit/type/mount_spec.rb +5 -0
- data/spec/unit/util/plist_spec.rb +14 -2
- metadata +71 -12
- data/spec/integration/parser/functions/require_spec.rb +0 -43
- data/spec/unit/parser/functions/include_spec.rb +0 -55
- data/spec/unit/parser/functions/require_spec.rb +0 -68
@@ -6,7 +6,7 @@ module HeredocSupport
|
|
6
6
|
# Pattern for heredoc `@(endtag[:syntax][/escapes])
|
7
7
|
# Produces groups for endtag (group 1), syntax (group 2), and escapes (group 3)
|
8
8
|
#
|
9
|
-
PATTERN_HEREDOC = %r{@\(([^:/\r\n\)]+)(?::[:blank:]*([a-z][a-zA-Z0-9_+]+)[:blank:]*)?(?:/((?:\w|[$])*)[:blank:]*)?\)}
|
9
|
+
PATTERN_HEREDOC = %r{@\(([^:/\r\n\)]+)(?::[[:blank:]]*([a-z][a-zA-Z0-9_+]+)[[:blank:]]*)?(?:/((?:\w|[$])*)[[:blank:]]*)?\)}
|
10
10
|
|
11
11
|
|
12
12
|
def heredoc
|
@@ -19,7 +19,6 @@ module HeredocSupport
|
|
19
19
|
# find end of the heredoc spec
|
20
20
|
str = scn.scan_until(/\)/) || lex_error(Issues::HEREDOC_UNCLOSED_PARENTHESIS, :followed_by => followed_by)
|
21
21
|
pos_after_heredoc = scn.pos
|
22
|
-
|
23
22
|
# Note: allows '+' as separator in syntax, but this needs validation as empty segments are not allowed
|
24
23
|
md = str.match(PATTERN_HEREDOC)
|
25
24
|
lex_error(Issues::HEREDOC_INVALID_SYNTAX) unless md
|
data/lib/puppet/pops/pcore.rb
CHANGED
@@ -34,6 +34,7 @@ module Pcore
|
|
34
34
|
add_type(Types::PTypeSetType.new(ast_ts_i12n), loader)
|
35
35
|
|
36
36
|
Resource.register_ptypes(loader, ir)
|
37
|
+
Lookup::Context.register_ptype(loader, ir);
|
37
38
|
end
|
38
39
|
|
39
40
|
# Create and register a new `Object` type in the Puppet Type System and map it to an implementation class
|
@@ -32,12 +32,12 @@ module PuppetStack
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def self.stacktrace
|
35
|
-
|
36
|
-
if loc =~ /^(.*\.pp)?:([0-9]+):in `stack'/
|
35
|
+
caller().reduce([]) do |memo, loc|
|
36
|
+
if loc =~ /^(.*\.pp)?:([0-9]+):in (`stack'|`block in call_function')/
|
37
37
|
memo << [$1.nil? ? 'unknown' : $1, $2.to_i]
|
38
38
|
end
|
39
39
|
memo
|
40
|
-
end
|
40
|
+
end
|
41
41
|
end
|
42
42
|
end
|
43
43
|
end
|
@@ -10,7 +10,7 @@
|
|
10
10
|
# This implementation does not support
|
11
11
|
# * setting 'strict' - strictness (must refer to an existing type) is always true
|
12
12
|
# * does not support the indirector
|
13
|
-
#
|
13
|
+
#
|
14
14
|
#
|
15
15
|
module Puppet::Pops
|
16
16
|
module Resource
|
@@ -43,6 +43,10 @@ class Param
|
|
43
43
|
@name_var = name_var
|
44
44
|
end
|
45
45
|
|
46
|
+
def to_s
|
47
|
+
name
|
48
|
+
end
|
49
|
+
|
46
50
|
def self._ptype
|
47
51
|
@ptype
|
48
52
|
end
|
@@ -47,6 +47,10 @@ class ResourceTypeImpl
|
|
47
47
|
Types::KEY_TYPE => Types::PBooleanType::DEFAULT,
|
48
48
|
Types::KEY_VALUE => true
|
49
49
|
},
|
50
|
+
'capability' => {
|
51
|
+
Types::KEY_TYPE => Types::PBooleanType::DEFAULT,
|
52
|
+
Types::KEY_VALUE => false
|
53
|
+
},
|
50
54
|
},
|
51
55
|
EMPTY_HASH,
|
52
56
|
[Types::KEY_NAME]
|
@@ -96,14 +100,14 @@ class ResourceTypeImpl
|
|
96
100
|
attr_reader :parameters
|
97
101
|
attr_reader :title_patterns_hash
|
98
102
|
attr_reader :title_patterns
|
99
|
-
attr_reader :isomorphic
|
100
103
|
|
101
|
-
def initialize(name, properties = EMPTY_ARRAY, parameters = EMPTY_ARRAY, title_patterns_hash = nil, isomorphic = true)
|
104
|
+
def initialize(name, properties = EMPTY_ARRAY, parameters = EMPTY_ARRAY, title_patterns_hash = nil, isomorphic = true, capability = false)
|
102
105
|
@name = name
|
103
106
|
@properties = properties
|
104
107
|
@parameters = parameters
|
105
108
|
@title_patterns_hash = title_patterns_hash
|
106
109
|
@isomorphic = isomorphic
|
110
|
+
@capability = capability
|
107
111
|
|
108
112
|
# Compute attributes hash
|
109
113
|
# Compute key_names (possibly compound key if there are multiple name vars).
|
@@ -172,7 +176,7 @@ class ResourceTypeImpl
|
|
172
176
|
end
|
173
177
|
|
174
178
|
def is_capability?
|
175
|
-
|
179
|
+
@capability
|
176
180
|
end
|
177
181
|
|
178
182
|
# Answers if the parameter name is a parameter/attribute of this type
|
@@ -259,7 +263,7 @@ class ResourceTypeImpl
|
|
259
263
|
|
260
264
|
# Answers :property, :param or :meta depending on the type of the attribute
|
261
265
|
# According to original version, this is called millions of times
|
262
|
-
# and a cache is required.
|
266
|
+
# and a cache is required.
|
263
267
|
# @param name [Symbol]
|
264
268
|
def attrtype(name)
|
265
269
|
raise NotImplementedError, "attrtype() - returns the kind (:meta, :param, or :property) of the parameter"
|
@@ -15,6 +15,7 @@ type Puppet::Resource::ResourceType3 = Object[{
|
|
15
15
|
parameters => { type => Array[Puppet::Resource::Param], value = []},
|
16
16
|
title_patterns => { type => Optional[Hash[Regexp, Array[String[1]]], value => nil },
|
17
17
|
isomorphic => { type => Boolean, value => true },
|
18
|
+
capability => { type => Boolean, value => false },
|
18
19
|
},
|
19
20
|
equality => [name],
|
20
21
|
}]
|
@@ -16,6 +16,7 @@ module Serialization
|
|
16
16
|
# - Regexp
|
17
17
|
# - Version
|
18
18
|
# - VersionRange
|
19
|
+
# - Timespan
|
19
20
|
# - Timestamp
|
20
21
|
# - Default
|
21
22
|
#
|
@@ -132,7 +133,15 @@ class AbstractReader
|
|
132
133
|
read_payload(data) do |ep|
|
133
134
|
sec = ep.read
|
134
135
|
nsec = ep.read
|
135
|
-
|
136
|
+
Time::Timestamp.new(sec * 1000000000 + nsec)
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
register_type(Extension::TIMESPAN) do |data|
|
141
|
+
read_payload(data) do |ep|
|
142
|
+
sec = ep.read
|
143
|
+
nsec = ep.read
|
144
|
+
Time::Timespan.new(sec * 1000000000 + nsec)
|
136
145
|
end
|
137
146
|
end
|
138
147
|
|
@@ -143,7 +152,15 @@ class AbstractReader
|
|
143
152
|
register_type(Extension::VERSION_RANGE) do |data|
|
144
153
|
read_payload(data) { |ep| Semantic::VersionRange.parse(ep.read) }
|
145
154
|
end
|
155
|
+
|
156
|
+
register_type(Extension::SENSITIVE) do |data|
|
157
|
+
read_payload(data) { |ep| Types::PSensitiveType::Sensitive.new(ep.read) }
|
158
|
+
end
|
159
|
+
|
160
|
+
register_type(Extension::BINARY) do |data|
|
161
|
+
read_payload(data) { |ep| Types::PBinaryType::Binary.from_base64_strict(ep.read) }
|
162
|
+
end
|
146
163
|
end
|
147
164
|
end
|
148
165
|
end
|
149
|
-
end
|
166
|
+
end
|
@@ -19,6 +19,7 @@ MIN_INTEGER = -0x8000000000000000
|
|
19
19
|
# - Regexp
|
20
20
|
# - Version
|
21
21
|
# - VersionRange
|
22
|
+
# - Timespan
|
22
23
|
# - Timestamp
|
23
24
|
# - Default
|
24
25
|
#
|
@@ -52,7 +53,7 @@ class AbstractWriter
|
|
52
53
|
when Integer
|
53
54
|
# not tabulated, but integers larger than 64-bit cannot be allowed.
|
54
55
|
raise SerializationError, 'Integer out of bounds' if value > MAX_INTEGER || value < MIN_INTEGER
|
55
|
-
when Numeric, Symbol, Extension::NotTabulated, true, false, nil
|
56
|
+
when Numeric, Symbol, Types::PSensitiveType::Sensitive, Extension::NotTabulated, true, false, nil
|
56
57
|
# not tabulated
|
57
58
|
else
|
58
59
|
if @tabulate
|
@@ -161,8 +162,12 @@ class AbstractWriter
|
|
161
162
|
build_payload { |ep| ep.write(o.to_s) }
|
162
163
|
end
|
163
164
|
|
164
|
-
register_type(Extension::TIME, Time) do |o|
|
165
|
-
build_payload { |ep| ep.write(
|
165
|
+
register_type(Extension::TIME, Time::Timestamp) do |o|
|
166
|
+
build_payload { |ep| nsecs = o.nsecs; ep.write(nsecs / 1000000000); ep.write(nsecs % 1000000000) }
|
167
|
+
end
|
168
|
+
|
169
|
+
register_type(Extension::TIMESPAN, Time::Timespan) do |o|
|
170
|
+
build_payload { |ep| nsecs = o.nsecs; ep.write(nsecs / 1000000000); ep.write(nsecs % 1000000000) }
|
166
171
|
end
|
167
172
|
|
168
173
|
register_type(Extension::VERSION, Semantic::Version) do |o|
|
@@ -172,6 +177,14 @@ class AbstractWriter
|
|
172
177
|
register_type(Extension::VERSION_RANGE, Semantic::VersionRange) do |o|
|
173
178
|
build_payload { |ep| ep.write(o.to_s) }
|
174
179
|
end
|
180
|
+
|
181
|
+
register_type(Extension::SENSITIVE, Types::PSensitiveType::Sensitive) do |o|
|
182
|
+
build_payload { |ep| ep.write(o.unwrap) }
|
183
|
+
end
|
184
|
+
|
185
|
+
register_type(Extension::BINARY, Types::PBinaryType::Binary) do |o|
|
186
|
+
build_payload { |ep| ep.write(o.to_s) }
|
187
|
+
end
|
175
188
|
end
|
176
189
|
end
|
177
190
|
end
|
@@ -6,6 +6,10 @@ module Serialization
|
|
6
6
|
# resolving tabulations and assembling complex objects. The type of the complex objects are resolved using a loader.
|
7
7
|
# @api public
|
8
8
|
class Deserializer
|
9
|
+
# Provides access to the reader.
|
10
|
+
# @api private
|
11
|
+
attr_reader :reader
|
12
|
+
|
9
13
|
# @param [AbstractReader] reader the reader used when reading primitive objects from a stream
|
10
14
|
# @param [Loader::Loader] loader the loader used when resolving names of types
|
11
15
|
# @api public
|
@@ -57,4 +61,4 @@ module Serialization
|
|
57
61
|
end
|
58
62
|
end
|
59
63
|
end
|
60
|
-
end
|
64
|
+
end
|
@@ -15,6 +15,13 @@ module JSON
|
|
15
15
|
super(Packer.new(io, options), options)
|
16
16
|
end
|
17
17
|
|
18
|
+
# Clear the underlying io stream but does not clear tabulation cache
|
19
|
+
# Specifically designed to enable tabulation to span more than one
|
20
|
+
# separately deserialized object.
|
21
|
+
def clear_io
|
22
|
+
@packer.clear_io
|
23
|
+
end
|
24
|
+
|
18
25
|
def extension_packer
|
19
26
|
@packer
|
20
27
|
end
|
@@ -27,6 +34,10 @@ module JSON
|
|
27
34
|
yield(@packer)
|
28
35
|
end
|
29
36
|
|
37
|
+
def to_a
|
38
|
+
@packer.to_a
|
39
|
+
end
|
40
|
+
|
30
41
|
def to_json
|
31
42
|
@packer.to_json
|
32
43
|
end
|
@@ -39,6 +50,10 @@ module JSON
|
|
39
50
|
super(Unpacker.new(io))
|
40
51
|
end
|
41
52
|
|
53
|
+
def re_initialize(io)
|
54
|
+
@unpacker.re_initialize(io)
|
55
|
+
end
|
56
|
+
|
42
57
|
def read_payload(data)
|
43
58
|
yield(@unpacker)
|
44
59
|
end
|
@@ -49,6 +64,7 @@ module JSON
|
|
49
64
|
class Packer
|
50
65
|
def initialize(io, options = {})
|
51
66
|
@io = io
|
67
|
+
@io << '['
|
52
68
|
@type_registry = {}
|
53
69
|
@nested = []
|
54
70
|
@verbose = options[:verbose]
|
@@ -60,27 +76,33 @@ module JSON
|
|
60
76
|
@type_registry[klass] = [type, klass, block]
|
61
77
|
end
|
62
78
|
|
79
|
+
def clear_io
|
80
|
+
# Truncate everything except leading '['
|
81
|
+
if @io.is_a?(String)
|
82
|
+
@io.slice!(1..-1)
|
83
|
+
else
|
84
|
+
@io.truncate(1)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
63
88
|
def empty?
|
64
|
-
@io.pos ==
|
89
|
+
@io.is_a?(String) ? io.length == 1 : @io.pos == 1
|
65
90
|
end
|
66
91
|
|
67
92
|
def flush
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
when 0
|
73
|
-
@io << '['
|
93
|
+
# Drop last comma unless just start marker present
|
94
|
+
if @io.is_a?(String)
|
95
|
+
@io.chop! unless @io.length == 1
|
96
|
+
@io << ']'
|
74
97
|
else
|
75
|
-
|
76
|
-
@io.pos = pos - 1
|
98
|
+
pos = @io.pos
|
99
|
+
@io.pos = pos - 1 unless pos == 1
|
100
|
+
@io << ']'
|
101
|
+
@io.flush
|
77
102
|
end
|
78
|
-
@io << ']'
|
79
|
-
@io.flush
|
80
103
|
end
|
81
104
|
|
82
105
|
def write(obj)
|
83
|
-
assert_started
|
84
106
|
case obj
|
85
107
|
when Array
|
86
108
|
write_array_header(obj.size)
|
@@ -97,7 +119,6 @@ module JSON
|
|
97
119
|
alias pack write
|
98
120
|
|
99
121
|
def write_array_header(n)
|
100
|
-
assert_started
|
101
122
|
if n < 1
|
102
123
|
@io << '[]'
|
103
124
|
else
|
@@ -107,7 +128,6 @@ module JSON
|
|
107
128
|
end
|
108
129
|
|
109
130
|
def write_map_header(n)
|
110
|
-
assert_started
|
111
131
|
if n < 1
|
112
132
|
@io << '{}'
|
113
133
|
else
|
@@ -117,7 +137,6 @@ module JSON
|
|
117
137
|
end
|
118
138
|
|
119
139
|
def write_nil
|
120
|
-
assert_started
|
121
140
|
@io << 'null'
|
122
141
|
write_delim
|
123
142
|
end
|
@@ -126,13 +145,16 @@ module JSON
|
|
126
145
|
to_json
|
127
146
|
end
|
128
147
|
|
148
|
+
def to_a
|
149
|
+
::JSON.parse(io_string)
|
150
|
+
end
|
151
|
+
|
129
152
|
def to_json
|
130
|
-
string = @io.string
|
131
153
|
if @indent > 0
|
132
|
-
|
133
|
-
|
154
|
+
::JSON.pretty_unparse(to_a, { :indent => ' ' * @indent })
|
155
|
+
else
|
156
|
+
io_string
|
134
157
|
end
|
135
|
-
string
|
136
158
|
end
|
137
159
|
|
138
160
|
# Write a payload object. Not subject to extensions
|
@@ -140,10 +162,15 @@ module JSON
|
|
140
162
|
@io << obj.to_json << ','
|
141
163
|
end
|
142
164
|
|
143
|
-
def
|
144
|
-
|
165
|
+
def io_string
|
166
|
+
if @io.is_a?(String)
|
167
|
+
@io
|
168
|
+
else
|
169
|
+
@io.pos = 0
|
170
|
+
@io.read
|
171
|
+
end
|
145
172
|
end
|
146
|
-
private :
|
173
|
+
private :io_string
|
147
174
|
|
148
175
|
def write_delim
|
149
176
|
nesting = @nested.last
|
@@ -184,11 +211,17 @@ module JSON
|
|
184
211
|
|
185
212
|
def write_extension(ext, obj)
|
186
213
|
@io << '[' << extension_indicator(ext).to_json << ','
|
214
|
+
@nested << nil
|
187
215
|
write_extension_payload(ext, obj)
|
216
|
+
@nested.pop
|
188
217
|
if obj.is_a?(Extension::SequenceStart) && obj.sequence_size > 0
|
189
218
|
@nested << [false, obj.sequence_size]
|
190
219
|
else
|
191
|
-
@io.
|
220
|
+
if @io.is_a?(String)
|
221
|
+
@io.chop!
|
222
|
+
else
|
223
|
+
@io.pos -= 1
|
224
|
+
end
|
192
225
|
@io << ']'
|
193
226
|
write_delim
|
194
227
|
end
|
@@ -208,13 +241,17 @@ module JSON
|
|
208
241
|
|
209
242
|
class Unpacker
|
210
243
|
def initialize(io)
|
211
|
-
|
212
|
-
raise SerializationError, "JSON stream is not an array" unless parsed.is_a?(Array)
|
213
|
-
@etor_stack = [parsed.each]
|
244
|
+
re_initialize(io)
|
214
245
|
@type_registry = {}
|
215
246
|
@nested = []
|
216
247
|
end
|
217
248
|
|
249
|
+
def re_initialize(io)
|
250
|
+
parsed = parse_io(io)
|
251
|
+
raise SerializationError, "JSON stream is not an array. It is a #{io.class.name}" unless parsed.is_a?(Array)
|
252
|
+
@etor_stack = [parsed.each]
|
253
|
+
end
|
254
|
+
|
218
255
|
def read
|
219
256
|
obj = nil
|
220
257
|
loop do
|
@@ -241,6 +278,19 @@ module JSON
|
|
241
278
|
def register_type(extension_number, &block)
|
242
279
|
@type_registry[extension_number] = block
|
243
280
|
end
|
281
|
+
|
282
|
+
private
|
283
|
+
|
284
|
+
def parse_io(io)
|
285
|
+
case io
|
286
|
+
when IO, StringIO
|
287
|
+
::JSON.parse(io.read)
|
288
|
+
when String
|
289
|
+
::JSON.parse(io)
|
290
|
+
else
|
291
|
+
io
|
292
|
+
end
|
293
|
+
end
|
244
294
|
end
|
245
295
|
end
|
246
296
|
end
|
@@ -6,6 +6,10 @@ module Serialization
|
|
6
6
|
# tabulating and disassembling complex objects.
|
7
7
|
# @api public
|
8
8
|
class Serializer
|
9
|
+
# Provides access to the writer.
|
10
|
+
# @api private
|
11
|
+
attr_reader :writer
|
12
|
+
|
9
13
|
# @param [AbstractWriter] writer the writer that is used for writing primitive values
|
10
14
|
# @api public
|
11
15
|
def initialize(writer)
|
@@ -67,7 +71,7 @@ module Serialization
|
|
67
71
|
def write_tabulated_first_time(value)
|
68
72
|
@written[value.object_id] = @written.size
|
69
73
|
case value
|
70
|
-
when Symbol, Regexp, Semantic::Version, Semantic::VersionRange
|
74
|
+
when Symbol, Regexp, Semantic::Version, Semantic::VersionRange, Time::Timestamp, Time::Timespan, Types::PSensitiveType::Sensitive, Types::PBinaryType::Binary
|
71
75
|
@writer.write(value)
|
72
76
|
when Array
|
73
77
|
start_array(value.size)
|