prop_initializer 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +117 -12
- data/lib/prop_initializer/properties.rb +1 -1
- data/lib/prop_initializer/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9bb678c9eefc27ee47a5f0720957f52e56c5c9931211f063990104e8a9d65b64
|
4
|
+
data.tar.gz: 6ce3741dc658fd661150f61e5578ac21a8a1cb00bf8f4991b0854a2e758b08ce
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: abc4edeb2dadfc4e69da6b82ffc648ab9b6ba6c4cd8587ce6f858f94d1ec05293939f059601f9fdb0431de625028b5ba2cf6ff6c212e6e8f095125de05bfbc44
|
7
|
+
data.tar.gz: 90bc565b97a72682d1e896c7b9e51b5f84d3d8a039272baa325181aef16bdda78b45112d71c1dd10bd8a8b4903d217f8b13ecc04e43641c0f5edb7a20bb179c4
|
data/README.md
CHANGED
@@ -1,28 +1,133 @@
|
|
1
|
-
#
|
2
|
-
Short description and motivation.
|
1
|
+
# Prop Initializer
|
3
2
|
|
4
|
-
##
|
5
|
-
|
3
|
+
## Overview
|
4
|
+
|
5
|
+
The `prop_initializer` gem is a flexible tool for defining properties on Ruby classes.
|
6
|
+
|
7
|
+
It's a fork of the [Literal Gem](https://github.com/joeldrapper/literal), with a few tweaks. We sincerely thank [Joel Drapper](https://github.com/joeldrapper) for the inspiration and base code that made this possible.
|
8
|
+
|
9
|
+
With `prop_initializer`, you can easily declare properties for any class, giving you flexible options for default values and more. However, the scope is narrowed down by removing strict typing requirements, providing a more lightweight and adaptable interface.
|
6
10
|
|
7
11
|
## Installation
|
8
|
-
|
12
|
+
|
13
|
+
To use `prop_initializer ` in your Ruby project, add the following to your Gemfile:
|
9
14
|
|
10
15
|
```ruby
|
11
16
|
gem "prop_initializer"
|
12
17
|
```
|
13
18
|
|
14
|
-
|
19
|
+
Then, run the bundle command to install it:
|
20
|
+
|
15
21
|
```bash
|
16
|
-
|
22
|
+
bundle install
|
17
23
|
```
|
18
24
|
|
19
|
-
|
20
|
-
|
21
|
-
|
25
|
+
## Usage
|
26
|
+
|
27
|
+
To start using `prop_initializer `, you need to include the module in the class where you want to define properties.
|
28
|
+
|
29
|
+
### Step 1: Extend the Properties Module
|
30
|
+
|
31
|
+
In any class, extend `PropInitializer::Properties` to enable the ability to define properties:
|
32
|
+
|
33
|
+
```ruby
|
34
|
+
class MyClass
|
35
|
+
extend PropInitializer::Properties
|
36
|
+
end
|
37
|
+
```
|
38
|
+
|
39
|
+
### Step 2: Define Properties
|
40
|
+
|
41
|
+
Properties can be declared using the `prop` method, which generates writers and makes them available as instance variables (e.g., `@name`, `@size`, etc.).
|
42
|
+
|
43
|
+
#### Basic Syntax:
|
44
|
+
|
45
|
+
```ruby
|
46
|
+
prop :name # A simple property, accessible via @name
|
47
|
+
prop :size, default: :md # A property with a default value of :md
|
48
|
+
prop :args, kind: :* # A property for handling splat arguments
|
49
|
+
prop :kwargs, kind: :** # A property for handling keyword arguments
|
50
|
+
```
|
51
|
+
|
52
|
+
#### Custom Property with Block:
|
53
|
+
|
54
|
+
You can define a custom processing block when declaring a property, for example:
|
55
|
+
|
56
|
+
```ruby
|
57
|
+
prop :icon do |value|
|
58
|
+
value&.to_sym # Converts the property value to a symbol
|
59
|
+
end
|
60
|
+
```
|
61
|
+
|
62
|
+
### Step 3: Accessing Properties
|
63
|
+
|
64
|
+
By default, `PropInitializer` generates a writer for each declared property. The properties are stored as instance variables, which can be accessed within the class:
|
65
|
+
|
66
|
+
```ruby
|
67
|
+
@name # Accesses the value of the 'name' property
|
68
|
+
@size # Accesses the value of the 'size' property
|
69
|
+
```
|
70
|
+
|
71
|
+
#### Public Reader:
|
72
|
+
|
73
|
+
If you want to generate a public reader (getter) for a property, use the `reader: :public` option when defining the property:
|
74
|
+
|
75
|
+
```ruby
|
76
|
+
prop :title, reader: :public
|
22
77
|
```
|
23
78
|
|
24
|
-
|
25
|
-
|
79
|
+
This will automatically generate a public getter method, allowing you to retrieve the property like so:
|
80
|
+
|
81
|
+
```ruby
|
82
|
+
my_class_instance.title # Public getter for the 'title' property
|
83
|
+
```
|
84
|
+
|
85
|
+
### Example:
|
86
|
+
|
87
|
+
```ruby
|
88
|
+
class MyComponent
|
89
|
+
extend PropInitializer::Properties
|
90
|
+
|
91
|
+
prop :name, reader: :public
|
92
|
+
prop :size, default: :md, reader: :public
|
93
|
+
prop :args, kind: :*
|
94
|
+
prop :kwargs, kind: :**
|
95
|
+
prop :icon do |value|
|
96
|
+
value&.to_sym
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
component = MyComponent.new(name: "Button", size: :lg)
|
101
|
+
component.name # => "Button"
|
102
|
+
component.size # => :lg
|
103
|
+
```
|
104
|
+
|
105
|
+
## Key Differences from [Literal](https://github.com/joeldrapper/literal)
|
106
|
+
|
107
|
+
While `prop_initializer` is based on the [Literal Gem](https://github.com/joeldrapper/literal), there are some important differences:
|
108
|
+
|
109
|
+
- **No Type Requirement:** [Literal](https://github.com/joeldrapper/literal)'s properties system enforces types, while `prop_initializer` omits them for flexibility. You can define properties without needing to specify a type.
|
110
|
+
|
111
|
+
- **Simplified Initializer:** The initialization process has been modified to avoid requiring types at the time of property definition.
|
112
|
+
|
113
|
+
## Acknowledgements
|
114
|
+
|
115
|
+
Special thanks to the team at [Literal](https://github.com/joeldrapper/literal) for their pioneering work on property-based object initialization. This gem builds upon the foundation laid by their work.
|
116
|
+
|
117
|
+
If you're looking for a more type-strict approach to property initialization, we encourage you to check out the original [Literal Gem](https://github.com/joeldrapper/literal).
|
118
|
+
|
119
|
+
Thank you for using `prop_initializer`! We hope this tool helps make your property management more efficient and adaptable in your Ruby projects.
|
120
|
+
|
121
|
+
## Open Source
|
122
|
+
|
123
|
+
- [`active_storage-blurhash`](https://github.com/avo-hq/active_storage-blurhash) - A plug-n-play [blurhash](https://blurha.sh/) integration for images stored in ActiveStorage
|
124
|
+
- [`avo`](https://github.com/avo-hq/avo) - Build Content management systems with Ruby on Rails
|
125
|
+
- [`class_variants`](https://github.com/avo-hq/class_variants) - Easily configure styles and apply them as classes. Very useful when you're implementing Tailwind CSS components and call them with different states.
|
126
|
+
- [`stimulus-confetti`](https://github.com/avo-hq/stimulus-confetti) - The easiest way to add confetti to your StimulusJS app
|
127
|
+
|
128
|
+
## Try Avo ⭐️
|
129
|
+
|
130
|
+
If you enjoyed this gem try out [Avo](https://github.com/avo-hq/avo). It helps developers build Internal Tools, Admin Panels, CMSes, CRMs, and any other type of Business Apps 10x faster on top of Ruby on Rails.
|
26
131
|
|
27
132
|
## License
|
28
133
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
@@ -44,7 +44,7 @@ module PropInitializer::Properties
|
|
44
44
|
def prop_initializer_properties
|
45
45
|
return @prop_initializer_properties if defined?(@prop_initializer_properties)
|
46
46
|
|
47
|
-
if superclass.is_a?(PropInitializer)
|
47
|
+
if superclass.is_a?(PropInitializer::Properties)
|
48
48
|
@prop_initializer_properties = superclass.prop_initializer_properties.dup
|
49
49
|
else
|
50
50
|
@prop_initializer_properties = PropInitializer::Properties::Schema.new
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: prop_initializer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paul Bob
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-10-
|
11
|
+
date: 2024-10-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: zeitwerk
|