frise 0.3.0 → 0.4.0

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
  SHA256:
3
- metadata.gz: 5923c848338d6a2f7dfc35211200ab51a789ad9e9967742e4eb57430346785e9
4
- data.tar.gz: e08f1fdf3a14fe288ad67a0baa6a9e557294de9ac5ea814426e9b92792b1be95
3
+ metadata.gz: 59666a0c683f8357e7da23de68bd0cc07b386299943e772dd40d9d641ac2d8c7
4
+ data.tar.gz: 6827402a3f207d909845c0fa386f61cd3d32b989206e15d22b58202830406c88
5
5
  SHA512:
6
- metadata.gz: a578f2042b86832986bed1cecbe435330e509e2f6f166ff7302c3eeca37e445bc7acbbcbd4fe16d3cf9c23be68603cd9d4e13f17c508edaeff5e96169b41eaa9
7
- data.tar.gz: 1c4378dcec5e8738f25248d6a45fcc96b4392f7144995e08d57407abd3bf1ad5bfe506fe6e1117aa4caef7900dcedfba9dc8b4267b1c4cd6d273c5395313cd2f
6
+ metadata.gz: 75c11d0c64a9d0a7f37c3b7702ab2000c09d76900c8c58477bc2426ea47ef766b3c03f77c0fd15928fd55a636009fe33f6e2e19efe8f6454945a3a22ea8b86b3
7
+ data.tar.gz: 582bb37e6e27f4da44aa496321abf66def05ca151218680c776772fc893824f03ab61ed6e11d3c2006853bd627d53f378eb79f3190033d69869a8ee574184177
data/.rubocop.yml CHANGED
@@ -1,8 +1,10 @@
1
1
  AllCops:
2
2
  TargetRubyVersion: '2.3'
3
+ Layout/EmptyLineAfterGuardClause:
4
+ Enabled: false
3
5
  Metrics:
4
6
  Enabled: false
5
- Naming/UncommunicativeBlockParamName:
7
+ Naming/BlockParameterName:
6
8
  Enabled: false
7
- Naming/UncommunicativeMethodParamName:
9
+ Naming/MethodParameterName:
8
10
  Enabled: false
data/.travis.yml CHANGED
@@ -1,5 +1,9 @@
1
1
  language: ruby
2
+ cache: bundler
2
3
  rvm:
3
4
  - 2.3
4
5
  - 2.4
5
6
  - 2.5
7
+ - 2.6
8
+ before_install:
9
+ - gem install bundler
data/CHANGELOG.md CHANGED
@@ -1,3 +1,13 @@
1
+ ### 0.4.0 (November 29, 2019)
2
+
3
+ - Breaking changes
4
+ - Recursive inclusions now respect the hierarchy of configuration files, avoiding inclusions lower
5
+ in the hiearchy to be resolved before ones higher in the hierarchy
6
+ ([#14](https://github.com/velocidi/frise/pull/14)).
7
+ - Bug fixes
8
+ - Fix error messages from validations happening deeper in the config hierarchy, that were wrongly
9
+ missing the first character in their path ([#16](https://github.com/velocidi/frise/pull/16)).
10
+
1
11
  ### 0.3.0 (April 16, 2018)
2
12
 
3
13
  - Breaking changes
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright 2017 ShiftForward, S.A. [http://www.shiftforward.eu]
1
+ Copyright 2017-2019 Velocidi [http://www.velocidi.com/]
2
2
 
3
3
  Licensed under the Apache License, Version 2.0 (the "License"); you may not
4
4
  use this file except in compliance with the License. You may obtain a copy of
data/frise.gemspec CHANGED
@@ -7,11 +7,11 @@ require 'frise/version'
7
7
  Gem::Specification.new do |spec|
8
8
  spec.name = 'frise'
9
9
  spec.version = Frise::VERSION
10
- spec.authors = ['ShiftForward']
11
- spec.email = ['info@shiftforward.eu']
10
+ spec.authors = ['Velocidi']
11
+ spec.email = ['hello@velocidi.com']
12
12
 
13
13
  spec.summary = 'Ruby config library with schema validation, default values and templating'
14
- spec.homepage = 'https://github.com/ShiftForward/frise'
14
+ spec.homepage = 'https://github.com/velocidi/frise'
15
15
  spec.license = 'Apache-2.0'
16
16
 
17
17
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
@@ -22,10 +22,10 @@ Gem::Specification.new do |spec|
22
22
 
23
23
  spec.add_dependency 'liquid', '~> 4.0'
24
24
 
25
- spec.add_development_dependency 'bundler', '~> 1.14'
26
- spec.add_development_dependency 'coveralls', '~> 0.8.21'
27
- spec.add_development_dependency 'rake', '~> 12.3'
28
- spec.add_development_dependency 'rspec', '~> 3.4'
29
- spec.add_development_dependency 'rubocop', '0.55.0'
30
- spec.add_development_dependency 'simplecov', '~> 0.14.1'
25
+ spec.add_development_dependency 'bundler', '~> 2.0'
26
+ spec.add_development_dependency 'coveralls', '~> 0.8'
27
+ spec.add_development_dependency 'rake', '~> 13.0'
28
+ spec.add_development_dependency 'rspec', '~> 3.9'
29
+ spec.add_development_dependency 'rubocop', '0.77.0'
30
+ spec.add_development_dependency 'simplecov', '~> 0.16'
31
31
  end
data/lib/frise/loader.rb CHANGED
@@ -46,7 +46,7 @@ module Frise
46
46
 
47
47
  private
48
48
 
49
- def process_includes(config, at_path, root_config, global_vars)
49
+ def process_includes(config, at_path, root_config, global_vars, include_confs_stack = [])
50
50
  return config unless config.class == Hash
51
51
 
52
52
  # process $content_include directives
@@ -63,20 +63,18 @@ module Frise
63
63
  end
64
64
 
65
65
  # process $include directives
66
- config, include_confs = extract_include(config, at_path)
66
+ config, next_include_confs = extract_include(config, at_path)
67
+ include_confs = next_include_confs + include_confs_stack
67
68
  if include_confs.empty?
68
69
  config.map { |k, v| [k, process_includes(v, at_path + [k], root_config, global_vars)] }.to_h
69
70
  else
70
71
  Lazy.new do
71
- include_confs.each do |include_conf|
72
- symbol_table = build_symbol_table(root_config, at_path, config, global_vars, include_conf)
73
- included_config = Parser.parse(include_conf['file'], symbol_table)
74
-
75
- config = @defaults_loader.merge_defaults_obj(config, included_config)
76
- config = process_includes(config, at_path, merge_at(root_config, at_path, config), global_vars)
77
- end
78
- updated_root_config = merge_at(root_config, at_path, config)
79
- config.map { |k, v| [k, process_includes(v, at_path + [k], updated_root_config, global_vars)] }.to_h
72
+ include_conf = include_confs.first
73
+ rest_include_confs = include_confs[1..-1]
74
+ symbol_table = build_symbol_table(root_config, at_path, config, global_vars, include_conf)
75
+ included_config = Parser.parse(include_conf['file'], symbol_table)
76
+ config = @defaults_loader.merge_defaults_obj(config, included_config)
77
+ process_includes(config, at_path, merge_at(root_config, at_path, config), global_vars, rest_include_confs)
80
78
  end
81
79
  end
82
80
  end
@@ -12,11 +12,15 @@ module Frise
12
12
  @__target_object__ ||= @callable.call
13
13
  end
14
14
 
15
- # rubocop:disable Style/MethodMissing
15
+ # rubocop:disable Style/MethodMissingSuper
16
16
  def method_missing(method_name, *args, &block)
17
17
  __target_object__.send(method_name, *args, &block)
18
18
  end
19
- # rubocop:enable Style/MethodMissing
19
+ # rubocop:enable Style/MethodMissingSuper
20
+
21
+ def respond_to_missing?(method_name, include_private = false)
22
+ __target_object__.respond_to?(method_name, include_private)
23
+ end
20
24
  end
21
25
  end
22
26
  end
@@ -27,7 +27,7 @@ module Frise
27
27
  end
28
28
 
29
29
  def add_validation_error(path, msg)
30
- logged_path = path.empty? ? '<root>' : path[1..-1]
30
+ logged_path = path.empty? ? '<root>' : path
31
31
  @errors << "At #{logged_path}: #{msg}"
32
32
  end
33
33
 
@@ -37,13 +37,13 @@ module Frise
37
37
  default_type = schema[:enum] || schema[:one_of] ? 'Object' : 'Hash'
38
38
  { type: default_type }.merge(schema)
39
39
  when Symbol then { type: 'Object', validate: schema }
40
- when Array then
40
+ when Array
41
41
  if schema.size == 1
42
42
  { type: 'Array', all: schema[0] }
43
43
  else
44
44
  (raise "Invalid schema: #{schema.inspect}")
45
45
  end
46
- when String then
46
+ when String
47
47
  if schema.end_with?('?')
48
48
  { type: schema[0..-2], optional: true }
49
49
  else
@@ -83,8 +83,8 @@ module Frise
83
83
  if full_schema[:validate]
84
84
  begin
85
85
  @validators.method(full_schema[:validate]).call(@root, obj)
86
- rescue StandardError => ex
87
- add_validation_error(path, ex.message)
86
+ rescue StandardError => e
87
+ add_validation_error(path, e.message)
88
88
  end
89
89
  end
90
90
  true
@@ -115,7 +115,7 @@ module Frise
115
115
  def validate_spec_keys(full_schema, obj, path, processed_keys)
116
116
  full_schema.each do |spec_key, spec_value|
117
117
  next if spec_key.is_a?(Symbol)
118
- validate_object("#{path}.#{spec_key}", obj[spec_key], spec_value)
118
+ validate_object(path.empty? ? spec_key : "#{path}.#{spec_key}", obj[spec_key], spec_value)
119
119
  processed_keys << spec_key
120
120
  end
121
121
  true
@@ -126,13 +126,11 @@ module Frise
126
126
  if expected_types.size == 1 && expected_types[0].ancestors.member?(Enumerable)
127
127
  hash = obj.is_a?(Hash) ? obj : Hash[obj.map.with_index { |x, i| [i, x] }]
128
128
  hash.each do |key, value|
129
- if full_schema[:all_keys] && !key.is_a?(Symbol)
130
- validate_object(path, key, full_schema[:all_keys])
131
- end
129
+ validate_object(path, key, full_schema[:all_keys]) if full_schema[:all_keys] && !key.is_a?(Symbol)
132
130
 
133
131
  next if processed_keys.member? key
134
132
  if full_schema[:all]
135
- validate_object("#{path}.#{key}", value, full_schema[:all])
133
+ validate_object(path.empty? ? key : "#{path}.#{key}", value, full_schema[:all])
136
134
  elsif !full_schema[:allow_unknown_keys]
137
135
  add_validation_error(path, "unknown key: #{key}")
138
136
  end
data/lib/frise/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Frise
4
- VERSION = '0.3.0'
4
+ VERSION = '0.4.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: frise
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
- - ShiftForward
7
+ - Velocidi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-16 00:00:00.000000000 Z
11
+ date: 2019-11-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: liquid
@@ -30,87 +30,87 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.14'
33
+ version: '2.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.14'
40
+ version: '2.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: coveralls
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.8.21
47
+ version: '0.8'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.8.21
54
+ version: '0.8'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '12.3'
61
+ version: '13.0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '12.3'
68
+ version: '13.0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '3.4'
75
+ version: '3.9'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '3.4'
82
+ version: '3.9'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rubocop
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - '='
88
88
  - !ruby/object:Gem::Version
89
- version: 0.55.0
89
+ version: 0.77.0
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - '='
95
95
  - !ruby/object:Gem::Version
96
- version: 0.55.0
96
+ version: 0.77.0
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: simplecov
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 0.14.1
103
+ version: '0.16'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 0.14.1
110
+ version: '0.16'
111
111
  description:
112
112
  email:
113
- - info@shiftforward.eu
113
+ - hello@velocidi.com
114
114
  executables: []
115
115
  extensions: []
116
116
  extra_rdoc_files: []
@@ -132,7 +132,7 @@ files:
132
132
  - lib/frise/parser.rb
133
133
  - lib/frise/validator.rb
134
134
  - lib/frise/version.rb
135
- homepage: https://github.com/ShiftForward/frise
135
+ homepage: https://github.com/velocidi/frise
136
136
  licenses:
137
137
  - Apache-2.0
138
138
  metadata: {}
@@ -152,7 +152,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
152
152
  version: '0'
153
153
  requirements: []
154
154
  rubyforge_project:
155
- rubygems_version: 2.7.6
155
+ rubygems_version: 2.7.3
156
156
  signing_key:
157
157
  specification_version: 4
158
158
  summary: Ruby config library with schema validation, default values and templating