renee 0.0.1

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.
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.libs.push "lib"
6
+ t.test_files = FileList[File.expand_path('../test/**/*_test.rb', __FILE__)]
7
+ t.verbose = true
8
+ end
@@ -0,0 +1,48 @@
1
+ class Blog
2
+ attr_reader :posts
3
+
4
+ def initialize
5
+ @posts = []
6
+ @post_id = 0
7
+ end
8
+
9
+ def new_post(title, contents)
10
+ @posts << Post.new(self, @post_id += 1, title, contents)
11
+ end
12
+
13
+ def find_post(id)
14
+ @posts.find{|p| p.id == id}
15
+ end
16
+
17
+ def delete_post(post)
18
+ @posts.delete(post)
19
+ end
20
+
21
+ class Post
22
+ attr_reader :id, :created_at, :updated_at
23
+ attr_accessor :title, :contents
24
+
25
+ def initialize(blog, id, title, contents)
26
+ @blog, @id, @title, @contents, @created_at = blog, id, title, contents, Time.new
27
+ @updated_at = @created_at
28
+ end
29
+
30
+ def touch!
31
+ @updated_at = Time.new
32
+ end
33
+
34
+ def title=(title)
35
+ touch!
36
+ @title = title
37
+ end
38
+
39
+ def contents=(contents)
40
+ touch!
41
+ @contents = contents
42
+ end
43
+
44
+ def delete!
45
+ @blog.delete_post(self)
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,40 @@
1
+ $: << File.expand_path("../../lib", File.dirname(__FILE__))
2
+ $: << File.dirname(__FILE__)
3
+ require 'renee'
4
+ require 'blog'
5
+ require 'json'
6
+
7
+ blog = Blog.new
8
+
9
+ run Renee {
10
+ @blog = blog
11
+
12
+ # find blog post and do things to it.
13
+ var Integer do |id|
14
+ @post = @blog.find_post(id)
15
+ halt 404 unless @post
16
+ path('edit') { render! 'edit' }
17
+
18
+ get { render! 'show' }
19
+ delete { @post.delete!; halt :ok }
20
+ put {
21
+ @post.title = request['title'] if request['title']
22
+ @post.contents = request['contents'] if request['contents']
23
+ halt :ok
24
+ }
25
+ end
26
+
27
+ post {
28
+ if request['title'] && request['contents']
29
+ @blog.new_post(request['title'], request['contents'])
30
+ halt :created
31
+ else
32
+ halt :bad_request
33
+ end
34
+ }
35
+
36
+ extension('json') { get { halt @blog.posts.map{ |p| {:contents => p.contents} }.to_json } }
37
+ no_extension { get { render! 'index' } }
38
+ }.setup {
39
+ views_path File.expand_path(File.dirname(__FILE__) + "/views")
40
+ }
@@ -0,0 +1 @@
1
+ Editing <%= @post.title %>
@@ -0,0 +1,18 @@
1
+ <% @blog.posts.each do |p| %>
2
+ <p>
3
+ Title:
4
+ <a href='/<%= p.id %>'><%= p.title %></a>
5
+ <br />
6
+ <%= p.contents %>
7
+ </p>
8
+ <% end%>
9
+
10
+ <% if @blog.posts.empty? %><p>No posts</p><% end %>
11
+
12
+ <br/>
13
+ <form action=/ method=post>
14
+ Title
15
+ <input name=title><br/>
16
+ <textarea name=contents></textarea><br/>
17
+ <input type=submit>
18
+ </form>
@@ -0,0 +1,5 @@
1
+ <h1><%= @post.title %></h1>
2
+
3
+ <p><%= @post.contents %></p>
4
+
5
+ <a href="/">See all posts</a>
data/lib/renee.rb ADDED
@@ -0,0 +1,33 @@
1
+ require 'renee-core'
2
+ require 'renee-render'
3
+
4
+ require 'renee/version'
5
+
6
+ class Renee
7
+ class RichCore < Renee::Core
8
+ def initialize(&blk)
9
+ super
10
+ end
11
+
12
+ def call(env)
13
+ application_class.new(settings, &application_block).call(env)
14
+ end
15
+ alias_method :[], :call
16
+
17
+ def application_class
18
+ @application_class ||= begin
19
+ app_cls = Class.new(Application)
20
+ settings.includes.each { |inc| app_cls.send(:include, inc) }
21
+ app_cls
22
+ end
23
+ end
24
+
25
+ class Application < Renee::Core::Application
26
+ include Renee::Render
27
+ end
28
+ end
29
+ end
30
+
31
+ def Renee(&blk)
32
+ Renee::RichCore.new(&blk)
33
+ end
@@ -0,0 +1,3 @@
1
+ class Renee
2
+ VERSION = "0.0.1"
3
+ end
data/renee.gemspec ADDED
@@ -0,0 +1,31 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "renee/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "renee"
7
+ s.version = Renee::VERSION
8
+ s.authors = ["Josh Hull", "Nathan Esquenazi", "Arthur Chiu"]
9
+ s.email = ["joshbuddy@gmail.com", "nesquena@gmail.com", "mr.arthur.chiu@gmail.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{The super-friendly web framework}
12
+ s.description = %q{The super-friendly web framework.}
13
+
14
+ s.rubyforge_project = "renee"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ # TODO fix these deps
22
+ %w[core render].each do |name|
23
+ s.add_runtime_dependency "renee-#{name}", "= #{Renee::VERSION}"
24
+ end
25
+ s.add_development_dependency 'minitest', "~> 2.6.1"
26
+ s.add_development_dependency 'rake'
27
+ s.add_development_dependency 'bundler', "~> 1.0.10"
28
+ s.add_development_dependency "rack-test", ">= 0.5.0"
29
+ s.add_development_dependency "haml", ">= 2.2.0"
30
+ s.add_development_dependency "json"
31
+ end
data/test/blog_test.rb ADDED
@@ -0,0 +1,78 @@
1
+ require File.expand_path('../test_helper', __FILE__)
2
+
3
+ describe "Blog example" do
4
+ before { @app = blog_app }
5
+
6
+ it "should respond to GET /" do
7
+ get('/')
8
+ assert_equal 200, response.status
9
+ assert_equal "
10
+ <p>No posts</p>
11
+ <br/>
12
+ <form action=/ method=post>
13
+ Title
14
+ <input name=title><br/>
15
+ <textarea name=contents></textarea><br/>
16
+ <input type=submit>
17
+ </form>", response.body
18
+ end
19
+
20
+ it "should allow a POST to /" do
21
+ post('/', :title => 'my title', :contents => 'hey hey hey')
22
+ assert_equal 201, response.status
23
+ get('/')
24
+ assert_equal 200, response.status
25
+ assert_equal " <p>
26
+ Title:
27
+ <a href='/1'>my title</a>
28
+ <br />
29
+ hey hey hey
30
+ </p>
31
+
32
+
33
+ <br/>
34
+ <form action=/ method=post>
35
+ Title
36
+ <input name=title><br/>
37
+ <textarea name=contents></textarea><br/>
38
+ <input type=submit>
39
+ </form>", response.body
40
+ end
41
+
42
+ it "should allow a PUT to /" do
43
+ post('/', :title => 'my title', :contents => 'hey hey hey')
44
+ put('/1', :title => 'my real title', :contents => 'hey hey hey')
45
+ assert_equal 200, response.status
46
+ get('/')
47
+ assert_equal 200, response.status
48
+ assert_equal " <p>
49
+ Title:
50
+ <a href='/1'>my real title</a>
51
+ <br />
52
+ hey hey hey
53
+ </p>
54
+
55
+
56
+ <br/>
57
+ <form action=/ method=post>
58
+ Title
59
+ <input name=title><br/>
60
+ <textarea name=contents></textarea><br/>
61
+ <input type=submit>
62
+ </form>", response.body
63
+ end
64
+
65
+ it "should allow a DELETE to /" do
66
+ post('/', :title => 'my title', :contents => 'hey hey hey')
67
+ assert_equal 201, response.status
68
+ get('/.json')
69
+ assert_equal 200, response.status
70
+ assert_equal "[{\"contents\":\"hey hey hey\"}]", response.body
71
+ delete('/1')
72
+ assert_equal 200, response.status
73
+ get('/.json')
74
+ assert_equal 200, response.status
75
+ assert_equal "[]", response.body
76
+ end
77
+
78
+ end
@@ -0,0 +1,57 @@
1
+ require 'rubygems'
2
+ gem 'minitest'
3
+ require 'minitest/autorun'
4
+ gem 'rack-test'
5
+ require 'rack/test'
6
+ $: << File.expand_path('../../../renee-core/lib', __FILE__)
7
+ $: << File.expand_path('../../../renee-render/lib', __FILE__)
8
+ $: << File.expand_path('../../lib', __FILE__)
9
+ require 'renee'
10
+
11
+ class ColoredIO
12
+ ESC = "\e["
13
+ NND = "#{ESC}0m"
14
+
15
+ def initialize(io)
16
+ @io = io
17
+ end
18
+
19
+ def print(o)
20
+ case o
21
+ when "."
22
+ @io.send(:print, "#{ESC}32m#{o}#{NND}")
23
+ when "E"
24
+ @io.send(:print, "#{ESC}33m#{o}#{NND}")
25
+ when "F"
26
+ @io.send(:print, "#{ESC}31m#{o}#{NND}")
27
+ else
28
+ @io.send(:print, o)
29
+ end
30
+ end
31
+
32
+ def puts(*o)
33
+ super
34
+ end
35
+ end
36
+
37
+ MiniTest::Unit.output = ColoredIO.new(MiniTest::Unit.output)
38
+
39
+ ## TEST HELPERS
40
+ class MiniTest::Spec
41
+ include Rack::Test::Methods
42
+
43
+ def default_views_path
44
+ File.dirname(__FILE__) + "/views"
45
+ end
46
+
47
+ def blog_app
48
+ file = File.join(File.dirname(__FILE__), '..', 'examples', 'blog', 'config.ru')
49
+ Rack::Lint.new(Rack::Builder.parse_file(file)[0])
50
+ end
51
+
52
+ def app
53
+ @app
54
+ end
55
+
56
+ alias :response :last_response
57
+ end
metadata ADDED
@@ -0,0 +1,204 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: renee
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Josh Hull
14
+ - Nathan Esquenazi
15
+ - Arthur Chiu
16
+ autorequire:
17
+ bindir: bin
18
+ cert_chain: []
19
+
20
+ date: 2011-10-15 00:00:00 Z
21
+ dependencies:
22
+ - !ruby/object:Gem::Dependency
23
+ version_requirements: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - "="
27
+ - !ruby/object:Gem::Version
28
+ hash: 29
29
+ segments:
30
+ - 0
31
+ - 0
32
+ - 1
33
+ version: 0.0.1
34
+ requirement: *id001
35
+ type: :runtime
36
+ prerelease: false
37
+ name: renee-core
38
+ - !ruby/object:Gem::Dependency
39
+ version_requirements: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - "="
43
+ - !ruby/object:Gem::Version
44
+ hash: 29
45
+ segments:
46
+ - 0
47
+ - 0
48
+ - 1
49
+ version: 0.0.1
50
+ requirement: *id002
51
+ type: :runtime
52
+ prerelease: false
53
+ name: renee-render
54
+ - !ruby/object:Gem::Dependency
55
+ version_requirements: &id003 !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ~>
59
+ - !ruby/object:Gem::Version
60
+ hash: 21
61
+ segments:
62
+ - 2
63
+ - 6
64
+ - 1
65
+ version: 2.6.1
66
+ requirement: *id003
67
+ type: :development
68
+ prerelease: false
69
+ name: minitest
70
+ - !ruby/object:Gem::Dependency
71
+ version_requirements: &id004 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ hash: 3
77
+ segments:
78
+ - 0
79
+ version: "0"
80
+ requirement: *id004
81
+ type: :development
82
+ prerelease: false
83
+ name: rake
84
+ - !ruby/object:Gem::Dependency
85
+ version_requirements: &id005 !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ~>
89
+ - !ruby/object:Gem::Version
90
+ hash: 3
91
+ segments:
92
+ - 1
93
+ - 0
94
+ - 10
95
+ version: 1.0.10
96
+ requirement: *id005
97
+ type: :development
98
+ prerelease: false
99
+ name: bundler
100
+ - !ruby/object:Gem::Dependency
101
+ version_requirements: &id006 !ruby/object:Gem::Requirement
102
+ none: false
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ hash: 11
107
+ segments:
108
+ - 0
109
+ - 5
110
+ - 0
111
+ version: 0.5.0
112
+ requirement: *id006
113
+ type: :development
114
+ prerelease: false
115
+ name: rack-test
116
+ - !ruby/object:Gem::Dependency
117
+ version_requirements: &id007 !ruby/object:Gem::Requirement
118
+ none: false
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ hash: 7
123
+ segments:
124
+ - 2
125
+ - 2
126
+ - 0
127
+ version: 2.2.0
128
+ requirement: *id007
129
+ type: :development
130
+ prerelease: false
131
+ name: haml
132
+ - !ruby/object:Gem::Dependency
133
+ version_requirements: &id008 !ruby/object:Gem::Requirement
134
+ none: false
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ hash: 3
139
+ segments:
140
+ - 0
141
+ version: "0"
142
+ requirement: *id008
143
+ type: :development
144
+ prerelease: false
145
+ name: json
146
+ description: The super-friendly web framework.
147
+ email:
148
+ - joshbuddy@gmail.com
149
+ - nesquena@gmail.com
150
+ - mr.arthur.chiu@gmail.com
151
+ executables: []
152
+
153
+ extensions: []
154
+
155
+ extra_rdoc_files: []
156
+
157
+ files:
158
+ - Rakefile
159
+ - examples/blog/blog.rb
160
+ - examples/blog/config.ru
161
+ - examples/blog/views/edit.erb
162
+ - examples/blog/views/index.erb
163
+ - examples/blog/views/show.erb
164
+ - lib/renee.rb
165
+ - lib/renee/version.rb
166
+ - renee.gemspec
167
+ - test/blog_test.rb
168
+ - test/test_helper.rb
169
+ homepage: ""
170
+ licenses: []
171
+
172
+ post_install_message:
173
+ rdoc_options: []
174
+
175
+ require_paths:
176
+ - lib
177
+ required_ruby_version: !ruby/object:Gem::Requirement
178
+ none: false
179
+ requirements:
180
+ - - ">="
181
+ - !ruby/object:Gem::Version
182
+ hash: 3
183
+ segments:
184
+ - 0
185
+ version: "0"
186
+ required_rubygems_version: !ruby/object:Gem::Requirement
187
+ none: false
188
+ requirements:
189
+ - - ">="
190
+ - !ruby/object:Gem::Version
191
+ hash: 3
192
+ segments:
193
+ - 0
194
+ version: "0"
195
+ requirements: []
196
+
197
+ rubyforge_project: renee
198
+ rubygems_version: 1.8.10
199
+ signing_key:
200
+ specification_version: 3
201
+ summary: The super-friendly web framework
202
+ test_files:
203
+ - test/blog_test.rb
204
+ - test/test_helper.rb