rango 0.2.1.pre → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/rango/contrib/pagination/adapters/datamapper.rb +17 -21
- data/lib/rango/controller.rb +1 -13
- data/lib/rango/mixins/message.rb +22 -17
- data/lib/rango/templates/helpers.rb +4 -8
- metadata +7 -6
- data/lib/rango/mailer.rb +0 -48
@@ -2,28 +2,24 @@
|
|
2
2
|
|
3
3
|
require "dm-aggregates"
|
4
4
|
|
5
|
-
module
|
6
|
-
module
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
self.all(options.merge!(offset: offset, limit: page.per_page))
|
17
|
-
end
|
5
|
+
module DataMapper
|
6
|
+
module Model
|
7
|
+
# @since 0.0.2
|
8
|
+
# @example Post.paginate(page, order: [:updated_at.desc])
|
9
|
+
def paginate(pagenum = 1, options = Hash.new)
|
10
|
+
pagenum = 1 if pagenum.nil?
|
11
|
+
page = self.page(pagenum.to_i, options)
|
12
|
+
Page.current = page
|
13
|
+
offset = page.number(:db) * page.per_page
|
14
|
+
self.all(options.merge!(offset: offset, limit: page.per_page))
|
15
|
+
end
|
18
16
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
end
|
26
|
-
end
|
17
|
+
# @since 0.0.2
|
18
|
+
def page(current, options = Hash.new)
|
19
|
+
per_page = defined?(PER_PAGE) ? PER_PAGE : 10
|
20
|
+
# the count options are very important
|
21
|
+
# Product.count vs. Product.count(online: true)
|
22
|
+
Page.new(current: current, count: self.count(options), per_page: per_page)
|
27
23
|
end
|
28
24
|
end
|
29
25
|
end
|
data/lib/rango/controller.rb
CHANGED
@@ -53,8 +53,6 @@ module Rango
|
|
53
53
|
self.run_action
|
54
54
|
#self.response.finish # do we need this?
|
55
55
|
[response.status, response.headers, [response.body]] # this way we got real body rather than response object
|
56
|
-
rescue Redirection => redirection
|
57
|
-
redirection.to_response
|
58
56
|
rescue HttpError => exception
|
59
57
|
self.rescue_http_error(exception)
|
60
58
|
end
|
@@ -68,22 +66,12 @@ module Rango
|
|
68
66
|
def_delegators :response, :status, :status=
|
69
67
|
def_delegators :response, :headers, :headers=
|
70
68
|
|
71
|
-
# absolute_uri "http://google.com" => "http://google.com"
|
72
|
-
# absolute_uri "/products" => "http://localhost:4000/products"
|
73
|
-
def absolute_uri(path)
|
74
|
-
if path.match(/^https?:\/{2}/)
|
75
|
-
path
|
76
|
-
else
|
77
|
-
(request.base_url.chomp("/") + path).chomp("/")
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
69
|
# @since 0.0.2
|
82
70
|
# @version 0.2.1
|
83
71
|
# @return [String] Escaped URL (which is RFC recommendation)
|
84
72
|
def redirect(location, status = 301)
|
85
73
|
if (300..399).include?(status)
|
86
|
-
exception = Redirection.new(
|
74
|
+
exception = Redirection.new(location)
|
87
75
|
exception.status = status
|
88
76
|
raise exception
|
89
77
|
else
|
data/lib/rango/mixins/message.rb
CHANGED
@@ -19,23 +19,6 @@ module Rango
|
|
19
19
|
def context
|
20
20
|
super.merge!(message: self.message)
|
21
21
|
end
|
22
|
-
|
23
|
-
def redirect(uri, status = 301, options = Hash.new)
|
24
|
-
status, options = 301, status if status.is_a?(Hash)
|
25
|
-
if options.respond_to?(:inject)
|
26
|
-
# redirect "/post", error: "Try again"
|
27
|
-
# ?msg[error]="Try again"
|
28
|
-
uri = options.inject(uri) do |uri, pair|
|
29
|
-
type, message = pair
|
30
|
-
uri + "?msg[#{type}]=#{message}"
|
31
|
-
end
|
32
|
-
else
|
33
|
-
# redirect "/post", "Try again"
|
34
|
-
# ?msg="Try again"
|
35
|
-
uri.concat("?msg=#{options}")
|
36
|
-
end
|
37
|
-
super(uri, status)
|
38
|
-
end
|
39
22
|
end
|
40
23
|
end
|
41
24
|
else
|
@@ -46,5 +29,27 @@ module Rango
|
|
46
29
|
def message
|
47
30
|
@message ||= (request.GET[:msg] || Hash.new)
|
48
31
|
end
|
32
|
+
|
33
|
+
# @since 0.0.2
|
34
|
+
def redirect(url, options = Hash.new)
|
35
|
+
url = [self.request.base_url.chomp("/"), url].join("/").chomp("/") unless url.match(/^http/)
|
36
|
+
|
37
|
+
if options.respond_to?(:inject)
|
38
|
+
# redirect "/post", error: "Try again"
|
39
|
+
# ?msg[error]="Try again"
|
40
|
+
url = options.inject(url) do |url, pair|
|
41
|
+
type, message = pair
|
42
|
+
url + "?msg[#{type}]=#{message}"
|
43
|
+
end
|
44
|
+
else
|
45
|
+
# redirect "/post", "Try again"
|
46
|
+
# ?msg="Try again"
|
47
|
+
url.concat("?msg=#{options}")
|
48
|
+
end
|
49
|
+
|
50
|
+
self.status = 302
|
51
|
+
self.headers["Location"] = URI.escape(url)
|
52
|
+
return String.new
|
53
|
+
end
|
49
54
|
end
|
50
55
|
end
|
@@ -4,8 +4,6 @@ require "rango"
|
|
4
4
|
require "rango/templates/template"
|
5
5
|
|
6
6
|
module Rango
|
7
|
-
SubtemplateNotFound = Class.new(StandardError)
|
8
|
-
|
9
7
|
module TemplateHelpers
|
10
8
|
def self.extended(scope)
|
11
9
|
class << scope
|
@@ -50,7 +48,7 @@ module Rango
|
|
50
48
|
end
|
51
49
|
|
52
50
|
def self.included(scope_class)
|
53
|
-
scope_class.class_eval { attr_accessor :template
|
51
|
+
scope_class.class_eval { attr_accessor :template}
|
54
52
|
end
|
55
53
|
|
56
54
|
# post/show.html: it's block is the block we like to see in output
|
@@ -90,14 +88,12 @@ module Rango
|
|
90
88
|
# render "base.html"
|
91
89
|
# render "./base.html"
|
92
90
|
# render "../base.html"
|
93
|
-
def render(
|
94
|
-
|
91
|
+
def render(template, context = Hash.new)
|
92
|
+
normalize_template_path(template)
|
95
93
|
original_template = self.template
|
96
|
-
template = Rango::Template.new(
|
94
|
+
template = Rango::Template.new(template, self) # self is scope
|
97
95
|
self.template = original_template
|
98
96
|
return template.render(context)
|
99
|
-
rescue Exceptions::TemplateNotFound # FIXME: this doesn't work
|
100
|
-
raise SubtemplateNotFound, "Template #{path} doesn't exist in #{full_path}"
|
101
97
|
end
|
102
98
|
|
103
99
|
# partial "products/list"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rango
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- "Jakub \xC5\xA0\xC5\xA5astn\xC3\xBD aka Botanicus"
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain:
|
11
|
-
date: 2010-02-
|
11
|
+
date: 2010-02-09 00:00:00 +00:00
|
12
12
|
default_executable: rango
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
@@ -270,7 +270,6 @@ files:
|
|
270
270
|
- lib/rango/helpers/assets.rb
|
271
271
|
- lib/rango/helpers/general.rb
|
272
272
|
- lib/rango/helpers/syntax.rb
|
273
|
-
- lib/rango/mailer.rb
|
274
273
|
- lib/rango/mini.rb
|
275
274
|
- lib/rango/mini_render.rb
|
276
275
|
- lib/rango/mixins/action_args.rb
|
@@ -455,7 +454,9 @@ has_rdoc: true
|
|
455
454
|
homepage: http://github.com/botanicus/rango
|
456
455
|
licenses: []
|
457
456
|
|
458
|
-
post_install_message:
|
457
|
+
post_install_message: "[\e[32mVersion 0.2.1\e[0m] More inteligent environments handling, just use Rango.environment and it will detect the proper one from ENV[\"RACK_ENV\"], RACK_ENV constant or it will defaults to development. Rango.environment=(environment) will set all these variables so everything will stay consistent.\n\
|
458
|
+
[\e[32mVersion 0.2.1\e[0m] MongoMapper supported in stack generator (rango create stack blog --orm=mongomapper)\n\
|
459
|
+
[\e[32mVersion 0.2.1\e[0m] Added Rango::StackController which is more complete than just basic Rango::Controller\n"
|
459
460
|
rdoc_options: []
|
460
461
|
|
461
462
|
require_paths:
|
@@ -468,9 +469,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
468
469
|
version:
|
469
470
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
470
471
|
requirements:
|
471
|
-
- - "
|
472
|
+
- - ">="
|
472
473
|
- !ruby/object:Gem::Version
|
473
|
-
version:
|
474
|
+
version: "0"
|
474
475
|
version:
|
475
476
|
requirements: []
|
476
477
|
|
data/lib/rango/mailer.rb
DELETED
@@ -1,48 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require "net/smtp"
|
4
|
-
|
5
|
-
# Mailer.new("noreply@rangoproject.org", "RangoProject.org")
|
6
|
-
# self.to = "tony@example.com"
|
7
|
-
# self.subject = "Just hey"
|
8
|
-
# self.body = "Hey Tony, what's up?"
|
9
|
-
# end
|
10
|
-
module Rango
|
11
|
-
class Mailer
|
12
|
-
@@config = {smtp: ["localhost", 25]}
|
13
|
-
|
14
|
-
def self.mail(options = Hash.new)
|
15
|
-
self.new(options[:from]).tap do |mailer|
|
16
|
-
mailer.body = options[:body]
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
attr_accessor :to, :to_alias
|
21
|
-
attr_accessor :from, :from_alias
|
22
|
-
attr_accessor :body, :subject
|
23
|
-
|
24
|
-
def initialize(from, from_alias = from, &block)
|
25
|
-
@from, @from_alias = from, from_alias
|
26
|
-
unless block.nil?
|
27
|
-
block.instance_eval(&block)
|
28
|
-
block.send
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def raw
|
33
|
-
<<-EOF
|
34
|
-
From: #{from_alias} <#{from}>
|
35
|
-
To: #{to_alias} <#{to}>
|
36
|
-
Subject: #{subject}
|
37
|
-
|
38
|
-
#{body}
|
39
|
-
EOF
|
40
|
-
end
|
41
|
-
|
42
|
-
def send(to)
|
43
|
-
Net::SMTP.start(*@@config[:smtp]) do |smtp|
|
44
|
-
smtp.send_message(self.raw, @from, to)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|