Skip to content

Instantly share code, notes, and snippets.

@rishavs
Created February 22, 2017 17:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rishavs/9c26b23f14c3729274688a216c29f515 to your computer and use it in GitHub Desktop.
Save rishavs/9c26b23f14c3729274688a216c29f515 to your computer and use it in GitHub Desktop.
require "kemal"
require "./Kemal_mvc_design/controllers/post_controller.cr"
require "./Kemal_mvc_design/models/posts.cr"
require "./Kemal_mvc_design/*"
Kemal.run
# /Kemal_mvc_design/controllers/post_controller.cr
require "crecto"
module PostController
extend self
def index(env)
query = Crecto::Repo::Query
.order_by("posts.id DESC")
dataset = Crecto::Repo.all(Models::Post, query)
dataset.as(Array)
pp(dataset)
end
end
# /Kemal_mvc_design/models/posts.cr
module Models
class Post < Crecto::Model
schema "posts" do
field :title, String
field :is_link, Bool
field :link, String
field :content, String
field :author_username, String
field :is_viewable, Bool
field :is_approved, Bool
field :is_deleted, Bool
field :last_read_at, Time
end
validate_required [:title]
end
end
# /Kemal_mvc_design/routes.cr
module Main
get "/" do |env|
PostController.index(env)
end
end
@rishavs
Copy link
Author

rishavs commented Feb 22, 2017

error is

mockingbird@ROMANA:/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design$ crystal run src/Kemal_mvc_design.cr
Error in src/Kemal_mvc_design.cr:2: while requiring "./Kemal_mvc_design/controllers/post_controller.cr"

require "./Kemal_mvc_design/controllers/post_controller.cr"
^

in src/Kemal_mvc_design/controllers/post_controller.cr:2: while requiring "./../models/posts.cr"

require "./../models/posts.cr"
^

in src/Kemal_mvc_design/models/posts.cr:4: expanding macro

        schema "posts" do
        ^~~~~~

in src/Kemal_mvc_design/models/posts.cr:4: expanding macro

        schema "posts" do
        ^

in macro 'schema' /mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/lib/crecto/src/crecto/schema.cr:52, line 29:

   1.       include Crecto::Schema::HasMany
   2.       include Crecto::Schema::HasOne
   3.       include Crecto::Schema::BelongsTo
   4.
   5.       # macro constants
   6.       VALID_FIELD_TYPES = [String, Int64, Int32, Float32, Float64, Bool, Time, Int32 | Int64, Float32 | Float64]
   7.       VALID_FIELD_OPTIONS = [:primary_key, :virtual]
   8.       FIELDS = [] of NamedTuple(name: Symbol, type: String)
   9.
  10.       # Class variables
  11.       @@table_name = "posts"
  12.       @@changeset_fields = [] of Symbol
  13.       @@initial_values = {} of Symbol => DbValue
  14.
  15.       # Instance properties
  16.       property initial_values : Hash(Symbol, DbValue)?
  17.
  18.        #<loc:push>begin #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",5,13>#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",5,13>field(#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",5,19>:title, #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",5,37>String)
  19. #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",6,13>field(#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",6,19>:is_link, #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",6,37>Bool)
  20. #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",7,13>field(#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",7,19>:link, #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",7,37>String)
  21. #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",8,13>field(#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",8,19>:content, #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",8,37>String)
  22. #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",9,13>field(#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",9,19>:author_username, #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",9,37>String)
  23. #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",10,13>field(#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",10,19>:is_viewable, #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",10,37>Bool)
  24. #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",11,13>field(#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",11,19>:is_approved, #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",11,37>Bool)
  25. #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",12,13>field(#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",12,19>:is_deleted, #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",12,37>Bool)
  26. #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",13,13>field(#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",13,19>:last_read_at, #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",13,37>Time)
  27.  end#<loc:pop>
  28.
> 29.       setup
  30.

expanding macro
in macro 'schema' /mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/lib/crecto/src/crecto/schema.cr:52, line 29:

   1.       include Crecto::Schema::HasMany
   2.       include Crecto::Schema::HasOne
   3.       include Crecto::Schema::BelongsTo
   4.
   5.       # macro constants
   6.       VALID_FIELD_TYPES = [String, Int64, Int32, Float32, Float64, Bool, Time, Int32 | Int64, Float32 | Float64]
   7.       VALID_FIELD_OPTIONS = [:primary_key, :virtual]
   8.       FIELDS = [] of NamedTuple(name: Symbol, type: String)
   9.
  10.       # Class variables
  11.       @@table_name = "posts"
  12.       @@changeset_fields = [] of Symbol
  13.       @@initial_values = {} of Symbol => DbValue
  14.
  15.       # Instance properties
  16.       property initial_values : Hash(Symbol, DbValue)?
  17.
  18.        #<loc:push>begin #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",5,13>#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",5,13>field(#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",5,19>:title, #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",5,37>String)
  19. #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",6,13>field(#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",6,19>:is_link, #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",6,37>Bool)
  20. #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",7,13>field(#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",7,19>:link, #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",7,37>String)
  21. #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",8,13>field(#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",8,19>:content, #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",8,37>String)
  22. #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",9,13>field(#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",9,19>:author_username, #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",9,37>String)
  23. #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",10,13>field(#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",10,19>:is_viewable, #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",10,37>Bool)
  24. #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",11,13>field(#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",11,19>:is_approved, #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",11,37>Bool)
  25. #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",12,13>field(#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",12,19>:is_deleted, #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",12,37>Bool)
  26. #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",13,13>field(#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",13,19>:last_read_at, #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",13,37>Time)
  27.  end#<loc:pop>
  28.
> 29.       setup
  30.

expanding macro
in macro 'setup' /mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/lib/crecto/src/crecto/schema.cr:125, line 15:

   1.       def initialize
   2.       end
   3.
   4.
   5.
   6.
   7.
   8.
   9.
  10.
  11.
  12.
  13.
  14.
> 15.       DB.mapping({ title: {type: String, nilable: true}, is_link: {type: Bool, nilable: true}, link: {type: String, nilable: true}, content: {type: String, nilable: true}, author_username: {type: String, nilable: true}, is_viewable: {type: Bool, nilable: true}, is_approved: {type: Bool, nilable: true}, is_deleted: {type: Bool, nilable: true}, last_read_at: {type: Time, nilable: true}, id: {type: DbBigInt, nilable: true}, created_at: {type: Time, nilable: true}, updated_at: {type: Time, nilable: true} })
  16.       JSON.mapping({ title: {type: String, nilable: true}, is_link: {type: Bool, nilable: true}, link: {type: String, nilable: true}, content: {type: String, nilable: true}, author_username: {type: String, nilable: true}, is_viewable: {type: Bool, nilable: true}, is_approved: {type: Bool, nilable: true}, is_deleted: {type: Bool, nilable: true}, last_read_at: {type: Time, nilable: true}, id: {type: DbBigInt, nilable: true}, created_at: {type: Time, nilable: true}, updated_at: {type: Time, nilable: true} })
  17.
  18.       # Builds a hash from all `FIELDS` defined
  19.       def to_query_hash
  20.         query_hash = {} of Symbol => DbValue
  21.
  22.
  23.           if self.title && @@changeset_fields.includes?(:title)
  24.             query_hash[:title] = self.title
  25.             query_hash[:title] = query_hash[:title].as(Time).to_utc if query_hash[:title].is_a?(Time)
  26.           end
  27.
  28.           if self.is_link && @@changeset_fields.includes?(:is_link)
  29.             query_hash[:is_link] = self.is_link
  30.             query_hash[:is_link] = query_hash[:is_link].as(Time).to_utc if query_hash[:is_link].is_a?(Time)
  31.           end
  32.
  33.           if self.link && @@changeset_fields.includes?(:link)
  34.             query_hash[:link] = self.link
  35.             query_hash[:link] = query_hash[:link].as(Time).to_utc if query_hash[:link].is_a?(Time)
  36.           end
  37.
  38.           if self.content && @@changeset_fields.includes?(:content)
  39.             query_hash[:content] = self.content
  40.             query_hash[:content] = query_hash[:content].as(Time).to_utc if query_hash[:content].is_a?(Time)
  41.           end
  42.
  43.           if self.author_username && @@changeset_fields.includes?(:author_username)
  44.             query_hash[:author_username] = self.author_username
  45.             query_hash[:author_username] = query_hash[:author_username].as(Time).to_utc if query_hash[:author_username].is_a?(Time)
  46.           end
  47.
  48.           if self.is_viewable && @@changeset_fields.includes?(:is_viewable)
  49.             query_hash[:is_viewable] = self.is_viewable
  50.             query_hash[:is_viewable] = query_hash[:is_viewable].as(Time).to_utc if query_hash[:is_viewable].is_a?(Time)
  51.           end
  52.
  53.           if self.is_approved && @@changeset_fields.includes?(:is_approved)
  54.             query_hash[:is_approved] = self.is_approved
  55.             query_hash[:is_approved] = query_hash[:is_approved].as(Time).to_utc if query_hash[:is_approved].is_a?(Time)
  56.           end
  57.
  58.           if self.is_deleted && @@changeset_fields.includes?(:is_deleted)
  59.             query_hash[:is_deleted] = self.is_deleted
  60.             query_hash[:is_deleted] = query_hash[:is_deleted].as(Time).to_utc if query_hash[:is_deleted].is_a?(Time)
  61.           end
  62.
  63.           if self.last_read_at && @@changeset_fields.includes?(:last_read_at)
  64.             query_hash[:last_read_at] = self.last_read_at
  65.             query_hash[:last_read_at] = query_hash[:last_read_at].as(Time).to_utc if query_hash[:last_read_at].is_a?(Time)
  66.           end
  67.
  68.
  69.
  70.           query_hash[:created_at] = self.created_at.nil? ? nil : self.created_at.as(Time).to_utc
  71.
  72.
  73.
  74.           query_hash[:updated_at] = self.updated_at.nil? ? nil : self.updated_at.as(Time).to_utc
  75.
  76.
  77.         query_hash
  78.       end
  79.
  80.       # Returns the value of the primary key field
  81.       def pkey_value
  82.         self.id.as(PkeyValue)
  83.       end
  84.
  85.       def update_primary_key(val)
  86.         self.id = val
  87.       end
  88.
  89.       def updated_at_value
  90.         self.updated_at
  91.       end
  92.
  93.       def created_at_value
  94.         self.created_at
  95.       end
  96.
  97.       def updated_at_to_now
  98.
  99.           self.updated_at = Time.utc_now
 100.
 101.       end
 102.
 103.       def created_at_to_now
 104.
 105.           self.created_at = Time.utc_now
 106.
 107.       end
 108.
 109.       # Return the primary key field as a String
 110.       def self.primary_key_field
 111.         PRIMARY_KEY_FIELD
 112.       end
 113.
 114.       # Return the primary key field as a Symbol
 115.       def self.primary_key_field_symbol
 116.         PRIMARY_KEY_FIELD_SYMBOL
 117.       end
 118.
 119.       def self.created_at_field
 120.         CREATED_AT_FIELD
 121.       end
 122.
 123.       def self.updated_at_field
 124.         UPDATED_AT_FIELD
 125.       end
 126.
 127.       # Class method to get the `changeset_fields`
 128.       def self.changeset_fields
 129.         @@changeset_fields
 130.       end
 131.
 132.       # Class method to get the table name
 133.       def self.table_name
 134.         @@table_name
 135.       end
 136.
 137.       # Get the Class for the assocation name
 138.       # i.e. :posts => Post
 139.       def self.klass_for_association(association : Symbol)
 140.         ASSOCIATIONS.select{|a| a[:key] == association && a[:this_klass] == self}.first[:klass]
 141.       end
 142.
 143.       # Get the foreign key for the association
 144.       # i.e. :posts => :user_id
 145.       def self.foreign_key_for_association(association : Symbol) : Symbol
 146.         ASSOCIATIONS.select{|a| a[:key] == association && a[:this_klass] == self}.first[:foreign_key]
mockingbird@ROMANA:/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design$
mockingbird@ROMANA:/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design$
mockingbird@ROMANA:/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design$
mockingbird@ROMANA:/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design$
mockingbird@ROMANA:/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design$
mockingbird@ROMANA:/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design$
mockingbird@ROMANA:/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design$
mockingbird@ROMANA:/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design$ crystal run src/Kemal_mvc_design.cr
Error in src/Kemal_mvc_design.cr:3: while requiring "./Kemal_mvc_design/models/posts.cr"

require "./Kemal_mvc_design/models/posts.cr"
^

in src/Kemal_mvc_design/models/posts.cr:4: expanding macro

        schema "posts" do
        ^~~~~~

in src/Kemal_mvc_design/models/posts.cr:4: expanding macro

        schema "posts" do
        ^

in macro 'schema' /mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/lib/crecto/src/crecto/schema.cr:52, line 29:

   1.       include Crecto::Schema::HasMany
   2.       include Crecto::Schema::HasOne
   3.       include Crecto::Schema::BelongsTo
   4.
   5.       # macro constants
   6.       VALID_FIELD_TYPES = [String, Int64, Int32, Float32, Float64, Bool, Time, Int32 | Int64, Float32 | Float64]
   7.       VALID_FIELD_OPTIONS = [:primary_key, :virtual]
   8.       FIELDS = [] of NamedTuple(name: Symbol, type: String)
   9.
  10.       # Class variables
  11.       @@table_name = "posts"
  12.       @@changeset_fields = [] of Symbol
  13.       @@initial_values = {} of Symbol => DbValue
  14.
  15.       # Instance properties
  16.       property initial_values : Hash(Symbol, DbValue)?
  17.
  18.        #<loc:push>begin #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",5,13>#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",5,13>field(#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",5,19>:title, #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",5,37>String)
  19. #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",6,13>field(#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",6,19>:is_link, #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",6,37>Bool)
  20. #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",7,13>field(#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",7,19>:link, #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",7,37>String)
  21. #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",8,13>field(#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",8,19>:content, #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",8,37>String)
  22. #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",9,13>field(#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",9,19>:author_username, #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",9,37>String)
  23. #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",10,13>field(#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",10,19>:is_viewable, #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",10,37>Bool)
  24. #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",11,13>field(#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",11,19>:is_approved, #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",11,37>Bool)
  25. #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",12,13>field(#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",12,19>:is_deleted, #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",12,37>Bool)
  26. #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",13,13>field(#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",13,19>:last_read_at, #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",13,37>Time)
  27.  end#<loc:pop>
  28.
> 29.       setup
  30.

expanding macro
in macro 'schema' /mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/lib/crecto/src/crecto/schema.cr:52, line 29:

   1.       include Crecto::Schema::HasMany
   2.       include Crecto::Schema::HasOne
   3.       include Crecto::Schema::BelongsTo
   4.
   5.       # macro constants
   6.       VALID_FIELD_TYPES = [String, Int64, Int32, Float32, Float64, Bool, Time, Int32 | Int64, Float32 | Float64]
   7.       VALID_FIELD_OPTIONS = [:primary_key, :virtual]
   8.       FIELDS = [] of NamedTuple(name: Symbol, type: String)
   9.
  10.       # Class variables
  11.       @@table_name = "posts"
  12.       @@changeset_fields = [] of Symbol
  13.       @@initial_values = {} of Symbol => DbValue
  14.
  15.       # Instance properties
  16.       property initial_values : Hash(Symbol, DbValue)?
  17.
  18.        #<loc:push>begin #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",5,13>#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",5,13>field(#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",5,19>:title, #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",5,37>String)
  19. #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",6,13>field(#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",6,19>:is_link, #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",6,37>Bool)
  20. #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",7,13>field(#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",7,19>:link, #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",7,37>String)
  21. #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",8,13>field(#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",8,19>:content, #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",8,37>String)
  22. #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",9,13>field(#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",9,19>:author_username, #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",9,37>String)
  23. #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",10,13>field(#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",10,19>:is_viewable, #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",10,37>Bool)
  24. #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",11,13>field(#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",11,19>:is_approved, #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",11,37>Bool)
  25. #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",12,13>field(#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",12,19>:is_deleted, #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",12,37>Bool)
  26. #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",13,13>field(#<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",13,19>:last_read_at, #<loc:"/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/src/Kemal_mvc_design/models/posts.cr",13,37>Time)
  27.  end#<loc:pop>
  28.
> 29.       setup
  30.

expanding macro
in macro 'setup' /mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design/lib/crecto/src/crecto/schema.cr:125, line 15:

   1.       def initialize
   2.       end
   3.
   4.
   5.
   6.
   7.
   8.
   9.
  10.
  11.
  12.
  13.
  14.
> 15.       DB.mapping({ title: {type: String, nilable: true}, is_link: {type: Bool, nilable: true}, link: {type: String, nilable: true}, content: {type: String, nilable: true}, author_username: {type: String, nilable: true}, is_viewable: {type: Bool, nilable: true}, is_approved: {type: Bool, nilable: true}, is_deleted: {type: Bool, nilable: true}, last_read_at: {type: Time, nilable: true}, id: {type: DbBigInt, nilable: true}, created_at: {type: Time, nilable: true}, updated_at: {type: Time, nilable: true} })
  16.       JSON.mapping({ title: {type: String, nilable: true}, is_link: {type: Bool, nilable: true}, link: {type: String, nilable: true}, content: {type: String, nilable: true}, author_username: {type: String, nilable: true}, is_viewable: {type: Bool, nilable: true}, is_approved: {type: Bool, nilable: true}, is_deleted: {type: Bool, nilable: true}, last_read_at: {type: Time, nilable: true}, id: {type: DbBigInt, nilable: true}, created_at: {type: Time, nilable: true}, updated_at: {type: Time, nilable: true} })
  17.
  18.       # Builds a hash from all `FIELDS` defined
  19.       def to_query_hash
  20.         query_hash = {} of Symbol => DbValue
  21.
  22.
  23.           if self.title && @@changeset_fields.includes?(:title)
  24.             query_hash[:title] = self.title
  25.             query_hash[:title] = query_hash[:title].as(Time).to_utc if query_hash[:title].is_a?(Time)
  26.           end
  27.
  28.           if self.is_link && @@changeset_fields.includes?(:is_link)
  29.             query_hash[:is_link] = self.is_link
  30.             query_hash[:is_link] = query_hash[:is_link].as(Time).to_utc if query_hash[:is_link].is_a?(Time)
  31.           end
  32.
  33.           if self.link && @@changeset_fields.includes?(:link)
  34.             query_hash[:link] = self.link
  35.             query_hash[:link] = query_hash[:link].as(Time).to_utc if query_hash[:link].is_a?(Time)
  36.           end
  37.
  38.           if self.content && @@changeset_fields.includes?(:content)
  39.             query_hash[:content] = self.content
  40.             query_hash[:content] = query_hash[:content].as(Time).to_utc if query_hash[:content].is_a?(Time)
  41.           end
  42.
  43.           if self.author_username && @@changeset_fields.includes?(:author_username)
  44.             query_hash[:author_username] = self.author_username
  45.             query_hash[:author_username] = query_hash[:author_username].as(Time).to_utc if query_hash[:author_username].is_a?(Time)
  46.           end
  47.
  48.           if self.is_viewable && @@changeset_fields.includes?(:is_viewable)
  49.             query_hash[:is_viewable] = self.is_viewable
  50.             query_hash[:is_viewable] = query_hash[:is_viewable].as(Time).to_utc if query_hash[:is_viewable].is_a?(Time)
  51.           end
  52.
  53.           if self.is_approved && @@changeset_fields.includes?(:is_approved)
  54.             query_hash[:is_approved] = self.is_approved
  55.             query_hash[:is_approved] = query_hash[:is_approved].as(Time).to_utc if query_hash[:is_approved].is_a?(Time)
  56.           end
  57.
  58.           if self.is_deleted && @@changeset_fields.includes?(:is_deleted)
  59.             query_hash[:is_deleted] = self.is_deleted
  60.             query_hash[:is_deleted] = query_hash[:is_deleted].as(Time).to_utc if query_hash[:is_deleted].is_a?(Time)
  61.           end
  62.
  63.           if self.last_read_at && @@changeset_fields.includes?(:last_read_at)
  64.             query_hash[:last_read_at] = self.last_read_at
  65.             query_hash[:last_read_at] = query_hash[:last_read_at].as(Time).to_utc if query_hash[:last_read_at].is_a?(Time)
  66.           end
  67.
  68.
  69.
  70.           query_hash[:created_at] = self.created_at.nil? ? nil : self.created_at.as(Time).to_utc
  71.
  72.
  73.
  74.           query_hash[:updated_at] = self.updated_at.nil? ? nil : self.updated_at.as(Time).to_utc
  75.
  76.
  77.         query_hash
  78.       end
  79.
  80.       # Returns the value of the primary key field
  81.       def pkey_value
  82.         self.id.as(PkeyValue)
  83.       end
  84.
  85.       def update_primary_key(val)
  86.         self.id = val
  87.       end
  88.
  89.       def updated_at_value
  90.         self.updated_at
  91.       end
  92.
  93.       def created_at_value
  94.         self.created_at
  95.       end
  96.
  97.       def updated_at_to_now
  98.
  99.           self.updated_at = Time.utc_now
 100.
 101.       end
 102.
 103.       def created_at_to_now
 104.
 105.           self.created_at = Time.utc_now
 106.
 107.       end
 108.
 109.       # Return the primary key field as a String
 110.       def self.primary_key_field
 111.         PRIMARY_KEY_FIELD
 112.       end
 113.
 114.       # Return the primary key field as a Symbol
 115.       def self.primary_key_field_symbol
 116.         PRIMARY_KEY_FIELD_SYMBOL
 117.       end
 118.
 119.       def self.created_at_field
 120.         CREATED_AT_FIELD
 121.       end
 122.
 123.       def self.updated_at_field
 124.         UPDATED_AT_FIELD
 125.       end
 126.
 127.       # Class method to get the `changeset_fields`
 128.       def self.changeset_fields
 129.         @@changeset_fields
 130.       end
 131.
 132.       # Class method to get the table name
 133.       def self.table_name
 134.         @@table_name
 135.       end
 136.
 137.       # Get the Class for the assocation name
 138.       # i.e. :posts => Post
 139.       def self.klass_for_association(association : Symbol)
 140.         ASSOCIATIONS.select{|a| a[:key] == association && a[:this_klass] == self}.first[:klass]
 141.       end
 142.
 143.       # Get the foreign key for the association
 144.       # i.e. :posts => :user_id
 145.       def self.foreign_key_for_association(association : Symbol) : Symbol
 146.         ASSOCIATIONS.select{|a| a[:key] == association && a[:this_klass] == self}.first[:foreign_key]
 147.       end
 148.
 149.       def self.foreign_key_for_association(klass : Crecto::Model.class)
 150.         ASSOCIATIONS.select{|a| a[:klass] == klass && a[:this_klass] == self}.first[:foreign_key]
 151.       end
 152.
 153.       # Get the foreign key value from the relation object
 154.       # i.e. :posts, post => post.user_id
 155.       def self.foreign_key_value_for_association(association : Symbol, item)
 156.         ASSOCIATIONS.select{|a| a[:key] == association && a[:this_klass] == self}.first[:foreign_key_value].call(item).as(PkeyValue)
 157.       end
 158.
 159.       # Set the value for the association
 160.       # i.e. :posts, user, [posts] => user.posts = [posts]
 161.       def self.set_value_for_association(association : Symbol, item, items)
 162.         ASSOCIATIONS.select{|a| a[:key] == association && a[:this_klass] == self}.first[:set_association].call(item, items)
 163.       end
 164.
 165.       # Get the association type for the association
 166.       # i.e. :posts => :has_many
 167.       def self.association_type_for_association(association : Symbol)
 168.         ASSOCIATIONS.select{|a| a[:key] == association && a[:this_klass] == self}.first[:association_type]
 169.       end
 170.
 171.       # Get the through association symbol
 172.       # i.e. :posts => :user_posts (if has_many through)
 173.       def self.through_key_for_association(association : Symbol) : Symbol?
 174.         ASSOCIATIONS.select{|a| a[:key] == association && a[:this_klass] == self}.first[:through]
 175.       end
 176.
 177.

undefined method 'mapping' for DB:Module

mockingbird@ROMANA:/mnt/c/Users/Mockingbird/DevSpace/Crystal/Kemal_mvc_design$

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment