sinclair 1.14.1 → 1.14.2
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 +4 -4
- data/README.md +29 -10
- data/config/yardstick.yml +1 -1
- data/lib/sinclair/class_methods.rb +41 -0
- data/lib/sinclair/version.rb +1 -1
- data/lib/sinclair.rb +16 -0
- data/spec/integration/yard/sinclair/class_methods/build_spec.rb +23 -0
- data/spec/integration/yard/sinclair_spec.rb +1 -1
- data/spec/lib/sinclair/class_methods_spec.rb +38 -0
- data/spec/support/models/http_json_model.rb +4 -6
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b6bd1d9896437c341e52648bac78c70d453a773c92a2fba06111d88d12be06a3
|
4
|
+
data.tar.gz: 5cb2ba761532e3db60ffc8a09b821509c1355949071c5346cef962b0d43dfe9d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bf2fd682ae8e6c57a8a173a5f78492bf6c7011dfef7734fd9c0c2d3d4d73fa599bac72a9317920dd0ebf5bb6c98f0f2f511c0fcc9fe5b683f766b5624359ccf3
|
7
|
+
data.tar.gz: db83a68fd9b11d0a227afca422f5a6e8e33bc64e3624a55c0d8f3b87d49235d8e17b1393c44b6ac2a67c8b9869e58d5780a3a06aad4f76429a4c4b0c48247f43
|
data/README.md
CHANGED
@@ -15,13 +15,13 @@ create custom comparators, configure your application, create powerfull options,
|
|
15
15
|
|
16
16
|
Employing Sinclair in your applications helps you streamline your development workflow and enhance your development process through more efficient, cleaner code
|
17
17
|
|
18
|
-
Current Release: [1.14.
|
18
|
+
Current Release: [1.14.2](https://github.com/darthjee/sinclair/tree/1.14.2)
|
19
19
|
|
20
|
-
[Next release](https://github.com/darthjee/sinclair/compare/1.14.
|
20
|
+
[Next release](https://github.com/darthjee/sinclair/compare/1.14.2...master)
|
21
21
|
|
22
22
|
Yard Documentation
|
23
23
|
-------------------
|
24
|
-
[https://www.rubydoc.info/gems/sinclair/1.14.
|
24
|
+
[https://www.rubydoc.info/gems/sinclair/1.14.2](https://www.rubydoc.info/gems/sinclair/1.14.2)
|
25
25
|
|
26
26
|
Installation
|
27
27
|
---------------
|
@@ -79,20 +79,20 @@ puts "One Hundred => #{Clazz.one_hundred_twenty}" # One Hundred Twenty => 120
|
|
79
79
|
<summary>Builder in class method</summary>
|
80
80
|
|
81
81
|
```ruby
|
82
|
+
# http_json_model.rb
|
83
|
+
|
82
84
|
class HttpJsonModel
|
83
85
|
attr_reader :json
|
84
86
|
|
85
87
|
class << self
|
86
88
|
def parse(attribute, path: [])
|
87
|
-
builder = Sinclair.new(self)
|
88
|
-
|
89
89
|
keys = (path + [attribute]).map(&:to_s)
|
90
90
|
|
91
|
-
|
92
|
-
|
91
|
+
Sinclair.build(self) do
|
92
|
+
add_method(attribute) do
|
93
|
+
keys.inject(hash) { |h, key| h[key] }
|
94
|
+
end
|
93
95
|
end
|
94
|
-
|
95
|
-
builder.build
|
96
96
|
end
|
97
97
|
end
|
98
98
|
|
@@ -104,6 +104,10 @@ class HttpJsonModel
|
|
104
104
|
@hash ||= JSON.parse(json)
|
105
105
|
end
|
106
106
|
end
|
107
|
+
```
|
108
|
+
|
109
|
+
```ruby
|
110
|
+
# http_person.rb
|
107
111
|
|
108
112
|
class HttpPerson < HttpJsonModel
|
109
113
|
parse :uid
|
@@ -112,7 +116,9 @@ class HttpPerson < HttpJsonModel
|
|
112
116
|
parse :username, path: [:digital_information]
|
113
117
|
parse :email, path: [:digital_information]
|
114
118
|
end
|
119
|
+
```
|
115
120
|
|
121
|
+
```ruby
|
116
122
|
json = <<-JSON
|
117
123
|
{
|
118
124
|
"uid": "12sof511",
|
@@ -675,6 +681,15 @@ You can use the provided matcher to check that your builder is adding a method c
|
|
675
681
|
<summary>Sample of specs over adding methods</summary>
|
676
682
|
|
677
683
|
```ruby
|
684
|
+
# spec_helper.rb
|
685
|
+
|
686
|
+
RSpec.configure do |config|
|
687
|
+
config.include Sinclair::Matchers
|
688
|
+
end
|
689
|
+
```
|
690
|
+
|
691
|
+
```ruby
|
692
|
+
# default_value.rb
|
678
693
|
class DefaultValue
|
679
694
|
delegate :build, to: :builder
|
680
695
|
attr_reader :klass, :method, :value, :class_method
|
@@ -698,8 +713,12 @@ class DefaultValue
|
|
698
713
|
end
|
699
714
|
end
|
700
715
|
end
|
716
|
+
```
|
717
|
+
|
718
|
+
```ruby
|
719
|
+
# default_value_spec.rb
|
701
720
|
|
702
|
-
RSpec.describe
|
721
|
+
RSpec.describe DefaultValue do
|
703
722
|
subject(:builder_class) { DefaultValue }
|
704
723
|
|
705
724
|
let(:klass) { Class.new }
|
data/config/yardstick.yml
CHANGED
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Sinclair
|
4
|
+
# @author darthjee
|
5
|
+
# @api public
|
6
|
+
#
|
7
|
+
# Class methods for {Sinclair}
|
8
|
+
module ClassMethods
|
9
|
+
# Runs build using a block for adding the methods
|
10
|
+
#
|
11
|
+
# The block is executed adding the methods and after the builder
|
12
|
+
# runs build building all the methods
|
13
|
+
#
|
14
|
+
# @param (see Sinclair#initialize)
|
15
|
+
# @param block [Proc] block to be executed by the builder
|
16
|
+
# in order to add the methods before running build
|
17
|
+
#
|
18
|
+
# @yield an instance of a builder ({Sinclair})
|
19
|
+
#
|
20
|
+
# @return (see Sinclair#build)
|
21
|
+
#
|
22
|
+
# @example Simple usage
|
23
|
+
# class MyPerson
|
24
|
+
# end
|
25
|
+
#
|
26
|
+
# Sinclair.build(model_class) do
|
27
|
+
# add_method(:random_name, cached: true) do
|
28
|
+
# "John #{Random.rand(1000)} Doe"
|
29
|
+
# end
|
30
|
+
# end
|
31
|
+
#
|
32
|
+
# model = MyPerson.new
|
33
|
+
#
|
34
|
+
# model.random_name # returns 'John 803 Doe'
|
35
|
+
def build(klass, options = {}, &block)
|
36
|
+
new(klass, options).tap do |builder|
|
37
|
+
builder.instance_eval(&block)
|
38
|
+
end.build
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/sinclair/version.rb
CHANGED
data/lib/sinclair.rb
CHANGED
@@ -83,6 +83,7 @@ class Sinclair
|
|
83
83
|
require 'sinclair/options_parser'
|
84
84
|
|
85
85
|
autoload :VERSION, 'sinclair/version'
|
86
|
+
autoload :ClassMethods, 'sinclair/class_methods'
|
86
87
|
autoload :Config, 'sinclair/config'
|
87
88
|
autoload :ConfigBuilder, 'sinclair/config_builder'
|
88
89
|
autoload :ConfigClass, 'sinclair/config_class'
|
@@ -100,6 +101,21 @@ class Sinclair
|
|
100
101
|
autoload :Options, 'sinclair/options'
|
101
102
|
|
102
103
|
include OptionsParser
|
104
|
+
extend ClassMethods
|
105
|
+
|
106
|
+
# @method self.build(klass, options = {}, &block)
|
107
|
+
# Runs build using a block for adding the methods
|
108
|
+
#
|
109
|
+
# The block is executed adding the methods and after the builder
|
110
|
+
# runs build building all the methods
|
111
|
+
#
|
112
|
+
# @see Sinclair::ClassMethods#build
|
113
|
+
#
|
114
|
+
# @param (see Sinclair::ClassMethods#build)
|
115
|
+
# @return (see Sinclair::ClassMethods#build)
|
116
|
+
# @yield (see Sinclair::ClassMethods#build)
|
117
|
+
#
|
118
|
+
# @example (see Sinclair::ClassMethods#build)
|
103
119
|
|
104
120
|
# Returns a new instance of Sinclair
|
105
121
|
#
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: false
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Sinclair::ClassMethods do
|
6
|
+
describe 'yard for .build' do
|
7
|
+
before { allow(Random).to receive(:rand).and_return(803) }
|
8
|
+
|
9
|
+
it 'Simple usage' do
|
10
|
+
model_class = Class.new
|
11
|
+
|
12
|
+
Sinclair.build(model_class) do
|
13
|
+
add_method(:random_name, cached: true) do
|
14
|
+
"John #{Random.rand(1000)} Doe"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
model = model_class.new
|
19
|
+
|
20
|
+
expect(model.random_name).to eq('John 803 Doe')
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Sinclair::ClassMethods do
|
6
|
+
subject(:builder) { builder_class.new(dummy_class, options) }
|
7
|
+
|
8
|
+
let(:options) { {} }
|
9
|
+
let(:instance) { dummy_class.new }
|
10
|
+
let(:dummy_class) { Class.new }
|
11
|
+
let(:builder_class) { Sinclair }
|
12
|
+
|
13
|
+
describe '#build' do
|
14
|
+
let(:block) do
|
15
|
+
method_name = :some_method
|
16
|
+
value = 1
|
17
|
+
|
18
|
+
proc do
|
19
|
+
add_method(method_name) { value }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'executes the block and builds' do
|
24
|
+
expect { builder_class.build(dummy_class, options, &block) }
|
25
|
+
.to add_method(:some_method).to(dummy_class)
|
26
|
+
end
|
27
|
+
|
28
|
+
context 'when the method is built and called' do
|
29
|
+
before do
|
30
|
+
builder_class.build(dummy_class, options, &block)
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'returns the value' do
|
34
|
+
expect(instance.some_method).to eq(1)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -5,15 +5,13 @@ class HttpJsonModel
|
|
5
5
|
|
6
6
|
class << self
|
7
7
|
def parse(attribute, path: [])
|
8
|
-
builder = Sinclair.new(self)
|
9
|
-
|
10
8
|
keys = (path + [attribute]).map(&:to_s)
|
11
9
|
|
12
|
-
|
13
|
-
|
10
|
+
Sinclair.build(self) do
|
11
|
+
add_method(attribute) do
|
12
|
+
keys.inject(hash) { |h, key| h[key] }
|
13
|
+
end
|
14
14
|
end
|
15
|
-
|
16
|
-
builder.build
|
17
15
|
end
|
18
16
|
end
|
19
17
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sinclair
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.14.
|
4
|
+
version: 1.14.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- DarthJee
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-04-
|
11
|
+
date: 2023-04-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -273,6 +273,7 @@ files:
|
|
273
273
|
- config/yardstick.yml
|
274
274
|
- docker-compose.yml
|
275
275
|
- lib/sinclair.rb
|
276
|
+
- lib/sinclair/class_methods.rb
|
276
277
|
- lib/sinclair/comparable.rb
|
277
278
|
- lib/sinclair/comparable/class_methods.rb
|
278
279
|
- lib/sinclair/config.rb
|
@@ -338,6 +339,7 @@ files:
|
|
338
339
|
- spec/integration/yard/my_builder_spec.rb
|
339
340
|
- spec/integration/yard/sinclair/add_class_method_spec.rb
|
340
341
|
- spec/integration/yard/sinclair/add_method_spec.rb
|
342
|
+
- spec/integration/yard/sinclair/class_methods/build_spec.rb
|
341
343
|
- spec/integration/yard/sinclair/comparable_spec.rb
|
342
344
|
- spec/integration/yard/sinclair/config_builder_spec.rb
|
343
345
|
- spec/integration/yard/sinclair/config_class_spec.rb
|
@@ -359,6 +361,7 @@ files:
|
|
359
361
|
- spec/integration/yard/sinclair/options_parser_spec.rb
|
360
362
|
- spec/integration/yard/sinclair/options_spec.rb
|
361
363
|
- spec/integration/yard/sinclair_spec.rb
|
364
|
+
- spec/lib/sinclair/class_methods_spec.rb
|
362
365
|
- spec/lib/sinclair/comparable_spec.rb
|
363
366
|
- spec/lib/sinclair/config/methods_builder_spec.rb
|
364
367
|
- spec/lib/sinclair/config_builder_spec.rb
|