goofy 1.0.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 (85) hide show
  1. checksums.yaml +7 -0
  2. data/.gems +4 -0
  3. data/.gitignore +2 -0
  4. data/CHANGELOG +47 -0
  5. data/CONTRIBUTING +19 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE +23 -0
  8. data/README.md +67 -0
  9. data/app/.rspec +2 -0
  10. data/app/Gemfile +13 -0
  11. data/app/app/controllers/application_controller.rb +3 -0
  12. data/app/app/services/.keep +0 -0
  13. data/app/config.ru +4 -0
  14. data/app/config/environment.rb +9 -0
  15. data/app/config/initializers/.keep +0 -0
  16. data/app/config/routes.rb +7 -0
  17. data/app/config/settings.rb +0 -0
  18. data/app/spec/helpers.rb +2 -0
  19. data/app/spec/helpers/goofy.rb +11 -0
  20. data/app/spec/spec_helper.rb +107 -0
  21. data/benchmark/measure.rb +35 -0
  22. data/bin/check_its_goofy.rb +15 -0
  23. data/bin/goofy +61 -0
  24. data/bin/goofy_generator.rb +357 -0
  25. data/bin/goofy_instance_creator.rb +40 -0
  26. data/examples/config.ru +18 -0
  27. data/examples/measure.rb +17 -0
  28. data/examples/rack-response.ru +21 -0
  29. data/examples/views/home.mote +7 -0
  30. data/examples/views/layout.mote +11 -0
  31. data/goofy.gemspec +26 -0
  32. data/lib/goofy.rb +405 -0
  33. data/lib/goofy/capybara.rb +13 -0
  34. data/lib/goofy/controller.rb +14 -0
  35. data/lib/goofy/controller/base.rb +21 -0
  36. data/lib/goofy/controller/callbacks.rb +19 -0
  37. data/lib/goofy/render.rb +63 -0
  38. data/lib/goofy/router.rb +9 -0
  39. data/lib/goofy/safe.rb +23 -0
  40. data/lib/goofy/safe/csrf.rb +47 -0
  41. data/lib/goofy/safe/secure_headers.rb +40 -0
  42. data/lib/goofy/test.rb +11 -0
  43. data/makefile +4 -0
  44. data/test/accept.rb +32 -0
  45. data/test/captures.rb +162 -0
  46. data/test/composition.rb +69 -0
  47. data/test/controller.rb +29 -0
  48. data/test/cookie.rb +34 -0
  49. data/test/csrf.rb +139 -0
  50. data/test/extension.rb +21 -0
  51. data/test/helper.rb +11 -0
  52. data/test/host.rb +29 -0
  53. data/test/integration.rb +114 -0
  54. data/test/match.rb +86 -0
  55. data/test/middleware.rb +46 -0
  56. data/test/number.rb +36 -0
  57. data/test/on.rb +157 -0
  58. data/test/param.rb +66 -0
  59. data/test/path.rb +86 -0
  60. data/test/plugin.rb +68 -0
  61. data/test/rack.rb +22 -0
  62. data/test/redirect.rb +21 -0
  63. data/test/render.rb +128 -0
  64. data/test/root.rb +83 -0
  65. data/test/run.rb +23 -0
  66. data/test/safe.rb +74 -0
  67. data/test/segment.rb +45 -0
  68. data/test/session.rb +21 -0
  69. data/test/settings.rb +52 -0
  70. data/test/views/about.erb +1 -0
  71. data/test/views/about.str +1 -0
  72. data/test/views/content-yield.erb +1 -0
  73. data/test/views/custom/abs_path.mote +1 -0
  74. data/test/views/frag.mote +1 -0
  75. data/test/views/home.erb +2 -0
  76. data/test/views/home.mote +1 -0
  77. data/test/views/home.str +2 -0
  78. data/test/views/layout-alternative.erb +2 -0
  79. data/test/views/layout-yield.erb +3 -0
  80. data/test/views/layout.erb +2 -0
  81. data/test/views/layout.mote +2 -0
  82. data/test/views/layout.str +2 -0
  83. data/test/views/test.erb +1 -0
  84. data/test/with.rb +42 -0
  85. metadata +271 -0
@@ -0,0 +1,21 @@
1
+ require_relative "helper"
2
+
3
+ test do
4
+ Goofy.define do
5
+ on default do
6
+ begin
7
+ session
8
+ rescue Exception => e
9
+ res.write e.message
10
+ end
11
+ end
12
+ end
13
+
14
+ _, _, body = Goofy.call({})
15
+
16
+ body.each do |e|
17
+ assert e =~ /Goofy.use Rack::Session::Cookie/
18
+ end
19
+ end
20
+
21
+
@@ -0,0 +1,52 @@
1
+ require File.expand_path("helper", File.dirname(__FILE__))
2
+
3
+ test "settings contains request and response classes by default" do
4
+ assert_equal Goofy.settings[:req], Rack::Request
5
+ assert_equal Goofy.settings[:res], Goofy::Response
6
+ end
7
+
8
+ test "is inheritable and allows overriding" do
9
+ Goofy.settings[:foo] = "bar"
10
+
11
+ class Admin < Goofy; end
12
+
13
+ assert_equal "bar", Admin.settings[:foo]
14
+
15
+ Admin.settings[:foo] = "baz"
16
+
17
+ assert_equal "bar", Goofy.settings[:foo]
18
+ assert_equal "baz", Admin.settings[:foo]
19
+ end
20
+
21
+ test do
22
+ Goofy.settings[:hello] = "Hello World"
23
+
24
+ Goofy.define do
25
+ on default do
26
+ res.write settings[:hello]
27
+ end
28
+ end
29
+
30
+ _, _, resp = Goofy.call({ "PATH_INFO" => "/", "SCRIPT_NAME" => ""})
31
+
32
+ body = []
33
+
34
+ resp.each do |line|
35
+ body << line
36
+ end
37
+
38
+ assert_equal ["Hello World"], body
39
+ end
40
+
41
+ # The following tests the settings clone bug where
42
+ # we share the same reference. Deep cloning is the solution here.
43
+ Goofy.settings[:mote] ||= {}
44
+ Goofy.settings[:mote][:layout] ||= "layout"
45
+
46
+ class Login < Goofy
47
+ settings[:mote][:layout] = "layout/guest"
48
+ end
49
+
50
+ test do
51
+ assert Login.settings[:mote].object_id != Goofy.settings[:mote].object_id
52
+ end
@@ -0,0 +1 @@
1
+ <h1><%= title %></h1>
@@ -0,0 +1 @@
1
+ <h1>#{title}</h1>
@@ -0,0 +1 @@
1
+ This is the actual content.
@@ -0,0 +1 @@
1
+ <h1>Abs Path</h1>
@@ -0,0 +1 @@
1
+ <h1>{{ foo }}</h1>
@@ -0,0 +1,2 @@
1
+ <h1>Home</h1>
2
+ <p>Hello <%= name %></p>
@@ -0,0 +1 @@
1
+ <h1>Home</h1>
@@ -0,0 +1,2 @@
1
+ <h1>Home</h1>
2
+ <p>Hello #{name}</p>
@@ -0,0 +1,2 @@
1
+ <title>Alternative Layout: <%= title %></title>
2
+ <%= content %>
@@ -0,0 +1,3 @@
1
+ Header
2
+ <%= yield %>
3
+ Footer
@@ -0,0 +1,2 @@
1
+ <title>Goofy: <%= title %></title>
2
+ <%= content %>
@@ -0,0 +1,2 @@
1
+ <title>{{title}}</title>
2
+ {{ content }}
@@ -0,0 +1,2 @@
1
+ <title>Goofy: #{ title }</title>
2
+ #{ content }
@@ -0,0 +1 @@
1
+ Displaying {{ i }}
@@ -0,0 +1,42 @@
1
+ require_relative "helper"
2
+
3
+ test do
4
+ class UserPhotos < Goofy
5
+ define do
6
+ on root do
7
+ res.write "uid: %d" % vars[:user_id]
8
+ res.write "site: %s" % vars[:site]
9
+ end
10
+ end
11
+ end
12
+
13
+ class Photos < Goofy
14
+ define do
15
+ on ":id/photos" do |id|
16
+ with user_id: id do
17
+ _, _, body = UserPhotos.call(req.env)
18
+
19
+ body.each do |line|
20
+ res.write line
21
+ end
22
+ end
23
+
24
+ res.write vars.inspect
25
+ end
26
+ end
27
+ end
28
+
29
+ Goofy.define do
30
+ on "users" do
31
+ with user_id: "default", site: "main" do
32
+ run Photos
33
+ end
34
+ end
35
+ end
36
+
37
+ _, _, body = Goofy.call({ "PATH_INFO" => "/users/1001/photos",
38
+ "SCRIPT_NAME" => "" })
39
+
40
+ assert_response body, ["uid: 1001", "site: main",
41
+ '{:user_id=>"default", :site=>"main"}']
42
+ end
metadata ADDED
@@ -0,0 +1,271 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: goofy
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Ehsan Yousefi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-02-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rack
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 1.6.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 1.6.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: prong
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: require_all
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: psych
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: wisper
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: racksh
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: shotgun
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: cutest
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rack-test
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: tilt
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ description: Goofy is a microframework for web applications(heavily based on Cuba).
154
+ email:
155
+ - ehsan.yousefi@live.com
156
+ executables:
157
+ - check_its_goofy.rb
158
+ - goofy
159
+ - goofy_generator.rb
160
+ - goofy_instance_creator.rb
161
+ extensions: []
162
+ extra_rdoc_files: []
163
+ files:
164
+ - ".gems"
165
+ - ".gitignore"
166
+ - CHANGELOG
167
+ - CONTRIBUTING
168
+ - Gemfile
169
+ - LICENSE
170
+ - README.md
171
+ - app/.rspec
172
+ - app/Gemfile
173
+ - app/app/controllers/application_controller.rb
174
+ - app/app/services/.keep
175
+ - app/config.ru
176
+ - app/config/environment.rb
177
+ - app/config/initializers/.keep
178
+ - app/config/routes.rb
179
+ - app/config/settings.rb
180
+ - app/spec/helpers.rb
181
+ - app/spec/helpers/goofy.rb
182
+ - app/spec/spec_helper.rb
183
+ - benchmark/measure.rb
184
+ - bin/check_its_goofy.rb
185
+ - bin/goofy
186
+ - bin/goofy_generator.rb
187
+ - bin/goofy_instance_creator.rb
188
+ - examples/config.ru
189
+ - examples/measure.rb
190
+ - examples/rack-response.ru
191
+ - examples/views/home.mote
192
+ - examples/views/layout.mote
193
+ - goofy.gemspec
194
+ - lib/goofy.rb
195
+ - lib/goofy/capybara.rb
196
+ - lib/goofy/controller.rb
197
+ - lib/goofy/controller/base.rb
198
+ - lib/goofy/controller/callbacks.rb
199
+ - lib/goofy/render.rb
200
+ - lib/goofy/router.rb
201
+ - lib/goofy/safe.rb
202
+ - lib/goofy/safe/csrf.rb
203
+ - lib/goofy/safe/secure_headers.rb
204
+ - lib/goofy/test.rb
205
+ - makefile
206
+ - test/accept.rb
207
+ - test/captures.rb
208
+ - test/composition.rb
209
+ - test/controller.rb
210
+ - test/cookie.rb
211
+ - test/csrf.rb
212
+ - test/extension.rb
213
+ - test/helper.rb
214
+ - test/host.rb
215
+ - test/integration.rb
216
+ - test/match.rb
217
+ - test/middleware.rb
218
+ - test/number.rb
219
+ - test/on.rb
220
+ - test/param.rb
221
+ - test/path.rb
222
+ - test/plugin.rb
223
+ - test/rack.rb
224
+ - test/redirect.rb
225
+ - test/render.rb
226
+ - test/root.rb
227
+ - test/run.rb
228
+ - test/safe.rb
229
+ - test/segment.rb
230
+ - test/session.rb
231
+ - test/settings.rb
232
+ - test/views/about.erb
233
+ - test/views/about.str
234
+ - test/views/content-yield.erb
235
+ - test/views/custom/abs_path.mote
236
+ - test/views/frag.mote
237
+ - test/views/home.erb
238
+ - test/views/home.mote
239
+ - test/views/home.str
240
+ - test/views/layout-alternative.erb
241
+ - test/views/layout-yield.erb
242
+ - test/views/layout.erb
243
+ - test/views/layout.mote
244
+ - test/views/layout.str
245
+ - test/views/test.erb
246
+ - test/with.rb
247
+ homepage: https://github.com/EhsanYousefi/goofy
248
+ licenses:
249
+ - MIT
250
+ metadata: {}
251
+ post_install_message:
252
+ rdoc_options: []
253
+ require_paths:
254
+ - lib
255
+ required_ruby_version: !ruby/object:Gem::Requirement
256
+ requirements:
257
+ - - ">="
258
+ - !ruby/object:Gem::Version
259
+ version: '0'
260
+ required_rubygems_version: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - ">="
263
+ - !ruby/object:Gem::Version
264
+ version: '0'
265
+ requirements: []
266
+ rubyforge_project:
267
+ rubygems_version: 2.4.5.1
268
+ signing_key:
269
+ specification_version: 4
270
+ summary: Microframework for web applications
271
+ test_files: []