lazy_lazer 0.3.0 → 0.3.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 +4 -4
- data/README.md +16 -6
- data/lib/lazy_lazer/version.rb +2 -1
- data/lib/lazy_lazer.rb +14 -15
- data/logo.png +0 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5ccb5b8a20cfa62e4ef74b7932724ef9c9f85629
|
4
|
+
data.tar.gz: 5f7ad225cf5db86c6bb46625e2738aa8bd547cf1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7846d9d05da36c2436f1a5b64005544dd1080d8515b0a1814d3a395288c3b5306c383fa163de03402a06f364a98ac58418ae0a6180f3e36f1b164e6aca56ee8e
|
7
|
+
data.tar.gz: eb973fec67fe6a6371c7ebd16bd67975dfab424068f87af1643b98ec8095fee98e31667b704523f4c57a2ff0b1c3be56474cd9f13ccfa016eadd2bf1870031d7
|
data/README.md
CHANGED
@@ -1,11 +1,10 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
- simple codebase (~110 lines of code, ~200 lines of tests)
|
5
|
-
- doesn't inherit all of the Hash and Enumerable cruft
|
6
|
-
- super lazy, doesn't even parse attributes until it's necessary
|
1
|
+
<p align="center">
|
2
|
+
<img src="https://raw.githubusercontent.com/avinashbot/lazy_lazer/master/logo.png" width="500">
|
3
|
+
</p>
|
7
4
|
|
8
5
|
```ruby
|
6
|
+
require 'lazy_lazer'
|
7
|
+
|
9
8
|
class User
|
10
9
|
include LazyLazer
|
11
10
|
|
@@ -32,3 +31,14 @@ user.age #=> 21
|
|
32
31
|
user.favorite_ice_cream #=> "chocolate"
|
33
32
|
user.reload.favorite_ice_cream #=> "vanilla"
|
34
33
|
```
|
34
|
+
|
35
|
+
<p align="center">
|
36
|
+
licensed under
|
37
|
+
<a href="https://github.com/avinashbot/lazy_lazer/blob/master/LICENSE.txt">mit</a>
|
38
|
+
-
|
39
|
+
created for
|
40
|
+
<a href="https://github.com/avinashbot/redd">redd</a>
|
41
|
+
-
|
42
|
+
logo font is
|
43
|
+
<a href="https://www.behance.net/gallery/3588289/Zaguatica">zaguatica</a>
|
44
|
+
</p>
|
data/lib/lazy_lazer/version.rb
CHANGED
data/lib/lazy_lazer.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
require_relative 'lazy_lazer/version'
|
4
4
|
require_relative 'lazy_lazer/errors'
|
5
5
|
|
6
|
-
# LazyLazer
|
6
|
+
# The LazyLazer root that's included
|
7
7
|
module LazyLazer
|
8
8
|
# Hook into `include LazyLazer`.
|
9
9
|
# @param [Module] base the object to include the methods in
|
@@ -22,8 +22,8 @@ module LazyLazer
|
|
22
22
|
end
|
23
23
|
|
24
24
|
# Get the source key from an instance
|
25
|
-
# @param [Object]
|
26
|
-
# @param [Symbol]
|
25
|
+
# @param instance [Object] the instance
|
26
|
+
# @param key [Symbol] the property key
|
27
27
|
# @return [Symbol] the source key if found or the passed key if not found
|
28
28
|
def self.source_key(instance, key)
|
29
29
|
instance.class.lazer_metadata[:from].fetch(key, key)
|
@@ -32,7 +32,7 @@ module LazyLazer
|
|
32
32
|
# The methods to extend the class with.
|
33
33
|
module ClassMethods
|
34
34
|
# Copies parent properties into subclasses.
|
35
|
-
# @param [Class]
|
35
|
+
# @param klass [Class] the subclass
|
36
36
|
# @return [void]
|
37
37
|
def inherited(klass)
|
38
38
|
klass.instance_variable_set(:@lazer_metadata, @lazer_metadata)
|
@@ -44,8 +44,8 @@ module LazyLazer
|
|
44
44
|
end
|
45
45
|
|
46
46
|
# Define a property.
|
47
|
-
# @param [Symbol]
|
48
|
-
# @param [Hash]
|
47
|
+
# @param name [Symbol] the name of the property method
|
48
|
+
# @param options [Hash] the options to create the property with
|
49
49
|
# @option options [Boolean] :required (false) whether existence of this property should be
|
50
50
|
# checked on model creation
|
51
51
|
# @option options [Object, Proc] :default the default value to return if not provided
|
@@ -65,7 +65,7 @@ module LazyLazer
|
|
65
65
|
# The methods to extend the instance with.
|
66
66
|
module InstanceMethods
|
67
67
|
# Create a new instance of the class from a set of source attributes.
|
68
|
-
# @param [Hash]
|
68
|
+
# @param attributes [Hash] the model attributes
|
69
69
|
# @return [void]
|
70
70
|
def initialize(attributes = {})
|
71
71
|
# Check that all required attributes exist.
|
@@ -79,7 +79,7 @@ module LazyLazer
|
|
79
79
|
end
|
80
80
|
|
81
81
|
# Converts all the attributes that haven't been converted yet and returns the final hash.
|
82
|
-
# @param [Boolean]
|
82
|
+
# @param strict [Boolean] whether to fully load all attributes
|
83
83
|
# @return [Hash] a hash representation of the model
|
84
84
|
def to_h(strict = true)
|
85
85
|
if strict
|
@@ -91,14 +91,13 @@ module LazyLazer
|
|
91
91
|
|
92
92
|
# @abstract Provides reloading behaviour for lazy loading.
|
93
93
|
# @return [Hash] the result of reloading the hash
|
94
|
-
# @note if necessary, subclasses can make this method private, so this isn't tested.
|
95
94
|
def lazer_reload
|
96
95
|
self.fully_loaded = true
|
97
96
|
{}
|
98
97
|
end
|
99
98
|
|
100
99
|
# Reload the object. Calls {#lazer_reload}, then merges the results into the internal store.
|
101
|
-
# Also
|
100
|
+
# Also clears out the internal cache.
|
102
101
|
# @return [self] the updated object
|
103
102
|
def reload
|
104
103
|
new_attributes = lazer_reload
|
@@ -108,7 +107,7 @@ module LazyLazer
|
|
108
107
|
end
|
109
108
|
|
110
109
|
# Return the value of the attribute.
|
111
|
-
# @param [Symbol]
|
110
|
+
# @param name [Symbol] the attribute name
|
112
111
|
# @raise MissingAttribute if the key was not found
|
113
112
|
def read_attribute(name)
|
114
113
|
# Returns the cached attribute.
|
@@ -150,7 +149,7 @@ module LazyLazer
|
|
150
149
|
end
|
151
150
|
|
152
151
|
# Return the value of the attribute, returning nil if not found
|
153
|
-
# @param [Symbol]
|
152
|
+
# @param name [Symbol] the attribute name
|
154
153
|
def [](name)
|
155
154
|
read_attribute(name)
|
156
155
|
rescue MissingAttribute
|
@@ -158,14 +157,14 @@ module LazyLazer
|
|
158
157
|
end
|
159
158
|
|
160
159
|
# Update an attribute.
|
161
|
-
# @param [Symbol]
|
160
|
+
# @param attribute [Symbol] the attribute to update
|
162
161
|
# @param [Object] value the new value
|
163
162
|
def write_attribute(attribute, value)
|
164
163
|
@_lazer_cache[attribute] = value
|
165
164
|
end
|
166
165
|
|
167
166
|
# Update multiple attributes at once.
|
168
|
-
# @param [Hash<Symbol, Object>]
|
167
|
+
# @param new_attributes [Hash<Symbol, Object>] the new attributes
|
169
168
|
def assign_attributes(new_attributes)
|
170
169
|
new_attributes.each { |key, value| write_attribute(key, value) }
|
171
170
|
end
|
@@ -178,7 +177,7 @@ module LazyLazer
|
|
178
177
|
|
179
178
|
private
|
180
179
|
|
181
|
-
# @param [Boolean]
|
180
|
+
# @param state [Boolean] the new state
|
182
181
|
def fully_loaded=(state)
|
183
182
|
@_lazer_fully_loaded = state
|
184
183
|
end
|
data/logo.png
ADDED
Binary file
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lazy_lazer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Avinash Dwarapu
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-08-
|
11
|
+
date: 2017-08-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -131,6 +131,7 @@ files:
|
|
131
131
|
- lib/lazy_lazer.rb
|
132
132
|
- lib/lazy_lazer/errors.rb
|
133
133
|
- lib/lazy_lazer/version.rb
|
134
|
+
- logo.png
|
134
135
|
homepage: https://github.com/avinashbot/lazy_lazer
|
135
136
|
licenses:
|
136
137
|
- MIT
|