Skip to content

Commit

Permalink
Merge pull request #455 from imdrasil/task/decouple-sam-args-from-gen…
Browse files Browse the repository at this point in the history
…erator

Decouple generator arguments from Sam
  • Loading branch information
imdrasil committed Apr 3, 2024
2 parents 35694f5 + 58e32fe commit 343d9c0
Show file tree
Hide file tree
Showing 9 changed files with 66 additions and 24 deletions.
2 changes: 1 addition & 1 deletion spec/generators/migration_spec.cr
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ describe Jennifer::Generators::Migration do
args = Sam::Args.new({} of String => String, %w(CreateArticles))

it "creates migration" do
described_class.new(args).render
described_class.new(args.raw).render
expected_content = File.read("./spec/fixtures/generators/migration.cr")
migration_path = Dir["./scripts/migrations/*.cr"].sort.last

Expand Down
11 changes: 6 additions & 5 deletions spec/generators/model_spec.cr
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,21 @@ describe Jennifer::Generators::Model do
args = Sam::Args.new({} of String => String, %w(Article title:string text:text?))

it "creates model" do
described_class.new(args).render
described_class.new(args.raw).render
expected_content = File.read("./spec/fixtures/generators/model.cr")
model_path = "./scripts/models/article.cr"
File.exists?(model_path).should be_true
File.read(model_path).should eq(expected_content)
end

it "creates migration" do
described_class.new(args).render
described_class.new(args.raw).render
expected_content = File.read("./spec/fixtures/generators/create_migration.cr")
migration_path = Dir["./scripts/migrations/*.cr"].sort.last

migration_path.should match(/\d{16}_create_articles\.cr/)
Time.parse(File.basename(migration_path), "%Y%m%d%H%M%S%L", Time::Location.local).should be_close(Time.local, 1.seconds)
Time.parse(File.basename(migration_path), "%Y%m%d%H%M%S%L", Time::Location.local)
.should be_close(Time.local, 1.seconds)
File.read(migration_path).should eq(expected_content)
end
end
Expand All @@ -30,15 +31,15 @@ describe Jennifer::Generators::Model do
args = Sam::Args.new({} of String => String, %w(Article title:string text:text? author:reference))

it "creates model" do
described_class.new(args).render
described_class.new(args.raw).render
expected_content = File.read("./spec/fixtures/generators/model_with_references.cr")
model_path = "./scripts/models/article.cr"
File.exists?(model_path).should be_true
File.read(model_path).should eq(expected_content)
end

it "creates migration" do
described_class.new(args).render
described_class.new(args.raw).render
expected_content = File.read("./spec/fixtures/generators/create_migration_with_references.cr")
migration_path = Dir["./scripts/migrations/*.cr"].sort.last

Expand Down
38 changes: 38 additions & 0 deletions spec/integration/sam_test.cr
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,42 @@ describe "Blank application" do
end
end
end

describe "generate:model" do
it "generates model and migration classes" do
clean do
execute(
"crystal spec/integration/sam/blank_application.cr",
["generate:model", "Article", "title:string", "text:text?"]
).should succeed

model_path = "./scripts/models/article.cr"
File.exists?(model_path).should be_true
File.read(model_path).should eq(File.read("./spec/fixtures/generators/model.cr"))

migration_path = Dir["./scripts/migrations/*.cr"].sort.last
migration_path.should match(/\d{16}_create_articles\.cr/)
Time.parse(File.basename(migration_path), "%Y%m%d%H%M%S%L", Time::Location.local)
.should be_close(Time.local, 1.seconds)
File.read(migration_path).should eq(File.read("./spec/fixtures/generators/create_migration.cr"))
end
end
end

describe "generate:migration" do
it "generates migration class" do
clean do
execute(
"crystal spec/integration/sam/blank_application.cr",
["generate:migration", "CreateArticles"]
).should succeed

migration_path = Dir["./scripts/migrations/*.cr"].sort.last
migration_path.should match(/\d{16}_create_articles\.cr/)
Time.parse(File.basename(migration_path), "%Y%m%d%H%M%S%L", Time::Location.local)
.should be_close(Time.local, 1.seconds)
File.read(migration_path).should eq(File.read("./spec/fixtures/generators/migration.cr"))
end
end
end
end
10 changes: 1 addition & 9 deletions spec/integration/shared_helpers.cr
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,7 @@ POSTGRES_DB = "postgres"
MYSQL_DB = "mysql"

module Spec
@@adapter = ""

def self.adapter
@@adapter
end

def self.adapter=(v)
@@adapter = v
end
class_property adapter = ""

def self.config_jennifer
config_jennifer { }
Expand Down
11 changes: 11 additions & 0 deletions spec/integration/spec_helper.cr
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
require "spec"
require "../support/matchers"
require "../support/file_system"
require "./shared_helpers"

macro jennifer_adapter
Expand All @@ -10,6 +11,15 @@ macro jennifer_adapter
{% end %}
end

module Spec
class_getter file_system = FileSystem.new("./")
end

Spec.file_system.tap do |file_system|
file_system.watch "scripts/models"
file_system.watch "scripts/migrations"
end

def execute(command, options)
io = IO::Memory.new

Expand All @@ -22,6 +32,7 @@ def clean(type = DatabaseSeeder.default_interface, &)
yield
ensure
DatabaseSeeder.drop(type)
Spec.file_system.clean
end

def with_connection(&)
Expand Down
4 changes: 2 additions & 2 deletions src/jennifer/generators/base.cr
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ require "ecr"
module Jennifer
module Generators
abstract class Base
getter name : String, args : Sam::Args
getter name : String, args : Array(Float64 | Int32 | String)

def initialize(@args)
@name = @args[0].as(String)
Expand All @@ -21,7 +21,7 @@ module Jennifer
end

private def definitions
args.raw[1..-1]
args[1..-1]
end
end
end
Expand Down
4 changes: 2 additions & 2 deletions src/jennifer/model/base.cr
Original file line number Diff line number Diff line change
Expand Up @@ -322,8 +322,8 @@ module Jennifer
end

# Alias for `.new`.
def self.build(pull : DB::ResultSet)
new(pull)
def self.build(values : DB::ResultSet)
new(values)
end

def self.coercer
Expand Down
6 changes: 3 additions & 3 deletions src/jennifer/sam.cr
Original file line number Diff line number Diff line change
Expand Up @@ -65,11 +65,11 @@ end
Sam.namespace "generate" do
desc "Generates migration template. Usage - generate:migration <migration_name>"
task "migration" do |_, args|
Jennifer::Generators::Migration.new(args).render
Jennifer::Generators::Migration.new(args.raw).render
end

desc "Generates model and migrations template. Usage - generate:model <ModelName>"
desc "Generates model and migrations template. Usage - generate:model <ModelName> <optional fields definition>"
task "model" do |_, args|
Jennifer::Generators::Model.new(args).render
Jennifer::Generators::Model.new(args.raw).render
end
end
4 changes: 2 additions & 2 deletions src/jennifer/view/base.cr
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@ module Jennifer
end

# Alias for `.new`.
def self.build(pull : DB::ResultSet)
new(pull)
def self.build(values : DB::ResultSet)
new(values)
end

# :ditto:
Expand Down

0 comments on commit 343d9c0

Please sign in to comment.