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

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.
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