diff --git a/spec/support/custom_email.cr b/spec/support/custom_email.cr index a44ec3495..066458737 100644 --- a/spec/support/custom_email.cr +++ b/spec/support/custom_email.cr @@ -22,6 +22,10 @@ class CustomEmail alias ColumnType = String include Avram::Type + def self.criteria(query : T, column) forall T + Criteria(T, CustomEmail).new(query, column) + end + def parse(value : CustomEmail) SuccessfulCast(CustomEmail).new(value) end diff --git a/src/avram/base_query_template.cr b/src/avram/base_query_template.cr index 016432766..1f41a7352 100644 --- a/src/avram/base_query_template.cr +++ b/src/avram/base_query_template.cr @@ -11,10 +11,9 @@ class Avram::BaseQueryTemplate include Avram::PrimaryKeyQueryable({{ type }}) {% end %} - macro generate_criteria_method(query_class, name, type) + macro generate_criteria_method(name, type) def \{{ name }} - column_name = "#{table_name}.\{{ name }}" - \{{ type }}::Lucky::Criteria(\{{ query_class }}, \{{ type }}).new(self, column_name) + \{{ type }}.adapter.criteria(self, "#{table_name}.\{{ name }}") end end @@ -48,20 +47,11 @@ class Avram::BaseQueryTemplate {{ column[:name] }}.eq(value) end - {% if column[:type].is_a?(Generic) %} - # Checking Array type - generate_criteria_method(BaseQuery, {{ column[:name] }}, {{ column[:type].type_vars.first }}) + generate_criteria_method({{ column[:name] }}, {{ column[:type] }}) - macro inherited - generate_criteria_method(\{{ @type.name }}, {{ column[:name] }}, {{ column[:type].type_vars.first }}) - end - {% else %} - generate_criteria_method(BaseQuery, {{ column[:name] }}, {{ column[:type] }}) - - macro inherited - generate_criteria_method(\{{ @type.name }}, {{ column[:name] }}, {{ column[:type] }}) - end - {% end %} + macro inherited + generate_criteria_method({{ column[:name] }}, {{ column[:type] }}) + end {% end %} {% for assoc in associations %} diff --git a/src/avram/charms/bool_extensions.cr b/src/avram/charms/bool_extensions.cr index 3b12627c9..3e238bde7 100644 --- a/src/avram/charms/bool_extensions.cr +++ b/src/avram/charms/bool_extensions.cr @@ -7,6 +7,10 @@ struct Bool alias ColumnType = Bool include Avram::Type + def self.criteria(query : T, column) forall T + Criteria(T, Bool).new(query, column) + end + def parse(value : String) if %w(true 1).includes? value SuccessfulCast(Bool).new true diff --git a/src/avram/charms/enum_extensions.cr b/src/avram/charms/enum_extensions.cr index ff7310d73..9a4bedd8f 100644 --- a/src/avram/charms/enum_extensions.cr +++ b/src/avram/charms/enum_extensions.cr @@ -45,6 +45,10 @@ macro avram_enum(enum_name, &block) alias ColumnType = Int32 include Avram::Type + def self.criteria(query : T, column) forall T + Criteria(T, Int32).new(query, column) + end + def from_db!(value : Int32) {{ enum_name }}.new(value) end diff --git a/src/avram/charms/float64_extensions.cr b/src/avram/charms/float64_extensions.cr index e146c0f04..6644d0707 100644 --- a/src/avram/charms/float64_extensions.cr +++ b/src/avram/charms/float64_extensions.cr @@ -7,6 +7,10 @@ struct Float64 alias ColumnType = Float64 include Avram::Type + def self.criteria(query : T, column) forall T + Criteria(T, Float64).new(query, column) + end + def from_db!(value : Float64) value end diff --git a/src/avram/charms/int16_extensions.cr b/src/avram/charms/int16_extensions.cr index 7b773383c..31aff404a 100644 --- a/src/avram/charms/int16_extensions.cr +++ b/src/avram/charms/int16_extensions.cr @@ -7,6 +7,10 @@ struct Int16 alias ColumnType = Int16 include Avram::Type + def self.criteria(query : T, column) forall T + Criteria(T, Int16).new(query, column) + end + def from_db!(value : Int16) value end diff --git a/src/avram/charms/int32_extensions.cr b/src/avram/charms/int32_extensions.cr index 617eef24e..b98a10f10 100644 --- a/src/avram/charms/int32_extensions.cr +++ b/src/avram/charms/int32_extensions.cr @@ -7,6 +7,10 @@ struct Int32 alias ColumnType = Int32 include Avram::Type + def self.criteria(query : T, column) forall T + Criteria(T, Int32).new(query, column) + end + def from_db!(value : Int32) value end diff --git a/src/avram/charms/int64_extensions.cr b/src/avram/charms/int64_extensions.cr index 6a08a6640..12b5b524b 100644 --- a/src/avram/charms/int64_extensions.cr +++ b/src/avram/charms/int64_extensions.cr @@ -7,6 +7,10 @@ struct Int64 alias ColumnType = Int64 include Avram::Type + def self.criteria(query : T, column) forall T + Criteria(T, Int64).new(query, column) + end + def from_db!(value : Int64) value end diff --git a/src/avram/charms/json_extensions.cr b/src/avram/charms/json_extensions.cr index 3578c3736..372f5b885 100644 --- a/src/avram/charms/json_extensions.cr +++ b/src/avram/charms/json_extensions.cr @@ -7,6 +7,10 @@ struct JSON::Any alias ColumnType = JSON::Any include Avram::Type + def self.criteria(query : T, column) forall T + Criteria(T, JSON::Any).new(query, column) + end + def from_db!(value : JSON::Any) value end diff --git a/src/avram/charms/string_extensions.cr b/src/avram/charms/string_extensions.cr index b5e55f060..eff3b8de3 100644 --- a/src/avram/charms/string_extensions.cr +++ b/src/avram/charms/string_extensions.cr @@ -7,6 +7,10 @@ class String alias ColumnType = String include Avram::Type + def self.criteria(query : T, column) forall T + Criteria(T, String).new(query, column) + end + def parse(value : String) SuccessfulCast(String).new(value) end diff --git a/src/avram/charms/time_extensions.cr b/src/avram/charms/time_extensions.cr index c40020b16..4dd221ab0 100644 --- a/src/avram/charms/time_extensions.cr +++ b/src/avram/charms/time_extensions.cr @@ -18,6 +18,10 @@ struct Time Time::Format::ISO_8601_TIME, ] + def self.criteria(query : T, column) forall T + Criteria(T, Time).new(query, column) + end + def from_db!(value : Time) value end diff --git a/src/avram/charms/uuid_extensions.cr b/src/avram/charms/uuid_extensions.cr index 49a2bda1c..287ab4603 100644 --- a/src/avram/charms/uuid_extensions.cr +++ b/src/avram/charms/uuid_extensions.cr @@ -7,6 +7,10 @@ struct UUID alias ColumnType = UUID include Avram::Type + def self.criteria(query : T, column) forall T + Criteria(T, UUID).new(query, column) + end + def parse(value : UUID) SuccessfulCast(UUID).new(value) end