nyara 0.1.pre.1 → 0.1.pre.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/changes +6 -0
  3. data/ext/hashes.c +0 -2
  4. data/lib/nyara.rb +1 -2
  5. data/lib/nyara/command.rb +57 -11
  6. data/lib/nyara/config.rb +16 -16
  7. data/lib/nyara/nyara.rb +32 -23
  8. data/lib/nyara/optional_templates/activerecord.yml.erb +26 -0
  9. data/lib/nyara/{templates/config/database.yml.tt → optional_templates/mongoid.yml.erb} +0 -0
  10. data/lib/nyara/route.rb +3 -4
  11. data/lib/nyara/templates/%gitignore% +4 -0
  12. data/lib/nyara/templates/Gemfile.tt +22 -3
  13. data/lib/nyara/templates/Linnerfile +17 -0
  14. data/lib/nyara/templates/Rakefile +2 -3
  15. data/lib/nyara/templates/app/assets/scripts/app.coffee +3 -1
  16. data/lib/nyara/templates/app/assets/styles/app.scss +3 -1
  17. data/lib/nyara/templates/app/controllers/application_controller.rb +1 -1
  18. data/lib/nyara/templates/app/controllers/home_controller.rb +5 -0
  19. data/lib/nyara/templates/app/views/home/index.%template_ext%.tt +29 -0
  20. data/lib/nyara/templates/app/views/layouts/application.%template_ext%.tt +25 -0
  21. data/lib/nyara/templates/config/application.rb.tt +54 -0
  22. data/lib/nyara/templates/config/boot.rb +0 -1
  23. data/lib/nyara/templates/config/development.rb +10 -1
  24. data/lib/nyara/templates/config/production.rb +4 -1
  25. data/lib/nyara/templates/config/test.rb +1 -0
  26. data/lib/nyara/view.rb +1 -6
  27. data/nyara.gemspec +2 -2
  28. data/spec/apps/reload.rb +2 -1
  29. data/spec/command_spec.rb +4 -4
  30. data/spec/config_spec.rb +0 -12
  31. data/spec/nyara_spec.rb +43 -0
  32. data/spec/path_helper_spec.rb +3 -3
  33. data/spec/view_spec.rb +4 -4
  34. data/tools/hello.rb +1 -1
  35. metadata +10 -9
  36. data/lib/nyara/templates/app/controllers/welcome_controller.rb +0 -5
  37. data/lib/nyara/templates/app/views/layouts/application.erb.tt +0 -12
  38. data/lib/nyara/templates/app/views/welcome/index.erb +0 -1
  39. data/lib/nyara/templates/config/application.rb +0 -38
  40. data/tools/bug.rb +0 -53
  41. data/tools/memcheck.rb +0 -33
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e8806d56e981db23403ba6662c31af80629c2afd
4
- data.tar.gz: 98d333128c7785a3b32e49ffbf4c7cc16f570c16
3
+ metadata.gz: 3d7c361394cdca151e6d52acc2dcb4e1b197f1b3
4
+ data.tar.gz: ce33aa73e3be6a53efe0c4013f6bbe95463f88a5
5
5
  SHA512:
6
- metadata.gz: 79b6568857f0ef7fb6e5bd3d2286f68777554536e4223e592e48cface08b0754c3c4b725a7b52838617f48d1ee969c1aa412e3a3eae0710d5f1ef0d488ed3b7c
7
- data.tar.gz: 5790f2a3e825c6eec82c0befab9a9e596894e71996ae922c63ca3bac48a5e1c0caf818cfd5f2a0cbc7347f6eff934ad36139e2ca8d4fd3b4687cd829308977a3
6
+ metadata.gz: 2450d6d927b7c4b2771dcfdd81c4491a51ab8373a425fa9dea2d0114cd08892306d97a681f973a90f294c79a14b4b0c6abcd931a0138993f88c361760eef0850
7
+ data.tar.gz: 70e46c7d7353bab07e8e26d3a4023023060dc9fbacc1ef660a2712f52267e73c4427be4c6f3a073f238b05bda64eb8ef5e05ecb1c2729a2eb8f7167558928cc1
data/changes CHANGED
@@ -1,3 +1,9 @@
1
+ 0.1
2
+
3
+ 2013-08-19 project generator now support `--template` and `--orm` options
4
+ you can see available options with `nyara help new`
5
+ 2013-08-17 remove config option `app_files`, add options `watch` and `watch_assets`
6
+ 2013-08-17 use un-converted class names in `Config.map`
1
7
  2013-08-17 integrate with linner
2
8
  2013-08-16 use thor for `nyara` commands
3
9
  2013-08-15 (developers) migrated to git subtree, you don't need to hand-update submodules anymore
@@ -240,7 +240,6 @@ static VALUE param_hash_nested_aset(VALUE output, VALUE keys, VALUE value) {
240
240
  }
241
241
 
242
242
  // s, len is the raw kv string
243
- // returns trailing length
244
243
  static void _cookie_kv(VALUE output, const char* s, long len) {
245
244
  // strip
246
245
  for (; len > 0; len--, s++) {
@@ -291,7 +290,6 @@ static VALUE param_hash_parse_cookie(VALUE _, VALUE output, VALUE str) {
291
290
  }
292
291
 
293
292
  // s, len is the raw kv string
294
- // returns trailing length
295
293
  static void _param_kv(VALUE output, const char* s, long len) {
296
294
  // strip
297
295
  for (; len > 0; len--, s++) {
@@ -4,7 +4,6 @@ require_relative "nyara/nyara"
4
4
  END {
5
5
  if $!.nil? and !Nyara.config.test?
6
6
  Nyara.setup
7
- Nyara.load_app
8
7
  Nyara.start_server
9
8
  end
10
9
  }
@@ -23,5 +22,5 @@ end
23
22
  end
24
23
 
25
24
  configure do
26
- map '/', 'nyara::simple'
25
+ map '/', 'Nyara::SimpleController'
27
26
  end
@@ -4,6 +4,26 @@ require "shellwords"
4
4
  module Nyara
5
5
  class Command < Thor
6
6
  include Thor::Actions
7
+
8
+ module FileNames
9
+ def template_ext
10
+ options[:template] == 'slim' ? 'slim' : 'erb'
11
+ end
12
+
13
+ def gitignore
14
+ '.gitignore'
15
+ end
16
+ end
17
+ include FileNames
18
+
19
+ module ORM
20
+ def orm
21
+ # it can be nil when called as method
22
+ options[:orm] || 'mongoid'
23
+ end
24
+ end
25
+ include ORM
26
+
7
27
  map '-v' => :version
8
28
 
9
29
  def self.source_root
@@ -16,7 +36,10 @@ module Nyara
16
36
  end
17
37
 
18
38
  desc "new APP_NAME", "Create a project"
19
- method_option :force, aliases: '-f', desc: 'Force override old', type: :boolean, default: false
39
+ method_option :orm, aliases: %w'-o -O', type: :string, default: 'mongoid',
40
+ desc: 'Specify object relationship mapping (ORM)', enum: %w'mongoid activerecord none'
41
+ method_option :template, aliases: %w'-t -T', type: :string, default: 'erubis',
42
+ desc: 'Specify template engine', enum: %w'erubis slim'
20
43
  def new name
21
44
  require 'fileutils'
22
45
 
@@ -25,13 +48,9 @@ module Nyara
25
48
  @app_name = File.basename app_dir
26
49
  templte_dir = File.join(File.dirname(__FILE__), "templates")
27
50
 
28
- FileUtils.rm_rf(app_dir) if options[:force]
29
51
  directory 'templates', name
30
-
31
- create_file app_dir + '/.gitignore' do
32
- %w".DS_Store config/session.key config/session_cipher.key".join "\n"
33
- end
34
52
  generate 'session.key'
53
+ generate 'database.yml'
35
54
  puts ' \\ 👻 /'
36
55
  ensure
37
56
  @app_name = nil
@@ -40,7 +59,10 @@ module Nyara
40
59
 
41
60
  desc "generate THING", "(PROJECT) Generate things, THING can be:
42
61
  session.key # config/session.key
43
- session_cipher.key # config/session_cipher.key"
62
+ session_cipher.key # config/session_cipher.key
63
+ database.yml # config/database.yml"
64
+ method_option :orm, aliases: %w'-o -O', type: :string, default: 'mongoid',
65
+ desc: 'Specify ORM (for generating database.yml)', enum: %w'mongoid activerecord'
44
66
  def generate thing, app_dir=nil
45
67
  case thing
46
68
  when 'session.key'
@@ -55,19 +77,42 @@ module Nyara
55
77
  create_file file do
56
78
  Session.generate_cipher_key
57
79
  end
80
+ when 'database.yml'
81
+ @app_name ||= File.dirname Dir.pwd
82
+ file = 'config/database.yml'
83
+ file = File.join @rel_dir, file if @rel_dir
84
+ case orm
85
+ when 'mongoid', 'activerecord'
86
+ src = "#{__dir__}/optional_templates/#{orm}.yml.erb"
87
+ create_file file do
88
+ ERB.new(File.read src).result binding
89
+ end
90
+ end
58
91
  end
59
92
  end
60
93
 
61
94
  desc "server", "(PROJECT) Start server"
62
95
  method_option :environment, aliases: %w'-e -E', default: 'development'
96
+ method_option :port, aliases: %w'-p -P', type: :numeric
97
+ method_option :daemon, aliases: %w'-d -D', type: :boolean,
98
+ desc: 'run server on the background'
63
99
  def server
64
100
  env = options[:environment].shellescape
65
- exec "NYARA_ENV=#{env} ruby config/boot.rb"
101
+ cmd = "NYARA_ENV=#{env} ruby config/boot.rb"
102
+
103
+ if options[:port]
104
+ cmd << " -p" << options[:port].shellescape
105
+ end
106
+ if options[:daemon]
107
+ cmd << " -d"
108
+ end
109
+ exec cmd
66
110
  end
67
111
 
68
112
  desc "console", "(PROJECT) Start console"
69
113
  method_option :environment, aliases: %w'-e -E', default: 'development'
70
- method_option :shell, aliases: '-s', desc: "tell me which shell you want to use, pry or irb?"
114
+ method_option :shell, aliases: %w'-s -S', enum: %w'pry irb',
115
+ desc: "Tell me which shell you want to use"
71
116
  def console
72
117
  env = options[:environment].shellescape
73
118
  cmd = options[:shell]
@@ -76,11 +121,12 @@ module Nyara
76
121
  cmd = 'pry'
77
122
  end
78
123
  end
124
+
79
125
  cmd ||= 'irb'
80
126
  if cmd != 'irb'
81
- cmd = "bundle exec #{cmd}"
127
+ cmd = "bundle exec pry"
82
128
  end
83
- exec "NYARA_ENV=#{env} #{cmd} -r./config/application.rb"
129
+ exec "NYARA_SHELL=1 NYARA_ENV=#{env} #{cmd} -r./config/application.rb"
84
130
  end
85
131
 
86
132
  end
@@ -1,22 +1,22 @@
1
1
  module Nyara
2
2
  # #### Options
3
3
  #
4
- # * `env` - environment, default is `'development'`
5
- # * `port` - listen port number
6
- # * `workers` - number of workers
7
- # * `host` - host name used in `url_to` helper
8
- # * `root` - root path, default is `Dir.pwd`
9
- # * `views` - views (templates) directory, relative to root, default is `"views"`
10
- # * `assets` - assets directory, relative to root, default is `"assets"`
11
- # * `public` - static files directory, relative to root, default is `"public"`
12
- # * `x_send_file` - header field name for `X-Sendfile` or `X-Accel-Redirect`, see [Nyara::Controller#send_file](Controller#send_file.html-instance_method) for details
13
- # * `session` - see [Nyara::Session](Session.html) for sub options
14
- # * `prefer_erb` - use ERB instead of ERubis for `.erb` templates
15
- # * `logger` - if set, every request is logged, and you can use `Nyara.logger` to do your own logging.
16
- # * `app_files` - application source file glob patterns, they will be required automatically.
17
- # In developemnt mode, this option enables automatic reloading for views and app.
18
- # * `before_fork` - a proc to run before forking
19
- # * `after_fork` - a proc to run after forking
4
+ # * `env` - environment, default is `'development'`
5
+ # * `port` - listen port number, default is 3000. you can pass `-p` in the command line to override it
6
+ # * `daemon` - whether run in the background, default is false. you can pass `-d` in the command line to override it
7
+ # * `workers` - number of workers
8
+ # * `host` - host name used in `url_to` helper
9
+ # * `root` - root path, default is `Dir.pwd`
10
+ # * `views` - views (templates) directory, relative to root, default is `"views"`
11
+ # * `public` - static files directory, relative to root, default is `"public"`
12
+ # * `x_send_file` - header field name for `X-Sendfile` or `X-Accel-Redirect`, see [Nyara::Controller#send_file](Controller#send_file.html-instance_method) for details
13
+ # * `session` - see [Nyara::Session](Session.html) for sub options
14
+ # * `prefer_erb` - use ERB instead of ERubis for `.erb` templates
15
+ # * `logger` - if set, every request is logged, and you can use `Nyara.logger` to do your own logging.
16
+ # * `before_fork` - a proc to run before forking
17
+ # * `after_fork` - a proc to run after forking
18
+ # * `watch` - if `true`, watch `app` change and reload automaticly, useful for development. default is `false`
19
+ # * `watch_assets` - if `true`, watch `app/assets` change with linner (you need `gem install linner` first), useful for development. default is `false`
20
20
  #
21
21
  # #### logger example
22
22
  #
@@ -76,25 +76,9 @@ module Nyara
76
76
  View.init
77
77
  end
78
78
 
79
- # load with Config['app_files']
80
- def load_app
81
- app_files = Config['app_files']
82
- return unless app_files
83
-
84
- Dir.chdir Config.root do
85
- # NOTE app_files can be an array
86
- Dir.glob Config['app_files'] do |file|
87
- require Config.project_path file
88
- end
89
- if Config.development?
90
- require_relative "reload"
91
- Reload.listen
92
- @reload = Reload
93
- end
94
- end
95
- end
96
-
97
79
  def start_server
80
+ reconfig_with_command_line_options
81
+ Process.daemon if Config['daemon']
98
82
  port = Config['port']
99
83
  env = Config['env']
100
84
 
@@ -107,15 +91,21 @@ module Nyara
107
91
  when 'test'
108
92
  # don't
109
93
  else
110
- start_watch_assets
94
+ start_watch
111
95
  start_development_server port
112
96
  end
113
97
  end
114
98
 
115
- def start_watch_assets
116
- return if Config[:assets].blank?
117
- Process.fork do
118
- exec 'bundle exec linner watch'
99
+ def start_watch
100
+ if Config['watch_assets']
101
+ Process.fork do
102
+ exec 'bundle exec linner watch'
103
+ end
104
+ end
105
+ if Config['watch']
106
+ require_relative "reload"
107
+ Reload.listen
108
+ @reload = Reload
119
109
  end
120
110
  end
121
111
 
@@ -192,6 +182,25 @@ module Nyara
192
182
 
193
183
  private
194
184
 
185
+ def reconfig_with_command_line_options argv=ARGV.dup
186
+ until argv.empty?
187
+ case opt = argv.shift
188
+ when '-d', '--daemon'
189
+ Config['daemon'] = true
190
+ when '-p', /--port(?:=(\d+))?/
191
+ port = ($1 || argv.shift)
192
+ port = port.to_i if port
193
+ if port >= 0 && port <= 65535
194
+ Config['port'] = port
195
+ else
196
+ raise "invalid port: #{port.inspect}"
197
+ end
198
+ else
199
+ raise "unkown command line option: #{opt}"
200
+ end
201
+ end
202
+ end
203
+
195
204
  def create_tcp_server port
196
205
  if (server_fd = ENV['NYARA_FD'].to_i) > 0
197
206
  puts "inheriting server fd #{server_fd}"
@@ -0,0 +1,26 @@
1
+ # for other databases, see
2
+ # http://guides.rubyonrails.org/configuring.html#configuring-a-database
3
+
4
+ defaults: &defaults
5
+ adapter: postgresql
6
+ encoding: unicode
7
+ username: postgres
8
+ ## mysql/mariadb example:
9
+ # adapter: mysql2
10
+ # encoding: utf8
11
+ # username: root
12
+ password:
13
+ pool: 5
14
+ host: localhost
15
+
16
+ development:
17
+ <<: *defaults
18
+ database: <%= @app_name %>_dev
19
+
20
+ test:
21
+ <<: *defaults
22
+ database: <%= @app_name %>_test
23
+
24
+ production:
25
+ <<: *defaults
26
+ database: <%= @app_name %>_prod
@@ -167,7 +167,7 @@ module Nyara
167
167
  def routes
168
168
  @routes || []
169
169
  end
170
-
170
+
171
171
  # #### Param
172
172
  #
173
173
  # * `controller` - string or class which inherits [Nyara::Controller](Controller.html)
@@ -240,9 +240,7 @@ module Nyara
240
240
  def print_routes
241
241
  puts "All routes:"
242
242
  Nyara::Route.routes.each do |route|
243
- cname = route.controller.to_s
244
- cname.gsub!("Controller", "")
245
- cname.downcase!
243
+ cname = const2name route.controller
246
244
  print "#{cname}#{route.id}".rjust(30), " "
247
245
  print route.http_method_to_s.ljust(6), " "
248
246
  print route.path_template
@@ -260,6 +258,7 @@ module Nyara
260
258
  end
261
259
 
262
260
  def name2const name
261
+ return Module.const_get(name) if name[0] =~ /[A-Z]/
263
262
  name = name.gsub /(?<=\b|_)[a-z]/, &:upcase
264
263
  name.gsub! '_', ''
265
264
  name << 'Controller'
@@ -0,0 +1,4 @@
1
+ .DS_Store
2
+ config/session.key
3
+ config/session_cipher.key
4
+ public
@@ -1,11 +1,30 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'erubis'
3
+ # web framework
4
4
  gem 'nyara', '<%= Nyara::VERSION %>', require: 'nyara/nyara'
5
- gem 'mongoid', '3.1.4'
5
+
6
+ # template engine
7
+ <%- if template_ext == 'erb' -%>
8
+ gem 'erubis'
9
+ <%- else -%>
10
+ gem 'slim'
11
+ <%- end -%>
12
+
13
+ <%- case orm -%>
14
+ <%- when 'mongoid' -%>
15
+ # orm
16
+ gem 'mongoid', '~> 3.1.4'
17
+ <%- when 'activerecord' -%>
18
+ # orm
19
+ gem 'activerecord', '~> 4.0.0'
20
+
21
+ # database driver
22
+ gem 'pg'
23
+ # gem 'mysql2'
24
+ <%- end -%>
6
25
 
7
26
  group :development do
8
- gem 'linner', github: "SaitoWu/linner"
27
+ gem 'linner', github: "SaitoWu/linner", require: false
9
28
  end
10
29
 
11
30
  group :deploy do
@@ -1,28 +1,45 @@
1
+ # -*- mode: yaml -*-
2
+ # vim: set syntax=yaml:
1
3
  paths:
4
+ # source
2
5
  app: "app/assets"
6
+ # destination
3
7
  public: "public"
8
+
4
9
  groups:
10
+ # js src
5
11
  scripts:
12
+ # load paths for require("some-module")
6
13
  paths:
7
14
  - app/assets/scripts
15
+ # assemble k with v
8
16
  concat:
9
17
  "/assets/app.js": "app/assets/**/*.{js,coffee}"
18
+ # manage js module dependencies by specifying the concat order
10
19
  order:
20
+ # "..." means any other files
11
21
  - "..."
12
22
  - app/assets/scripts/app.coffee
23
+
24
+ # css src
13
25
  styles:
26
+ # load paths for @import "some-module"
14
27
  paths:
15
28
  - app/assets/styles
16
29
  concat:
17
30
  "/assets/app.css": "app/assets/**/[a-z]*.{css,scss,sass}"
31
+
32
+ # files to copy directly into `public`
18
33
  files:
19
34
  paths:
20
35
  - app/assets/files
21
36
  copy:
22
37
  "/": "app/assets/**/*.{ico,txt}"
38
+
23
39
  modules:
24
40
  wrapper: "cmd"
25
41
  ignored: "{vendor/**/*,app/assets/scripts/app.{js,coffee}}"
26
42
  definition: "/assets/app.js"
43
+
27
44
  revision: true
28
45
  notification: true
@@ -3,17 +3,16 @@ require "rake"
3
3
  desc "print all routes"
4
4
  task :routes do
5
5
  require_relative "config/application"
6
- Nyara.setup
7
6
  Nyara::Route.print_routes
8
7
  end
9
8
 
10
9
  namespace :assets do
11
- desc "compile assets into public"
10
+ desc "compile assets into public (requires linner)"
12
11
  task :build do
13
12
  sh 'bundle exec linner build'
14
13
  end
15
14
 
16
- desc "clean assets in public"
15
+ desc "clean assets in public (requires linner)"
17
16
  task :clean do
18
17
  sh 'bundle exec linner clean'
19
18
  end
@@ -1,4 +1,6 @@
1
- # Linner let you organize script assets more easily.
1
+ # coffeescript reference -- http://coffeescript.org
2
+
3
+ # linner lets you organize script assets more easily
2
4
  # see module-example.coffee for how to define a module
3
5
  module = require 'module-example'
4
6
  module.bounce()
@@ -1,2 +1,4 @@
1
- // You may:
1
+ // visit http://compass-style.org/ and see how compass makes your CSS clean and robust
2
+
2
3
  // @import "compass"
4
+ // @import "compass/reset"
@@ -1,7 +1,7 @@
1
1
  class ApplicationController < Nyara::Controller
2
2
  set_default_layout 'layouts/application'
3
3
 
4
- def asset_path(path)
4
+ def asset_path path
5
5
  if Nyara.production?
6
6
  Nyara::Config['manifest'][path]
7
7
  else
@@ -0,0 +1,5 @@
1
+ class HomeController < ApplicationController
2
+ get '/' do
3
+ render 'home/index'
4
+ end
5
+ end
@@ -0,0 +1,29 @@
1
+ <% if template_ext == 'erb' -%>
2
+ <h1>Congratulations!<h1>
3
+ <h2>You completed the first step of creating an awesome website!</h2>
4
+
5
+ You may also like to:
6
+
7
+ <ul>
8
+ <li><a href="https://github.com/luikore/nyara/wiki/Manual#configure-options">Learn more about nyara</a></li>
9
+ <li><a href="http://slim-lang.com/">Switch template engine to slim</a></li>
10
+ <li><a href="https://github.com/SaitoWu/linner">See how assets work</a></li>
11
+ <li><a href="https://chrome.google.com/webstore/detail/livereload/jnihajbhpnppcggbcgedagnkighmdlei?hl=en">Install the livereload plugin on Chrome</a></li>
12
+ </ul>
13
+ <% else -%>
14
+ h1 Congratulations!
15
+ h2 You completed the first step of creating an awesome website!
16
+
17
+ | You may also like to:
18
+
19
+ ul
20
+ li
21
+ a href="https://github.com/luikore/nyara/wiki/Manual#configure-options"
22
+ | Learn more about nyara
23
+ li
24
+ a href="https://github.com/SaitoWu/linner"
25
+ | See how assets work
26
+ li
27
+ a href="https://chrome.google.com/webstore/detail/livereload/jnihajbhpnppcggbcgedagnkighmdlei?hl=en"
28
+ | Install the livereload plugin on Chrome
29
+ <% end -%>
@@ -0,0 +1,25 @@
1
+ <% if template_ext == 'erb' -%>
2
+ <!DOCTYPE html>
3
+ <html>
4
+ <head>
5
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8">
6
+ <title><%= @app_name %></title>
7
+ <link type="text/css" rel="stylesheet" href="<%%= asset_path "/assets/app.css" %>">
8
+ <script type="text/javascript" src="<%%= asset_path "/assets/app.js" %>"></script>
9
+ </head>
10
+ <body>
11
+ <%%== yield %>
12
+ </body>
13
+ </html>
14
+ <% else -%>
15
+ doctype html
16
+ html
17
+ head
18
+ meta http-equiv="Content-type" content="text/html; charset=utf-8"
19
+ title
20
+ | <%= @app_name %>
21
+ link type="text/css" rel="stylesheet" href=asset_path("/assets/app.css")
22
+ script type="text/javascript" src=asset_path("/assets/app.js")
23
+ body
24
+ == yield
25
+ <% end -%>
@@ -0,0 +1,54 @@
1
+ require 'bundler'
2
+ Bundler.require :default, ENV['NYARA_ENV'] || 'development'
3
+
4
+ configure do
5
+ set :env, ENV['NYARA_ENV'] || 'development'
6
+
7
+ set :port, ENV['NYARA_PORT']
8
+
9
+ # directory containing view templates
10
+ set :views, 'app/views'
11
+
12
+ ## change cookie based session name
13
+ # set :session, :name, '_aaa'
14
+
15
+ ## if you've configured https with nginx:
16
+ # set :session, :secure, true
17
+
18
+ ## default session expires when browser closes.
19
+ ## if you need time-based expiration, 30 minutes for example:
20
+ # set :session, :expires, 30 * 60
21
+
22
+ # you can regenerate session key with `nyara g session.key`
23
+ set 'session', 'key', File.read(project_path 'config/session.key')
24
+
25
+ # map routing prefix to controllers
26
+ map '/', 'HomeController'
27
+
28
+ # environment specific configure at last
29
+ require_relative env
30
+
31
+ # invoked after forking a worker
32
+ set :after_fork, ->{
33
+ <%- case orm -%>
34
+ <%- when 'mongoid' -%>
35
+ Mongoid.load!(Nyara.config.project_path('config/database.yml'), Nyara.config.env)
36
+ <%- when 'activerecord' -%>
37
+ ActiveRecord::Base.establish_connection Nyara.config.project_path('config/database.yml')
38
+ <%- end -%>
39
+ }
40
+ end
41
+
42
+ # load app
43
+ Dir.glob %w|
44
+ app/controllers/application_controller.rb
45
+ app/{helpers,models,controllers}/**/*.rb
46
+ | do |file|
47
+ require_relative "../#{file}"
48
+ end
49
+
50
+ # compile routes and finish misc setup stuffs
51
+ Nyara.setup
52
+
53
+ # connect db in interactive shell
54
+ Nyara.config[:after_fork].call if ENV['NYARA_SHELL']
@@ -1,4 +1,3 @@
1
1
  require_relative "application"
2
2
 
3
- Nyara.setup
4
3
  Nyara.start_server
@@ -1,5 +1,14 @@
1
+ # config specific to development environment
1
2
  configure do
2
- set :port, 3000
3
+ # enable Nyara.logger
3
4
  set :logger, true
5
+
6
+ # serve static files in public
4
7
  set :public, 'public'
8
+
9
+ # auto reload app
10
+ set :watch, true
11
+
12
+ # auto re-compile assets
13
+ set :watch_assets, true
5
14
  end
@@ -1,9 +1,12 @@
1
+ # config specific to production environment
1
2
  configure do
2
- set :port, 3000
3
3
  ## worker number can be detected by CPU count
4
4
  # set :workers, 4
5
+
6
+ # enable Nyara.logger
5
7
  set :logger, true
6
8
 
9
+ # assets manifest is generated by `rake assets:build`
7
10
  set :manifest, (YAML.load_file Nyara.project_path 'public/manifest.yml')
8
11
 
9
12
  # todo after_fork
@@ -1,2 +1,3 @@
1
+ # config specific to test environment
1
2
  configure do
2
3
  end
@@ -209,7 +209,6 @@ module Nyara
209
209
  #
210
210
  # `[meth_obj, ext_without_dot]`
211
211
  def template path, locals={}
212
- raw_path = path
213
212
  if File.extname(path).empty?
214
213
  Dir.chdir @root do
215
214
  paths = Dir.glob("#{path}.{#@ext_list}")
@@ -220,16 +219,12 @@ module Nyara
220
219
  end
221
220
  end
222
221
 
223
- if path.blank?
224
- raise ArgumentError, "template '#{raw_path}' file not found in view dir."
225
- end
226
-
227
222
  meth = path2meth path
228
223
  ext = @meth2ext[meth]
229
224
  return [RENDER[meth], ext] if ext
230
225
 
231
226
  @meth2sig[meth] = locals.keys
232
- ext = on_modified path
227
+ ext = on_modified path if path
233
228
  raise "template not found or not valid in Tilt: #{path}" unless ext
234
229
  [RENDER[meth], ext]
235
230
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "nyara"
3
- s.version = "0.1.pre.1"
3
+ s.version = "0.1.pre.2"
4
4
  s.author = "Zete Lui"
5
5
  s.email = "nobody@example.com"
6
6
  s.homepage = "https://github.com/luikore/nyara"
@@ -14,7 +14,7 @@ Gem::Specification.new do |s|
14
14
  s.files += Dir.glob('spec/**/*')
15
15
  s.files += Dir.glob('ext/http-parser/{AUTHORS,CONTRIBUTIONS,LICENSE-MIT}')
16
16
  s.files += Dir.glob('ext/multipart-parser-c/README.md')
17
- s.files += Dir.glob('lib/nyara/templates/**/*') - %w[.DS_Store]
17
+ s.files += Dir.glob('lib/nyara/{optional_templates,templates}/**/*') - %w[.DS_Store]
18
18
  s.files.uniq!
19
19
  s.require_paths = ["lib"]
20
20
  s.executables << 'nyara'
@@ -23,7 +23,8 @@ end
23
23
  configure do
24
24
  set :port, 3004
25
25
  set :root, ENV['RELOAD_ROOT']
26
- set :app_files, 'reloadee.rb'
26
+ require project_path "reloadee.rb"
27
+ set :watch, true
27
28
  end
28
29
 
29
30
  get '/views' do
@@ -32,7 +32,7 @@ module Nyara
32
32
  Dir.chdir @tmp_dir do
33
33
  @stdout = capture(:stdout) do
34
34
  @command = Command.new
35
- @command.new(@app_name)
35
+ @command.new @app_name
36
36
  end
37
37
  end
38
38
  end
@@ -47,15 +47,15 @@ module Nyara
47
47
  end
48
48
 
49
49
  it "should copy same files into new dir" do
50
- des_files = filter_files Dir.glob(File.join @tmp_dir, @app_name, "**/*")
50
+ des_files = filter_files Dir.glob(File.join @tmp_dir, @app_name, "**/{*,.*}")
51
51
  assert_not_equal(des_files.count, 0)
52
- src_files = filter_files Dir.glob("#{@old_dir}/lib/nyara/templates/**/*")
52
+ src_files = filter_files Dir.glob("#{@old_dir}/lib/nyara/templates/**/{*,.*}")
53
53
  assert_equal(des_files.count, src_files.count)
54
54
  end
55
55
 
56
56
  def filter_files files
57
57
  files.select do |f|
58
- File.basename(f) !~ /\.DS_Store|\.gitignore|session\.key/
58
+ !(%w[.DS_Store session.key database.yml].include? File.basename f)
59
59
  end
60
60
  end
61
61
  end
@@ -128,17 +128,5 @@ module Nyara
128
128
  Config.init
129
129
  assert_nil Nyara.logger
130
130
  end
131
-
132
- it "auto load file" do
133
- Config.configure do
134
- set :env, 'test'
135
- set :root, File.join(__dir__, 'dummy')
136
- set :app_files, 'app/**/*.rb'
137
- end
138
- Config.init
139
- Nyara.load_app
140
- assert_equal true, Object.const_defined?('DummyModel')
141
- assert_equal true, Object.const_defined?('DummyController')
142
- end
143
131
  end
144
132
  end
@@ -0,0 +1,43 @@
1
+ require_relative "spec_helper"
2
+
3
+ describe Nyara do
4
+ context ".reconfig_with_command_line_options" do
5
+ before :each do
6
+ Nyara.config.reset
7
+ end
8
+
9
+ def config cmd_opts
10
+ Nyara.send :reconfig_with_command_line_options, cmd_opts
11
+ end
12
+
13
+ it "works" do
14
+ config %w'-p 1234 -d'
15
+ assert_equal 1234, Nyara.config['port']
16
+ assert_equal true, Nyara.config['daemon']
17
+ end
18
+
19
+ it "works without -d" do
20
+ config %w'-p 100'
21
+ assert_equal 100, Nyara.config['port']
22
+ assert_equal true, !Nyara.config['daemon']
23
+ end
24
+
25
+ it "raises for bad options" do
26
+ assert_raise RuntimeError do
27
+ config %w'xx'
28
+ end
29
+ end
30
+
31
+ it "recognizes --daemon and --port" do
32
+ config %w'--port=1245 --daemon'
33
+ assert_equal 1245, Nyara.config['port']
34
+ assert_equal true, Nyara.config['daemon']
35
+ end
36
+
37
+ it "raises for bad port" do
38
+ assert_raise RuntimeError do
39
+ config %w'--port 100000'
40
+ end
41
+ end
42
+ end
43
+ end
@@ -30,9 +30,9 @@ module Nyara
30
30
  Config.configure do
31
31
  reset
32
32
  set 'host', 'yavaeye.com'
33
- map '/', 'foo'
34
- map '/bar-prefix', 'foo_controller::bar'
35
- map '/baz-prefix', 'foo_controller::baz'
33
+ map '/', 'FooController'
34
+ map '/bar-prefix', 'FooController::BarController'
35
+ map '/baz-prefix', 'FooController::BazController'
36
36
  end
37
37
  Nyara.setup
38
38
  end
@@ -47,16 +47,16 @@ module Nyara
47
47
  assert_raise ArgumentError do
48
48
  render 'edit', nil, nil, {}
49
49
  end
50
-
50
+
51
51
  render 'edit.slim', nil, nil, {}
52
52
  assert_equal "<div>slim:edit</div>", @instance.result.gsub(/\s/, '')
53
53
  render 'edit.haml', nil, nil, {}
54
54
  assert_equal "<div>haml:edit</div>", @instance.result.gsub(/\s/, '')
55
55
  end
56
-
56
+
57
57
  it "raises error with template not found" do
58
- assert_raise ArgumentError do
59
- render 'asdgasdgasdg'
58
+ assert_raise RuntimeError do
59
+ render 'not-exist-template', nil, nil, {}
60
60
  end
61
61
  end
62
62
 
@@ -5,7 +5,7 @@ require "pry"
5
5
  configure do
6
6
  # set :env, 'production'
7
7
  # set :workers, 3
8
- map '/', 'my'
8
+ map '/', 'MyController'
9
9
  set :root, __dir__
10
10
  set :public, '/'
11
11
  # set :logger, false
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nyara
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.pre.1
4
+ version: 0.1.pre.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zete Lui
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-16 00:00:00.000000000 Z
11
+ date: 2013-08-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tilt
@@ -94,8 +94,7 @@ files:
94
94
  - lib/nyara/route.rb
95
95
  - lib/nyara/session.rb
96
96
  - lib/nyara/templates/app/controllers/application_controller.rb
97
- - lib/nyara/templates/app/controllers/welcome_controller.rb
98
- - lib/nyara/templates/config/application.rb
97
+ - lib/nyara/templates/app/controllers/home_controller.rb
99
98
  - lib/nyara/templates/config/boot.rb
100
99
  - lib/nyara/templates/config/development.rb
101
100
  - lib/nyara/templates/config/production.rb
@@ -125,6 +124,7 @@ files:
125
124
  - spec/integration_spec.rb
126
125
  - spec/mini_support_spec.rb
127
126
  - spec/multipart_spec.rb
127
+ - spec/nyara_spec.rb
128
128
  - spec/path_helper_spec.rb
129
129
  - spec/performance/escape.rb
130
130
  - spec/performance/layout_render.rb
@@ -140,9 +140,7 @@ files:
140
140
  - spec/spec_helper.rb
141
141
  - spec/url_encoded_spec.rb
142
142
  - spec/view_spec.rb
143
- - tools/bug.rb
144
143
  - tools/hello.rb
145
- - tools/memcheck.rb
146
144
  - ext/http-parser/http_parser.h
147
145
  - ext/inc/ary_intern.h
148
146
  - ext/inc/epoll.h
@@ -191,14 +189,17 @@ files:
191
189
  - ext/http-parser/CONTRIBUTIONS
192
190
  - ext/http-parser/LICENSE-MIT
193
191
  - ext/multipart-parser-c/README.md
192
+ - lib/nyara/optional_templates/activerecord.yml.erb
193
+ - lib/nyara/optional_templates/mongoid.yml.erb
194
+ - lib/nyara/templates/%gitignore%
194
195
  - lib/nyara/templates/app/assets/files/favicon.ico
195
196
  - lib/nyara/templates/app/assets/files/robots.txt
196
197
  - lib/nyara/templates/app/assets/scripts/app.coffee
197
198
  - lib/nyara/templates/app/assets/scripts/module-example.coffee
198
199
  - lib/nyara/templates/app/assets/styles/app.scss
199
- - lib/nyara/templates/app/views/layouts/application.erb.tt
200
- - lib/nyara/templates/app/views/welcome/index.erb
201
- - lib/nyara/templates/config/database.yml.tt
200
+ - lib/nyara/templates/app/views/home/index.%template_ext%.tt
201
+ - lib/nyara/templates/app/views/layouts/application.%template_ext%.tt
202
+ - lib/nyara/templates/config/application.rb.tt
202
203
  - lib/nyara/templates/Gemfile.tt
203
204
  - lib/nyara/templates/Linnerfile
204
205
  - lib/nyara/templates/Rakefile
@@ -1,5 +0,0 @@
1
- class WelcomeController < ApplicationController
2
- get '/' do
3
- render 'welcome/index'
4
- end
5
- end
@@ -1,12 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta http-equiv="Content-type" content="text/html; charset=utf-8">
5
- <title><%= @app_name %></title>
6
- <link type="text/css" rel="stylesheet" href="<%%= asset_path("/assets/app.css") %>">
7
- <script type="text/javascript" src="<%%= asset_path("/assets/app.js") %>"></script>
8
- </head>
9
- <body>
10
- <%%== yield %>
11
- </body>
12
- </html>
@@ -1 +0,0 @@
1
- Welcome to use Nyara.
@@ -1,38 +0,0 @@
1
- require 'bundler'
2
- Bundler.require :default, ENV['NYARA_ENV'] || 'development'
3
-
4
- configure do
5
- set :env, ENV['NYARA_ENV'] || 'development'
6
-
7
- set :views, 'app/views'
8
-
9
- set :assets, "app/assets"
10
-
11
- set :session, :name, '_aaa'
12
-
13
- ## If you've configured https with nginx:
14
- # set :session, :secure, true
15
-
16
- ## Default session expires when browser closes.
17
- ## If you need time-based expiration, 30 minutes for example:
18
- # set :session, :expires, 30 * 60
19
-
20
- set 'session', 'key', File.read(project_path 'config/session.key')
21
-
22
- # Routing
23
- map '/', 'welcome'
24
-
25
- # Application loading order
26
- set :app_files, %w|
27
- app/controllers/application_controller.rb
28
- app/{helpers,models,controllers}/**/*.rb
29
- |
30
-
31
- # Environment specific configure at last
32
- require_relative env
33
- end
34
-
35
- # Configure Mongoid
36
- Mongoid.load!(Nyara.config.project_path('config/database.yml'), Nyara.config.env)
37
-
38
- Nyara.load_app
@@ -1,53 +0,0 @@
1
- require_relative "../lib/nyara/nyara"
2
-
3
- configure do
4
- map '/posts', 'posts'
5
- end
6
-
7
- class ApplicationController < Nyara::Controller
8
-
9
- end
10
-
11
- class PostsController < ApplicationController
12
- meta '#index'
13
- get '/' do
14
- send_string 'index'
15
- end
16
-
17
- meta '#show'
18
- get '/%u' do |id|
19
- @post = Post.find(id)
20
- render "posts/show"
21
- end
22
-
23
- meta '#new'
24
- get '/new' do
25
- @post = Post.new
26
- render "posts/new"
27
- end
28
-
29
- meta '#create'
30
- post '/' do
31
- @post = Post.new(params[:post])
32
- if @post.save
33
- success "Post created."
34
- redirect_to 'posts#show', @post.id
35
- else
36
- render "posts/new"
37
- end
38
- end
39
-
40
- meta '#edit'
41
- get '/%u/edit' do
42
- @post = Post.find(id)
43
- render 'posts/edit'
44
- end
45
-
46
- meta '#update'
47
- post '/%u' do |id|
48
- @post = Post.find(id)
49
- end
50
- end
51
-
52
- Nyara.setup
53
- Nyara.start_server
@@ -1,33 +0,0 @@
1
- require_relative "../lib/nyara/nyara"
2
-
3
- module Nyara
4
- class SimpleController < Controller
5
- end
6
- end
7
-
8
- %w[on tag get post put delete patch options].each do |m|
9
- eval <<-RUBY
10
- def #{m} *xs, &blk
11
- Nyara::SimpleController.#{m} *xs, &blk
12
- end
13
- RUBY
14
- end
15
-
16
- configure do
17
- map '/', 'nyara::simple'
18
- end
19
-
20
- get '/' do
21
- send_string 'hello world'
22
- end
23
-
24
- get '/gc' do
25
- GC.stress = true
26
- end
27
-
28
- get '/ngc' do
29
- GC.stress = false
30
- end
31
-
32
- Nyara.setup
33
- Nyara.start_server