monolens 0.5.0 → 0.5.3

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
  SHA1:
3
- metadata.gz: b2a9267753f8725ed91fc71b3c9b995a11d3b0c1
4
- data.tar.gz: 4aaaf0247bcb4f2195052a416ebe7742bfd2b72a
3
+ metadata.gz: bef48815edf1f5c767fd7e41ad3720046b4d6a7c
4
+ data.tar.gz: 366cfea423fca4d3a7aa7471a67fd19571016b50
5
5
  SHA512:
6
- metadata.gz: 99df61206eb26141c13a7a364fc9f5af97ade23d9a50e92e82cd8b2980cb88790e36402a852116d800a2caebe71af7b1bb90e4ad3dc8fdd450360d1ce63fe5e6
7
- data.tar.gz: a93491cec013f9993299ee227c2055c0c93a9f224c5da6a2526afbb95fe2516bf1b29250670c769667cd93bb018e613e3ae21b98d545a62109602e2fa2c1f843
6
+ metadata.gz: 1e0ae29c6ab1c18b22d3a96c7455983116f5433ba537ddf8a4c6a8c5ef289eb562a3d2d955da6218eb7ccf27a34488405f3fb66798524b03943deb61498093b3
7
+ data.tar.gz: 8513b04a89c60ded94f11a7296b613bf23358515b4f5e035b933afa9259e1f4ad7c0cc282d1d0c96841feefcaf46743aad325ed877c7e4b476663cb079f281f3
data/README.md CHANGED
@@ -79,6 +79,7 @@ result = lens.call(input)
79
79
  core.dig - Extract from the input value (object or array) using a path.
80
80
  core.chain - Applies a chain of lenses to an input value
81
81
  core.mapping - Converts the input value via a key:value mapping
82
+ core.literal - Returns a constant value takens as lens definition
82
83
 
83
84
  str.strip - Remove leading and trailing spaces of an input string
84
85
  str.split - Splits the input string as an array
@@ -102,6 +103,8 @@ coerce.integer - Coerces the input value to an integer
102
103
  array.compact - Removes null from the input array
103
104
  array.join - Joins values of the input array as a string
104
105
  array.map - Apply a lens to each member of an Array
106
+
107
+ check.notEmpty - Throws an error if the input is null or empty
105
108
  ```
106
109
 
107
110
  ## Public API
@@ -0,0 +1,26 @@
1
+ require 'date'
2
+
3
+ module Monolens
4
+ module Check
5
+ class NotEmpty
6
+ include Lens
7
+
8
+ def call(arg, world = {})
9
+ if arg.nil?
10
+ do_fail!(arg, world)
11
+ elsif arg.respond_to?(:empty?) && arg.empty?
12
+ do_fail!(arg, world)
13
+ else
14
+ arg
15
+ end
16
+ end
17
+
18
+ private
19
+
20
+ def do_fail!(arg, world)
21
+ message = option(:message, 'Input may not be empty')
22
+ fail!(message, world)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,11 @@
1
+ module Monolens
2
+ module Check
3
+ def notEmpty(options)
4
+ NotEmpty.new(options)
5
+ end
6
+ module_function :notEmpty
7
+
8
+ Monolens.define_namespace 'check', self
9
+ end
10
+ end
11
+ require_relative 'check/not_empty'
@@ -27,7 +27,7 @@ module Monolens
27
27
  end
28
28
  end
29
29
 
30
- fail!(first_error.message, world)
30
+ fail!("Invalid date `#{arg}`", world) if first_error
31
31
  end
32
32
 
33
33
  def strptime(arg, format = nil)
@@ -27,7 +27,7 @@ module Monolens
27
27
  end
28
28
  end
29
29
 
30
- fail!(first_error.message, world)
30
+ fail!("Invalid DateTime `#{arg}`", world) if first_error
31
31
  end
32
32
 
33
33
  private
@@ -0,0 +1,11 @@
1
+ module Monolens
2
+ module Core
3
+ class Literal
4
+ include Lens
5
+
6
+ def call(arg, world = {})
7
+ option(:defn)
8
+ end
9
+ end
10
+ end
11
+ end
data/lib/monolens/core.rb CHANGED
@@ -10,6 +10,11 @@ module Monolens
10
10
  end
11
11
  module_function :dig
12
12
 
13
+ def literal(options)
14
+ Literal.new(options)
15
+ end
16
+ module_function :literal
17
+
13
18
  def mapping(options)
14
19
  Mapping.new(options)
15
20
  end
@@ -21,3 +26,4 @@ end
21
26
  require_relative 'core/chain'
22
27
  require_relative 'core/dig'
23
28
  require_relative 'core/mapping'
29
+ require_relative 'core/literal'
@@ -1,5 +1,7 @@
1
1
  module Monolens
2
2
  class ErrorHandler
3
+ include Enumerable
4
+
3
5
  def initialize
4
6
  @errors = []
5
7
  end
@@ -8,6 +10,14 @@ module Monolens
8
10
  @errors << error
9
11
  end
10
12
 
13
+ def each(&bl)
14
+ @errors.each(&bl)
15
+ end
16
+
17
+ def size
18
+ @errors.size
19
+ end
20
+
11
21
  def empty?
12
22
  @errors.empty?
13
23
  end
@@ -2,7 +2,7 @@ module Monolens
2
2
  module Version
3
3
  MAJOR = 0
4
4
  MINOR = 5
5
- TINY = 0
5
+ TINY = 3
6
6
  end
7
7
  VERSION = "#{Version::MAJOR}.#{Version::MINOR}.#{Version::TINY}"
8
8
  end
data/lib/monolens.rb CHANGED
@@ -19,6 +19,7 @@ module Monolens
19
19
  require_relative 'monolens/array'
20
20
  require_relative 'monolens/object'
21
21
  require_relative 'monolens/coerce'
22
+ require_relative 'monolens/check'
22
23
 
23
24
  def load_file(file)
24
25
  Monolens::File.new(YAML.safe_load(::File.read(file)))
@@ -59,7 +60,7 @@ module Monolens
59
60
  raise "Invalid lens #{arg}" unless arg.size == 1
60
61
 
61
62
  name, options = arg.to_a.first
62
- namespace_name, lens_name = if name =~ /^[a-z]+\.[a-z]+$/
63
+ namespace_name, lens_name = if name =~ /^[a-z]+\.[a-z][a-zA-Z]+$/
63
64
  name.to_s.split('.')
64
65
  else
65
66
  ['core', name]
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+
3
+ describe Monolens, 'check.notEmpty' do
4
+ subject do
5
+ Monolens.lens('check.notEmpty' => options)
6
+ end
7
+
8
+ context 'with default options' do
9
+ let(:options) do
10
+ {}
11
+ end
12
+
13
+ it 'works on non empty strings' do
14
+ input = '12'
15
+ expect(subject.call(input)).to be(input)
16
+ end
17
+
18
+ it 'works on non empty arrays' do
19
+ input = ['12']
20
+ expect(subject.call(input)).to be(input)
21
+ end
22
+
23
+ it 'raises on empty strings' do
24
+ input = ''
25
+ expect {
26
+ subject.call(input)
27
+ }.to raise_error(Monolens::LensError, 'Input may not be empty')
28
+ end
29
+
30
+ it 'raises on empty arrays' do
31
+ input = []
32
+ expect {
33
+ subject.call(input)
34
+ }.to raise_error(Monolens::LensError, 'Input may not be empty')
35
+ end
36
+ end
37
+
38
+ context 'with a specific error message' do
39
+ let(:options) do
40
+ { message: 'Hello failure!' }
41
+ end
42
+
43
+ it 'raises on empty strings' do
44
+ input = ''
45
+ expect {
46
+ subject.call(input)
47
+ }.to raise_error(Monolens::LensError, 'Hello failure!')
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe Monolens, "core.literal" do
4
+ let(:lens) do
5
+ Monolens.lens('core.literal' => { defn: 'hello' })
6
+ end
7
+
8
+ it 'works' do
9
+ input = {}
10
+ expected = 'hello'
11
+ expect(lens.call(input)).to eql(expected)
12
+ end
13
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: monolens
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bernard Lambeau
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-13 00:00:00.000000000 Z
11
+ date: 2022-06-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -82,6 +82,8 @@ files:
82
82
  - lib/monolens/array/compact.rb
83
83
  - lib/monolens/array/join.rb
84
84
  - lib/monolens/array/map.rb
85
+ - lib/monolens/check.rb
86
+ - lib/monolens/check/not_empty.rb
85
87
  - lib/monolens/coerce.rb
86
88
  - lib/monolens/coerce/date.rb
87
89
  - lib/monolens/coerce/date_time.rb
@@ -91,6 +93,7 @@ files:
91
93
  - lib/monolens/core.rb
92
94
  - lib/monolens/core/chain.rb
93
95
  - lib/monolens/core/dig.rb
96
+ - lib/monolens/core/literal.rb
94
97
  - lib/monolens/core/mapping.rb
95
98
  - lib/monolens/error.rb
96
99
  - lib/monolens/error_handler.rb
@@ -120,6 +123,7 @@ files:
120
123
  - spec/monolens/array/test_compact.rb
121
124
  - spec/monolens/array/test_join.rb
122
125
  - spec/monolens/array/test_map.rb
126
+ - spec/monolens/check/test_not_empty.rb
123
127
  - spec/monolens/coerce/test_date.rb
124
128
  - spec/monolens/coerce/test_datetime.rb
125
129
  - spec/monolens/coerce/test_integer.rb
@@ -129,6 +133,7 @@ files:
129
133
  - spec/monolens/command/names.json
130
134
  - spec/monolens/command/robust-map-upcase.lens.yml
131
135
  - spec/monolens/core/test_dig.rb
136
+ - spec/monolens/core/test_literal.rb
132
137
  - spec/monolens/core/test_mapping.rb
133
138
  - spec/monolens/lens/test_options.rb
134
139
  - spec/monolens/object/test_extend.rb