wbzyl-sinatra-math 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.
@@ -0,0 +1,4 @@
1
+ pkg
2
+ .\#*
3
+ *~
4
+ README.html
@@ -0,0 +1,178 @@
1
+ # Sinatra Math Menagerie
2
+
3
+ This gem contains four modular Sinatra applications:
4
+
5
+ * Sinatra::Pi
6
+ * Sinatra::Euler
7
+ * Sinatra::Sqrt2
8
+ * Sinatra::Phi
9
+
10
+ These applications can be used to play with:
11
+
12
+ * experiment with new and existing Rack Middleware
13
+ * combine modular Sinatra app with Rack::Builder
14
+ * embed one Rack application into another Rack application.
15
+
16
+ Build an install the gem with:
17
+
18
+ rake install
19
+
20
+
21
+ ## Examples
22
+
23
+ The directory `examples` contains several ready to run applications.
24
+ For example, run the *pi.ru* file with:
25
+
26
+ rackup pi.ru -p 3000
27
+
28
+ And see the result at:
29
+
30
+ http://localhost:3000
31
+
32
+ To get more digits input:
33
+
34
+ http://localhost:3000/?prec=256
35
+
36
+ Have a fun!
37
+
38
+
39
+ ### Playing with Rack::Builder\#map
40
+
41
+ `Rack::Builder#map` mounts a stack of rack application/middlewares the
42
+ specified path or URI and all the children paths under it.
43
+
44
+ # app.rb
45
+ require 'sinatra-math'
46
+ require 'rack/lobster'
47
+
48
+ App = Rack::Builder.new do
49
+ use Rack::ShowExceptions
50
+ use Rack::Lint
51
+ use Rack::CommonLogger
52
+
53
+ map '/math' do
54
+ map '/euler' do
55
+ run Sinatra::Euler.new
56
+ end
57
+
58
+ map '/pi' do
59
+ run Sinatra::Pi.new
60
+ end
61
+
62
+ map '/sqrt2' do
63
+ run Sinatra::Sqrt2.new
64
+ end
65
+
66
+ map '/phi' do
67
+ run Sinatra::Phi.new
68
+ end
69
+ end
70
+
71
+ map '/lobster' do
72
+ run Rack::Lobster.new
73
+ end
74
+
75
+ end
76
+
77
+ In *app.rb* we use nesting to mount `Sinatra::Euler` under '/math/euler',
78
+ `Sinatra::Pi` under '/math/pi' etc.
79
+ Additionaly we mount *rack/lobster.rb* under '/lobster':
80
+
81
+ Run *app.rb* with:
82
+
83
+ rackup app.rb -p 3000
84
+
85
+ and watch the results at:
86
+
87
+ http://localhost:3000/math/euler
88
+ http://localhost:3000/math/pi?prec=1024
89
+ etc.
90
+ http://localhost:3000/lobster
91
+
92
+ Alternatively, create this rackup file:
93
+
94
+ # rapp.ru
95
+ require 'app'
96
+ run App
97
+
98
+ and run it with:
99
+
100
+ rackup rapp.ru -s thin -p 3000
101
+
102
+ or
103
+
104
+ thin --rackup rapp.ru -p 3000 start
105
+
106
+ Note, the use of the *thin* server.
107
+
108
+ The same results can be obtained in two steps.
109
+ First, create *menagerie.rb* file:
110
+
111
+ # menagerie.rb
112
+ require 'sinatra-math'
113
+
114
+ Menagerie = Rack::Builder.new do
115
+ use Rack::ShowExceptions
116
+ use Rack::Lint
117
+ use Rack::CommonLogger
118
+
119
+ map '/euler' do
120
+ run Sinatra::Euler.new
121
+ end
122
+
123
+ map '/pi' do
124
+ run Sinatra::Pi.new
125
+ end
126
+
127
+ map '/sqrt2' do
128
+ run Sinatra::Sqrt2.new
129
+ end
130
+
131
+ map '/phi' do
132
+ run Sinatra::Phi.new
133
+ end
134
+ end
135
+
136
+ Next, create *mathlobster.rb* file:
137
+
138
+ # mathlobster.rb
139
+ require 'menagerie'
140
+ require 'rack/lobster'
141
+
142
+ Mathlobster = Rack::Builder.new do
143
+ map '/math' do
144
+ run Menagerie
145
+ end
146
+
147
+ map '/lobster' do
148
+ run Rack::Lobster.new
149
+ end
150
+ end
151
+
152
+ and run it with:
153
+
154
+ rackup mathlobster.rb -p 3000
155
+
156
+ Alternatively, create this rackup file:
157
+
158
+ # mathlobster.ru
159
+ require 'mathlobster'
160
+ run Mathlobster
161
+
162
+ and run it with:
163
+
164
+ rackup mathlobster.ru -s thin -p 3000
165
+
166
+ or
167
+
168
+ thin --rackup mathlobster.ru -p 3000 start
169
+
170
+
171
+ ### Playing with Rack Middleware
172
+
173
+ TODO
174
+
175
+
176
+ ### Mounting apps which include Datamapper, ActiveRecord..
177
+
178
+ TODO
@@ -0,0 +1,44 @@
1
+ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), '/lib')
2
+
3
+ require 'rake'
4
+ require 'rake/testtask'
5
+ require "rake/clean"
6
+
7
+ begin
8
+ require 'jeweler'
9
+ Jeweler::Tasks.new do |gem|
10
+
11
+ gem.name = "sinatra-math"
12
+ gem.summary = "Several modular Sinatra apps to play with and iteratively construct new Rack apps."
13
+ gem.email = "matwb@univ.gda.pl"
14
+ gem.homepage = "http://github.com/wbzyl/sinatra-math"
15
+ gem.authors = ["Wlodek Bzyl"]
16
+ gem.description = <<-EOF
17
+ This gem contains four modular Sinatra applications:
18
+ Pi, Euler, Sqrt2, Phi (golden ratio).
19
+
20
+ These applications can be used to play with:
21
+ * experiment with new and existing Rack Middleware
22
+ * combine modular Sinatra app with Rack::Builder
23
+ * embed one Rack application into another Rack application
24
+ EOF
25
+
26
+ gem.add_runtime_dependency 'sinatra', '>= 0.9.2'
27
+ gem.add_runtime_dependency 'rack', '>=1.0.0'
28
+
29
+ gem.add_development_dependency 'rack-test', '>=0.3.0'
30
+
31
+ # gem is a Gem::Specification
32
+ # refer to http://www.rubygems.org/read/chapter/20 for additional settings
33
+ end
34
+ rescue LoadError
35
+ puts "Jeweler not available."
36
+ puts "Install it with:"
37
+ puts " sudo gem install technicalpickles-jeweler -s http://gems.github.com"
38
+ end
39
+
40
+ Rake::TestTask.new(:test) do |t|
41
+ t.libs << 'lib' << 'test'
42
+ t.pattern = 'test/**/*_test.rb'
43
+ t.verbose = false
44
+ end
@@ -0,0 +1,4 @@
1
+ ---
2
+ :patch: 1
3
+ :major: 0
4
+ :minor: 0
@@ -0,0 +1,27 @@
1
+ require 'sinatra-math'
2
+ require 'rack/lobster'
3
+
4
+ module Sinatra
5
+ class Pi < Sinatra::Base
6
+ set :logging, true
7
+ end
8
+ # see sinatra-math.rb
9
+ class Sqrt2 < Sinatra::Base
10
+ set :app_file, "/usr/lib/ruby/gems/1.8/gems/sinatra-math-0.0.4/lib"
11
+ end
12
+ end
13
+
14
+ App = Rack::Builder.new do
15
+ map '/math' do
16
+ map '/pi' do
17
+ run Sinatra::Pi.new
18
+ end
19
+ map '/sqrt2' do
20
+ run Sinatra::Sqrt2.new
21
+ end
22
+ end
23
+
24
+ map '/lobster' do
25
+ run Rack::Lobster.new
26
+ end
27
+ end
@@ -0,0 +1,2 @@
1
+ require 'config'
2
+ run App
@@ -0,0 +1,27 @@
1
+ require 'sinatra-math'
2
+ require 'rack/lobster'
3
+
4
+ App = Rack::Builder.new do
5
+ map '/math' do
6
+ map '/euler' do
7
+ run Sinatra::Euler.new
8
+ end
9
+
10
+ map '/pi' do
11
+ run Sinatra::Pi.new
12
+ end
13
+
14
+ map '/sqrt2' do
15
+ run Sinatra::Sqrt2.new
16
+ end
17
+
18
+ map '/phi' do
19
+ run Sinatra::Phi.new
20
+ end
21
+ end
22
+
23
+ map '/lobster' do
24
+ run Rack::Lobster.new
25
+ end
26
+
27
+ end
@@ -0,0 +1,2 @@
1
+ require 'sinatra-math'
2
+ run Sinatra::Euler.new
@@ -0,0 +1,12 @@
1
+ require 'menagerie'
2
+ require 'rack/lobster'
3
+
4
+ Mathlobster = Rack::Builder.new do
5
+ map '/math' do
6
+ run Menagerie
7
+ end
8
+
9
+ map '/lobster' do
10
+ run Rack::Lobster.new
11
+ end
12
+ end
@@ -0,0 +1,2 @@
1
+ require 'mathlobster'
2
+ run Mathlobster
@@ -0,0 +1,28 @@
1
+ require 'sinatra-math'
2
+
3
+ # module Sinatra
4
+ # class Pi < Sinatra::Base
5
+ # set :logging, true
6
+ # end
7
+ # end
8
+
9
+ Menagerie = Rack::Builder.new do
10
+ use Rack::Lint
11
+
12
+ map '/euler' do
13
+ run Sinatra::Euler.new
14
+ end
15
+
16
+ map '/pi' do
17
+ use Rack::CommonLogger
18
+ run Sinatra::Pi.new
19
+ end
20
+
21
+ map '/sqrt2' do
22
+ run Sinatra::Sqrt2.new
23
+ end
24
+
25
+ map '/phi' do
26
+ run Sinatra::Phi.new
27
+ end
28
+ end
@@ -0,0 +1,2 @@
1
+ require 'sinatra-math'
2
+ run Sinatra::Phi.new
@@ -0,0 +1,2 @@
1
+ require 'sinatra-math'
2
+ run Sinatra::Pi.new
@@ -0,0 +1,3 @@
1
+ # app.ru
2
+ require 'app'
3
+ run App
@@ -0,0 +1,2 @@
1
+ require 'sinatra-math'
2
+ run Sinatra::Sqrt2.new
@@ -0,0 +1,26 @@
1
+ require 'sinatra/base'
2
+ require 'sinatra-math/pi'
3
+ require 'sinatra-math/euler'
4
+ require 'sinatra-math/phi'
5
+ require 'sinatra-math/sqrt2'
6
+
7
+ module Sinatra
8
+ class Pi < Sinatra::Base
9
+ set :app_file, __FILE__
10
+ set :static, true
11
+ end
12
+
13
+ class Euler < Sinatra::Base
14
+ set :app_file, __FILE__
15
+ end
16
+
17
+ class Phi < Sinatra::Base
18
+ set :static, true
19
+ end
20
+
21
+ class Sqrt2 < Sinatra::Base
22
+ set :views, Proc.new { File.join(root, "lib/views") }
23
+ set :public, Proc.new { File.join(root, "lib/public") }
24
+ set :static, true
25
+ end
26
+ end
@@ -0,0 +1,16 @@
1
+ require 'bigdecimal'
2
+ require 'bigdecimal/math'
3
+ include BigMath
4
+
5
+ module Sinatra
6
+ class Euler < Sinatra::Base
7
+
8
+ get '/?' do
9
+ prec = params[:prec].to_i
10
+ @euler = E(prec + 1).to_s("10F")
11
+ @cname = 'E'
12
+ erb :euler
13
+ end
14
+
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ require 'bigdecimal'
2
+ require 'bigdecimal/math'
3
+ include BigMath
4
+
5
+ module Sinatra
6
+ class Phi < Sinatra::Base
7
+
8
+ get '/?' do
9
+ prec = params[:prec].to_i
10
+ @phi = ((BigDecimal('5').sqrt(prec + 1) + 1) / 2).to_s("10F")
11
+ @cname = 'golden ratio'
12
+ erb :phi
13
+ end
14
+
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ require 'bigdecimal'
2
+ require 'bigdecimal/math'
3
+ include BigMath
4
+
5
+ module Sinatra
6
+ class Pi < Sinatra::Base
7
+
8
+ get '/?' do
9
+ prec = params[:prec].to_i
10
+ @pi = PI(prec + 1).to_s("10F")
11
+ @cname = 'PI'
12
+ erb :pi, :layout => :layout2
13
+ end
14
+
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ require 'bigdecimal'
2
+ require 'bigdecimal/math'
3
+ include BigMath
4
+
5
+ module Sinatra
6
+ class Sqrt2 < Sinatra::Base
7
+
8
+ get '/?' do
9
+ prec = params[:prec].to_i
10
+ @sqrt2 = BigDecimal('2').sqrt(prec + 1).to_s("10F")
11
+ @cname = 'square root of 2'
12
+ erb :sqrt2
13
+ end
14
+
15
+ end
16
+ end
@@ -0,0 +1,3 @@
1
+ <h2>Math <%= @cname %></h2>
2
+
3
+ <p><%= @euler %></p>
@@ -0,0 +1 @@
1
+ <h1>Math constants</h1>
@@ -0,0 +1,8 @@
1
+ <html>
2
+ <head>
3
+ <title>Math <%= @cname %></title>
4
+ </head>
5
+ <body>
6
+ <%= yield %>
7
+ </body>
8
+ </html>
@@ -0,0 +1,3 @@
1
+ <h2>Math <%= @cname %></h2>
2
+
3
+ <p><%= @phi %></p>
@@ -0,0 +1,3 @@
1
+ <h2>Math <%= @cname %></h2>
2
+
3
+ <p><%= @pi %></p>
@@ -0,0 +1,3 @@
1
+ <h2>Math <%= @cname %></h2>
2
+
3
+ <p><%= @sqrt2 %></p>
metadata ADDED
@@ -0,0 +1,109 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: wbzyl-sinatra-math
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Wlodek Bzyl
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-05-25 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: sinatra
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 0.9.2
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: rack
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.0.0
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: rack-test
37
+ type: :development
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 0.3.0
44
+ version:
45
+ description: "This gem contains four modular Sinatra applications: Pi, Euler, Sqrt2, Phi (golden ratio). These applications can be used to play with: * experiment with new and existing Rack Middleware * combine modular Sinatra app with Rack::Builder * embed one Rack application into another Rack application"
46
+ email: matwb@univ.gda.pl
47
+ executables: []
48
+
49
+ extensions: []
50
+
51
+ extra_rdoc_files:
52
+ - README.markdown
53
+ files:
54
+ - .gitignore
55
+ - README.markdown
56
+ - Rakefile
57
+ - VERSION.yml
58
+ - config.rb
59
+ - config.ru
60
+ - examples/app.rb
61
+ - examples/euler.ru
62
+ - examples/mathlobster.rb
63
+ - examples/mathlobster.ru
64
+ - examples/menagerie.rb
65
+ - examples/phi.ru
66
+ - examples/pi.ru
67
+ - examples/rapp.ru
68
+ - examples/sqrt2.ru
69
+ - lib/sinatra-math.rb
70
+ - lib/sinatra-math/euler.rb
71
+ - lib/sinatra-math/phi.rb
72
+ - lib/sinatra-math/pi.rb
73
+ - lib/sinatra-math/sqrt2.rb
74
+ - lib/views/euler.erb
75
+ - lib/views/index.erb
76
+ - lib/views/layout.erb
77
+ - lib/views/phi.erb
78
+ - lib/views/pi.erb
79
+ - lib/views/sqrt2.erb
80
+ has_rdoc: false
81
+ homepage: http://github.com/wbzyl/sinatra-math
82
+ post_install_message:
83
+ rdoc_options:
84
+ - --charset=UTF-8
85
+ require_paths:
86
+ - lib
87
+ required_ruby_version: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: "0"
92
+ version:
93
+ required_rubygems_version: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: "0"
98
+ version:
99
+ requirements: []
100
+
101
+ rubyforge_project:
102
+ rubygems_version: 1.2.0
103
+ signing_key:
104
+ specification_version: 3
105
+ summary: Several modular Sinatra apps to play with and iteratively construct new Rack apps.
106
+ test_files:
107
+ - examples/menagerie.rb
108
+ - examples/app.rb
109
+ - examples/mathlobster.rb