camping 2.1.532 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +72 -53
  3. data/Rakefile +25 -20
  4. data/bin/camping +1 -0
  5. data/book/01_introduction.md +6 -6
  6. data/book/02_getting_started.md +348 -267
  7. data/book/03_more_about_controllers.md +124 -0
  8. data/book/04_more_about_views.md +118 -0
  9. data/book/05_more_about_markaby.md +173 -0
  10. data/book/06_more_about_models.md +58 -0
  11. data/book/06_rules_of_thumb.md +143 -0
  12. data/book/07_philosophy.md +23 -0
  13. data/book/08_publishing_an_app.md +118 -0
  14. data/book/09_upgrade_notes.md +96 -0
  15. data/book/10_middleware.md +69 -0
  16. data/book/11_gear.md +50 -0
  17. data/examples/blog.rb +38 -38
  18. data/lib/camping/ar.rb +20 -5
  19. data/lib/camping/commands.rb +388 -0
  20. data/lib/camping/gear/filters.rb +48 -0
  21. data/lib/camping/gear/inspection.rb +32 -0
  22. data/lib/camping/gear/kuddly.rb +178 -0
  23. data/lib/camping/gear/nancy.rb +170 -0
  24. data/lib/camping/loads.rb +15 -0
  25. data/lib/camping/mab.rb +1 -1
  26. data/lib/camping/reloader.rb +22 -17
  27. data/lib/camping/server.rb +145 -70
  28. data/lib/camping/session.rb +8 -5
  29. data/lib/camping/template.rb +1 -2
  30. data/lib/camping/tools.rb +43 -0
  31. data/lib/camping/version.rb +6 -0
  32. data/lib/camping-unabridged.rb +360 -133
  33. data/lib/camping.rb +78 -47
  34. data/lib/campingtrip.md +341 -0
  35. data/test/app_camping_gear.rb +121 -0
  36. data/test/app_camping_tools.rb +1 -0
  37. data/test/app_config.rb +30 -0
  38. data/test/app_cookies.rb +1 -1
  39. data/test/app_file.rb +3 -3
  40. data/test/app_goes_meta.rb +23 -0
  41. data/test/app_inception.rb +39 -0
  42. data/test/app_markup.rb +5 -20
  43. data/test/app_migrations.rb +16 -0
  44. data/test/app_partials.rb +1 -1
  45. data/test/app_prefixed.rb +88 -0
  46. data/test/app_reloader.rb +1 -2
  47. data/test/app_route_generating.rb +69 -2
  48. data/test/app_sessions.rb +24 -2
  49. data/test/app_simple.rb +18 -18
  50. data/test/apps/migrations.rb +82 -82
  51. data/test/apps/misc.rb +1 -1
  52. data/test/gear/gear_nancy.rb +129 -0
  53. data/test/test_helper.rb +69 -12
  54. metadata +152 -92
  55. data/CHANGELOG +0 -145
  56. data/book/51_upgrading.md +0 -110
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: '052823190781b546bd66ebc9b1e2a164f865d9ad458bb22d81ce44b283644765'
4
+ data.tar.gz: 4508bee443828152aaa80195e8444a69dcce31fd4d29327b1cab0fa33956d263
5
+ SHA512:
6
+ metadata.gz: 8601001442164208e68d09f7d3f03f966c9a421bb4ad0e6b52358557732e785ec8ee838e3a951f07f1b6d021197bdcc5eb7b395ae8eba5f328fa589324cbad10
7
+ data.tar.gz: 061ff21f2a306316d99dfc601a3581f940bffdda253904ffbbe60a283fa43a3c7f876ddb3ef3e4d19ab96006437af9575056e52dbfa663ec262c948854d01213
data/README.md CHANGED
@@ -1,96 +1,115 @@
1
- [![Build Status](https://secure.travis-ci.org/camping/camping.png)](http://travis-ci.org/camping/camping)
1
+ ![Build Status](https://github.com/camping/camping/actions/workflows/ruby.yml/badge.svg)
2
2
 
3
- #Camping, a Microframework
3
+ # Camping, a Microframework
4
4
 
5
- Camping is a web framework which consistently stays at less than 4kB of code.
5
+ Camping is a micro web framework which stays as small as possible.
6
6
  You can probably view the complete source code on a single page. But, you
7
- know, it's so small that, if you think about it, what can it really do?
7
+ know, it's so small that, if you think about it, what can it really do? Apparently
8
+ it can do a lot. It's pretty swell.
8
9
 
9
10
  The idea here is to store a complete fledgling web application in a single
10
11
  file like many small CGIs. But to organize it as a Model-View-Controller
11
- application like Rails does. You can then easily move it to Rails once you've
12
- got it going.
12
+ application. And with time, you can move your Models, Views, and Controllers into
13
+ other files as your app grows.
13
14
 
14
- ##A Camping Skeleton
15
+ Camping supports multiple *apps*, capsuled code that runs together. Each app can
16
+ have independent models, routes, and controllers.
17
+
18
+ Pack your gear when you go Camping! With a simple plugin system, Camping is easily
19
+ extensible. Add all sorts of useful and silly things.
20
+
21
+ ## A Camping Skeleton
15
22
 
16
23
  A skeletal Camping blog could look like this:
17
24
 
18
- require 'camping'
19
-
20
- Camping.goes :Blog
25
+ ```ruby
26
+ require 'camping'
21
27
 
22
- module Blog::Models
23
- class Post < Base; belongs_to :user; end
24
- class Comment < Base; belongs_to :user; end
25
- class User < Base; end
26
- end
28
+ Camping.goes :Blog
27
29
 
28
- module Blog::Controllers
29
- class Index
30
- def get
31
- @posts = Post.find :all
32
- render :index
33
- end
34
- end
35
- end
30
+ module Blog::Models
31
+ class Post < Base; belongs_to :user; end
32
+ class Comment < Base; belongs_to :user; end
33
+ class User < Base; end
34
+ end
36
35
 
37
- module Blog::Views
38
- def layout
39
- html do
40
- head { title "My Blog" }
41
- body do
42
- h1 "My Blog"
43
- self << yield
44
- end
45
- end
36
+ module Blog::Controllers
37
+ class Index
38
+ def get
39
+ @posts = Post.find :all
40
+ render :index
41
+ end
42
+ end
43
+ end
44
+
45
+ module Blog::Views
46
+ def layout
47
+ html do
48
+ head { title "My Blog" }
49
+ body do
50
+ h1 "My Blog"
51
+ self << yield
46
52
  end
53
+ end
54
+ end
47
55
 
48
- def index
49
- @posts.each do |post|
50
- h1 post.title
51
- end
52
- end
56
+ def index
57
+ @posts.each do |post|
58
+ h1 post.title
53
59
  end
54
-
55
- ##Installation
60
+ end
61
+ end
62
+ ```
63
+
64
+ ## Installation
56
65
 
57
66
  Interested yet? Luckily it's quite easy to install Camping. We'll be using
58
67
  a tool called RubyGems, so if you don't have that installed yet, go grab it!
59
68
  Once that's sorted out, open up a Terminal or Command Line and enter:
60
69
 
61
- gem install camping
70
+ ```
71
+ gem install camping
72
+ ```
62
73
 
63
- Even better, install the Camping Omnibus, a full package of recommended libs:
74
+ ~~Even better, install the Camping Omnibus, a full package of recommended libs:~~ Camping Omnibus will return for summer vacation.
64
75
 
65
- gem install camping-omnibus --source http://gems.judofyr.net
76
+ ```
77
+ gem install camping-omnibus
78
+ ```
66
79
 
67
80
  If not, you should be aware of that Camping itself only depends on
68
- [Rack](http://rack.rubyforge.org), and if you're going to use the views you also
69
- need to install **[markaby](http://markaby.github.com/)**, and if you're going to use the database you need
81
+ [Rack](https://github.com/rack/rack), and if you're going to use the views you also
82
+ need to install **[markaby](https://github.com/markaby/markaby)**, and if you're going to use the database you need
70
83
  **activerecord** as well.
71
84
 
72
- gem install markaby
73
- gem install activerecord
74
-
75
- ##Learning
85
+ ```
86
+ gem install markaby
87
+ gem install activerecord
88
+ ```
76
89
 
77
- First of all, you should read [the first chapters](camping/blob/master/book/01_introduction.md)
90
+ ## Learning
91
+
92
+ First of all, you should read [the first chapters](/book/01_introduction.md)
78
93
  of The Camping Book. It should hopefully get you started pretty quick. While
79
94
  you're doing that, you should be aware of the _reference_ which contains
80
95
  documentation for all the different parts of Camping.
81
96
 
82
- [The wiki](http://wiki.github.com/camping/camping) is the place for all tiny,
97
+ [The wiki](https://github.com/camping/camping/wiki) is the place for all tiny,
83
98
  useful tricks that we've collected over the years. Don't be afraid to share
84
99
  your own discoveries; the more, the better!
85
100
 
86
- And if there's anything you're wondering about, don't be shy, but rather
101
+ And if there's anything you're wondering about, don't be shy, but rather
87
102
  subscribe to [the mailing list](http://rubyforge.org/mailman/listinfo/camping-list)
88
103
  and ask there. We also have an IRC channel over at Freenode, so if you feel
89
104
  like chatting with us, you should join [#camping @ irc.freenode.net](http://java.freenode.net/?channel=camping).
90
105
 
91
- ##Authors
106
+ ## Running Tests
107
+
108
+ Tests should be run using bundler and rake: `bundle exec rake`.
109
+
110
+ ## Authors
92
111
 
93
112
  Camping was originally crafted by [why the lucky stiff](http://en.wikipedia.org/wiki/Why_the_lucky_stiff),
94
113
  but is now maintained by the _community_. This simply means that if we like your
95
114
  patch, it will be applied. Everything is managed through [the mailing list](http://rubyforge.org/mailman/listinfo/camping-list),
96
- so just subscribe and you can instantly take a part in shaping Camping.
115
+ so just subscribe and you can instantly take part in shaping Camping.
data/Rakefile CHANGED
@@ -44,17 +44,17 @@ else
44
44
  require 'rdoc/generator/singledarkfish'
45
45
  rdoc.options += ['-f', 'singledarkfish', *RDOC_OPTS]
46
46
  rdoc.template = "flipbook"
47
-
47
+
48
48
  rdoc.rdoc_dir = 'doc'
49
49
  rdoc.title = "Camping, a Microframework"
50
50
  rdoc.rdoc_files.add ['README', 'lib/camping-unabridged.rb', 'lib/camping/**/*.rb', 'book/*']
51
51
  end
52
52
  end
53
53
 
54
-
54
+
55
55
  task :rubygems_docs do
56
56
  require 'rubygems/doc_manager'
57
-
57
+
58
58
  def spec.installation_path; '.' end
59
59
  def spec.full_gem_path; '.' end
60
60
  manager = Gem::DocManager.new(spec)
@@ -67,26 +67,29 @@ task :package => :clean
67
67
  ## Tests
68
68
  Rake::TestTask.new(:test) do |t|
69
69
  t.libs << "test"
70
- t.test_files = FileList['test/app_*.rb']
70
+ t.test_files = FileList['test/app_*.rb', 'test/gear/gear_*.rb']
71
71
  end
72
72
 
73
73
  ## Diff
74
74
  desc "Compare camping and camping-unabridged"
75
75
  task :diff do
76
- require 'ruby2ruby'
77
- require 'ruby_parser'
76
+ require 'parser/current'
77
+ require 'unparser'
78
+ require 'pp'
78
79
  u = Tempfile.new('unabridged')
79
80
  m = Tempfile.new('mural')
80
-
81
- u << Ruby2Ruby.new.process(RubyParser.new.parse(File.read("lib/camping.rb")))
82
- mtext = Ruby2Ruby.new.process(RubyParser.new.parse(File.read("lib/camping-unabridged.rb")))
83
- m << mtext.gsub(/^\s*#.*\n/, '')
84
-
81
+
82
+ usexp = Parser::CurrentRuby.parse(File.read("lib/camping-unabridged.rb"))
83
+ msexp = Parser::CurrentRuby.parse(File.read("lib/camping.rb"))
84
+
85
+ u << Unparser.unparse(usexp)
86
+ m << Unparser.unparse(msexp)
87
+
85
88
  u.flush
86
89
  m.flush
87
-
90
+
88
91
  sh "diff -u #{u.path} #{m.path} | less"
89
-
92
+
90
93
  u.delete
91
94
  m.delete
92
95
  end
@@ -107,23 +110,25 @@ namespace :check do
107
110
  require 'ruby_parser'
108
111
  u = RubyParser.new.parse(File.read("lib/camping-unabridged.rb"))
109
112
  m = RubyParser.new.parse(File.read("lib/camping.rb"))
110
-
113
+
111
114
  u.reject! do |sexp|
112
115
  sexp.is_a?(Sexp) and sexp[1] == s(:gvar, :$LOADED_FEATURES)
113
116
  end
114
-
117
+
115
118
  unless u == m
116
119
  STDERR.puts "camping.rb and camping-unabridged.rb are not synchronized."
117
120
  error = true
121
+ else
122
+ puts "✅ synchronized....."
118
123
  end
119
124
  end
120
125
 
121
- SIZE_LIMIT = 4096
126
+ SIZE_LIMIT = 6144
122
127
  desc "Compare camping sizes to unabridged"
123
128
  task :size do
124
129
  FileList["lib/camping*.rb"].each do |path|
125
130
  s = File.size(path)
126
- puts "%21s : % 6d % 4d%" % [File.basename(path), s, (100 * s / SIZE_LIMIT)]
131
+ puts "%21s : % 6d % 4d%%" % [File.basename(path), s, (100 * s / SIZE_LIMIT)]
127
132
  end
128
133
  if File.size("lib/camping.rb") > SIZE_LIMIT
129
134
  STDERR.puts "lib/camping.rb: file is too big (> #{SIZE_LIMIT})"
@@ -131,18 +136,18 @@ namespace :check do
131
136
  end
132
137
  end
133
138
 
134
- desc "Verify that line lenght doesn't exceed 80 chars for camping.rb"
139
+ desc "Verify that line length doesn't exceed 80 (120) chars for camping.rb"
135
140
  task :lines do
136
141
  i = 1
137
142
  File.open("lib/camping.rb").each_line do |line|
138
- if line.size > 81 # 1 added for \n
143
+ if line.size > 121 # 1 added for \n
139
144
  error = true
140
145
  STDERR.puts "lib/camping.rb:#{i}: line too long (#{line[-10..-1].inspect})"
141
146
  end
142
147
  i += 1
143
148
  end
144
149
  end
145
-
150
+
146
151
  task :exit do
147
152
  exit 1 if error
148
153
  end
data/bin/camping CHANGED
@@ -3,6 +3,7 @@
3
3
  $:.unshift File.dirname(__FILE__) + "/../lib"
4
4
 
5
5
  require 'camping'
6
+ # require 'camping-unabridged' # comment out the above line and uncomment this line to run camping unabridged with all sorts of stuff in it.
6
7
  require 'camping/server'
7
8
 
8
9
  begin
@@ -1,10 +1,10 @@
1
- #Introduction
1
+ # Introduction
2
2
 
3
- Camping is a small web framework, less than 4k, a little white blood cell in
4
- the vein of Rails. This little book will start with a tutorial which takes
3
+ Camping is a small, micro web framework, less than 5k, a little white blood cell in
4
+ the vein of Ruby. This little book will start with a tutorial which takes
5
5
  about fifteen minutes - by the end you should have a little Camping site up.
6
- The following chapters will eventually go deeper into how both Camping, HTTP
7
- and Rack works.
6
+ The following chapters will eventually go deeper into how Camping, HTTP and
7
+ Rack work.
8
8
 
9
9
  ("Eventually", because these chapters are not written yet. This book is
10
10
  currently a very much work in progress, and we'll be very grateful if you want
@@ -14,6 +14,6 @@ If you at any moment need some help or have any questions or comments, we
14
14
  highly recommend [the mailing list](http://rubyforge.org/mailman/listinfo/camping-list)
15
15
  which got plenty of nice people willing to help. We also have an IRC-channel
16
16
  at [#camping @ irc.freenode.net](http://java.freenode.net/?channel=camping)
17
- if you're into that sort of things.
17
+ if you're into that sort of thing.
18
18
 
19
19
  Enough talk. Ready? Let's ["get started"](02_getting_started.md).