disposable 0.4.7 → 0.6.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/.github/workflows/ci.yml +29 -0
- data/CHANGES.md +20 -0
- data/Gemfile +3 -1
- data/Gemfile_builder_test.rb +6 -0
- data/README.md +4 -0
- data/Rakefile +8 -2
- data/disposable.gemspec +2 -4
- data/lib/disposable/twin/builder.rb +1 -0
- data/lib/disposable/twin/default.rb +3 -3
- data/lib/disposable/twin/property/unnest.rb +9 -6
- data/lib/disposable/twin.rb +6 -2
- data/lib/disposable/version.rb +1 -1
- data/test/test_helper.rb +1 -1
- data/test/twin/builder_test.rb +4 -0
- metadata +11 -52
- data/.travis.yml +0 -44
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 503eaa80c2c7e5c2808e22cfff709fa359fc3c582b8db5c7917800c406ec55db
|
4
|
+
data.tar.gz: 28b2091c2f06ff81e5ee2bbed56a496b91421753afd97782f3a2e3f298dbc53b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9ddecb0c8eaa4d66162d059c23fb2f495658fd67e5bc35aaf568cdf39bb9d21b4816703577a732daac330e279876b06cfec6a624eeb7c7a6da724d764e224c27
|
7
|
+
data.tar.gz: 9728842db88f5794ccf1e4729801d28badf5389cabdd0bda11c5391283ab41317275a5fe0aefa3cb259e2b63026de5174aba51e38bf6a87b06c968b0e50a6c22
|
@@ -0,0 +1,29 @@
|
|
1
|
+
name: CI
|
2
|
+
on: [push, pull_request]
|
3
|
+
jobs:
|
4
|
+
test:
|
5
|
+
strategy:
|
6
|
+
fail-fast: false
|
7
|
+
matrix:
|
8
|
+
ruby: [2.6]
|
9
|
+
active_record: [5.2, 6.0]
|
10
|
+
dry_types: [1.0, 1.2]
|
11
|
+
|
12
|
+
include:
|
13
|
+
- ruby: 2.7
|
14
|
+
active_record: 6.1
|
15
|
+
dry_types: 1.5
|
16
|
+
# Due to https://github.com/actions/runner/issues/849, we have to use quotes for '3.0'
|
17
|
+
- ruby: '3.0'
|
18
|
+
active_record: 6.1
|
19
|
+
dry_types: 1.5
|
20
|
+
|
21
|
+
runs-on: ubuntu-latest
|
22
|
+
steps:
|
23
|
+
- uses: actions/checkout@v2
|
24
|
+
- uses: ruby/setup-ruby@v1
|
25
|
+
with:
|
26
|
+
ruby-version: ${{ matrix.ruby }}
|
27
|
+
# bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
28
|
+
- run: ACTIVERECORD=${{ matrix.active_record}} DRY_TYPES=${{ matrix.dry_types }} bundle install
|
29
|
+
- run: ACTIVERECORD=${{ matrix.active_record}} DRY_TYPES=${{ matrix.dry_types }} bundle exec rake
|
data/CHANGES.md
CHANGED
@@ -1,3 +1,23 @@
|
|
1
|
+
# 0.6.2
|
2
|
+
|
3
|
+
* Remove `Forwardable` from `Unnest` and refrain from including it into the `Twin` class.
|
4
|
+
This may overwrite the same-named `ActiveSupport::delegate` method and breaks things.
|
5
|
+
Instead, do manual delegation and plan for 2023 to allow using `Forwardable.delegate(target, what, where)`.
|
6
|
+
|
7
|
+
|
8
|
+
# 0.6.1
|
9
|
+
|
10
|
+
* Remove `**options` argument from `#property` as it's inconsistent with underlying gems.
|
11
|
+
|
12
|
+
# 0.6.0
|
13
|
+
|
14
|
+
* Remove `uber` gem.
|
15
|
+
* Remove `declarative-builder` dependency and make it optional. Add `gem "declarative-builder"` to your `Gemfile` should you need this feature.
|
16
|
+
|
17
|
+
# 0.5.0
|
18
|
+
|
19
|
+
* Upgrade `representable` to replace `Declarative::Option` with `Representable::Option` in order to support ruby-3 style of keyword arguments.
|
20
|
+
|
1
21
|
# 0.4.7
|
2
22
|
|
3
23
|
* Deprecation warning for nilify options for dry-v >= 1.x
|
data/Gemfile
CHANGED
@@ -7,4 +7,6 @@ gem "minitest-line"
|
|
7
7
|
gem gem_name, dependency
|
8
8
|
end
|
9
9
|
|
10
|
-
gem "sqlite3", ENV.fetch('ACTIVERECORD', '5.2').to_f >= 6 ? '~> 1.4' : '~> 1.3.0'
|
10
|
+
gem "sqlite3", '~> 1.4' # => , ENV.fetch('ACTIVERECORD', '5.2').to_f >= 6 ? '~> 1.4' : '~> 1.3.0'
|
11
|
+
|
12
|
+
# gem "declarative-builder"
|
data/README.md
CHANGED
@@ -640,3 +640,7 @@ Note that this will internally add a `parent` property.
|
|
640
640
|
|
641
641
|
* [Reform](https://github.com/apotonick/reform) forms are based on twins and add a little bit of form decoration on top. Every nested form is a twin.
|
642
642
|
* [Trailblazer](https://github.com/apotonick/trailblazer) uses twins as decorators and callbacks in operations to structure business logic.
|
643
|
+
|
644
|
+
## Development
|
645
|
+
|
646
|
+
* `rake test` runs all tests without `builder_test.rb`. For the latter, run `BUNDLE_GEMFILE=Gemfile_builder_test.rb bundle exec rake test_builder`
|
data/Rakefile
CHANGED
@@ -4,6 +4,12 @@ require "rake/testtask"
|
|
4
4
|
task :default => [:test]
|
5
5
|
Rake::TestTask.new(:test) do |test|
|
6
6
|
test.libs << 'test'
|
7
|
-
test.test_files = FileList['test/**/*_test.rb']
|
7
|
+
test.test_files = FileList['test/**/*_test.rb'] - ["test/twin/builder_test.rb"]
|
8
8
|
test.verbose = true
|
9
|
-
end
|
9
|
+
end
|
10
|
+
|
11
|
+
Rake::TestTask.new(:test_builder) do |test|
|
12
|
+
test.libs << 'test'
|
13
|
+
test.test_files = FileList["test/twin/builder_test.rb"]
|
14
|
+
test.verbose = true
|
15
|
+
end
|
data/disposable.gemspec
CHANGED
@@ -16,11 +16,9 @@ Gem::Specification.new do |spec|
|
|
16
16
|
spec.test_files = spec.files.grep(%r{^(test)/})
|
17
17
|
spec.require_paths = ["lib"]
|
18
18
|
|
19
|
-
spec.add_dependency "uber", "< 0.2.0"
|
20
19
|
spec.add_dependency "declarative", ">= 0.0.9", "< 1.0.0"
|
21
|
-
spec.add_dependency "declarative-builder"
|
22
|
-
spec.add_dependency "
|
23
|
-
spec.add_dependency "representable", ">= 2.4.0", "<= 3.1.0"
|
20
|
+
# spec.add_dependency "declarative-builder" #, ">= 0.2.0"
|
21
|
+
spec.add_dependency "representable", ">= 3.1.1", "< 3.2.0"
|
24
22
|
|
25
23
|
spec.add_development_dependency "bundler"#, "~> 1.3"
|
26
24
|
spec.add_development_dependency "rake"
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require "
|
1
|
+
require "representable/option"
|
2
2
|
|
3
3
|
# TODO: allow default: -> for hashes, etc.
|
4
4
|
module Disposable::Twin::Default
|
@@ -12,13 +12,13 @@ module Disposable::Twin::Default
|
|
12
12
|
# TODO: introduce Null object in Declarative::Definition#[].
|
13
13
|
# dfn[:default].(self) # dfn#[] should return a Null object here if empty.
|
14
14
|
return unless dfn[:default]
|
15
|
-
dfn[:default].(self)
|
15
|
+
dfn[:default].(exec_context: self) # Representable::Option#call
|
16
16
|
end
|
17
17
|
|
18
18
|
module ClassMethods
|
19
19
|
private
|
20
20
|
def build_definition(name, options={}, &block)
|
21
|
-
options = options.merge(default:
|
21
|
+
options = options.merge(default: ::Representable::Option(options[:default])) if options.has_key?(:default)
|
22
22
|
super
|
23
23
|
end
|
24
24
|
end
|
@@ -1,11 +1,6 @@
|
|
1
|
-
require "uber/delegates"
|
2
|
-
|
3
1
|
module Disposable::Twin::Property
|
4
2
|
module Unnest
|
5
3
|
# TODO: test that nested properties options are "unnested", too, e.g. populator.
|
6
|
-
def self.included(includer)
|
7
|
-
includer.send(:include, Uber::Delegates)
|
8
|
-
end
|
9
4
|
|
10
5
|
def unnest(name, options)
|
11
6
|
from = options.delete(:from)
|
@@ -15,7 +10,15 @@ module Disposable::Twin::Property
|
|
15
10
|
options = options.merge(virtual: true, _inherited: true, private_name: nil)
|
16
11
|
|
17
12
|
property(name, options)
|
18
|
-
|
13
|
+
# def_delegators from, name, "#{name}=" # FIXME: this overwrites ActiveSupport#delegate in some cases.
|
14
|
+
|
15
|
+
define_method name do
|
16
|
+
send(from).send(name) # TODO: fix Forwardable in Ruby.
|
17
|
+
end
|
18
|
+
|
19
|
+
define_method "#{name}=" do |value|
|
20
|
+
send(from).send("#{name}=", value)
|
21
|
+
end
|
19
22
|
end
|
20
23
|
end
|
21
24
|
end
|
data/lib/disposable/twin.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require "uber/inheritable_attr"
|
1
|
+
# require "uber/inheritable_attr"
|
2
2
|
require "declarative/schema"
|
3
3
|
require "representable/decorator"
|
4
4
|
|
@@ -28,6 +28,10 @@ module Disposable
|
|
28
28
|
Definition::Each.new(self.class.definitions) # TODO: change this interface.
|
29
29
|
end
|
30
30
|
|
31
|
+
def self.schema
|
32
|
+
Definition::Each.new(definitions)
|
33
|
+
end
|
34
|
+
|
31
35
|
class << self
|
32
36
|
def default_nested_class
|
33
37
|
Twin
|
@@ -140,7 +144,7 @@ require "disposable/twin/definitions"
|
|
140
144
|
require "disposable/twin/collection"
|
141
145
|
require "disposable/twin/sync"
|
142
146
|
require "disposable/twin/save"
|
143
|
-
require "disposable/twin/builder"
|
147
|
+
# require "disposable/twin/builder"
|
144
148
|
require "disposable/twin/changed"
|
145
149
|
require "disposable/twin/property_processor"
|
146
150
|
require "disposable/twin/persisted"
|
data/lib/disposable/version.rb
CHANGED
data/test/test_helper.rb
CHANGED
data/test/twin/builder_test.rb
CHANGED
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: disposable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Sutterer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-12-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: uber
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "<"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 0.2.0
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "<"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 0.2.0
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: declarative
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -44,54 +30,26 @@ dependencies:
|
|
44
30
|
- - "<"
|
45
31
|
- !ruby/object:Gem::Version
|
46
32
|
version: 1.0.0
|
47
|
-
- !ruby/object:Gem::Dependency
|
48
|
-
name: declarative-builder
|
49
|
-
requirement: !ruby/object:Gem::Requirement
|
50
|
-
requirements:
|
51
|
-
- - "<"
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: 0.2.0
|
54
|
-
type: :runtime
|
55
|
-
prerelease: false
|
56
|
-
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
requirements:
|
58
|
-
- - "<"
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
version: 0.2.0
|
61
|
-
- !ruby/object:Gem::Dependency
|
62
|
-
name: declarative-option
|
63
|
-
requirement: !ruby/object:Gem::Requirement
|
64
|
-
requirements:
|
65
|
-
- - "<"
|
66
|
-
- !ruby/object:Gem::Version
|
67
|
-
version: 0.2.0
|
68
|
-
type: :runtime
|
69
|
-
prerelease: false
|
70
|
-
version_requirements: !ruby/object:Gem::Requirement
|
71
|
-
requirements:
|
72
|
-
- - "<"
|
73
|
-
- !ruby/object:Gem::Version
|
74
|
-
version: 0.2.0
|
75
33
|
- !ruby/object:Gem::Dependency
|
76
34
|
name: representable
|
77
35
|
requirement: !ruby/object:Gem::Requirement
|
78
36
|
requirements:
|
79
37
|
- - ">="
|
80
38
|
- !ruby/object:Gem::Version
|
81
|
-
version:
|
82
|
-
- - "
|
39
|
+
version: 3.1.1
|
40
|
+
- - "<"
|
83
41
|
- !ruby/object:Gem::Version
|
84
|
-
version: 3.
|
42
|
+
version: 3.2.0
|
85
43
|
type: :runtime
|
86
44
|
prerelease: false
|
87
45
|
version_requirements: !ruby/object:Gem::Requirement
|
88
46
|
requirements:
|
89
47
|
- - ">="
|
90
48
|
- !ruby/object:Gem::Version
|
91
|
-
version:
|
92
|
-
- - "
|
49
|
+
version: 3.1.1
|
50
|
+
- - "<"
|
93
51
|
- !ruby/object:Gem::Version
|
94
|
-
version: 3.
|
52
|
+
version: 3.2.0
|
95
53
|
- !ruby/object:Gem::Dependency
|
96
54
|
name: bundler
|
97
55
|
requirement: !ruby/object:Gem::Requirement
|
@@ -169,10 +127,11 @@ executables: []
|
|
169
127
|
extensions: []
|
170
128
|
extra_rdoc_files: []
|
171
129
|
files:
|
130
|
+
- ".github/workflows/ci.yml"
|
172
131
|
- ".gitignore"
|
173
|
-
- ".travis.yml"
|
174
132
|
- CHANGES.md
|
175
133
|
- Gemfile
|
134
|
+
- Gemfile_builder_test.rb
|
176
135
|
- LICENSE.txt
|
177
136
|
- README.md
|
178
137
|
- Rakefile
|
@@ -259,7 +218,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
259
218
|
- !ruby/object:Gem::Version
|
260
219
|
version: '0'
|
261
220
|
requirements: []
|
262
|
-
rubygems_version: 3.
|
221
|
+
rubygems_version: 3.2.3
|
263
222
|
signing_key:
|
264
223
|
specification_version: 4
|
265
224
|
summary: Decorators on top of your ORM layer with change tracking, collection semantics
|
data/.travis.yml
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
rvm:
|
3
|
-
- ruby-head
|
4
|
-
- 2.6
|
5
|
-
- 2.5
|
6
|
-
- 2.4
|
7
|
-
env:
|
8
|
-
- "ACTIVERECORD=5.0 DRY_TYPES=0.13"
|
9
|
-
- "ACTIVERECORD=5.0 DRY_TYPES=0.14"
|
10
|
-
- "ACTIVERECORD=5.0 DRY_TYPES=0.15"
|
11
|
-
- "ACTIVERECORD=5.0 DRY_TYPES=1.0"
|
12
|
-
- "ACTIVERECORD=5.0 DRY_TYPES=1.1"
|
13
|
-
- "ACTIVERECORD=5.0 DRY_TYPES=1.2"
|
14
|
-
- "ACTIVERECORD=5.1 DRY_TYPES=0.13"
|
15
|
-
- "ACTIVERECORD=5.1 DRY_TYPES=0.14"
|
16
|
-
- "ACTIVERECORD=5.1 DRY_TYPES=0.15"
|
17
|
-
- "ACTIVERECORD=5.1 DRY_TYPES=1.0"
|
18
|
-
- "ACTIVERECORD=5.1 DRY_TYPES=1.1"
|
19
|
-
- "ACTIVERECORD=5.1 DRY_TYPES=1.2"
|
20
|
-
- "ACTIVERECORD=5.2 DRY_TYPES=0.13"
|
21
|
-
- "ACTIVERECORD=5.2 DRY_TYPES=0.14"
|
22
|
-
- "ACTIVERECORD=5.2 DRY_TYPES=0.15"
|
23
|
-
- "ACTIVERECORD=5.2 DRY_TYPES=1.0"
|
24
|
-
- "ACTIVERECORD=5.2 DRY_TYPES=1.1"
|
25
|
-
- "ACTIVERECORD=5.2 DRY_TYPES=1.2"
|
26
|
-
- "ACTIVERECORD=6.0 DRY_TYPES=0.13"
|
27
|
-
- "ACTIVERECORD=6.0 DRY_TYPES=0.14"
|
28
|
-
- "ACTIVERECORD=6.0 DRY_TYPES=0.15"
|
29
|
-
- "ACTIVERECORD=6.0 DRY_TYPES=1.0"
|
30
|
-
- "ACTIVERECORD=6.0 DRY_TYPES=1.1"
|
31
|
-
- "ACTIVERECORD=6.0 DRY_TYPES=1.2"
|
32
|
-
gemfile:
|
33
|
-
- Gemfile
|
34
|
-
matrix:
|
35
|
-
fast_finish: true
|
36
|
-
allow_failures:
|
37
|
-
- rvm: ruby-head
|
38
|
-
exclude:
|
39
|
-
- {rvm: 2.4, env: "ACTIVERECORD=6.0 DRY_TYPES=0.13"}
|
40
|
-
- {rvm: 2.4, env: "ACTIVERECORD=6.0 DRY_TYPES=0.14"}
|
41
|
-
- {rvm: 2.4, env: "ACTIVERECORD=6.0 DRY_TYPES=0.15"}
|
42
|
-
- {rvm: 2.4, env: "ACTIVERECORD=6.0 DRY_TYPES=1.0"}
|
43
|
-
- {rvm: 2.4, env: "ACTIVERECORD=6.0 DRY_TYPES=1.1"}
|
44
|
-
- {rvm: 2.4, env: "ACTIVERECORD=6.0 DRY_TYPES=1.2"}
|