hospodar 1.0.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 +7 -0
- data/.codeclimate.yml +9 -0
- data/.rspec +3 -0
- data/.rubocop.yml +80 -0
- data/CHANGELOG.md +5 -0
- data/CODE_OF_CONDUCT.md +84 -0
- data/Gemfile +12 -0
- data/Gemfile.lock +86 -0
- data/LICENSE.txt +21 -0
- data/README.md +49 -0
- data/Rakefile +12 -0
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/hospodar.gemspec +47 -0
- data/lib/hospodar/builder/assembler.rb +96 -0
- data/lib/hospodar/builder/error.rb +15 -0
- data/lib/hospodar/builder/exeptional.rb +20 -0
- data/lib/hospodar/builder/flatten.rb +36 -0
- data/lib/hospodar/builder/helpers.rb +21 -0
- data/lib/hospodar/builder/id.rb +15 -0
- data/lib/hospodar/builder/instantiation_error.rb +24 -0
- data/lib/hospodar/builder/nested.rb +18 -0
- data/lib/hospodar/builder/proxy.rb +34 -0
- data/lib/hospodar/builder/strategies/enumerate.rb +26 -0
- data/lib/hospodar/builder/strategies/execute.rb +76 -0
- data/lib/hospodar/builder/strategies/init.rb +55 -0
- data/lib/hospodar/builder/strategies/inject.rb +35 -0
- data/lib/hospodar/builder/strategies/link.rb +31 -0
- data/lib/hospodar/builder/strategies/mount.rb +56 -0
- data/lib/hospodar/builder/strategies/translate.rb +60 -0
- data/lib/hospodar/builder/wrapped.rb +40 -0
- data/lib/hospodar/builder.rb +113 -0
- data/lib/hospodar/dsl.rb +84 -0
- data/lib/hospodar/factories.rb +28 -0
- data/lib/hospodar/group_definition.rb +22 -0
- data/lib/hospodar/inheritance_helpers.rb +36 -0
- data/lib/hospodar/module_builder.rb +88 -0
- data/lib/hospodar/registry.rb +34 -0
- data/lib/hospodar/subclassing_helpers.rb +29 -0
- data/lib/hospodar/version.rb +5 -0
- data/lib/hospodar.rb +54 -0
- metadata +255 -0
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Hospodar
|
4
|
+
# Extracts configuration params from code block
|
5
|
+
class GroupDefinition
|
6
|
+
attr_reader :definitions
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@definitions = {}
|
10
|
+
end
|
11
|
+
|
12
|
+
def method_missing(name, **kws)
|
13
|
+
@definitions[name] = kws.keep_if do |key, _|
|
14
|
+
%i[base_class init].include?(key)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def respond_to_missing?
|
19
|
+
true
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Hospodar
|
4
|
+
# Copies configuration to subclass
|
5
|
+
module InheritanceHelpers
|
6
|
+
def inherited(subclass)
|
7
|
+
super
|
8
|
+
subclass.copy_superclass_configuration
|
9
|
+
end
|
10
|
+
|
11
|
+
def copy_superclass_configuration
|
12
|
+
mother_ship_included_modules.each do |factory|
|
13
|
+
mother_ship_copy_configuration_for_unit(factory.component_name)
|
14
|
+
mother_ship_activate_components_for_factory(factory)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def mother_ship_included_modules
|
19
|
+
Hospodar.registered_modules & included_modules
|
20
|
+
end
|
21
|
+
|
22
|
+
def mother_ship_copy_configuration_for_unit(component_name)
|
23
|
+
readers_regexp = Regexp.new("\\w+_#{component_name}_class\\z")
|
24
|
+
superclass.public_methods.grep(readers_regexp).each do |reader_method|
|
25
|
+
klass = superclass.public_send(reader_method)
|
26
|
+
public_send(:"#{reader_method}=", klass)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def mother_ship_activate_components_for_factory(factory)
|
31
|
+
superclass.public_send(factory.components_storage_name.to_s).each do |component, klass|
|
32
|
+
public_send(factory.store_method_name(component), klass)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Hospodar
|
4
|
+
# Generates module that adds support for objects creation
|
5
|
+
class ModuleBuilder < Module
|
6
|
+
private_class_method :new
|
7
|
+
|
8
|
+
# Sets up factory module properties
|
9
|
+
module Setup
|
10
|
+
def self.extended(receiver)
|
11
|
+
class << receiver
|
12
|
+
attr_accessor :component_name, :components_name,
|
13
|
+
:default_base_class, :default_init
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def included(receiver)
|
18
|
+
receiver.extend self
|
19
|
+
end
|
20
|
+
|
21
|
+
def extended(receiver)
|
22
|
+
receiver.extend SubclassingHelpers
|
23
|
+
receiver.extend InheritanceHelpers
|
24
|
+
receiver.private_class_method :mother_ship_define_init
|
25
|
+
receiver.private_class_method :mother_ship_patch_class
|
26
|
+
receiver.private_class_method :mother_ship_check_inheritance!
|
27
|
+
receiver.private_class_method :mother_ship_included_modules
|
28
|
+
receiver.private_class_method :mother_ship_copy_configuration_for_unit
|
29
|
+
receiver.private_class_method :mother_ship_activate_components_for_factory
|
30
|
+
end
|
31
|
+
|
32
|
+
def hash
|
33
|
+
Hospodar.global_registry_module_id(components_name,
|
34
|
+
base_class: default_base_class,
|
35
|
+
init: default_init)
|
36
|
+
end
|
37
|
+
|
38
|
+
def components_storage_name(title = components_name)
|
39
|
+
:"mother_ship_#{title}"
|
40
|
+
end
|
41
|
+
|
42
|
+
def simple_store_method_name(name)
|
43
|
+
reader = component_class_reader(name)
|
44
|
+
:"simple_store_#{reader}_class"
|
45
|
+
end
|
46
|
+
|
47
|
+
def store_method_name(name)
|
48
|
+
:"#{component_class_reader(name)}="
|
49
|
+
end
|
50
|
+
|
51
|
+
def activation_method_name(title = component_name)
|
52
|
+
:"activate_#{title}_component"
|
53
|
+
end
|
54
|
+
|
55
|
+
def new_instance_method_name(title)
|
56
|
+
:"new_#{title}_#{component_name}_instance"
|
57
|
+
end
|
58
|
+
|
59
|
+
def component_class_reader(title)
|
60
|
+
:"#{title}_#{component_name}_class"
|
61
|
+
end
|
62
|
+
|
63
|
+
def configure_component_method_name(title)
|
64
|
+
:"#{title}_#{component_name}"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
private_constant :Setup
|
69
|
+
|
70
|
+
def self.inflector
|
71
|
+
Hospodar.inflector
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.call(components_name, **attrs)
|
75
|
+
new.tap do |mod|
|
76
|
+
mod.extend Setup
|
77
|
+
mod.components_name = components_name
|
78
|
+
mod.component_name = inflector.singularize(components_name).to_sym
|
79
|
+
mod.default_base_class = attrs[:base_class]
|
80
|
+
mod.default_init = attrs[:init]
|
81
|
+
mod.extend DSL
|
82
|
+
mod.define_components_registry
|
83
|
+
mod.define_component_adding_method
|
84
|
+
mod.define_component_activation_method
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Hospodar
|
4
|
+
# Simple container for modules
|
5
|
+
class Registry
|
6
|
+
def initialize(on_missing_key:)
|
7
|
+
@modules = {}
|
8
|
+
@on_missing_key = on_missing_key
|
9
|
+
end
|
10
|
+
|
11
|
+
def resolve(components_name, **attrs)
|
12
|
+
id = Hospodar.global_registry_module_id(components_name, **attrs)
|
13
|
+
find(id) || build(components_name, **attrs)
|
14
|
+
end
|
15
|
+
|
16
|
+
def registered_modules
|
17
|
+
@modules.values
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def find(module_id)
|
23
|
+
@modules[module_id]
|
24
|
+
end
|
25
|
+
|
26
|
+
def register(module_instance)
|
27
|
+
@modules[module_instance.hash] = module_instance
|
28
|
+
end
|
29
|
+
|
30
|
+
def build(components_name, **attrs)
|
31
|
+
register(@on_missing_key.call(components_name, **attrs))
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Hospodar
|
4
|
+
# Component-level logic for patching base classes
|
5
|
+
module SubclassingHelpers
|
6
|
+
def mother_ship_define_init(klass, &init)
|
7
|
+
if init
|
8
|
+
klass.define_singleton_method(:__ms_init__, &init)
|
9
|
+
elsif klass.superclass.respond_to?(:__ms_init__)
|
10
|
+
parent_init = klass.superclass.method(:__ms_init__)
|
11
|
+
klass.define_singleton_method(:__ms_init__, &parent_init)
|
12
|
+
else
|
13
|
+
default_init = ->(c, *attrs, &block) { c.new(*attrs, &block) }
|
14
|
+
klass.define_singleton_method(:__ms_init__, &default_init)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def mother_ship_patch_class(base_class, &block)
|
19
|
+
return base_class unless block
|
20
|
+
|
21
|
+
Class.new(base_class, &block)
|
22
|
+
end
|
23
|
+
|
24
|
+
def mother_ship_check_inheritance!(component_class, base_class)
|
25
|
+
return if component_class.nil? || base_class.nil?
|
26
|
+
raise(ArgumentError, "must be a subclass of #{base_class.inspect}") unless component_class <= base_class
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/hospodar.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'dry/inflector'
|
4
|
+
require 'hospodar/dsl'
|
5
|
+
require 'hospodar/group_definition'
|
6
|
+
require 'hospodar/subclassing_helpers'
|
7
|
+
require 'hospodar/inheritance_helpers'
|
8
|
+
require 'hospodar/module_builder'
|
9
|
+
require 'hospodar/factories'
|
10
|
+
require 'hospodar/registry'
|
11
|
+
require 'hospodar/builder'
|
12
|
+
require 'hospodar/version'
|
13
|
+
|
14
|
+
# Global namespace
|
15
|
+
module Hospodar
|
16
|
+
class Error < StandardError; end
|
17
|
+
|
18
|
+
private_constant :GroupDefinition
|
19
|
+
private_constant :Factories
|
20
|
+
private_constant :SubclassingHelpers
|
21
|
+
private_constant :InheritanceHelpers
|
22
|
+
private_constant :ModuleBuilder
|
23
|
+
private_constant :DSL
|
24
|
+
|
25
|
+
# Defines high level interface
|
26
|
+
module ClassMethods
|
27
|
+
def produces(*components_names, &block)
|
28
|
+
components_names.each do |components_name|
|
29
|
+
include Factories.add_module(components_name)
|
30
|
+
end
|
31
|
+
groups = GroupDefinition.new
|
32
|
+
groups.instance_eval(&block) if block
|
33
|
+
groups.definitions.each do |components_name, attrs|
|
34
|
+
include Factories.add_module(components_name, attrs)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.global_registry_module_id(components_name, base_class: nil, init: nil)
|
40
|
+
[components_name, base_class, init].hash
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.included(receiver)
|
44
|
+
receiver.extend ClassMethods
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.inflector
|
48
|
+
@inflector ||= Dry::Inflector.new
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.registered_modules
|
52
|
+
Factories.memoized_modules
|
53
|
+
end
|
54
|
+
end
|
metadata
ADDED
@@ -0,0 +1,255 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: hospodar
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Andrii Baran
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2021-11-27 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: dry-inflector
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.1'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.1'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '2'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '2'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: byebug
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pry
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.12'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.12'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: pry-byebug
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rake
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 12.3.3
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 12.3.3
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rspec
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '3.0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '3.0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rspec_vars_helper
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0.1'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0.1'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: rubocop
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: rubocop-performance
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: simplecov
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - '='
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0.17'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - '='
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0.17'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: simplecov-html
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: 0.10.0
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "~>"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: 0.10.0
|
181
|
+
description: Simple DSL that supports creating complex strutures of objects
|
182
|
+
email:
|
183
|
+
- andriy.baran.v@gmail.com
|
184
|
+
executables: []
|
185
|
+
extensions: []
|
186
|
+
extra_rdoc_files: []
|
187
|
+
files:
|
188
|
+
- ".codeclimate.yml"
|
189
|
+
- ".rspec"
|
190
|
+
- ".rubocop.yml"
|
191
|
+
- CHANGELOG.md
|
192
|
+
- CODE_OF_CONDUCT.md
|
193
|
+
- Gemfile
|
194
|
+
- Gemfile.lock
|
195
|
+
- LICENSE.txt
|
196
|
+
- README.md
|
197
|
+
- Rakefile
|
198
|
+
- bin/console
|
199
|
+
- bin/setup
|
200
|
+
- hospodar.gemspec
|
201
|
+
- lib/hospodar.rb
|
202
|
+
- lib/hospodar/builder.rb
|
203
|
+
- lib/hospodar/builder/assembler.rb
|
204
|
+
- lib/hospodar/builder/error.rb
|
205
|
+
- lib/hospodar/builder/exeptional.rb
|
206
|
+
- lib/hospodar/builder/flatten.rb
|
207
|
+
- lib/hospodar/builder/helpers.rb
|
208
|
+
- lib/hospodar/builder/id.rb
|
209
|
+
- lib/hospodar/builder/instantiation_error.rb
|
210
|
+
- lib/hospodar/builder/nested.rb
|
211
|
+
- lib/hospodar/builder/proxy.rb
|
212
|
+
- lib/hospodar/builder/strategies/enumerate.rb
|
213
|
+
- lib/hospodar/builder/strategies/execute.rb
|
214
|
+
- lib/hospodar/builder/strategies/init.rb
|
215
|
+
- lib/hospodar/builder/strategies/inject.rb
|
216
|
+
- lib/hospodar/builder/strategies/link.rb
|
217
|
+
- lib/hospodar/builder/strategies/mount.rb
|
218
|
+
- lib/hospodar/builder/strategies/translate.rb
|
219
|
+
- lib/hospodar/builder/wrapped.rb
|
220
|
+
- lib/hospodar/dsl.rb
|
221
|
+
- lib/hospodar/factories.rb
|
222
|
+
- lib/hospodar/group_definition.rb
|
223
|
+
- lib/hospodar/inheritance_helpers.rb
|
224
|
+
- lib/hospodar/module_builder.rb
|
225
|
+
- lib/hospodar/registry.rb
|
226
|
+
- lib/hospodar/subclassing_helpers.rb
|
227
|
+
- lib/hospodar/version.rb
|
228
|
+
homepage: https://github.com/andriy-baran/hospodar
|
229
|
+
licenses:
|
230
|
+
- MIT
|
231
|
+
metadata:
|
232
|
+
allowed_push_host: https://rubygems.org
|
233
|
+
homepage_uri: https://github.com/andriy-baran/hospodar
|
234
|
+
source_code_uri: https://github.com/andriy-baran/hospodar
|
235
|
+
changelog_uri: https://github.com/andriy-baran/hospodar/CHANGELOG.md
|
236
|
+
post_install_message:
|
237
|
+
rdoc_options: []
|
238
|
+
require_paths:
|
239
|
+
- lib
|
240
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
241
|
+
requirements:
|
242
|
+
- - ">="
|
243
|
+
- !ruby/object:Gem::Version
|
244
|
+
version: 2.4.0
|
245
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
246
|
+
requirements:
|
247
|
+
- - ">="
|
248
|
+
- !ruby/object:Gem::Version
|
249
|
+
version: '0'
|
250
|
+
requirements: []
|
251
|
+
rubygems_version: 3.2.30
|
252
|
+
signing_key:
|
253
|
+
specification_version: 4
|
254
|
+
summary: Create complex object easily
|
255
|
+
test_files: []
|