cygnet 0.0.1
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 +7 -0
- data/Rakefile +8 -0
- data/docs/README.md +25 -0
- data/lib/cygnet/collections.rb +28 -0
- data/lib/cygnet/null_object.rb +70 -0
- data/lib/cygnet/version.rb +5 -0
- data/lib/cygnet.rb +8 -0
- metadata +206 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 1d948361c254e63d532d93eee85ecef442aca5619db7590f0a6bd7b6feb29e5d
|
4
|
+
data.tar.gz: 49a31d51727643cd75250522695fe617b33e8dcd06ed1fa6de792069dc9f8e92
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 80651de5aec58aeb27b95db96cd15f52c04c32f5832dda23ad0e9a27e52df9569de0b763f343ef4d012ca61396e0413079eb9c5b439a36966ed1dd4311627b92
|
7
|
+
data.tar.gz: b8150afe0a60246640e0180c220818220de04e42b16d56d253f9d36231882236e6c093f1699e0558d6fa28493c83c0a858f6949d64d74761b113034c0cf108bd
|
data/Rakefile
ADDED
data/docs/README.md
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# Something for Nothing
|
2
|
+
|
3
|
+
`cygnet` is currently comprised of two parts:
|
4
|
+
|
5
|
+
1. An implementation of the [Null Object Pattern](https://en.wikipedia.org/wiki/Null_Object_pattern), which automatically accounts for nil.
|
6
|
+
|
7
|
+
2. An implementation of nested hashes using [DeepStruct](http://andreapavoni.com/blog/2013/4/create-recursive-openstruct-from-a-ruby-hash).
|
8
|
+
|
9
|
+
|
10
|
+
## Usage
|
11
|
+
|
12
|
+
$ rails c
|
13
|
+
[1] pry(main)> something = Cygnet::NullObject.new
|
14
|
+
=> <#Cygnet::NullObject ...>
|
15
|
+
[2] pry(main)> something.doesnotexist
|
16
|
+
=> <#Cygnet::NullObject ...>
|
17
|
+
|
18
|
+
[3] pry(main)> s = Cygnet::DeepStruct.new({foo: {bar: :baz}})
|
19
|
+
=> #<Cygnet::DeepStruct foo=#<SometingForNothing::DeepStruct bar=:baz>>
|
20
|
+
[4] pry(main)> s.foo
|
21
|
+
=> #<Cygnet::DeepStruct bar=:baz>
|
22
|
+
[5] pry(main)> s.foo.bar
|
23
|
+
=> :baz
|
24
|
+
[6] pry(main)> s.bar.foo
|
25
|
+
=> #<Cygnet::NullObject:0x007f974c1dc230>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Cygnet
|
4
|
+
# Builds flattened collections of objects for easy return
|
5
|
+
class MappedCollection < Array
|
6
|
+
def initialize(builder, records) # rubocop:disable Lint/MissingSuper
|
7
|
+
@builder = builder
|
8
|
+
@records = records
|
9
|
+
self << records.map(&builder.method(:new))
|
10
|
+
flatten!
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
# Easy API for paginated collections
|
15
|
+
class PaginatedCollection < MappedCollection
|
16
|
+
attr_accessor :total_pages, :current_page, :total_entries
|
17
|
+
|
18
|
+
def initialize(builder, records, pagination = {})
|
19
|
+
paginated = records.paginate(pagination)
|
20
|
+
|
21
|
+
@total_pages = paginated.total_pages
|
22
|
+
@current_page = paginated.current_page
|
23
|
+
@total_entries = paginated.total_entries
|
24
|
+
|
25
|
+
super builder, paginated
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Cygnet
|
4
|
+
# NullObject implements the widely-known NullObject pattern, where an instance
|
5
|
+
# responds to any method called on it by returning another NullObject, allowing
|
6
|
+
# arbitrary chaining of method calls without the risk of a NoMethodError.
|
7
|
+
#
|
8
|
+
# As an exception, NullObject can be cast to other types, taking a neutral
|
9
|
+
# value of that type; it is cast to the empty string, 0, 0.0, the empty Array and Hash, etc.
|
10
|
+
#
|
11
|
+
# Additionally, it identifies positively as #nil? and #blank? for compatability
|
12
|
+
# with common checks on "neutral" or "empty" values by imitating the behaviour of nil.
|
13
|
+
class NullObject
|
14
|
+
def method_missing(*_args, &_block)
|
15
|
+
self
|
16
|
+
end
|
17
|
+
|
18
|
+
def respond_to_missing?(_method_name, _include_private = true)
|
19
|
+
true
|
20
|
+
end
|
21
|
+
|
22
|
+
def nil?
|
23
|
+
true
|
24
|
+
end
|
25
|
+
|
26
|
+
def blank?
|
27
|
+
nil?
|
28
|
+
end
|
29
|
+
|
30
|
+
def !
|
31
|
+
true
|
32
|
+
end
|
33
|
+
|
34
|
+
def to_s
|
35
|
+
''
|
36
|
+
end
|
37
|
+
|
38
|
+
def to_i
|
39
|
+
0
|
40
|
+
end
|
41
|
+
|
42
|
+
def to_f
|
43
|
+
0.0
|
44
|
+
end
|
45
|
+
|
46
|
+
def to_a
|
47
|
+
[]
|
48
|
+
end
|
49
|
+
|
50
|
+
def to_ary
|
51
|
+
[]
|
52
|
+
end
|
53
|
+
|
54
|
+
def to_h
|
55
|
+
{}
|
56
|
+
end
|
57
|
+
|
58
|
+
def to_hash
|
59
|
+
{}
|
60
|
+
end
|
61
|
+
|
62
|
+
def to_c
|
63
|
+
Complex(0)
|
64
|
+
end
|
65
|
+
|
66
|
+
def to_r
|
67
|
+
Rational(0)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
data/lib/cygnet.rb
ADDED
metadata
ADDED
@@ -0,0 +1,206 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: cygnet
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Carlos Palhares
|
8
|
+
- Jill Klang
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2022-11-17 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: bundler
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - "~>"
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '2.1'
|
21
|
+
type: :development
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - "~>"
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '2.1'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: license_finder
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - "~>"
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '7.0'
|
35
|
+
type: :development
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - "~>"
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '7.0'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: pry
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - '='
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: 0.13.0
|
49
|
+
type: :development
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - '='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 0.13.0
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: pry-byebug
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - '='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 3.9.0
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - '='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 3.9.0
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: rainbow
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - '='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 2.2.2
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - '='
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: 2.2.2
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: rake
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - "~>"
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '13.0'
|
91
|
+
type: :development
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - "~>"
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '13.0'
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: rspec
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - "~>"
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '3.0'
|
105
|
+
type: :development
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - "~>"
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '3.0'
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
name: rubocop-powerhome
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - '='
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: 0.5.0
|
119
|
+
type: :development
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - '='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: 0.5.0
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: simplecov
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - '='
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: 0.15.1
|
133
|
+
type: :development
|
134
|
+
prerelease: false
|
135
|
+
version_requirements: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - '='
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: 0.15.1
|
140
|
+
- !ruby/object:Gem::Dependency
|
141
|
+
name: test-unit
|
142
|
+
requirement: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - '='
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: 3.1.5
|
147
|
+
type: :development
|
148
|
+
prerelease: false
|
149
|
+
version_requirements: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - '='
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: 3.1.5
|
154
|
+
- !ruby/object:Gem::Dependency
|
155
|
+
name: yard
|
156
|
+
requirement: !ruby/object:Gem::Requirement
|
157
|
+
requirements:
|
158
|
+
- - '='
|
159
|
+
- !ruby/object:Gem::Version
|
160
|
+
version: 0.9.21
|
161
|
+
type: :development
|
162
|
+
prerelease: false
|
163
|
+
version_requirements: !ruby/object:Gem::Requirement
|
164
|
+
requirements:
|
165
|
+
- - '='
|
166
|
+
- !ruby/object:Gem::Version
|
167
|
+
version: 0.9.21
|
168
|
+
description: Implements the Null Object Pattern and an implmentation of nested hashes
|
169
|
+
using NullObject.
|
170
|
+
email:
|
171
|
+
- chjunior@gmail.com
|
172
|
+
- jillian.emilie@gmail.com
|
173
|
+
executables: []
|
174
|
+
extensions: []
|
175
|
+
extra_rdoc_files: []
|
176
|
+
files:
|
177
|
+
- Rakefile
|
178
|
+
- docs/README.md
|
179
|
+
- lib/cygnet.rb
|
180
|
+
- lib/cygnet/collections.rb
|
181
|
+
- lib/cygnet/null_object.rb
|
182
|
+
- lib/cygnet/version.rb
|
183
|
+
homepage: https://github.com/powerhome/power-tools
|
184
|
+
licenses:
|
185
|
+
- MIT
|
186
|
+
metadata: {}
|
187
|
+
post_install_message:
|
188
|
+
rdoc_options: []
|
189
|
+
require_paths:
|
190
|
+
- lib
|
191
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
192
|
+
requirements:
|
193
|
+
- - ">="
|
194
|
+
- !ruby/object:Gem::Version
|
195
|
+
version: '2.7'
|
196
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
197
|
+
requirements:
|
198
|
+
- - ">="
|
199
|
+
- !ruby/object:Gem::Version
|
200
|
+
version: '0'
|
201
|
+
requirements: []
|
202
|
+
rubygems_version: 3.3.7
|
203
|
+
signing_key:
|
204
|
+
specification_version: 4
|
205
|
+
summary: Better ways to account for nil.
|
206
|
+
test_files: []
|