Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Renamespace concerns #53

Merged
merged 3 commits into from
Nov 15, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .rubocop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ RSpec/ExpectChange:
RSpec/FilePath:
Exclude:
- spec/kangaru/components/**/*.rb
- spec/kangaru/concerns/**/*.rb
RSpec/LetSetup:
Enabled: false
RSpec/MultipleMemoizedHelpers:
Expand Down
3 changes: 2 additions & 1 deletion lib/kangaru.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@

module Kangaru
COLLAPSED_DIRS = [
"#{__dir__}/kangaru/components"
"#{__dir__}/kangaru/components",
"#{__dir__}/kangaru/concerns"
].freeze

DEFAULT_ENV = :runtime
Expand Down
31 changes: 31 additions & 0 deletions lib/kangaru/concern.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
module Kangaru
module Concern
def append_features(base)
super
evaluate_concern_blocks!(base)
end

def class_methods(&)
if const_defined?(:ClassMethods)
const_get(:ClassMethods)
else
const_set(:ClassMethods, Module.new)
end.module_eval(&)
end

def included(base = nil, &block)
super base if base
return if block.nil?

@included = block
end

private

def evaluate_concern_blocks!(base)
base.extend(const_get(:ClassMethods)) if const_defined?(:ClassMethods)

base.class_eval(&@included) if instance_variable_defined?(:@included)
end
end
end
33 changes: 33 additions & 0 deletions lib/kangaru/concerns/attributable.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
module Kangaru
module Attributable
extend Concern

class_methods do
def attributes
instance_methods.grep(/\w=$/).map do |attribute|
attribute.to_s.delete_suffix("=").to_sym
end
end

def set_default(**attributes)
defaults.merge!(**attributes)
end

def defaults
@defaults ||= {}
end
end

def initialize(**attributes)
attributes = self.class.defaults.merge(**attributes)

merge!(**attributes)
end

def merge!(**attributes)
attributes.slice(*self.class.attributes).each do |attr, value|
instance_variable_set(:"@#{attr}", value)
end
end
end
end
35 changes: 0 additions & 35 deletions lib/kangaru/concerns/attributes_concern.rb

This file was deleted.

33 changes: 0 additions & 33 deletions lib/kangaru/concerns/concern.rb

This file was deleted.

28 changes: 13 additions & 15 deletions lib/kangaru/concerns/configurable.rb
Original file line number Diff line number Diff line change
@@ -1,23 +1,21 @@
module Kangaru
module Concerns
module Configurable
extend Concern
module Configurable
extend Concern

using Patches::Inflections
using Patches::Inflections

class_methods do
def configurator_key
(name || raise("class name not set"))
.gsub(/^.*::/, "")
.to_snakecase
.to_sym
end
class_methods do
def configurator_key
(name || raise("class name not set"))
.gsub(/^.*::/, "")
.to_snakecase
.to_sym
end
end

def config
Kangaru.application!.config[self.class.configurator_key] ||
raise("inferred configurator not set by application")
end
def config
Kangaru.application!.config[self.class.configurator_key] ||
raise("inferred configurator not set by application")
end
end
end
56 changes: 27 additions & 29 deletions lib/kangaru/concerns/validatable.rb
Original file line number Diff line number Diff line change
@@ -1,46 +1,44 @@
module Kangaru
module Concerns
module Validatable
extend Concern
module Validatable
extend Concern

class_methods do
def validation_rules
@validation_rules ||= {}
end

def validates(attribute, **validations)
validation_rules[attribute] ||= {}
validation_rules[attribute].merge!(**validations)
end
class_methods do
def validation_rules
@validation_rules ||= {}
end

def errors
@errors ||= []
def validates(attribute, **validations)
validation_rules[attribute] ||= {}
validation_rules[attribute].merge!(**validations)
end
end

def errors
@errors ||= []
end

def validate
self.class.validation_rules.each do |attribute, validations|
validator = validator_for(attribute)
def validate
self.class.validation_rules.each do |attribute, validations|
validator = validator_for(attribute)

validations.each do |validator_name, params|
params = {} if params == true
validations.each do |validator_name, params|
params = {} if params == true

validator.validate(validator_name, **params)
end
validator.validate(validator_name, **params)
end
end
end

def valid?
validate
def valid?
validate

errors.empty?
end
errors.empty?
end

private
private

def validator_for(attribute)
Validation::AttributeValidator.new(model: self, attribute:)
end
def validator_for(attribute)
Validation::AttributeValidator.new(model: self, attribute:)
end
end
end
4 changes: 2 additions & 2 deletions lib/kangaru/configurator.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
module Kangaru
class Configurator
include Concerns::AttributesConcern
include Concerns::Validatable
include Attributable
include Validatable

using Patches::Inflections

Expand Down
2 changes: 1 addition & 1 deletion lib/kangaru/database.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ module Kangaru
class Database
extend Forwardable

include Concerns::AttributesConcern
include Attributable

PLUGINS = %i[
enum
Expand Down
2 changes: 1 addition & 1 deletion lib/kangaru/model.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module Kangaru
Model = Class.new(Sequel::Model) do
include Concerns::Validatable
include Validatable
end

Model.def_Model(self)
Expand Down
2 changes: 1 addition & 1 deletion lib/kangaru/request.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ module Kangaru
class Request
using Patches::Inflections

include Concerns::Configurable
include Configurable

DEFAULT_CONTROLLER = "DefaultController".freeze

Expand Down
13 changes: 13 additions & 0 deletions sig/kangaru/concern.rbs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
module Kangaru
module Concern : Module
@included: untyped

def append_features: (untyped) -> void

def class_methods: { [self: singleton(Class)] -> void } -> void

def included: (?untyped?) ?{ -> void } -> void

def evaluate_concern_blocks!: (untyped) -> void
end
end
25 changes: 25 additions & 0 deletions sig/kangaru/concerns/attributable.rbs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
module Kangaru
module Attributable
extend Concern

module ClassMethods
def attributes: -> Array[Symbol]

def defaults: -> Hash[Symbol, untyped]

def set_default: (**untyped) -> void

@defaults: Hash[Symbol, untyped]
end

extend ClassMethods

attr_reader defaults: Hash[Symbol, untyped]

def instance_methods: -> Array[Symbol]

def initialize: (**untyped) -> void

def merge!: (**untyped) -> void
end
end
27 changes: 0 additions & 27 deletions sig/kangaru/concerns/attributes_concern.rbs

This file was deleted.

15 changes: 0 additions & 15 deletions sig/kangaru/concerns/concern.rbs

This file was deleted.

Loading