diff --git a/.travis.yml b/.travis.yml index d10dc943e..bbc1f03f1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,7 +13,8 @@ cache: - .shards env: - - TEST_SUITE=./spec/build_spec.cr + - TEST_SUITE=./spec/build_spec_granite.cr + - TEST_SUITE=./spec/build_spec_crecto.cr - TEST_SUITE=./spec/amber script: diff --git a/shard.yml b/shard.yml index b86ef5172..e4feddd4e 100644 --- a/shard.yml +++ b/shard.yml @@ -5,7 +5,7 @@ version: 0.7.2 authors: - Amber Team and Contributors -crystal: 0.24.1 +crystal: 0.25.0 license: MIT diff --git a/spec/build_spec_crecto.cr b/spec/build_spec_crecto.cr new file mode 100644 index 000000000..099798a93 --- /dev/null +++ b/spec/build_spec_crecto.cr @@ -0,0 +1,55 @@ +require "./build_spec_helper" + +module Amber::CLI + describe "building a generated app using crecto model and slang template" do + generate_app("new", "-m", "crecto", "-t", "slang") + + it "check formatting" do + system("crystal tool format --check src").should be_true + end + + it "shards update - dependencies" do + system("shards update").should be_true + end + + it "shards check - dependencies" do + system("shards check").should be_true + end + + it "shards build - generates a binary" do + system("shards build #{TEST_APP_NAME}").should be_true + end + + it "executes specs" do + system("crystal spec").should be_true + end + ensure + cleanup + end + + describe "building a generated app using crecto model and ecr template" do + generate_app("new", "-m", "crecto", "-t", "ecr") + + it "check formatting" do + system("crystal tool format --check src").should be_true + end + + it "shards update - dependencies" do + system("shards update").should be_true + end + + it "shards check - dependencies" do + system("shards check").should be_true + end + + it "shards build - generates a binary" do + system("shards build #{TEST_APP_NAME}").should be_true + end + + it "executes specs" do + system("crystal spec").should be_true + end + ensure + cleanup + end +end diff --git a/spec/build_spec_granite.cr b/spec/build_spec_granite.cr new file mode 100644 index 000000000..5f69b4e26 --- /dev/null +++ b/spec/build_spec_granite.cr @@ -0,0 +1,55 @@ +require "./build_spec_helper" + +module Amber::CLI + describe "building a generated app using granite model and slang template" do + generate_app("new", "-m", "granite", "-t", "slang") + + it "check formatting" do + system("crystal tool format --check src").should be_true + end + + it "shards update - dependencies" do + system("shards update").should be_true + end + + it "shards check - dependencies" do + system("shards check").should be_true + end + + it "shards build - generates a binary" do + system("shards build #{TEST_APP_NAME}").should be_true + end + + it "executes specs" do + system("crystal spec").should be_true + end + ensure + cleanup + end + + describe "building a generated app using granite model and ecr template" do + generate_app("new", "-m", "granite", "-t", "ecr") + + it "check formatting" do + system("crystal tool format --check src").should be_true + end + + it "shards update - dependencies" do + system("shards update").should be_true + end + + it "shards check - dependencies" do + system("shards check").should be_true + end + + it "shards build - generates a binary" do + system("shards build #{TEST_APP_NAME}").should be_true + end + + it "executes specs" do + system("crystal spec").should be_true + end + ensure + cleanup + end +end diff --git a/spec/build_spec_helper.cr b/spec/build_spec_helper.cr new file mode 100644 index 000000000..24d8b401b --- /dev/null +++ b/spec/build_spec_helper.cr @@ -0,0 +1,33 @@ +require "./spec_helper" +require "./support/helpers/cli_helper" + +include CLIHelper + +module Amber::CLI + extend self + + def generate_app(*options) + ENV["AMBER_ENV"] = "test" + + cleanup + scaffold_app(TESTING_APP, *options) + + options = ["user:reference", "name:string", "body:text", "age:integer", "published:bool"] + temp_options = options - ["user:reference", "age:integer"] + MainCommand.run ["generate", "auth", "User"] | (options - ["user:reference"]) + MainCommand.run ["generate", "error"] + MainCommand.run ["generate", "scaffold", "Animal"] | temp_options + MainCommand.run ["generate", "scaffold", "Post"] | options + MainCommand.run ["generate", "scaffold", "PostComment"] | (options + ["post:reference"]) + MainCommand.run ["generate", "model", "Bat"] | options + MainCommand.run ["generate", "migration", "Crocodile"] | options + MainCommand.run ["generate", "mailer", "Dinosaur"] | options + MainCommand.run ["generate", "socket", "Eagle"] | ["soar", "nest"] + MainCommand.run ["generate", "channel", "Falcon"] + + prepare_yaml(Dir.current) + Amber::CLI.env = "test" + Amber::CLI.settings.logger = Amber::Environment::Logger.new(nil) + MainCommand.run ["db", "drop", "create", "migrate"] + end +end diff --git a/src/amber/cli/templates/app/config/initializers/database.cr.ecr b/src/amber/cli/templates/app/config/initializers/database.cr.ecr index 5f1aca2ff..3f0350307 100644 --- a/src/amber/cli/templates/app/config/initializers/database.cr.ecr +++ b/src/amber/cli/templates/app/config/initializers/database.cr.ecr @@ -7,7 +7,9 @@ Granite.settings.logger.progname = "Granite" <% else -%> require "<%= @database == "sqlite" ? "sqlite3" : @database %>" require "crecto" + Query = Crecto::Repo::Query +Multi = Crecto::Repo::Multi module Repo extend Crecto::Repo diff --git a/src/amber/cli/templates/auth/crecto/src/pipes/authenticate.cr.ecr b/src/amber/cli/templates/auth/crecto/src/pipes/authenticate.cr.ecr index 166d9f79b..eb97e9507 100644 --- a/src/amber/cli/templates/auth/crecto/src/pipes/authenticate.cr.ecr +++ b/src/amber/cli/templates/auth/crecto/src/pipes/authenticate.cr.ecr @@ -6,7 +6,7 @@ class Authenticate < Amber::Pipe::Base PUBLIC_PATHS = ["/", "/signin", "/session", "/signup", "/registration"] def call(context) - <%= @name %>_id = context.session["<%= @name %>_id"]? + <%= @name %>_id = context.session["<%= @name %>_id"]? if <%= @name %> = Repo.get(<%= class_name %>, <%= @name %>_id) context.current_<%= @name %> = <%= @name %> call_next(context) diff --git a/src/amber/cli/templates/model/crecto/spec/models/spec_helper.cr b/src/amber/cli/templates/model/crecto/spec/models/spec_helper.cr new file mode 100644 index 000000000..cba784c4c --- /dev/null +++ b/src/amber/cli/templates/model/crecto/spec/models/spec_helper.cr @@ -0,0 +1 @@ +require "../spec_helper" diff --git a/src/amber/cli/templates/model/crecto/spec/models/{{name}}_spec.cr.ecr b/src/amber/cli/templates/model/crecto/spec/models/{{name}}_spec.cr.ecr new file mode 100644 index 000000000..ca73ce25e --- /dev/null +++ b/src/amber/cli/templates/model/crecto/spec/models/{{name}}_spec.cr.ecr @@ -0,0 +1,8 @@ +require "./spec_helper" +require "../../src/models/<%= @name %>.cr" + +describe <%= class_name %> do + Spec.before_each do + Repo.delete_all(<%= class_name %>) + end +end diff --git a/src/amber/cli/templates/model/crecto/src/models/{{name}}.cr.ecr b/src/amber/cli/templates/model/crecto/src/models/{{name}}.cr.ecr index 9b00d95fa..80f5cd2fd 100644 --- a/src/amber/cli/templates/model/crecto/src/models/{{name}}.cr.ecr +++ b/src/amber/cli/templates/model/crecto/src/models/{{name}}.cr.ecr @@ -1,7 +1,11 @@ class <%= class_name %> < Crecto::Model schema "<%= table_name %>" do -<% @fields.reject{|f| f.hidden }.each do |field| -%> +<%- @fields.reject{|f| f.hidden }.each do |field| -%> + <%- if field.reference? -%> + belongs_to :<%= field.name %>, <%= field.name.camelcase %> + <%- else -%> field :<%= field.name %>, <%= field.cr_type %> -<% end -%> + <%- end -%> +<%- end -%> end end diff --git a/src/amber/cli/templates/scaffold/view/src/views/{{name}}/_form.ecr.ecr b/src/amber/cli/templates/scaffold/view/src/views/{{name}}/_form.ecr.ecr index 76a362aae..120e17a76 100644 --- a/src/amber/cli/templates/scaffold/view/src/views/{{name}}/_form.ecr.ecr +++ b/src/amber/cli/templates/scaffold/view/src/views/{{name}}/_form.ecr.ecr @@ -6,8 +6,6 @@ <%="<"%>%- end %> - - <%="<"%>%- action = (<%= @name %>.id ? "/<%= name_plural %>/" + <%= @name %>.id.to_s : "/<%= name_plural %>") %>
%= action %>" method="post"> <%="<"%>%= csrf_tag %> @@ -21,13 +19,13 @@ when "text" -%> <%="<"%>%= text_area(name: "<%= field.name -%>", content: <%= @name %>.<%= field.name %>, placeholder: "<%= field.name.capitalize %>", class: "form-control", size: "30x10") -%> <% when "boolean" -%> - <%="<"%>%= label(<%=":#{field.name}"%>, class: "form-check-label") do + <%="<"%>%= label(<%=":#{field.name}"%>) do check_box(<%=":#{field.name}, checked: #{@name}.#{field.name}.to_s == \"1\""%>, class: "form-check-input") end -%> <% when "reference" -%> <%="<"%>%= label(<%=":#{field.name}"%>) -%> - <%="<"%>%= select_field(name: "<%= field.name %>_id", collection: <%= field.name.capitalize %>.all.map{|<%= field.name %>| [<%= field.name %>.id, <%= field.name %>.id]}, selected: <%= @name %>.<%= field.name %>_id, class: "form-control") -%> + <%="<"%>%= select_field(name: "<%= field.name %>_id", collection: <% if @model == "crecto" %>Repo.all(<%= field.name.capitalize %>)<% else %><%= field.name.capitalize %>.all<% end %>.map{|<%= field.name %>| [<%= field.name %>.id, <%= field.name %>.id]}, selected: <%= @name %>.<%= field.name %>_id, class: "form-control") -%> <% else -%> <%="<"%>%= text_field(name: "<%= field.name %>", value: <%= @name %>.<%= field.name %>, placeholder: "<%= field.name.capitalize %>", class: "form-control") -%> <% end -%> diff --git a/src/amber/cli/templates/scaffold/view/src/views/{{name}}/_form.slang.ecr b/src/amber/cli/templates/scaffold/view/src/views/{{name}}/_form.slang.ecr index da88cb953..d8c773b24 100644 --- a/src/amber/cli/templates/scaffold/view/src/views/{{name}}/_form.slang.ecr +++ b/src/amber/cli/templates/scaffold/view/src/views/{{name}}/_form.slang.ecr @@ -15,7 +15,7 @@ == check_box(<%=":#{field.name}, checked: #{@name}.#{field.name}.to_s == \"1\""%>) <%- when "reference" -%> == label(<%=":#{field.name}"%>) - == select_field(name: "<%= field.name %>_id", collection: <%= field.name.capitalize %>.all.map{|<%= field.name %>| [<%= field.name %>.id, <%= field.name %>.id]}, selected: <%= @name %>.<%= field.name %>_id, class: "form-control") + == select_field(name: "<%= field.name %>_id", collection: <% if @model == "crecto" %>Repo.all(<%= field.name.capitalize %>)<% else %><%= field.name.capitalize %>.all<% end %>.map{|<%= field.name %>| [<%= field.name %>.id, <%= field.name %>.id]}, selected: <%= @name %>.<%= field.name %>_id, class: "form-control") <%- else -%> == text_field(name: "<%= field.name %>", value: <%= @name %>.<%= field.name %>, placeholder: "<%= field.name.capitalize %>", class: "form-control") <%- end -%> diff --git a/src/amber/cli/templates/scaffold/view/src/views/{{name}}/index.ecr.ecr b/src/amber/cli/templates/scaffold/view/src/views/{{name}}/index.ecr.ecr index 8d828fe10..bfbecf0f1 100644 --- a/src/amber/cli/templates/scaffold/view/src/views/{{name}}/index.ecr.ecr +++ b/src/amber/cli/templates/scaffold/view/src/views/{{name}}/index.ecr.ecr @@ -20,7 +20,7 @@ <%="<"%>%- <%= name_plural %>.each do |<%= @name %>| %> <% @fields.reject{|f| f.hidden }.each do |field| -%> - <%="<"%>%= <%= @name %>.<%= field.name %><%= field.reference? ? ".id" : "" %> %> + <%="<"%>%= <%= @name %>.<%= field.name %><% if field.reference? %><% if @model == "crecto" %>_id<% else %>.id<% end %><% end %> %> <% end -%> diff --git a/src/amber/cli/templates/scaffold/view/src/views/{{name}}/index.slang.ecr b/src/amber/cli/templates/scaffold/view/src/views/{{name}}/index.slang.ecr index aca0d427d..268fd689b 100644 --- a/src/amber/cli/templates/scaffold/view/src/views/{{name}}/index.slang.ecr +++ b/src/amber/cli/templates/scaffold/view/src/views/{{name}}/index.slang.ecr @@ -15,7 +15,7 @@ - <%= name_plural %>.each do |<%= @name %>| tr <%- @fields.reject{|f| f.hidden }.each do |field| -%> - td = <%= @name %>.<%= field.name %><%= field.reference? ? ".id" : "" %> + td = <%= @name %>.<%= field.name %><% if field.reference? %><% if @model == "crecto" %>_id<% else %>.id<% end %><% end %> <%- end -%> td span diff --git a/src/amber/cli/templates/scaffold/view/src/views/{{name}}/show.ecr.ecr b/src/amber/cli/templates/scaffold/view/src/views/{{name}}/show.ecr.ecr index 3da8e0c33..40113eadc 100644 --- a/src/amber/cli/templates/scaffold/view/src/views/{{name}}/show.ecr.ecr +++ b/src/amber/cli/templates/scaffold/view/src/views/{{name}}/show.ecr.ecr @@ -1,7 +1,7 @@

Show <%= display_name %>

<% @fields.reject{|f| f.hidden }.each do |field| -%> -

<%="<"%>%= <%= @name %>.<%= field.name %><%= field.reference? ? ".id" : "" %> %>

+

<%="<"%>%= <%= @name %>.<%= field.name %><% if field.reference? %><% if @model == "crecto" %>_id<% else %>.id<% end %><% end %> %>

<% end -%>

<%="<"%>%= link_to("back", "/<%= name_plural %>", class: "btn btn-light btn-sm") -%> diff --git a/src/amber/cli/templates/scaffold/view/src/views/{{name}}/show.slang.ecr b/src/amber/cli/templates/scaffold/view/src/views/{{name}}/show.slang.ecr index 707a67cef..d06e6de0a 100644 --- a/src/amber/cli/templates/scaffold/view/src/views/{{name}}/show.slang.ecr +++ b/src/amber/cli/templates/scaffold/view/src/views/{{name}}/show.slang.ecr @@ -1,6 +1,6 @@ h1 Show <%= display_name %> <% @fields.reject{|f| f.hidden }.each do |field| -%> -p = <%= @name %>.<%= field.name %><%= field.reference? ? ".id" : "" %> +p = <%= @name %>.<%= field.name %><% if field.reference? %><% if @model == "crecto" %>_id<% else %>.id<% end %><% end %> <% end -%> p == link_to("back", "/<%= name_plural %>", class: "btn btn-light btn-sm")