key_value_name 0.0.1 → 0.2.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 +5 -5
- data/README.md +31 -15
- data/lib/key_value_name/builders/container_builder.rb +49 -0
- data/lib/key_value_name/builders/file_builder.rb +59 -0
- data/lib/key_value_name/builders/folder_builder.rb +45 -0
- data/lib/key_value_name/builders/key_value_builder.rb +43 -0
- data/lib/key_value_name/builders/schema_builder.rb +19 -0
- data/lib/key_value_name/collection.rb +41 -0
- data/lib/key_value_name/marshalers/base.rb +7 -4
- data/lib/key_value_name/marshalers/boolean_marshaler.rb +24 -0
- data/lib/key_value_name/marshalers/float_marshaler.rb +26 -0
- data/lib/key_value_name/marshalers/integer_marshaler.rb +37 -0
- data/lib/key_value_name/marshalers/symbol_marshaler.rb +2 -2
- data/lib/key_value_name/marshalers.rb +14 -2
- data/lib/key_value_name/mixins/file_name.rb +50 -0
- data/lib/key_value_name/mixins/folder_name.rb +34 -0
- data/lib/key_value_name/mixins/name.rb +52 -0
- data/lib/key_value_name/schema.rb +26 -0
- data/lib/key_value_name/spec.rb +38 -17
- data/lib/key_value_name/version.rb +2 -2
- data/lib/key_value_name.rb +26 -6
- data/test/key_value_name/extension_test.rb +49 -0
- data/test/key_value_name/file_builder_test.rb +64 -0
- data/test/key_value_name/folder_builder_test.rb +27 -0
- data/test/key_value_name/key_value_name_test.rb +58 -35
- data/test/key_value_name/schema_test.rb +256 -0
- metadata +41 -12
- data/lib/key_value_name/builder.rb +0 -91
- data/lib/key_value_name/marshalers/numeric_marshaler.rb +0 -44
metadata
CHANGED
@@ -1,29 +1,42 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: key_value_name
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Lees-Miller
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
12
|
+
- !ruby/object:Gem::Dependency
|
13
|
+
name: ostruct
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
15
|
+
requirements:
|
16
|
+
- - "~>"
|
17
|
+
- !ruby/object:Gem::Version
|
18
|
+
version: 0.6.3
|
19
|
+
type: :runtime
|
20
|
+
prerelease: false
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
requirements:
|
23
|
+
- - "~>"
|
24
|
+
- !ruby/object:Gem::Version
|
25
|
+
version: 0.6.3
|
13
26
|
- !ruby/object:Gem::Dependency
|
14
27
|
name: gemma
|
15
28
|
requirement: !ruby/object:Gem::Requirement
|
16
29
|
requirements:
|
17
30
|
- - "~>"
|
18
31
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
32
|
+
version: 6.0.0
|
20
33
|
type: :development
|
21
34
|
prerelease: false
|
22
35
|
version_requirements: !ruby/object:Gem::Requirement
|
23
36
|
requirements:
|
24
37
|
- - "~>"
|
25
38
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
39
|
+
version: 6.0.0
|
27
40
|
description: Store key-value pairs in file names, e.g. parameter names and parameters.
|
28
41
|
email:
|
29
42
|
- jdleesmiller@gmail.com
|
@@ -34,23 +47,37 @@ extra_rdoc_files:
|
|
34
47
|
files:
|
35
48
|
- README.md
|
36
49
|
- lib/key_value_name.rb
|
37
|
-
- lib/key_value_name/
|
50
|
+
- lib/key_value_name/builders/container_builder.rb
|
51
|
+
- lib/key_value_name/builders/file_builder.rb
|
52
|
+
- lib/key_value_name/builders/folder_builder.rb
|
53
|
+
- lib/key_value_name/builders/key_value_builder.rb
|
54
|
+
- lib/key_value_name/builders/schema_builder.rb
|
55
|
+
- lib/key_value_name/collection.rb
|
38
56
|
- lib/key_value_name/marshalers.rb
|
39
57
|
- lib/key_value_name/marshalers/base.rb
|
40
|
-
- lib/key_value_name/marshalers/
|
58
|
+
- lib/key_value_name/marshalers/boolean_marshaler.rb
|
59
|
+
- lib/key_value_name/marshalers/float_marshaler.rb
|
60
|
+
- lib/key_value_name/marshalers/integer_marshaler.rb
|
41
61
|
- lib/key_value_name/marshalers/symbol_marshaler.rb
|
62
|
+
- lib/key_value_name/mixins/file_name.rb
|
63
|
+
- lib/key_value_name/mixins/folder_name.rb
|
64
|
+
- lib/key_value_name/mixins/name.rb
|
65
|
+
- lib/key_value_name/schema.rb
|
42
66
|
- lib/key_value_name/spec.rb
|
43
67
|
- lib/key_value_name/version.rb
|
68
|
+
- test/key_value_name/extension_test.rb
|
69
|
+
- test/key_value_name/file_builder_test.rb
|
70
|
+
- test/key_value_name/folder_builder_test.rb
|
44
71
|
- test/key_value_name/key_value_name_test.rb
|
72
|
+
- test/key_value_name/schema_test.rb
|
45
73
|
homepage: https://github.com/jdleesmiller/key_value_name
|
46
74
|
licenses: []
|
47
75
|
metadata: {}
|
48
|
-
post_install_message:
|
49
76
|
rdoc_options:
|
50
77
|
- "--main"
|
51
78
|
- README.md
|
52
79
|
- "--title"
|
53
|
-
- key_value_name-0.0
|
80
|
+
- key_value_name-0.2.0 Documentation
|
54
81
|
require_paths:
|
55
82
|
- lib
|
56
83
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -64,10 +91,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
64
91
|
- !ruby/object:Gem::Version
|
65
92
|
version: '0'
|
66
93
|
requirements: []
|
67
|
-
|
68
|
-
rubygems_version: 2.6.8
|
69
|
-
signing_key:
|
94
|
+
rubygems_version: 3.6.7
|
70
95
|
specification_version: 4
|
71
96
|
summary: Store key-value pairs in file names, e.g. parameter names and parameters.
|
72
97
|
test_files:
|
98
|
+
- test/key_value_name/extension_test.rb
|
99
|
+
- test/key_value_name/file_builder_test.rb
|
100
|
+
- test/key_value_name/folder_builder_test.rb
|
73
101
|
- test/key_value_name/key_value_name_test.rb
|
102
|
+
- test/key_value_name/schema_test.rb
|
@@ -1,91 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module KeyValueName
|
4
|
-
#
|
5
|
-
# Yield-based Domain-Specific Language (DSL) to build a `KeyValueName`.
|
6
|
-
#
|
7
|
-
class Builder
|
8
|
-
#
|
9
|
-
# Class methods of the returned `KeyValueName` class.
|
10
|
-
#
|
11
|
-
module ClassMethods
|
12
|
-
def read_hash(name)
|
13
|
-
key_value_name_spec.read(name)
|
14
|
-
end
|
15
|
-
|
16
|
-
def read(name)
|
17
|
-
new(read_hash(name))
|
18
|
-
end
|
19
|
-
|
20
|
-
def glob(path)
|
21
|
-
Dir.glob(File.join(path, '*')).map do |name|
|
22
|
-
basename = File.basename(name)
|
23
|
-
new(read_hash(basename)) if key_value_name_spec.matches?(basename)
|
24
|
-
end.compact
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
#
|
29
|
-
# Instance methods of the returned `KeyValueName` class.
|
30
|
-
#
|
31
|
-
module InstanceMethods
|
32
|
-
def in(folder)
|
33
|
-
File.join(folder, to_s)
|
34
|
-
end
|
35
|
-
|
36
|
-
def to_s
|
37
|
-
self.class.key_value_name_spec.write(self)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
def initialize
|
42
|
-
@marshalers = {}
|
43
|
-
@extension = nil
|
44
|
-
end
|
45
|
-
|
46
|
-
def include_keys(key_value_name_klass)
|
47
|
-
spec = key_value_name_klass.key_value_name_spec
|
48
|
-
spec.marshalers.each do |name, marshaler|
|
49
|
-
check_no_existing_marshaler(name)
|
50
|
-
@marshalers[name] = marshaler
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
def key(name, type:, **kwargs)
|
55
|
-
KeyValueName.check_symbol(name)
|
56
|
-
raise ArgumentError, "bad type: #{type}" unless MARSHALERS.key?(type)
|
57
|
-
check_no_existing_marshaler(name)
|
58
|
-
@marshalers[name] = MARSHALERS[type].new(**kwargs)
|
59
|
-
end
|
60
|
-
|
61
|
-
def extension(ext) # rubocop:disable Style/TrivialAccessors
|
62
|
-
@extension = ext
|
63
|
-
end
|
64
|
-
|
65
|
-
def build # rubocop:disable Metrics/MethodLength
|
66
|
-
raise 'no keys defined' if @marshalers.none?
|
67
|
-
|
68
|
-
klass = Struct.new(*@marshalers.keys) do
|
69
|
-
def initialize(**kwargs)
|
70
|
-
super(*kwargs.keys)
|
71
|
-
kwargs.each { |k, v| self[k] = v }
|
72
|
-
end
|
73
|
-
|
74
|
-
include InstanceMethods
|
75
|
-
|
76
|
-
class <<self
|
77
|
-
include ClassMethods
|
78
|
-
attr_accessor :key_value_name_spec
|
79
|
-
end
|
80
|
-
end
|
81
|
-
klass.key_value_name_spec = Spec.new(@marshalers, @extension)
|
82
|
-
klass
|
83
|
-
end
|
84
|
-
|
85
|
-
private
|
86
|
-
|
87
|
-
def check_no_existing_marshaler(key)
|
88
|
-
raise ArgumentError, "already have key: #{key}" if @marshalers.key?(key)
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'scanf'
|
4
|
-
|
5
|
-
module KeyValueName
|
6
|
-
#
|
7
|
-
# Read and write numeric types with a general format string for
|
8
|
-
# `Kernel#format` (or `Kernel#sprintf`) and `String#scanf`.
|
9
|
-
#
|
10
|
-
# This seems like a nice idea, but ruby's `scanf` doesn't seem to handle
|
11
|
-
# all possible format strings. For example, you can format with `%.1f`, but
|
12
|
-
# scanning with that string does not work. To work around this problem,
|
13
|
-
# you can specify a separate `scan_format` that `scanf` can handle; for this
|
14
|
-
# example, it would be just `%f`.
|
15
|
-
#
|
16
|
-
class NumericMarshaler < MarshalerBase
|
17
|
-
def initialize(format: '%g', scan_format: nil)
|
18
|
-
@format_string = format
|
19
|
-
@scan_format_string = scan_format
|
20
|
-
end
|
21
|
-
|
22
|
-
attr_reader :format_string
|
23
|
-
|
24
|
-
def scan_format_string
|
25
|
-
@scan_format_string || format_string
|
26
|
-
end
|
27
|
-
|
28
|
-
def matcher
|
29
|
-
# This is the usual regex, except that it also has to match `%x` formats,
|
30
|
-
# so it allows hexadecimal whole numbers.
|
31
|
-
/[-+]?[0-9]*\.?[0-9a-f]+(?:e[-+]?[0-9]+)?/i
|
32
|
-
end
|
33
|
-
|
34
|
-
def read(string)
|
35
|
-
values = string.scanf(scan_format_string)
|
36
|
-
raise "failed to scan: #{string}" if values.empty?
|
37
|
-
values.first
|
38
|
-
end
|
39
|
-
|
40
|
-
def write(value)
|
41
|
-
format(format_string, value)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|