cygnet 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rspec/core/rake_task'
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ task default: :spec
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
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Cygnet
4
+ VERSION = '0.0.1'
5
+ end
data/lib/cygnet.rb ADDED
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'cygnet/null_object'
4
+ require 'cygnet/collections'
5
+
6
+ # Better ways to account for nil
7
+ module Cygnet
8
+ end
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: []