From 8548a0a18d05fdb184bf81c67a12078a89a401dd Mon Sep 17 00:00:00 2001 From: Faustino Aguilar Date: Sat, 16 Jun 2018 09:33:20 -0500 Subject: [PATCH 01/13] Add more build specs --- .travis.yml | 3 +- spec/build_spec_crecto.cr | 21 ++++++ spec/build_spec_granite.cr | 21 ++++++ spec/build_spec_helper.cr | 71 +++++++++++++++++++ .../app/config/initializers/database.cr.ecr | 2 + .../model/crecto/spec/models/spec_helper.cr | 1 + .../crecto/spec/models/{{name}}_spec.cr.ecr | 8 +++ .../view/src/views/{{name}}/_form.ecr.ecr | 2 +- 8 files changed, 127 insertions(+), 2 deletions(-) create mode 100644 spec/build_spec_crecto.cr create mode 100644 spec/build_spec_granite.cr create mode 100644 spec/build_spec_helper.cr create mode 100644 src/amber/cli/templates/model/crecto/spec/models/spec_helper.cr create mode 100644 src/amber/cli/templates/model/crecto/spec/models/{{name}}_spec.cr.ecr 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/spec/build_spec_crecto.cr b/spec/build_spec_crecto.cr new file mode 100644 index 000000000..73ce4b84e --- /dev/null +++ b/spec/build_spec_crecto.cr @@ -0,0 +1,21 @@ +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") + check_formatting + check_binary + check_app_specs + ensure + cleanup + end + + describe "building a generated app using crecto model and ecr template" do + generate_app("new", "-m", "crecto", "-t", "ecr") + check_formatting + check_binary + check_app_specs + ensure + cleanup + end +end diff --git a/spec/build_spec_granite.cr b/spec/build_spec_granite.cr new file mode 100644 index 000000000..a79316b0e --- /dev/null +++ b/spec/build_spec_granite.cr @@ -0,0 +1,21 @@ +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") + check_formatting + check_binary + check_app_specs + ensure + cleanup + end + + describe "building a generated app using granite model and ecr template" do + generate_app("new", "-m", "granite", "-t", "ecr") + check_formatting + check_binary + check_app_specs + ensure + cleanup + end +end diff --git a/spec/build_spec_helper.cr b/spec/build_spec_helper.cr new file mode 100644 index 000000000..e431f5354 --- /dev/null +++ b/spec/build_spec_helper.cr @@ -0,0 +1,71 @@ +require "./spec_helper" +require "./support/helpers/cli_helper" + +include CLIHelper + +macro 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) + + puts "RUNNING: amber db drop create migrate - started..." + MainCommand.run ["db", "drop", "create", "migrate"] + + puts "RUNNING: shards update - started..." + system("shards update") + + puts "RUNNING: shards build #{TEST_APP_NAME} - started..." + system("shards build #{TEST_APP_NAME}") +end + +macro check_formatting + it "check formatting on generated files" do + system("crystal tool format --check src").should be_true + end +end + +macro check_binary + it "generates a binary" do + File.exists?("bin/#{TEST_APP_NAME}").should be_true + end +end + +macro check_app_specs + context "crystal spec" do + puts "RUNNING: crystal spec #{TESTING_APP} - started..." + + spec_result = `crystal spec` + + puts spec_result + + it "can be executed" do + spec_result.should contain "Finished in" + end + + it "has no errors" do + spec_result.should_not contain "Error in line" + end + + it "has no failures" do + spec_result.should_not contain "Failures" + end + 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/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/scaffold/view/src/views/{{name}}/_form.ecr.ecr b/src/amber/cli/templates/scaffold/view/src/views/{{name}}/_form.ecr.ecr index 7b5ec17c5..410418c29 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 @@ -21,7 +21,7 @@ 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 -%> From faacb1de64d82e27da9a89cb06da205e6e80bee1 Mon Sep 17 00:00:00 2001 From: Faustino Aguilar Date: Tue, 19 Jun 2018 10:18:07 -0500 Subject: [PATCH 02/13] Add dependency check --- spec/build_spec_helper.cr | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/spec/build_spec_helper.cr b/spec/build_spec_helper.cr index e431f5354..d00ee3dce 100644 --- a/spec/build_spec_helper.cr +++ b/spec/build_spec_helper.cr @@ -28,12 +28,6 @@ macro generate_app(*options) puts "RUNNING: amber db drop create migrate - started..." MainCommand.run ["db", "drop", "create", "migrate"] - - puts "RUNNING: shards update - started..." - system("shards update") - - puts "RUNNING: shards build #{TEST_APP_NAME} - started..." - system("shards build #{TEST_APP_NAME}") end macro check_formatting @@ -42,7 +36,19 @@ macro check_formatting end end +macro check_dependencies + puts "RUNNING: shards update - started..." + system("shards update") + + it "check broken dependencies" do + system("shards check").should be_true + end +end + macro check_binary + puts "RUNNING: shards build #{TEST_APP_NAME} - started..." + system("shards build #{TEST_APP_NAME}") + it "generates a binary" do File.exists?("bin/#{TEST_APP_NAME}").should be_true end From afa5516ed550cf7b0c87119672cecdf53f29994c Mon Sep 17 00:00:00 2001 From: Faustino Aguilar Date: Tue, 19 Jun 2018 10:18:37 -0500 Subject: [PATCH 03/13] Add check_dependencies --- spec/build_spec_crecto.cr | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spec/build_spec_crecto.cr b/spec/build_spec_crecto.cr index 73ce4b84e..00a001522 100644 --- a/spec/build_spec_crecto.cr +++ b/spec/build_spec_crecto.cr @@ -4,6 +4,7 @@ module Amber::CLI describe "building a generated app using crecto model and slang template" do generate_app("new", "-m", "crecto", "-t", "slang") check_formatting + check_dependencies check_binary check_app_specs ensure @@ -13,6 +14,7 @@ module Amber::CLI describe "building a generated app using crecto model and ecr template" do generate_app("new", "-m", "crecto", "-t", "ecr") check_formatting + check_dependencies check_binary check_app_specs ensure From d78aff7ed1a87c03843791d66eaae384f9002a23 Mon Sep 17 00:00:00 2001 From: Faustino Aguilar Date: Tue, 19 Jun 2018 10:18:58 -0500 Subject: [PATCH 04/13] Add check_dependencies --- spec/build_spec_granite.cr | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spec/build_spec_granite.cr b/spec/build_spec_granite.cr index a79316b0e..913d8fbdc 100644 --- a/spec/build_spec_granite.cr +++ b/spec/build_spec_granite.cr @@ -4,6 +4,7 @@ module Amber::CLI describe "building a generated app using granite model and slang template" do generate_app("new", "-m", "granite", "-t", "slang") check_formatting + check_dependencies check_binary check_app_specs ensure @@ -13,6 +14,7 @@ module Amber::CLI describe "building a generated app using granite model and ecr template" do generate_app("new", "-m", "granite", "-t", "ecr") check_formatting + check_dependencies check_binary check_app_specs ensure From df1db3d701a669d34963f7ab5859d9ed1ad89522 Mon Sep 17 00:00:00 2001 From: Faustino Aguilar Date: Tue, 19 Jun 2018 22:18:44 -0500 Subject: [PATCH 05/13] Remove trailing space --- .../cli/templates/auth/crecto/src/pipes/authenticate.cr.ecr | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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) From ad066a1b671052b0314471da66b889ff500fdca2 Mon Sep 17 00:00:00 2001 From: Faustino Aguilar Date: Wed, 20 Jun 2018 06:16:28 -0500 Subject: [PATCH 06/13] Fixes broken crecto views on amber cli --- .../templates/scaffold/view/src/views/{{name}}/_form.ecr.ecr | 4 +--- .../scaffold/view/src/views/{{name}}/_form.slang.ecr | 2 +- .../templates/scaffold/view/src/views/{{name}}/index.ecr.ecr | 2 +- .../scaffold/view/src/views/{{name}}/index.slang.ecr | 2 +- .../templates/scaffold/view/src/views/{{name}}/show.ecr.ecr | 2 +- .../templates/scaffold/view/src/views/{{name}}/show.slang.ecr | 2 +- 6 files changed, 6 insertions(+), 8 deletions(-) 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 410418c29..ca79fb113 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 ? "/<%= Inflector.pluralize(@name) %>/" + <%= @name %>.id.to_s : "/<%= Inflector.pluralize(@name) %>") %>
%= action %>" method="post"> <%="<"%>%= csrf_tag %> @@ -27,7 +25,7 @@ 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 3bc341572..0f17369f5 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 d404445db..bde47e7a8 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 @@ <%="<"%>%- <%= Inflector.pluralize(@name) %>.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 70bc70f72..b7ead6d02 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 @@ - <%= Inflector.pluralize(@name) %>.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 6b1ea846e..bfa85e353 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", "/<%= Inflector.pluralize(@name) %>", 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 2c64ec933..abdd45407 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", "/<%= Inflector.pluralize(@name) %>", class: "btn btn-light btn-sm") From 41948eda5652a125dfd02c562d770d3964d60572 Mon Sep 17 00:00:00 2001 From: Faustino Aguilar Date: Wed, 20 Jun 2018 07:34:52 -0500 Subject: [PATCH 07/13] Fix missing ivar --- .../templates/scaffold/view/src/views/{{name}}/_form.ecr.ecr | 2 +- .../templates/scaffold/view/src/views/{{name}}/_form.slang.ecr | 2 +- .../templates/scaffold/view/src/views/{{name}}/index.ecr.ecr | 2 +- .../templates/scaffold/view/src/views/{{name}}/index.slang.ecr | 2 +- .../cli/templates/scaffold/view/src/views/{{name}}/show.ecr.ecr | 2 +- .../templates/scaffold/view/src/views/{{name}}/show.slang.ecr | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) 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 ca79fb113..ec98b25cc 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 @@ -25,7 +25,7 @@ end -%> <% when "reference" -%> <%="<"%>%= label(<%=":#{field.name}"%>) -%> - <%="<"%>%= 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") -%> + <%="<"%>%= 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 0f17369f5..6e0ca0204 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: <% 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") + == 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 bde47e7a8..2352982e2 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 @@ <%="<"%>%- <%= Inflector.pluralize(@name) %>.each do |<%= @name %>| %> <% @fields.reject{|f| f.hidden }.each do |field| -%> - <%="<"%>%= <%= @name %>.<%= field.name %><% if field.reference? %><% if model == "crecto" %>_id<% else %>.id<% end %><% end %> %> + <%="<"%>%= <%= @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 b7ead6d02..e4e7e7596 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 @@ - <%= Inflector.pluralize(@name) %>.each do |<%= @name %>| tr <%- @fields.reject{|f| f.hidden }.each do |field| -%> - td = <%= @name %>.<%= field.name %><% if field.reference? %><% if model == "crecto" %>_id<% else %>.id<% end %><% end %> + 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 bfa85e353..f07e5008d 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 %><% if field.reference? %><% if model == "crecto" %>_id<% else %>.id<% end %><% end %> %>

+

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

<% end -%>

<%="<"%>%= link_to("back", "/<%= Inflector.pluralize(@name) %>", 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 abdd45407..398a06427 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 %><% if field.reference? %><% if model == "crecto" %>_id<% else %>.id<% end %><% end %> +p = <%= @name %>.<%= field.name %><% if field.reference? %><% if @model == "crecto" %>_id<% else %>.id<% end %><% end %> <% end -%> p == link_to("back", "/<%= Inflector.pluralize(@name) %>", class: "btn btn-light btn-sm") From 353edf1de390acef514a4cece5b274fb9552b262 Mon Sep 17 00:00:00 2001 From: Faustino Aguilar Date: Wed, 20 Jun 2018 12:06:00 -0500 Subject: [PATCH 08/13] Remove old build spec --- spec/build_spec.cr | 70 ---------------------------------------------- 1 file changed, 70 deletions(-) delete mode 100644 spec/build_spec.cr diff --git a/spec/build_spec.cr b/spec/build_spec.cr deleted file mode 100644 index dbd9c190d..000000000 --- a/spec/build_spec.cr +++ /dev/null @@ -1,70 +0,0 @@ -require "./spec_helper" -require "./support/helpers/cli_helper" - -include CLIHelper - -module Amber::CLI - begin - describe "building a generated app" do - ENV["AMBER_ENV"] = "test" - - cleanup - scaffold_app(TESTING_APP) - - 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) - - puts "RUNNING: amber db drop create migrate - started..." - MainCommand.run ["db", "drop", "create", "migrate"] - - puts "RUNNING: shards update - started..." - system("shards update") - - puts "RUNNING: shards build #{TEST_APP_NAME} - started..." - system("shards build #{TEST_APP_NAME}") - - it "check formatting on generated files" do - system("crystal tool format --check src").should be_true - end - - it "generates a binary" do - File.exists?("bin/#{TEST_APP_NAME}").should be_true - end - - context "crystal spec" do - puts "RUNNING: crystal spec #{TESTING_APP} - started..." - spec_result = `crystal spec` - - puts spec_result - - it "can be executed" do - spec_result.should contain "Finished in" - end - - it "has no errors" do - spec_result.should_not contain "Error in line" - end - - it "has no failures" do - spec_result.should_not contain "Failures" - end - end - end - ensure - cleanup - end -end From ae6549265049ebabe847a8b063f7ecb0c97a99c8 Mon Sep 17 00:00:00 2001 From: Faustino Aguilar Date: Wed, 20 Jun 2018 12:09:04 -0500 Subject: [PATCH 09/13] Update dependencies --- src/amber/cli/templates/app/shard.yml.ecr | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/amber/cli/templates/app/shard.yml.ecr b/src/amber/cli/templates/app/shard.yml.ecr index d58d2ffab..ed5b0113b 100644 --- a/src/amber/cli/templates/app/shard.yml.ecr +++ b/src/amber/cli/templates/app/shard.yml.ecr @@ -24,7 +24,7 @@ dependencies: <% case @model when "crecto" -%> crecto: github: Crecto/crecto - version: ~> 0.8.6 + version: ~> 0.9.0 <% else -%> granite: github: amberframework/granite @@ -46,11 +46,11 @@ dependencies: <% when "mysql" -%> mysql: github: crystal-lang/crystal-mysql - version: ~> 0.4.0 + version: ~> 0.5.0 <% when "sqlite" -%> sqlite3: github: crystal-lang/crystal-sqlite3 - version: ~> 0.9.0 + version: ~> 0.10.0 <% end -%> citrine-i18n: From 959d68b8435a947f87928571b7bdba3be7c8abdd Mon Sep 17 00:00:00 2001 From: Faustino Aguilar Date: Wed, 20 Jun 2018 12:46:55 -0500 Subject: [PATCH 10/13] Add missing reference fields on Crecto --- .../cli/templates/model/crecto/src/models/{{name}}.cr.ecr | 4 ++++ 1 file changed, 4 insertions(+) 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..62a64b0b4 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| -%> + <% if field.reference? %> + belongs_to :<%= field.name %>, <%= field.name.camelcase %> + <% else -%> field :<%= field.name %>, <%= field.cr_type %> + <% end -%> <% end -%> end end From a533018a34c6d46cbc53ffed80a1d2e91b4c7590 Mon Sep 17 00:00:00 2001 From: Faustino Aguilar Date: Wed, 20 Jun 2018 13:45:40 -0500 Subject: [PATCH 11/13] Update version v0.25.0 --- shard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shard.yml b/shard.yml index 66affdffa..910ef4b33 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 From 768c7526b15bee0f12cbbc19fb2edbca5b56e6a8 Mon Sep 17 00:00:00 2001 From: Faustino Aguilar Date: Wed, 20 Jun 2018 13:50:27 -0500 Subject: [PATCH 12/13] Fix formatting --- .../templates/model/crecto/src/models/{{name}}.cr.ecr | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) 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 62a64b0b4..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,11 +1,11 @@ class <%= class_name %> < Crecto::Model schema "<%= table_name %>" do -<% @fields.reject{|f| f.hidden }.each do |field| -%> - <% if field.reference? %> +<%- @fields.reject{|f| f.hidden }.each do |field| -%> + <%- if field.reference? -%> belongs_to :<%= field.name %>, <%= field.name.camelcase %> - <% else -%> + <%- else -%> field :<%= field.name %>, <%= field.cr_type %> - <% end -%> -<% end -%> + <%- end -%> +<%- end -%> end end From 6706d21e54eb8c7337e31f4d35b0d03ffb76dec8 Mon Sep 17 00:00:00 2001 From: Faustino Aguilar Date: Thu, 21 Jun 2018 02:05:12 -0500 Subject: [PATCH 13/13] Change macros by module method and use unit tests --- spec/build_spec_crecto.cr | 48 +++++++++++++++---- spec/build_spec_granite.cr | 48 +++++++++++++++---- spec/build_spec_helper.cr | 96 +++++++++++--------------------------- 3 files changed, 106 insertions(+), 86 deletions(-) diff --git a/spec/build_spec_crecto.cr b/spec/build_spec_crecto.cr index 00a001522..099798a93 100644 --- a/spec/build_spec_crecto.cr +++ b/spec/build_spec_crecto.cr @@ -3,20 +3,52 @@ 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") - check_formatting - check_dependencies - check_binary - check_app_specs + + 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") - check_formatting - check_dependencies - check_binary - check_app_specs + + 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 diff --git a/spec/build_spec_granite.cr b/spec/build_spec_granite.cr index 913d8fbdc..5f69b4e26 100644 --- a/spec/build_spec_granite.cr +++ b/spec/build_spec_granite.cr @@ -3,20 +3,52 @@ 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") - check_formatting - check_dependencies - check_binary - check_app_specs + + 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") - check_formatting - check_dependencies - check_binary - check_app_specs + + 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 diff --git a/spec/build_spec_helper.cr b/spec/build_spec_helper.cr index d00ee3dce..24d8b401b 100644 --- a/spec/build_spec_helper.cr +++ b/spec/build_spec_helper.cr @@ -3,75 +3,31 @@ require "./support/helpers/cli_helper" include CLIHelper -macro 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) - - puts "RUNNING: amber db drop create migrate - started..." - MainCommand.run ["db", "drop", "create", "migrate"] -end - -macro check_formatting - it "check formatting on generated files" do - system("crystal tool format --check src").should be_true - end -end - -macro check_dependencies - puts "RUNNING: shards update - started..." - system("shards update") - - it "check broken dependencies" do - system("shards check").should be_true - end -end - -macro check_binary - puts "RUNNING: shards build #{TEST_APP_NAME} - started..." - system("shards build #{TEST_APP_NAME}") - - it "generates a binary" do - File.exists?("bin/#{TEST_APP_NAME}").should be_true - end -end - -macro check_app_specs - context "crystal spec" do - puts "RUNNING: crystal spec #{TESTING_APP} - started..." - - spec_result = `crystal spec` - - puts spec_result - - it "can be executed" do - spec_result.should contain "Finished in" - end - - it "has no errors" do - spec_result.should_not contain "Error in line" - end - - it "has no failures" do - spec_result.should_not contain "Failures" - end +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