frise 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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