disposable 0.2.5 → 0.2.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES.md +5 -0
- data/Gemfile +1 -1
- data/README.md +6 -0
- data/disposable.gemspec +1 -1
- data/lib/disposable/twin.rb +11 -3
- data/lib/disposable/twin/composition.rb +1 -1
- data/lib/disposable/version.rb +1 -1
- data/test/twin/inherit_test.rb +29 -1
- data/test/twin/inheritance_test.rb +73 -0
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 671f773f835c6eba43f53ee846d24f4ac5b72d2b
|
4
|
+
data.tar.gz: 0742d9831fb0bcd7d5e66e7352f829d787250cb2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fd89e067485d519c4cdd4ce66a3e02c6850bd78950c0854b11bdfa687d4847575cefad700b8a819fbd526279b3261c8e7c969124d43c31eb4d2d5e41c2e1aa9f
|
7
|
+
data.tar.gz: a1ebbb97af16dc427b484eaa311f47f0a4168cbfc27b77800f69384f4eae71124d6bf8b07829739efeb59352f76e3e07f8eef8a17b75b2818a474b273cda770e
|
data/CHANGES.md
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -2,6 +2,12 @@
|
|
2
2
|
|
3
3
|
_Decorators on top of your ORM layer._
|
4
4
|
|
5
|
+
[![Gitter Chat](https://badges.gitter.im/trailblazer/chat.svg)](https://gitter.im/trailblazer/chat)
|
6
|
+
[![TRB Newsletter](https://img.shields.io/badge/TRB-newsletter-lightgrey.svg)](http://trailblazer.to/newsletter/)
|
7
|
+
[![Build
|
8
|
+
Status](https://travis-ci.org/apotonick/disposable.svg)](https://travis-ci.org/apotonick/disposable)
|
9
|
+
[![Gem Version](https://badge.fury.io/rb/disposable.svg)](http://badge.fury.io/rb/disposable)
|
10
|
+
|
5
11
|
## Introduction
|
6
12
|
|
7
13
|
Disposable is the missing API of ActiveRecord*. The mission:
|
data/disposable.gemspec
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.require_paths = ["lib"]
|
19
19
|
|
20
20
|
spec.add_dependency "uber"
|
21
|
-
spec.add_dependency "declarative", "~> 0.0.
|
21
|
+
spec.add_dependency "declarative", "~> 0.0.6"
|
22
22
|
spec.add_dependency "representable", ">= 2.4.0", "<= 3.1.0"
|
23
23
|
|
24
24
|
spec.add_development_dependency "bundler", "~> 1.3"
|
data/lib/disposable/twin.rb
CHANGED
@@ -14,6 +14,13 @@ module Disposable
|
|
14
14
|
Definition
|
15
15
|
end
|
16
16
|
|
17
|
+
def self.inherited(subclass)
|
18
|
+
# no super here!
|
19
|
+
heritage.(subclass) do |cfg|
|
20
|
+
cfg[:args].last.merge!(_inherited: true) if cfg[:method] == :property
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
17
24
|
def schema
|
18
25
|
self.class.definitions.extend(DefinitionsEach)
|
19
26
|
end
|
@@ -25,7 +32,8 @@ module Disposable
|
|
25
32
|
|
26
33
|
# TODO: move to Declarative, as in Representable and Reform.
|
27
34
|
def property(name, options={}, &block)
|
28
|
-
options[:private_name]
|
35
|
+
options[:private_name] ||= options.delete(:from) || name
|
36
|
+
is_inherited = options.delete(:_inherited)
|
29
37
|
|
30
38
|
if options.delete(:virtual)
|
31
39
|
options[:writeable] = options[:readable] = false
|
@@ -33,8 +41,8 @@ module Disposable
|
|
33
41
|
|
34
42
|
options[:nested] = options.delete(:twin) if options[:twin]
|
35
43
|
|
36
|
-
super(name, options, &block).tap do |definition|
|
37
|
-
create_accessors(name, definition)
|
44
|
+
super(name, options, &block).tap do |definition| # super is Declarative::Schema::property.
|
45
|
+
create_accessors(name, definition) unless is_inherited
|
38
46
|
end
|
39
47
|
end
|
40
48
|
|
data/lib/disposable/version.rb
CHANGED
data/test/twin/inherit_test.rb
CHANGED
@@ -54,4 +54,32 @@ class InheritTest < MiniTest::Spec
|
|
54
54
|
|
55
55
|
# inherit inline twins when overriding.
|
56
56
|
it { Twin::Compilation.new(album).artist.artist_id.must_equal 1 }
|
57
|
-
|
57
|
+
|
58
|
+
describe "custom accessors get inherited" do
|
59
|
+
class Singer < Disposable::Twin
|
60
|
+
property :name
|
61
|
+
|
62
|
+
def name
|
63
|
+
super.reverse
|
64
|
+
end
|
65
|
+
|
66
|
+
def name=(val)
|
67
|
+
super(val.downcase)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
class Star < Singer
|
72
|
+
end
|
73
|
+
|
74
|
+
let (:model) { Model::Artist.new("Helloween") }
|
75
|
+
|
76
|
+
it do
|
77
|
+
artist = Star.new(model)
|
78
|
+
artist.name.must_equal("neewolleh")
|
79
|
+
|
80
|
+
artist.name = "HELLOWEEN"
|
81
|
+
# artist.with_custom_setter = "this gets ignored"
|
82
|
+
artist.name.must_equal("neewolleh")
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class InheritanceTest < Minitest::Spec
|
4
|
+
let (:song) { OpenStruct.new(id: 0) }
|
5
|
+
|
6
|
+
module Id
|
7
|
+
def id
|
8
|
+
super - 1
|
9
|
+
end
|
10
|
+
|
11
|
+
def id=(v)
|
12
|
+
super(v+1)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class Twin < Disposable::Twin
|
17
|
+
property :id
|
18
|
+
include Id
|
19
|
+
end
|
20
|
+
|
21
|
+
it do
|
22
|
+
twin = Twin.new(song)
|
23
|
+
twin.id.must_equal 0
|
24
|
+
end
|
25
|
+
|
26
|
+
class TwinComposition < Disposable::Twin
|
27
|
+
include Composition
|
28
|
+
|
29
|
+
property :id, on: :song
|
30
|
+
include Id
|
31
|
+
end
|
32
|
+
|
33
|
+
it do
|
34
|
+
twin = TwinComposition.new(song: song)
|
35
|
+
twin.id.must_equal 0
|
36
|
+
twin.id= 3
|
37
|
+
twin.id.must_equal 3
|
38
|
+
end
|
39
|
+
|
40
|
+
|
41
|
+
class TwinCompositionDefineMethod < Disposable::Twin
|
42
|
+
include Composition
|
43
|
+
|
44
|
+
property :id, on: :song
|
45
|
+
|
46
|
+
define_method :id do
|
47
|
+
super() + 9
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
it do
|
52
|
+
twin = TwinCompositionDefineMethod.new(song: song)
|
53
|
+
twin.id.must_equal 9
|
54
|
+
end
|
55
|
+
|
56
|
+
|
57
|
+
describe ":from" do
|
58
|
+
let (:song) { Struct.new(:ident).new(1) }
|
59
|
+
|
60
|
+
class TwinWithFrom < Disposable::Twin
|
61
|
+
include Expose
|
62
|
+
property :id, from: :ident
|
63
|
+
end
|
64
|
+
|
65
|
+
class InheritingFrom < TwinWithFrom
|
66
|
+
end
|
67
|
+
|
68
|
+
it do
|
69
|
+
TwinWithFrom.new(song).id.must_equal 1
|
70
|
+
InheritingFrom.new(song).id.must_equal 1
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: disposable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Sutterer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-03-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: uber
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.0.
|
33
|
+
version: 0.0.6
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.0.
|
40
|
+
version: 0.0.6
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: representable
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -204,6 +204,7 @@ files:
|
|
204
204
|
- test/twin/from_collection_test.rb
|
205
205
|
- test/twin/from_test.rb
|
206
206
|
- test/twin/inherit_test.rb
|
207
|
+
- test/twin/inheritance_test.rb
|
207
208
|
- test/twin/option_test.rb
|
208
209
|
- test/twin/parent_test.rb
|
209
210
|
- test/twin/process_inline_test.rb
|
@@ -264,6 +265,7 @@ test_files:
|
|
264
265
|
- test/twin/from_collection_test.rb
|
265
266
|
- test/twin/from_test.rb
|
266
267
|
- test/twin/inherit_test.rb
|
268
|
+
- test/twin/inheritance_test.rb
|
267
269
|
- test/twin/option_test.rb
|
268
270
|
- test/twin/parent_test.rb
|
269
271
|
- test/twin/process_inline_test.rb
|