modeling 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/lib/modeling/model_argument.rb +78 -0
- data/lib/modeling/module.rb +27 -0
- data/lib/modeling/version.rb +3 -0
- data/lib/modeling.rb +5 -0
- metadata +47 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 984bdb92ad9c4e829cf239f3df9eb1479e41c37d5659944933edb8d69282020f
|
4
|
+
data.tar.gz: b47547c32079a0d5680d99dd7cca3f8fa5736a2eb56bd9a5bfcab9547aa14687
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b3d8cd4181cf41ea9007cfaf8aa5e4eaa80c2bd68ff65e42a00fd4902590dca277226a18f011f8cb854d2f18791b910042e2b4c2e16e0410c0536253c785fd29
|
7
|
+
data.tar.gz: e66cc1a8d2c45d361508ea206dcbfb94ed54875d05966b603447d6fe77d122f37d013068e70223de41bb2c777fc7df43a4439f265eb364a904ea648f084d1b54
|
@@ -0,0 +1,78 @@
|
|
1
|
+
module Modeling
|
2
|
+
class ModelArgument
|
3
|
+
def initialize name, attribute, setter, getter, keyword, tester
|
4
|
+
@name = name
|
5
|
+
@attribute = attribute
|
6
|
+
@setter = setter
|
7
|
+
@getter = getter
|
8
|
+
@keyword = keyword
|
9
|
+
@tester = tester
|
10
|
+
end
|
11
|
+
|
12
|
+
attr :name
|
13
|
+
|
14
|
+
def attribute_name
|
15
|
+
"@#{name}"
|
16
|
+
end
|
17
|
+
|
18
|
+
def attribute?
|
19
|
+
@attribute
|
20
|
+
end
|
21
|
+
|
22
|
+
def setter?
|
23
|
+
@setter
|
24
|
+
end
|
25
|
+
|
26
|
+
def getter?
|
27
|
+
@getter
|
28
|
+
end
|
29
|
+
|
30
|
+
def keyword?
|
31
|
+
@keyword
|
32
|
+
end
|
33
|
+
|
34
|
+
def tester?
|
35
|
+
@tester
|
36
|
+
end
|
37
|
+
|
38
|
+
class << self
|
39
|
+
def parse argument
|
40
|
+
case argument
|
41
|
+
when ModelArgument
|
42
|
+
argument
|
43
|
+
when String
|
44
|
+
from_string argument
|
45
|
+
when Symbol
|
46
|
+
from_symbol argument
|
47
|
+
when Array
|
48
|
+
from_array argument
|
49
|
+
else
|
50
|
+
raise "Unsupported argument #{argument}"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def from_symbol argument
|
55
|
+
name = argument.to_s.delete_prefix("@").to_sym
|
56
|
+
attribute = argument.start_with?("@")
|
57
|
+
ModelArgument.new name, attribute, attribute, attribute, false, false
|
58
|
+
end
|
59
|
+
|
60
|
+
def from_string argument
|
61
|
+
if argument =~ /(\W*)(\w+)(\W*)/
|
62
|
+
modifiers = $1 + $3
|
63
|
+
ModelArgument.new $2.to_sym, modifiers.include?("@"), modifiers.include?("="),
|
64
|
+
modifiers.include?("+"), modifiers.include?(":"), modifiers.include?("?")
|
65
|
+
else
|
66
|
+
raise "Invalid argument string format '#{argument}'"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def from_array argument
|
71
|
+
name = argument.shift
|
72
|
+
ModelArgument.new name, argument.include?(:attribute), argument.include?(:setter), argument.include?(:getter),
|
73
|
+
argument.include?(:keyword), argument.include?(:tester)
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require_relative 'model_argument'
|
2
|
+
|
3
|
+
module Modeling
|
4
|
+
|
5
|
+
def model *fields, &initialize
|
6
|
+
fields.map!{ ModelArgument.parse _1 }
|
7
|
+
initialize_context = Struct.new(nil, *fields.map(&:name))
|
8
|
+
define_method :initialize do |*a, **na|
|
9
|
+
arguments = fields.zip(a).map do |f, arg|
|
10
|
+
value = (f.keyword? ? na[f.name] : nil) || arg
|
11
|
+
instance_variable_set f.attribute_name, value if f.attribute?
|
12
|
+
value
|
13
|
+
end
|
14
|
+
initialize_context.new(*arguments).instance_exec &initialize if initialize
|
15
|
+
end
|
16
|
+
fields.each do |f|
|
17
|
+
attr_writer f.name if f.setter?
|
18
|
+
attr_reader f.name if f.getter?
|
19
|
+
if f.tester?
|
20
|
+
define_method "#{f.name}?" do
|
21
|
+
!!instance_variable_get(f.attribute_name)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
data/lib/modeling.rb
ADDED
metadata
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: modeling
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Łukasz Pomietło
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2024-02-24 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: "\n"
|
14
|
+
email: oficjalnyadreslukasza@gmail.com
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- lib/modeling.rb
|
20
|
+
- lib/modeling/model_argument.rb
|
21
|
+
- lib/modeling/module.rb
|
22
|
+
- lib/modeling/version.rb
|
23
|
+
homepage: https://github.com/lpogic/modeling
|
24
|
+
licenses:
|
25
|
+
- Zlib
|
26
|
+
metadata:
|
27
|
+
documentation_uri: https://github.com/lpogic/modeling/blob/main/doc/wiki/README.md
|
28
|
+
post_install_message:
|
29
|
+
rdoc_options: []
|
30
|
+
require_paths:
|
31
|
+
- lib
|
32
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
33
|
+
requirements:
|
34
|
+
- - ">="
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 3.2.2
|
37
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
requirements: []
|
43
|
+
rubygems_version: 3.5.6
|
44
|
+
signing_key:
|
45
|
+
specification_version: 4
|
46
|
+
summary: A concise way to define the class shape
|
47
|
+
test_files: []
|