genki 0.1.0.beta1 → 0.1.0.beta2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 00a55d670e65a428c6e1c35b237585bfda9b3ab6
4
- data.tar.gz: 9c651d223273e9d3ea783f0731aff5a7fea0e643
3
+ metadata.gz: cf3e4aa7266f53faf1b6413a3f893f50929cb2a8
4
+ data.tar.gz: 2077f807cdd492edc7b7c0b4fb57c66b3acc0c7b
5
5
  SHA512:
6
- metadata.gz: 7781178a2c90815a311eb742ac31b402fe85dc542acdd4198f117c347cccf2bb773159c8e509a6ddb6123810609ff0d56b01f7a8a1d7c2da8cba9e4bafb563c8
7
- data.tar.gz: 93434de97688da2d78482d1c7b8810792d468593582d1542dc43fcb954b1328733dce24067dd7ea45929c691c9fbf0c43e60bfdf0c53566147a7a451c6d76b98
6
+ metadata.gz: a1313133aae4be8b691957634d2f6bae09050697da2b17eb5653dfbfcdedb54204eddd180f1fbc29822bccead51f6e505809a296d630c75de9bec03990b547de
7
+ data.tar.gz: 190e996f028e7c2cc0eb84a70f660f42b55793b18d2ddfd7ad0376c2b6d47fe90796d7980d514f6df82425691ca2d39311128373540ed7e9b1acbde4b9e61c1d
data/.rspec CHANGED
@@ -1,2 +1,3 @@
1
1
  --format documentation
2
2
  --color
3
+ --order random
data/.rubocop.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  # Configuration parameters: AllowHeredoc, AllowURI, URISchemes.
2
2
  # URISchemes: http, https
3
3
  Metrics/LineLength:
4
- Max: 90
4
+ Max: 120
5
5
  Exclude:
6
6
  - 'spec/**/*'
7
7
  - './genki.gemspec'
@@ -9,3 +9,8 @@ Metrics/LineLength:
9
9
  Lint/Eval:
10
10
  Exclude:
11
11
  - 'spec/support/capture.rb'
12
+
13
+ Style/Documentation:
14
+ Exclude:
15
+ - 'spec/**/*'
16
+ - 'lib/genki.rb'
data/.travis.yml CHANGED
@@ -9,3 +9,7 @@ matrix:
9
9
  - rvm: ruby-head
10
10
  fast_finish: true
11
11
  before_install: gem install bundler -v 1.11.2
12
+ notifications:
13
+ email: false
14
+ slack:
15
+ secure: eGCFU2I8/LIeCuo6cWBatBoLwL8+eDRlcJJH194pMr12S4qkE7mDMeaRUhMvxruZGo/mzvbKzXBJ9SXo8Yyaa4q7DlRH8c4MijIE2VcCNNYeEDp1VC4su/alpEWtxatXNXlc+ZiRAFRvCADjrPXLmeFPhCP20nlfNrX8z6z8Iew/Jzh07GWyyXNIIz83lw/O6PFHNWudEugYpnQf1Z8QnIC18o2l5JKEJIa6W++EJ9Wi9MCBHVQdTNodb4TLVdbKJDtZxUOdTzkPblEVjnFTZQUhuX+NzwVxTdlyonUPypBGqFEhjTbYuxHQawRkfRM1QlLewynvzo+QR2D03EX5tKyqDuUmd4ISoNuKNmXxHuEYLDJJcLiJaL7oae02CYZe3Oayw0AYrhZBWKyfiMN7eFeQN4IG05ox0z1zJ3hy/Il/uWUIuQUp1ai2DnSqnG+fOwV9ivrv1YDA4XX3EIA3FxbU8EsZc9aQBIzIFFrBzwO2u0+Yy/M465n5/EL6R/FA6xIrKmNqcV7ZuXUdfqpsxtA82AG4M1mFps5UVs8roSFfe0nTPPHtL5NANmUbM5TuJS9ZbtOmClRf6jNAiTn9N2iAe9U2SL8b9MKJZTlvReNN6mt21DogKpsvas6uOIhigEu4m07iqtc89gyzWP8RPwM8EZhpr2nsAOMOtSHRPP0=
data/README.md CHANGED
@@ -1,32 +1,52 @@
1
1
  # Genki
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/genki.svg)](https://badge.fury.io/rb/genki)
4
+
3
5
  [![Build Status](https://travis-ci.org/genkirb/genki.svg?branch=master)](https://travis-ci.org/genkirb/genki)
4
6
  [![Code Climate](https://codeclimate.com/github/genkirb/genki/badges/gpa.svg)](https://codeclimate.com/github/genkirb/genki)
5
7
  [![Test Coverage](https://codeclimate.com/github/genkirb/genki/badges/coverage.svg)](https://codeclimate.com/github/genkirb/genki/coverage)
6
8
 
7
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/genki`. To experiment with that code, run `bin/console` for an interactive prompt.
9
+ A fast and minimalist framework to generate APIs in Ruby.
8
10
 
9
- TODO: Delete this and the text above, and describe your gem
11
+ Genki is a full-stack framework optimized for quick and easy creation of beautiful APIs.
10
12
 
11
- ## Installation
13
+ ## Usage
12
14
 
13
- Add this line to your application's Gemfile:
15
+ 1. Install Genki:
14
16
 
15
- ```ruby
16
- gem 'genki'
17
- ```
17
+ $ gem install genki --pre
18
18
 
19
- And then execute:
19
+ You only need `--pre` while we are in beta.
20
20
 
21
- $ bundle
21
+ 2. Create a new Genki application:
22
22
 
23
- Or install it yourself as:
23
+ $ genki new app
24
24
 
25
- $ gem install genki
25
+ 3. Change directory to `app` and start the server:
26
26
 
27
- ## Usage
27
+ $ cd app
28
+ $ genki server
29
+
30
+ You may run `genki help` for more information on the available commands.
28
31
 
29
- TODO: Write usage instructions here
32
+ ### Controllers
33
+
34
+ Genki uses controllers to process requests. It differs from `rails`, as we don't enforce any directory structure (except having your files inside an `app` folder), and from `sinatra`, since we have a controller super class that should be inherited from.
35
+
36
+ To handle your requests you can simply create a class that inherits from `Genki::Controller` and place it inside `app` folder and it will start processing the matching ones.
37
+
38
+ As per the following example:
39
+
40
+ ```ruby
41
+ # app/home.rb
42
+ class Home < Genki::Controller
43
+
44
+ get '/' do
45
+ #params will be available at `params`
46
+ render 'Hello World'
47
+ end
48
+ end
49
+ ```
30
50
 
31
51
  ## Development
32
52
 
@@ -36,7 +56,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
36
56
 
37
57
  ## Contributing
38
58
 
39
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/genki. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
59
+ Bug reports and pull requests are welcome on GitHub at https://github.com/genkirb/genki. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
40
60
 
41
61
 
42
62
  ## License
data/genki.gemspec CHANGED
@@ -9,8 +9,8 @@ Gem::Specification.new do |s|
9
9
  s.authors = ['Diego Silva', 'Leonardo Siqueira']
10
10
  s.email = ['diego.silva@live.com', 'leonardo.prg@gmail.com']
11
11
 
12
- s.summary = 'Fast and minimalist framework to generate API\'s in ruby.'
13
- s.description = 'Genki is a full-stack framework optimized to create API\'s, quicly, easy and beatiful.'
12
+ s.summary = 'A fast and minimalist framework to generate APIs in Ruby.'
13
+ s.description = 'Genki is a full-stack framework optimized for quick and easy creation of beautiful APIs.'
14
14
  s.homepage = 'https://github.com/genkirb/genki'
15
15
  s.license = 'MIT'
16
16
 
@@ -23,8 +23,9 @@ Gem::Specification.new do |s|
23
23
 
24
24
  s.add_dependency 'rack', '~> 2.x'
25
25
  s.add_dependency 'thor', '~> 0.19.1'
26
+ s.add_dependency 'bundler', '~> 1.11'
26
27
 
27
- s.add_development_dependency 'bundler', '~> 1.11'
28
+ s.add_development_dependency 'erubis', '>= 2.7.0', '< 3.0'
28
29
  s.add_development_dependency 'rake', '~> 10.0'
29
30
  s.add_development_dependency 'rspec', '~> 3.0'
30
31
  s.add_development_dependency 'rubocop', '~> 0.37'
data/lib/genki.rb CHANGED
@@ -1,9 +1,19 @@
1
1
  require 'rack'
2
2
  require 'genki/version'
3
+ require 'genki/utils/logger'
3
4
  require 'genki/cli'
4
- require 'genki/http/server'
5
+ require 'genki/errors/route_already_defined_error'
6
+ require 'genki/errors/route_not_found_error'
7
+ require 'genki/http/application'
5
8
  require 'genki/http/router'
6
9
  require 'genki/http/route'
7
10
  require 'genki/http/controller'
8
11
  require 'genki/http/request'
9
12
  require 'genki/http/response'
13
+ require 'genki/http/server'
14
+
15
+ module Genki
16
+ class << self
17
+ attr_accessor :env
18
+ end
19
+ end
data/lib/genki/cli.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'thor'
2
2
  require 'genki/generators/app'
3
+ require 'genki/http/server'
3
4
 
4
5
  module Genki
5
6
  #--
@@ -22,6 +23,20 @@ module Genki
22
23
  say "Genki #{Genki::VERSION}"
23
24
  end
24
25
 
26
+ desc 'server', 'Runs Genki server'
27
+ method_option :port, aliases: '-p', default: 3000, type: :numeric,
28
+ banner: 'PORT', desc: 'Run the server on the specified port.'
29
+ method_option :binding, aliases: '-b', default: 'localhost', type: :string,
30
+ banner: 'IP', desc: 'The IP to listen on.'
31
+ method_option :environment, aliases: '-e', default: 'development', type: :string,
32
+ banner: 'name', desc: 'Specifies with environment to run'
33
+ def server
34
+ opt = { Port: options['port'],
35
+ Host: options['binding'],
36
+ environment: options['environment'] }
37
+ Genki::Server.new(opt).start
38
+ end
39
+
25
40
  register Generators::App, 'new', 'new APP_NAME', 'Create a new Genki application.'
26
41
  tasks['new'].options = Generators::App.class_options
27
42
  end
@@ -0,0 +1,12 @@
1
+ module Genki
2
+ #--
3
+ # Genki::RouteAlreadyDefinedError
4
+ #
5
+ # RouteAlreadyDefinedError class
6
+ #++
7
+ class RouteAlreadyDefinedError < StandardError
8
+ def initialize(route)
9
+ super("Trying to redefine already defined route '#{route}'.")
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,9 @@
1
+ module Genki
2
+ #--
3
+ # Genki::RouteNotFoundError
4
+ #
5
+ # RouteNotFound error class
6
+ #++
7
+ class RouteNotFoundError < StandardError
8
+ end
9
+ end
@@ -36,6 +36,11 @@ module Genki
36
36
  template 'Gemfile'
37
37
  end
38
38
 
39
+ def create_sample
40
+ empty_directory 'app'
41
+ template 'app/home.rb'
42
+ end
43
+
39
44
  def run_bundle
40
45
  inside do
41
46
  Bundler.with_clean_env { run 'bundle' }
@@ -0,0 +1,6 @@
1
+ class Home < Genki::Controller
2
+
3
+ get '/' do
4
+ render({ message: 'Hello World from <%= app_name %>' })
5
+ end
6
+ end
@@ -1,4 +1,3 @@
1
1
  require 'genki'
2
- Dir['./**/*.rb'].each { |file| require file }
3
- app = Genki::Server.new
2
+ app = Genki::Application.new
4
3
  run app
@@ -0,0 +1,28 @@
1
+ require 'bundler/setup'
2
+
3
+ module Genki
4
+ #--
5
+ # Genki::Application
6
+ #
7
+ # APPLICATION CLASS
8
+ #++
9
+ class Application
10
+ def initialize
11
+ Bundler.require(:default, Genki.env)
12
+ Dir['./app/**/*.rb'].each { |file| require file }
13
+ end
14
+
15
+ def call(env)
16
+ Request.current = Request.new(env)
17
+
18
+ response = Router.instance.process
19
+ rescue RouteNotFoundError
20
+ response = Response.new('', 404)
21
+ rescue StandardError => e
22
+ Logger.error(e)
23
+ response = Response.new('', 500)
24
+ ensure
25
+ response.finish
26
+ end
27
+ end
28
+ end
@@ -1,3 +1,5 @@
1
+ require 'json'
2
+
1
3
  module Genki
2
4
  #--
3
5
  # Genki::Controller
@@ -5,32 +7,84 @@ module Genki
5
7
  # CONTROLLER CLASS
6
8
  #++
7
9
  class Controller
10
+ def self.namespace(path, &block)
11
+ @namespace ||= []
12
+ @namespace << path
13
+
14
+ instance_eval(&block)
15
+
16
+ @namespace = nil
17
+ end
18
+
8
19
  def self.get(path, &block)
9
- Router.instance.route(Route.new(:GET, path), &block)
20
+ Router.instance.route('GET', Route.new((@namespace || []).push(path).join, &block))
10
21
  end
11
22
 
12
23
  def self.post(path, &block)
13
- Router.instance.route(Route.new(:POST, path), &block)
24
+ Router.instance.route('POST', Route.new((@namespace || []).push(path).join, &block))
14
25
  end
15
26
 
16
27
  def self.put(path, &block)
17
- Router.instance.route(Route.new(:PUT, path), &block)
28
+ Router.instance.route('PUT', Route.new((@namespace || []).push(path).join, &block))
18
29
  end
19
30
 
20
31
  def self.delete(path, &block)
21
- Router.instance.route(Route.new(:DELETE, path), &block)
32
+ Router.instance.route('DELETE', Route.new((@namespace || []).push(path).join, &block))
33
+ end
34
+
35
+ def self.options(path, &block)
36
+ Router.instance.route('OPTIONS', Route.new((@namespace || []).push(path).join, &block))
37
+ end
38
+
39
+ def self.patch(path, &block)
40
+ Router.instance.route('PATCH', Route.new((@namespace || []).push(path).join, &block))
41
+ end
42
+
43
+ def render(json: nil, erb: nil, headers: {}, status: 200)
44
+ body = render_json(json, headers) || render_erb(erb, headers) || ''
45
+
46
+ response = Response.new(body, status, headers)
47
+ cookies.each do |key, value|
48
+ response.set_cookie(key, value) if cookie_changed?(key, value)
49
+ end
50
+ response
22
51
  end
23
52
 
24
- def self.render(body, status = 200, header = [])
25
- Response.new(body, status, header)
53
+ def request
54
+ Request.current
26
55
  end
27
56
 
28
- def self.request
29
- Thread.current[:request]
57
+ def params
58
+ Request.current.params
59
+ end
60
+
61
+ def cookies
62
+ @_cookies ||= request.cookies.dup
63
+ end
64
+
65
+ private
66
+
67
+ def render_json(json, headers)
68
+ return if json.nil?
69
+
70
+ headers['content-type'] ||= 'application/json'
71
+ JSON.dump(json)
72
+ end
73
+
74
+ def render_erb(view, headers)
75
+ return if view.nil?
76
+
77
+ require 'erubis'
78
+ file = File.expand_path(view, './app/views')
79
+ headers['content-type'] ||= 'text/html'
80
+
81
+ context = instance_variables.map { |var| [var[1..-1], instance_variable_get(var)] }.to_h
82
+
83
+ Erubis::Eruby.new(File.read(file)).evaluate(context)
30
84
  end
31
85
 
32
- def self.params
33
- request.params
86
+ def cookie_changed?(key, value)
87
+ request.cookies[key] != value
34
88
  end
35
89
  end
36
90
  end
@@ -5,11 +5,16 @@ module Genki
5
5
  # REQUEST CLASS
6
6
  #++
7
7
  class Request < Rack::Request
8
- attr_reader :route
8
+ def self.current=(request)
9
+ Thread.current[:request] = request
10
+ end
11
+
12
+ def self.current
13
+ Thread.current[:request]
14
+ end
9
15
 
10
- def initialize(env)
11
- super(env)
12
- @route = Route.new(env['REQUEST_METHOD'], env['PATH_INFO'])
16
+ def json_data?
17
+ media_type == 'application/json'
13
18
  end
14
19
  end
15
20
  end
@@ -1,3 +1,5 @@
1
+ require 'json'
2
+
1
3
  module Genki
2
4
  #--
3
5
  # Genki::Route
@@ -5,10 +7,53 @@ module Genki
5
7
  # ROUTE CLASS
6
8
  #++
7
9
  class Route
8
- attr_reader :signature
10
+ attr_reader :path
11
+
12
+ def initialize(path, &block)
13
+ @path = path
14
+ @params = path.scan(/:[a-z_]+/)
15
+ @path_regex = '^'.concat(path.gsub(/:[a-z_]+/, '([a-z0-9]+)')).concat('/?$')
16
+ @action = block
17
+ end
18
+
19
+ def match?(current_path)
20
+ @parsed_path = current_path.match(@path_regex).to_a[1..-1]
21
+ end
22
+
23
+ def process
24
+ process_params
25
+
26
+ klass = @action.binding.receiver
27
+ controller = klass.new
28
+
29
+ Logger.info("Request processed by #{klass}")
30
+
31
+ controller.instance_eval(&@action)
32
+ end
33
+
34
+ def ==(other)
35
+ other.is_a?(Route) && @path_regex == other.path_regex
36
+ end
37
+
38
+ protected
39
+
40
+ attr_reader :path_regex
41
+
42
+ private
43
+
44
+ def process_params
45
+ params = {}
46
+
47
+ @params.each_with_index do |param, index|
48
+ params[param[1..-1]] = @parsed_path[index]
49
+ end
50
+
51
+ if Request.current.json_data?
52
+ raw_data = Request.current.env['rack.input'].read
53
+ params.merge!(JSON.parse(raw_data))
54
+ end
9
55
 
10
- def initialize(verb, path)
11
- @signature = "#{verb}#{path}"
56
+ Request.current.params.merge!(params)
12
57
  end
13
58
  end
14
59
  end
@@ -13,16 +13,25 @@ module Genki
13
13
  @routes = {}
14
14
  end
15
15
 
16
- def route(route, &block)
17
- @routes[route.signature] = block
16
+ def route(method, route)
17
+ @routes[method] ||= []
18
+ raise RouteAlreadyDefinedError, "#{method} #{route.path}" if @routes[method].include? route
19
+ @routes[method] << route
18
20
  end
19
21
 
20
- def process(request)
21
- Thread.current[:request] = request
22
+ def process
23
+ current_route = nil
22
24
 
23
- action = @routes[request.route.signature]
24
- return Response.new 'Not Found', 404 unless action
25
- action.call
25
+ if @routes[Request.current.request_method]
26
+ @routes[Request.current.request_method].each do |route|
27
+ current_route = route.match?(Request.current.path) ? route : nil
28
+ break if current_route
29
+ end
30
+ end
31
+
32
+ raise RouteNotFoundError unless current_route
33
+
34
+ current_route.process
26
35
  end
27
36
  end
28
37
  end
@@ -1,14 +1,23 @@
1
+ require 'genki'
2
+ require 'rack'
3
+
1
4
  module Genki
2
5
  #--
3
6
  # Genki::Server
4
7
  #
5
8
  # SERVER CLASS
6
9
  #++
7
- class Server
8
- def call(env)
9
- response = Router.instance.process(Request.new(env))
10
+ class Server < Rack::Server
11
+ def initialize(options = {})
12
+ options = default_options.merge(options)
13
+ Genki.env = options[:environment]
14
+ super
15
+ end
10
16
 
11
- response.finish
17
+ def start
18
+ uri = "http://#{options[:Host]}:#{options[:Port]}"
19
+ puts "Genki application starting in #{options[:environment]} on #{uri}"
20
+ super
12
21
  end
13
22
  end
14
23
  end
@@ -0,0 +1,23 @@
1
+ require 'logger'
2
+ require 'singleton'
3
+
4
+ module Genki
5
+ #--
6
+ # Genki::Logger
7
+ #
8
+ # Logger class
9
+ #++
10
+ class Logger < ::Logger
11
+ include Singleton
12
+
13
+ def initialize
14
+ super(STDOUT, ::Logger::INFO)
15
+ end
16
+
17
+ class << self
18
+ ::Logger::Severity.constants.each do |level|
19
+ define_method(level.downcase) { |msg| Logger.instance.method(level.downcase).call(msg) }
20
+ end
21
+ end
22
+ end
23
+ end
data/lib/genki/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Genki
2
- VERSION = '0.1.0.beta1'.freeze
2
+ VERSION = '0.1.0.beta2'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: genki
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.beta1
4
+ version: 0.1.0.beta2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Diego Silva
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2016-02-22 00:00:00.000000000 Z
12
+ date: 2016-03-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rack
@@ -46,13 +46,33 @@ dependencies:
46
46
  - - "~>"
47
47
  - !ruby/object:Gem::Version
48
48
  version: '1.11'
49
- type: :development
49
+ type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - "~>"
54
54
  - !ruby/object:Gem::Version
55
55
  version: '1.11'
56
+ - !ruby/object:Gem::Dependency
57
+ name: erubis
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 2.7.0
63
+ - - "<"
64
+ - !ruby/object:Gem::Version
65
+ version: '3.0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 2.7.0
73
+ - - "<"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.0'
56
76
  - !ruby/object:Gem::Dependency
57
77
  name: rake
58
78
  requirement: !ruby/object:Gem::Requirement
@@ -123,8 +143,8 @@ dependencies:
123
143
  - - ">="
124
144
  - !ruby/object:Gem::Version
125
145
  version: '0'
126
- description: Genki is a full-stack framework optimized to create API's, quicly, easy
127
- and beatiful.
146
+ description: Genki is a full-stack framework optimized for quick and easy creation
147
+ of beautiful APIs.
128
148
  email:
129
149
  - diego.silva@live.com
130
150
  - leonardo.prg@gmail.com
@@ -144,20 +164,24 @@ files:
144
164
  - Rakefile
145
165
  - bin/console
146
166
  - bin/setup
147
- - config.ru
148
167
  - exe/genki
149
168
  - genki.gemspec
150
169
  - lib/genki.rb
151
170
  - lib/genki/cli.rb
171
+ - lib/genki/errors/route_already_defined_error.rb
172
+ - lib/genki/errors/route_not_found_error.rb
152
173
  - lib/genki/generators/app.rb
153
174
  - lib/genki/generators/app/files/Gemfile.tt
175
+ - lib/genki/generators/app/files/app/home.rb.tt
154
176
  - lib/genki/generators/app/files/config.ru
177
+ - lib/genki/http/application.rb
155
178
  - lib/genki/http/controller.rb
156
179
  - lib/genki/http/request.rb
157
180
  - lib/genki/http/response.rb
158
181
  - lib/genki/http/route.rb
159
182
  - lib/genki/http/router.rb
160
183
  - lib/genki/http/server.rb
184
+ - lib/genki/utils/logger.rb
161
185
  - lib/genki/version.rb
162
186
  homepage: https://github.com/genkirb/genki
163
187
  licenses:
@@ -179,8 +203,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
179
203
  version: 1.3.1
180
204
  requirements: []
181
205
  rubyforge_project:
182
- rubygems_version: 2.4.8
206
+ rubygems_version: 2.6.1
183
207
  signing_key:
184
208
  specification_version: 4
185
- summary: Fast and minimalist framework to generate API's in ruby.
209
+ summary: A fast and minimalist framework to generate APIs in Ruby.
186
210
  test_files: []
data/config.ru DELETED
@@ -1,3 +0,0 @@
1
- require 'genki'
2
- app = Genki::Server.new
3
- run app