key_value_name 0.0.1 → 0.1.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.
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: key_value_name
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.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: 2017-02-19 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: gemma
@@ -16,14 +15,14 @@ dependencies:
16
15
  requirements:
17
16
  - - "~>"
18
17
  - !ruby/object:Gem::Version
19
- version: 4.1.0
18
+ version: 6.0.0
20
19
  type: :development
21
20
  prerelease: false
22
21
  version_requirements: !ruby/object:Gem::Requirement
23
22
  requirements:
24
23
  - - "~>"
25
24
  - !ruby/object:Gem::Version
26
- version: 4.1.0
25
+ version: 6.0.0
27
26
  description: Store key-value pairs in file names, e.g. parameter names and parameters.
28
27
  email:
29
28
  - jdleesmiller@gmail.com
@@ -34,23 +33,37 @@ extra_rdoc_files:
34
33
  files:
35
34
  - README.md
36
35
  - lib/key_value_name.rb
37
- - lib/key_value_name/builder.rb
36
+ - lib/key_value_name/builders/container_builder.rb
37
+ - lib/key_value_name/builders/file_builder.rb
38
+ - lib/key_value_name/builders/folder_builder.rb
39
+ - lib/key_value_name/builders/key_value_builder.rb
40
+ - lib/key_value_name/builders/schema_builder.rb
41
+ - lib/key_value_name/collection.rb
38
42
  - lib/key_value_name/marshalers.rb
39
43
  - lib/key_value_name/marshalers/base.rb
40
- - lib/key_value_name/marshalers/numeric_marshaler.rb
44
+ - lib/key_value_name/marshalers/boolean_marshaler.rb
45
+ - lib/key_value_name/marshalers/float_marshaler.rb
46
+ - lib/key_value_name/marshalers/integer_marshaler.rb
41
47
  - lib/key_value_name/marshalers/symbol_marshaler.rb
48
+ - lib/key_value_name/mixins/file_name.rb
49
+ - lib/key_value_name/mixins/folder_name.rb
50
+ - lib/key_value_name/mixins/name.rb
51
+ - lib/key_value_name/schema.rb
42
52
  - lib/key_value_name/spec.rb
43
53
  - lib/key_value_name/version.rb
54
+ - test/key_value_name/extension_test.rb
55
+ - test/key_value_name/file_builder_test.rb
56
+ - test/key_value_name/folder_builder_test.rb
44
57
  - test/key_value_name/key_value_name_test.rb
58
+ - test/key_value_name/schema_test.rb
45
59
  homepage: https://github.com/jdleesmiller/key_value_name
46
60
  licenses: []
47
61
  metadata: {}
48
- post_install_message:
49
62
  rdoc_options:
50
63
  - "--main"
51
64
  - README.md
52
65
  - "--title"
53
- - key_value_name-0.0.1 Documentation
66
+ - key_value_name-0.1.0 Documentation
54
67
  require_paths:
55
68
  - lib
56
69
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -64,10 +77,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
64
77
  - !ruby/object:Gem::Version
65
78
  version: '0'
66
79
  requirements: []
67
- rubyforge_project:
68
- rubygems_version: 2.6.8
69
- signing_key:
80
+ rubygems_version: 3.6.7
70
81
  specification_version: 4
71
82
  summary: Store key-value pairs in file names, e.g. parameter names and parameters.
72
83
  test_files:
84
+ - test/key_value_name/extension_test.rb
85
+ - test/key_value_name/file_builder_test.rb
86
+ - test/key_value_name/folder_builder_test.rb
73
87
  - test/key_value_name/key_value_name_test.rb
88
+ - 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