prop_initializer 0.1.0 → 0.2.0
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 +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
|