disposable 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 980c3ca068019abe74214a9e095fc98f50bf23aa
4
- data.tar.gz: e175303be9fafaf0c1aa6076026b85e803186716
3
+ metadata.gz: 0961ea267a9adeeb55f33da903f0bd85e21070f4
4
+ data.tar.gz: f3ff1a24210acaaa96a933d3889ccee74c4db7b2
5
5
  SHA512:
6
- metadata.gz: bdbc328efa3c93b553ad2cc7587ba52a002841fce3773048a5cd1cac7dfb36975d4f090106a66c3b06b19c1e8f645ad7ae37ee080e2746cdaf2e20253f0dd9d6
7
- data.tar.gz: a1ac3f15b89b7d5276711d0f84ee5c722fecdccc5e225b899e61bb30b13ef044c0bf5f4f1082df9e19eb8da3550f922eed2cbbd5b43ec442d93e0ce21d784939
6
+ metadata.gz: bb3cbf404ad41a23dd6b25aa6fc49029a5d0e1ec75d657eed33440c1acb8ee5c2915048ecf1b2bf3c2737d5abf8c285ded7770cff552f3c5205a73e897a307b0
7
+ data.tar.gz: c96c0291615cfe64633d8a155b417fcf506eb306b14e968fe36c6001166f2acecce25f9b1f60bc51f1206f71264e75907186c2eb6719e3a09768a96568f82f85
data/CHANGES.md CHANGED
@@ -1,3 +1,7 @@
1
+ # 0.0.7
2
+
3
+ * Make disposable require representable 2.x.
4
+
1
5
  # 0.0.6
2
6
 
3
7
  * Add Twin::Option.
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Disposable
2
2
 
3
- _Provides domain objects on top of your ORM layer._
3
+ _Decorators on top of your ORM layer._
4
4
 
5
5
  ## Introduction
6
6
 
@@ -14,101 +14,87 @@ They give you an encapsulated alternative to delegators that many projects use t
14
14
 
15
15
  ## Why?
16
16
 
17
- The goal is to have business logic sitting in twin classes, while your models (ideally) contain persistence configuration, only.
18
-
19
- Beyond that, twins can be used in form objects, cells view models, representers, contracts, and actually any Ruby code :)
17
+ The goal is to have one object that delegates reading and writing to underlying object(s). This is a fundamental concept for cells view models, representers, and reform form objects.
20
18
 
21
19
  Twins may contain validations, nevertheless, in Trailblazer, validations (or "Contracts") sit one layer above. They still can be part of your domain, though.
22
20
 
23
21
  ## Twin
24
22
 
25
- Twins implement light-weight domain objects that contain business logic - no persistance logic. They have read- and write access to a persistent object (or a composition of those) and expose a sub-set of accessors to that persistent "brother", making it a "data mapper-like phantom".
23
+ Twins implement light-weight decorators objects with a unified interface. They map objects, hashes, and compositions of objects, along with optional hashes to inject additional options.
26
24
 
27
- Being designed to wrap persistent objects, a typical "brother" class could be an ActiveRecord one.
25
+ Let me show you what I mean.
28
26
 
29
27
  ```ruby
30
- class Song < ActiveRecord::Base
31
- belongs_to :album
32
- end
28
+ song = Song.create(title: "Savior", length: 242)
33
29
  ```
34
30
 
35
- You don't wanna work with that persistent brother directly anymore. A twin will wrap it and indirect domain from persistance.
31
+ ## Definition
36
32
 
37
- The twin itself has a _ridiculous_ simple API.
33
+ Twins need to define every field they expose.
38
34
 
39
35
  ```ruby
40
- class Twin::Song < Disposable::Twin
41
- model ::Song # the persistent ActiveRecord brother class
42
-
36
+ class Song::Twin < Disposable::Twin
43
37
  property :title
44
- property :album, twin: Album # a nested twin.
38
+ property :length
39
+ option :good?
40
+ end
45
41
  ```
46
42
 
43
+ ## Creation
47
44
 
48
- ### Creation
49
-
50
- You can create fresh, blank-slate twins yourself. They will create a new persistent object automatically.
45
+ You need to pass model and the optional options to the twin constructor.
51
46
 
52
47
  ```ruby
53
- song = Twin::Song.new(title: "Justified Black Eye")
54
-
55
- #=> #<Twin::Song title: "Justified Black Eye">
48
+ twin = Song::Twin.new(song, good?: true)
56
49
  ```
57
50
 
58
- This doesn't involve any database operations at all.
51
+ ## Reading
59
52
 
60
-
61
- ### Finders
62
-
63
- You can use any finder/scope defined in your model to create twins.
64
-
65
- Since `::find` is pretty common, it is defined directly on the twin class.
53
+ This will create a composition object of the actual model and the hash.
66
54
 
67
55
  ```ruby
68
- song = Twin::Song.find(1)
69
-
70
- #=> #<Twin::Song title: "Already Won" album: #<Twin::Album>>
56
+ twin.title #=> "Savior"
57
+ twin.good? #=> true
71
58
  ```
72
59
 
73
- This invokes the actual finder method on the model class. Every found model will simply be wrapped in its twin.
74
-
75
-
76
- Any other scope or finder can be called on `finders`.
60
+ You can also override `property` values in the constructor:
77
61
 
78
62
  ```ruby
79
- song = Twin::Song.finders.where(name: "3 O'Clock Shot")
80
-
81
- #=> [#<Twin::Song title: "3 O'Clock Shot" album: #<Twin::Album>>]
63
+ twin = Song::Twin.new(song, title: "Plasticash")
64
+ twin.title #=> "Plasticash"
82
65
  ```
83
66
 
67
+ Let's talk about what happens to the actual model when setting values?
84
68
 
69
+ ## Writing
85
70
 
86
- ### Read And Write Access
71
+ It doesn't happen. The model is only queried when _reading_ values. Writing only happens in additional modules: Syncing and Saving is where the values held in the twin are written to the model.
87
72
 
88
- All attributes declared with `property` are exposed on the twin.
73
+ ## Renaming
89
74
 
90
- ```ruby
91
- song.title #=> "Already Won"
75
+ ## Structs
92
76
 
93
- song.album.name #=> "The Songs of Tony Sly: A Tribute"
77
+ If you don't have a model but a simple hash, use `Struct`.
78
+
79
+ ```ruby
80
+ class Song::Twin < Disposable::Twin
81
+ include Struct
82
+ property :title
83
+ property :length
84
+ end
94
85
  ```
95
86
 
96
- Note that writing to the twin **does not** change any state on the persistent brother.
87
+ Note that a hash goes into the constructor now.
97
88
 
98
89
  ```ruby
99
- song.title = "Still Winning" # no change on Song, no write to DB.
90
+ twin = Song::Twin.new(title: "Savior", good?: true)
100
91
  ```
101
92
 
102
93
 
103
- ### Saving
104
-
105
- Calling `#save` will sync all properties to the brother object and advice the persistent brother to save. This works recursively, meaning that nested twins will do the same with their pendant.
94
+ ## Compositions
106
95
 
107
- ```ruby
108
- song.save # write to DB.
109
- ```
96
+ ## Overriding Accessors
110
97
 
111
- ## Notes
98
+ super
112
99
 
113
- * Twins don't know anything about the underlying persistance layer.
114
- * Lazy-loading TBI
100
+ ## Used In
data/database.sqlite3 CHANGED
Binary file
data/disposable.gemspec CHANGED
@@ -19,12 +19,12 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_dependency "uber"
22
- spec.add_dependency "representable", "~> 2.0.3"
22
+ spec.add_dependency "representable", "~> 2.0"
23
23
 
24
24
  spec.add_development_dependency "bundler", "~> 1.3"
25
25
  spec.add_development_dependency "rake"
26
- spec.add_development_dependency "minitest"
27
- spec.add_development_dependency "activerecord"
28
- spec.add_development_dependency "sqlite3"
29
- spec.add_development_dependency "database_cleaner"
26
+ spec.add_development_dependency "minitest", "5.4.1"
27
+ # spec.add_development_dependency "activerecord"
28
+ # spec.add_development_dependency "sqlite3"
29
+ # spec.add_development_dependency "database_cleaner"
30
30
  end
@@ -31,13 +31,12 @@ GEM
31
31
  activesupport (3.0.20)
32
32
  arel (2.0.10)
33
33
  builder (2.1.2)
34
- database_cleaner (1.3.0)
35
34
  erubis (2.6.6)
36
35
  abstract (>= 1.0.0)
37
- i18n (0.5.0)
38
- json (1.8.0)
36
+ i18n (0.5.4)
37
+ json (1.8.1)
39
38
  mini_portile (0.6.0)
40
- minitest (5.0.8)
39
+ minitest (5.4.1)
41
40
  multi_json (1.10.1)
42
41
  nokogiri (1.6.3.1)
43
42
  mini_portile (= 0.6.0)
@@ -52,17 +51,16 @@ GEM
52
51
  rake (>= 0.8.7)
53
52
  rdoc (~> 3.4)
54
53
  thor (~> 0.14.4)
55
- rake (10.1.0)
54
+ rake (10.3.2)
56
55
  rdoc (3.12.2)
57
56
  json (~> 1.4)
58
- representable (2.0.3)
57
+ representable (2.0.4)
59
58
  multi_json
60
59
  nokogiri
61
60
  uber (~> 0.0.7)
62
- sqlite3 (1.3.8)
63
61
  thor (0.14.6)
64
- tzinfo (0.3.38)
65
- uber (0.0.7)
62
+ tzinfo (0.3.41)
63
+ uber (0.0.8)
66
64
 
67
65
  PLATFORMS
68
66
  ruby
@@ -70,9 +68,7 @@ PLATFORMS
70
68
  DEPENDENCIES
71
69
  activerecord (~> 3.0.11)
72
70
  bundler (~> 1.3)
73
- database_cleaner
74
71
  disposable!
75
- minitest
72
+ minitest (= 5.4.1)
76
73
  railties (~> 3.0.11)
77
74
  rake
78
- sqlite3
@@ -31,14 +31,13 @@ GEM
31
31
  multi_json (~> 1.0)
32
32
  arel (3.0.3)
33
33
  builder (3.0.4)
34
- database_cleaner (1.3.0)
35
34
  erubis (2.7.0)
36
35
  hike (1.2.3)
37
36
  i18n (0.6.11)
38
37
  journey (1.0.4)
39
38
  json (1.8.1)
40
39
  mini_portile (0.6.0)
41
- minitest (5.4.0)
40
+ minitest (5.4.1)
42
41
  multi_json (1.10.1)
43
42
  nokogiri (1.6.3.1)
44
43
  mini_portile (= 0.6.0)
@@ -59,7 +58,7 @@ GEM
59
58
  rake (10.3.2)
60
59
  rdoc (3.12.2)
61
60
  json (~> 1.4)
62
- representable (2.0.3)
61
+ representable (2.0.4)
63
62
  multi_json
64
63
  nokogiri
65
64
  uber (~> 0.0.7)
@@ -68,11 +67,10 @@ GEM
68
67
  multi_json (~> 1.0)
69
68
  rack (~> 1.0)
70
69
  tilt (~> 1.1, != 1.3.0)
71
- sqlite3 (1.3.9)
72
70
  thor (0.19.1)
73
71
  tilt (1.4.1)
74
- tzinfo (0.3.40)
75
- uber (0.0.7)
72
+ tzinfo (0.3.41)
73
+ uber (0.0.8)
76
74
 
77
75
  PLATFORMS
78
76
  ruby
@@ -80,9 +78,7 @@ PLATFORMS
80
78
  DEPENDENCIES
81
79
  activerecord (~> 3.2.0)
82
80
  bundler (~> 1.3)
83
- database_cleaner
84
81
  disposable!
85
- minitest
82
+ minitest (= 5.4.1)
86
83
  railties (~> 3.2.0)
87
84
  rake
88
- sqlite3
@@ -5,3 +5,4 @@ gemspec :path => '../'
5
5
 
6
6
  gem 'railties', '~> 4.0.0'
7
7
  gem 'activerecord', '~> 4.0.0'
8
+ gem 'minitest', '~> 4.2.0'
@@ -8,22 +8,22 @@ PATH
8
8
  GEM
9
9
  remote: http://rubygems.org/
10
10
  specs:
11
- actionpack (4.0.5)
12
- activesupport (= 4.0.5)
11
+ actionpack (4.0.9)
12
+ activesupport (= 4.0.9)
13
13
  builder (~> 3.1.0)
14
14
  erubis (~> 2.7.0)
15
15
  rack (~> 1.5.2)
16
16
  rack-test (~> 0.6.2)
17
- activemodel (4.0.5)
18
- activesupport (= 4.0.5)
17
+ activemodel (4.0.9)
18
+ activesupport (= 4.0.9)
19
19
  builder (~> 3.1.0)
20
- activerecord (4.0.5)
21
- activemodel (= 4.0.5)
20
+ activerecord (4.0.9)
21
+ activemodel (= 4.0.9)
22
22
  activerecord-deprecated_finders (~> 1.0.2)
23
- activesupport (= 4.0.5)
23
+ activesupport (= 4.0.9)
24
24
  arel (~> 4.0.0)
25
25
  activerecord-deprecated_finders (1.0.3)
26
- activesupport (4.0.5)
26
+ activesupport (4.0.9)
27
27
  i18n (~> 0.6, >= 0.6.9)
28
28
  minitest (~> 4.2)
29
29
  multi_json (~> 1.3)
@@ -31,32 +31,30 @@ GEM
31
31
  tzinfo (~> 0.3.37)
32
32
  arel (4.0.2)
33
33
  builder (3.1.4)
34
- database_cleaner (1.3.0)
35
34
  erubis (2.7.0)
36
35
  i18n (0.6.11)
37
36
  mini_portile (0.6.0)
38
- minitest (4.7.5)
37
+ minitest (4.2.0)
39
38
  multi_json (1.10.1)
40
39
  nokogiri (1.6.3.1)
41
40
  mini_portile (= 0.6.0)
42
41
  rack (1.5.2)
43
42
  rack-test (0.6.2)
44
43
  rack (>= 1.0)
45
- railties (4.0.5)
46
- actionpack (= 4.0.5)
47
- activesupport (= 4.0.5)
44
+ railties (4.0.9)
45
+ actionpack (= 4.0.9)
46
+ activesupport (= 4.0.9)
48
47
  rake (>= 0.8.7)
49
48
  thor (>= 0.18.1, < 2.0)
50
49
  rake (10.3.2)
51
- representable (2.0.3)
50
+ representable (2.0.4)
52
51
  multi_json
53
52
  nokogiri
54
53
  uber (~> 0.0.7)
55
- sqlite3 (1.3.9)
56
54
  thor (0.19.1)
57
55
  thread_safe (0.3.4)
58
- tzinfo (0.3.39)
59
- uber (0.0.7)
56
+ tzinfo (0.3.41)
57
+ uber (0.0.8)
60
58
 
61
59
  PLATFORMS
62
60
  ruby
@@ -64,9 +62,7 @@ PLATFORMS
64
62
  DEPENDENCIES
65
63
  activerecord (~> 4.0.0)
66
64
  bundler (~> 1.3)
67
- database_cleaner
68
65
  disposable!
69
- minitest
66
+ minitest (~> 4.2.0)
70
67
  railties (~> 4.0.0)
71
68
  rake
72
- sqlite3
@@ -8,23 +8,23 @@ PATH
8
8
  GEM
9
9
  remote: http://rubygems.org/
10
10
  specs:
11
- actionpack (4.1.1)
12
- actionview (= 4.1.1)
13
- activesupport (= 4.1.1)
11
+ actionpack (4.1.5)
12
+ actionview (= 4.1.5)
13
+ activesupport (= 4.1.5)
14
14
  rack (~> 1.5.2)
15
15
  rack-test (~> 0.6.2)
16
- actionview (4.1.1)
17
- activesupport (= 4.1.1)
16
+ actionview (4.1.5)
17
+ activesupport (= 4.1.5)
18
18
  builder (~> 3.1)
19
19
  erubis (~> 2.7.0)
20
- activemodel (4.1.1)
21
- activesupport (= 4.1.1)
20
+ activemodel (4.1.5)
21
+ activesupport (= 4.1.5)
22
22
  builder (~> 3.1)
23
- activerecord (4.1.1)
24
- activemodel (= 4.1.1)
25
- activesupport (= 4.1.1)
23
+ activerecord (4.1.5)
24
+ activemodel (= 4.1.5)
25
+ activesupport (= 4.1.5)
26
26
  arel (~> 5.0.0)
27
- activesupport (4.1.1)
27
+ activesupport (4.1.5)
28
28
  i18n (~> 0.6, >= 0.6.9)
29
29
  json (~> 1.7, >= 1.7.7)
30
30
  minitest (~> 5.1)
@@ -32,34 +32,32 @@ GEM
32
32
  tzinfo (~> 1.1)
33
33
  arel (5.0.1.20140414130214)
34
34
  builder (3.2.2)
35
- database_cleaner (1.3.0)
36
35
  erubis (2.7.0)
37
36
  i18n (0.6.11)
38
37
  json (1.8.1)
39
38
  mini_portile (0.6.0)
40
- minitest (5.4.0)
39
+ minitest (5.4.1)
41
40
  multi_json (1.10.1)
42
41
  nokogiri (1.6.3.1)
43
42
  mini_portile (= 0.6.0)
44
43
  rack (1.5.2)
45
44
  rack-test (0.6.2)
46
45
  rack (>= 1.0)
47
- railties (4.1.1)
48
- actionpack (= 4.1.1)
49
- activesupport (= 4.1.1)
46
+ railties (4.1.5)
47
+ actionpack (= 4.1.5)
48
+ activesupport (= 4.1.5)
50
49
  rake (>= 0.8.7)
51
50
  thor (>= 0.18.1, < 2.0)
52
51
  rake (10.3.2)
53
- representable (2.0.3)
52
+ representable (2.0.4)
54
53
  multi_json
55
54
  nokogiri
56
55
  uber (~> 0.0.7)
57
- sqlite3 (1.3.9)
58
56
  thor (0.19.1)
59
57
  thread_safe (0.3.4)
60
- tzinfo (1.2.1)
58
+ tzinfo (1.2.2)
61
59
  thread_safe (~> 0.1)
62
- uber (0.0.7)
60
+ uber (0.0.8)
63
61
 
64
62
  PLATFORMS
65
63
  ruby
@@ -67,9 +65,7 @@ PLATFORMS
67
65
  DEPENDENCIES
68
66
  activerecord (~> 4.1.0)
69
67
  bundler (~> 1.3)
70
- database_cleaner
71
68
  disposable!
72
- minitest
69
+ minitest (= 5.4.1)
73
70
  railties (~> 4.1.0)
74
71
  rake
75
- sqlite3