-
Notifications
You must be signed in to change notification settings - Fork 2
Sample workflow
Rafal Wrzochol edited this page Jan 15, 2020
·
2 revisions
$ grapethor new MyGrapeApp -x mygrapeapp
Creating new application...
arguments: {"name"=>"MyGrapeApp"}
options: {"path"=>".", "prefix"=>"mygrapeapp", "db"=>"sqlite", "orm"=>"activerecord", "server"=>"thin", "test"=>"minitest", "docker"=>true, "license"=>"mit", "ruby"=>"2.5.3", "swagger"=>true}
create MyGrapeApp
create MyGrapeApp/.gitignore
create MyGrapeApp/.grapethor.yml
create MyGrapeApp/Gemfile
create MyGrapeApp/README.md
create MyGrapeApp/Rakefile
create MyGrapeApp/api/base.rb
create MyGrapeApp/app/exceptions/not_found_error.rb
create MyGrapeApp/bin/console
create MyGrapeApp/bin/server
create MyGrapeApp/bin/setup
create MyGrapeApp/config.ru
create MyGrapeApp/config/application.rb
create MyGrapeApp/config/boot.rb
create MyGrapeApp/config/environment.rb
create MyGrapeApp/db/seeds.rb
create MyGrapeApp/lib/tasks/routes.rake
chmod MyGrapeApp/bin/console
chmod MyGrapeApp/bin/setup
chmod MyGrapeApp/bin/server
exist MyGrapeApp
create MyGrapeApp/config/database.yml
exist MyGrapeApp
create MyGrapeApp/lib/tasks/test.rake
create MyGrapeApp/test/support/reporters.rb
create MyGrapeApp/test/support/test_case.rb
create MyGrapeApp/test/test_helper.rb
exist MyGrapeApp
create MyGrapeApp/Dockerfile
create MyGrapeApp/docker-compose.yml
exist MyGrapeApp
create MyGrapeApp/LICENSE
exist MyGrapeApp
create MyGrapeApp/swagger-ui/favicon-16x16.png
create MyGrapeApp/swagger-ui/favicon-32x32.png
create MyGrapeApp/swagger-ui/index.html
create MyGrapeApp/swagger-ui/oauth2-redirect.html
create MyGrapeApp/swagger-ui/swagger-ui-bundle.js
create MyGrapeApp/swagger-ui/swagger-ui-bundle.js.map
create MyGrapeApp/swagger-ui/swagger-ui-standalone-preset.js
create MyGrapeApp/swagger-ui/swagger-ui-standalone-preset.js.map
create MyGrapeApp/swagger-ui/swagger-ui.css
create MyGrapeApp/swagger-ui/swagger-ui.css.map
create MyGrapeApp/swagger-ui/swagger-ui.js
create MyGrapeApp/swagger-ui/swagger-ui.js.map
Well done!
Note '-x' is for URL prefix (default: 'api')
cd MyGrapeApp
Otherwise you would need using --path
option for any further commands.
$ grapethor api ver1
Creating new API...
arguments: {"version"=>"ver1"}
options: {"path"=>"."}
exist
create api/ver1/base.rb
exist
create test/support/api_ver1_test_case.rb
insert api/base.rb
Well done!
$ grapethor resource item -v ver1 -a name:string available:boolean price:integer
Creating new resource...
arguments: {"name"=>"item"}
options: {"path"=>".", "version"=>"ver1", "attrs"=>{"name"=>"string", "available"=>"boolean", "price"=>"integer"}}
exist
create api/ver1/items.rb
create api/entities/item.rb
create app/models/item.rb
create db/migrations/20190409120038_create_items.rb
exist
create test/api/ver1/items_test.rb
create test/fixtures/items.yml
create test/models/item_test.rb
insert api/ver1/base.rb
Well done!
$ grapethor endpoint item search -v ver1 -m GET -a name:string -d "Get item by :name"
Creating new endpoint...
arguments: {"resource"=>"item", "name"=>"search"}
options: {"path"=>".", "version"=>"ver1", "method"=>"GET", "desc"=>"Get item by :name", "params"=>{"name"=>"string"}, "query"=>{}}
insert api/ver1/items.rb
insert api/ver1/base.rb
insert test/api/ver1/items_test.rb
Well done!
$ grapethor endpoint user register -v ver1 -m POST -a id:integer -q name:string email:string -d "Register user"
Creating new endpoint...
arguments: {"resource"=>"user", "name"=>"register"}
options: {"path"=>".", "version"=>"ver1", "method"=>"POST", "desc"=>"Register user", "params"=>{"id"=>"integer"}, "query"=>{"name"=>"string", "email"=>"string"}}
exist api/ver1
create api/ver1/users.rb
insert api/ver1/users.rb
insert api/ver1/base.rb
exist
create test/api/ver1/users_test.rb
insert test/api/ver1/users_test.rb
Well done!
$ bin/setup
bundle install
Fetching gem metadata from https://rubygems.org/........
Resolving dependencies...
Using rake 12.3.2
Using concurrent-ruby 1.1.5
Using i18n 1.6.0
Using minitest 5.11.3
Using thread_safe 0.3.6
Using tzinfo 1.2.5
Using activesupport 5.2.3
Using activemodel 5.2.3
Using arel 9.0.0
Using activerecord 5.2.3
Using ansi 1.5.0
Using descendants_tracker 0.0.4
Using ice_nine 0.11.2
Using axiom-types 0.1.1
Using builder 3.2.3
Using bundler 2.0.1
Using coercible 1.0.0
Using daemons 1.3.1
Using database_cleaner 1.7.0
Using equalizer 0.0.11
Using eventmachine 1.2.7
Using mustermann 1.0.3
Using mustermann-grape 1.0.0
Using rack 2.0.7
Using rack-accept 0.4.5
Using virtus 1.0.5
Using grape 1.2.3
Using multi_json 1.13.1
Using grape-entity 0.7.1
Using grape-swagger 0.32.1
Using hashie 3.6.0
Using hashie-forbidden_attributes 0.1.1
Using ruby-progressbar 1.10.0
Using minitest-reporters 1.3.6
Fetching otr-activerecord 1.3.0
Installing otr-activerecord 1.3.0
Using rack-cors 1.0.3
Using rack-test 1.1.0
Using require_all 2.0.0
Using sqlite3 1.3.13
Using thin 1.7.2
Bundle complete! 15 Gemfile dependencies, 40 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
# Do any other automated setup that you need to do here
$ rake db:migrate
== 20190409120038 CreateItems: migrating ======================================
-- create_table(:items)
-> 0.0005s
== 20190409120038 CreateItems: migrated (0.0006s) =============================
$ rake db:setup
Database 'db/development.sqlite3' already exists
Database 'db/test.sqlite3' already exists
-- create_table("items", {:force=>:cascade})
-> 0.0208s
-- create_table("items", {:force=>:cascade})
-> 0.0079s
$ rake test
# Running tests with run options --seed 60023:
........
Finished tests in 0.103873s, 77.0171 tests/s, 163.6613 assertions/s.
8 tests, 17 assertions, 0 failures, 0 errors, 0 skips
$ rake routes
GET /mygrapeapp/:version/items/:name/search(.json)
GET /mygrapeapp/:version/items(.json)
GET /mygrapeapp/:version/items/:id(.json)
POST /mygrapeapp/:version/items(.json)
PUT /mygrapeapp/:version/items/:id(.json)
DELETE /mygrapeapp/:version/items/:id(.json)
POST /mygrapeapp/:version/users/:id/register(.json)
GET /mygrapeapp/:version/swagger_doc(.:format)
GET /mygrapeapp/:version/swagger_doc/:name(.:format)
Note the grape-swagger documentation endpoints available.
$ rake -T
rake db:create # Creates the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:create:all to create all databases in the config). With...
rake db:create_migration[name] # Create a migration
rake db:drop # Drops the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:drop:all to drop all databases in the config). Without RA...
rake db:environment:set # Set the environment value for the database
rake db:fixtures:load # Loads fixtures into the current environment's database
rake db:migrate # Migrate the database (options: VERSION=x, VERBOSE=false, SCOPE=blog)
rake db:migrate:status # Display status of migrations
rake db:rollback # Rolls the schema back to the previous version (specify steps w/ STEP=n)
rake db:schema:cache:clear # Clears a db/schema_cache.yml file
rake db:schema:cache:dump # Creates a db/schema_cache.yml file
rake db:schema:dump # Creates a db/schema.rb file that is portable against any DB supported by Active Record
rake db:schema:load # Loads a schema.rb file into the database
rake db:seed # Loads the seed data from db/seeds.rb
rake db:setup # Creates the database, loads the schema, and initializes with the seed data (use db:reset to also drop the database first)
rake db:structure:dump # Dumps the database structure to db/structure.sql
rake db:structure:load # Recreates the databases from the structure.sql file
rake db:version # Retrieves the current schema version number
rake routes # API Routes
rake test # Run tests
$ bin/server
Accesss sample endpoint
http://localhost:9292/mygrapeapp/ver1/items
Access swagger documentation