togo 0.6.1 → 0.6.2
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/togo/admin/helpers.rb +8 -8
- data/lib/togo/admin/views/index.erb +2 -1
- data/lib/togo/model/model.rb +26 -3
- data/lib/togo/model/property_wrapper/property_wrapper.rb +21 -0
- data/lib/togo/model/types/belongs_to.erb +6 -5
- data/lib/togo/model/types/boolean.erb +3 -3
- data/lib/togo/model/types/datetime.erb +2 -2
- data/lib/togo/model/types/float.erb +2 -2
- data/lib/togo/model/types/has_n.erb +7 -6
- data/lib/togo/model/types/integer.erb +2 -2
- data/lib/togo/model/types/many_to_many.erb +7 -6
- data/lib/togo/model/types/string.erb +2 -2
- data/lib/togo/model/types/text.erb +2 -2
- metadata +9 -24
data/lib/togo/admin/helpers.rb
CHANGED
@@ -23,20 +23,20 @@ module Helpers
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def column_head_link(property, current_order, qs = {})
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
26
|
+
if property.sortable
|
27
|
+
qs = hash_to_qs(qs)
|
28
|
+
new_order = (current_order[0] == property.name ? (current_order[1] == :asc ? "desc" : "asc") : "asc")
|
29
|
+
link_class = current_order[0] == property.name ? new_order : ''
|
30
|
+
"<a href=\"?o=#{[(property.name.to_s+'.'+new_order.to_s),qs].compact.join('&')}\" class=\"#{link_class}\">#{property.label}</a>"
|
31
|
+
else
|
32
|
+
property.label
|
33
|
+
end
|
30
34
|
end
|
31
35
|
|
32
36
|
def partial(template, options={})
|
33
37
|
erb template, options.merge(:layout => false)
|
34
38
|
end
|
35
39
|
|
36
|
-
def active_menu(name)
|
37
|
-
request.path =~ /#{name}/ ? 'active' : ''
|
38
|
-
end
|
39
|
-
|
40
40
|
def logged_in?
|
41
41
|
return true if not config[:auth_model] or not config[:sessions]
|
42
42
|
config[:auth_model] and session[:user] and session[:user].authenticated?
|
@@ -34,7 +34,8 @@
|
|
34
34
|
<tr>
|
35
35
|
<td class="checkbox"><input type="checkbox" name="selection[<%= c.id %>]" value="1" id="selection_<%= c.id %>" /></td>
|
36
36
|
<% @model.get_list_properties.each_with_index do |p,i| %>
|
37
|
-
|
37
|
+
<% v = c.send(p.name.to_sym) || '-' %>
|
38
|
+
<td><% if i == 0 %><a href="/edit/<%= @model.name %>/<%= c.id %>"><%= v %></a><% else %><%= v %><% end %></td>
|
38
39
|
<% end %>
|
39
40
|
</tr>
|
40
41
|
<% end %>
|
data/lib/togo/model/model.rb
CHANGED
@@ -2,6 +2,7 @@ require 'erubis/tiny'
|
|
2
2
|
%w( relationship_manager many_to_one one_to_many ).each{|l|
|
3
3
|
require "togo/model/relationship_manager/#{l}"
|
4
4
|
}
|
5
|
+
require 'togo/model/property_wrapper/property_wrapper'
|
5
6
|
|
6
7
|
module Togo
|
7
8
|
module DataMapper
|
@@ -44,7 +45,7 @@ module Togo
|
|
44
45
|
|
45
46
|
# Display the form template for a property
|
46
47
|
def form_for(property,content)
|
47
|
-
template = class_variable_get(:@@custom_form_templates)[property.name] || File.join(File.dirname(__FILE__),'types',"#{
|
48
|
+
template = class_variable_get(:@@custom_form_templates)[property.name] || File.join(File.dirname(__FILE__),'types',"#{property.type}.erb")
|
48
49
|
Erubis::TinyEruby.new(File.open(template).read).result(binding)
|
49
50
|
end
|
50
51
|
|
@@ -95,7 +96,7 @@ module Togo
|
|
95
96
|
end
|
96
97
|
|
97
98
|
def field_class_for(property)
|
98
|
-
|
99
|
+
property.type
|
99
100
|
end
|
100
101
|
|
101
102
|
def get_list_properties
|
@@ -131,10 +132,32 @@ module Togo
|
|
131
132
|
end
|
132
133
|
end
|
133
134
|
|
135
|
+
def model_from_property(property)
|
136
|
+
case property
|
137
|
+
when ::DataMapper::Property
|
138
|
+
property.model
|
139
|
+
when ::DataMapper::Associations::ManyToMany::Relationship
|
140
|
+
property.child_model
|
141
|
+
when ::DataMapper::Associations::ManyToOne::Relationship
|
142
|
+
property.parent_model
|
143
|
+
when ::DataMapper::Associations::OneToMany::Relationship
|
144
|
+
property.child_model
|
145
|
+
else
|
146
|
+
self
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
def sorting_from_property(property)
|
151
|
+
property.is_a?(::DataMapper::Property)
|
152
|
+
end
|
153
|
+
|
134
154
|
def pick_properties(selection, args)
|
135
155
|
if class_variable_get(:"@@#{selection}_properties").empty?
|
136
156
|
args = shown_properties.map{|p| p.name} if args.empty?
|
137
|
-
class_variable_set(:"@@#{selection}_properties", args.collect{|a|
|
157
|
+
class_variable_set(:"@@#{selection}_properties", args.collect{|a|
|
158
|
+
p = shown_properties.select{|s| s.name == a}.first
|
159
|
+
PropertyWrapper.new({:property => p, :name => a, :type => type_from_property(p), :model => model_from_property(p), :sortable => sorting_from_property(p)})
|
160
|
+
}.compact)
|
138
161
|
end
|
139
162
|
class_variable_get(:"@@#{selection}_properties")
|
140
163
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class PropertyWrapper
|
2
|
+
|
3
|
+
attr_reader :name, :type, :model, :sortable
|
4
|
+
|
5
|
+
def initialize(opts = {})
|
6
|
+
@name = (opts[:property] ? opts[:property].name : opts[:name]).to_sym
|
7
|
+
@model = opts[:model]
|
8
|
+
@type = opts[:type]
|
9
|
+
@sortable = opts[:sortable] || false
|
10
|
+
end
|
11
|
+
|
12
|
+
def humanized_name
|
13
|
+
@name.to_s.humanize.titleize rescue @name
|
14
|
+
end
|
15
|
+
|
16
|
+
def label
|
17
|
+
puts @model.property_options.inspect
|
18
|
+
@model.property_options[@name][:label] rescue humanized_name
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
|
-
<% content_count = content.send(property.name
|
2
|
-
<% related_content = [content.send(property.name
|
1
|
+
<% content_count = content.send(property.name).blank? ? 0 : 1 %>
|
2
|
+
<% related_content = [content.send(property.name)].compact %>
|
3
3
|
<% related_ids = related_content.map(&:id) %>
|
4
|
-
<% related_model = property.
|
4
|
+
<% related_model = property.model %>
|
5
5
|
<input type="hidden" name="related_<%= property.name %>" class="related_ids" value="unset" />
|
6
6
|
<label for="<%= property.name %>"><%= related_model.display_name %></label>
|
7
7
|
<div class="search" id="search-<%= related_model.name %>">
|
@@ -17,7 +17,7 @@
|
|
17
17
|
<tr>
|
18
18
|
<th class="checkbox"> </th>
|
19
19
|
<% related_model.get_list_properties.each do |p| %>
|
20
|
-
<th><%= p.
|
20
|
+
<th><%= p.humanized_name %></th>
|
21
21
|
<% end %>
|
22
22
|
</tr>
|
23
23
|
</thead>
|
@@ -42,7 +42,8 @@
|
|
42
42
|
<tr>
|
43
43
|
<td class="checkbox"><input type="radio" name="selection[<%= c.id %>]" value="<%= c.id %>" id="selection_<%= related_model.name %>_<%= c.id %>" checked="checked" /></td>
|
44
44
|
<% related_model.get_list_properties.each_with_index do |p,i| %>
|
45
|
-
|
45
|
+
<% v = c.send(p.name) || '-' %>
|
46
|
+
<td><% if i == 0 %><a href="/edit/<%= related_model.name %>/<%= c.id %>"><%= v || '-' %></a><% else %><%= v %><% end %></td>
|
46
47
|
<% end %>
|
47
48
|
</tr>
|
48
49
|
<% end %>
|
@@ -1,3 +1,3 @@
|
|
1
|
-
<label><%= property.
|
2
|
-
<input type="radio" name="<%= property.name %>" id="<%= property.name %>_true" value="1" <% if content.send(property.name
|
3
|
-
<input type="radio" name="<%= property.name %>" id="<%= property.name %>_false" value="0" <% if not content.send(property.name
|
1
|
+
<label><%= property.label %></label>
|
2
|
+
<input type="radio" name="<%= property.name %>" id="<%= property.name %>_true" value="1" <% if content.send(property.name) %> checked="checked"<% end %>/> <label class="inline" for="<%= property.name %>_true">Yes</label>
|
3
|
+
<input type="radio" name="<%= property.name %>" id="<%= property.name %>_false" value="0" <% if not content.send(property.name) %> checked="checked"<% end %>/> <label class="inline" for="<%= property.name %>_false">No</label>
|
@@ -1,2 +1,2 @@
|
|
1
|
-
<label for="<%= property.name %>"><%= property.
|
2
|
-
<input type="text" name="<%= property.name %>" id="<%= property.name %>" value="<%= (content.send(property.name
|
1
|
+
<label for="<%= property.name %>"><%= property.label %></label>
|
2
|
+
<input type="text" name="<%= property.name %>" id="<%= property.name %>" value="<%= (content.send(property.name) || Time.now).strftime("%B %d, %Y %I:%M%p") %>" />
|
@@ -1,2 +1,2 @@
|
|
1
|
-
<label for="<%= property.name %>"><%= property.
|
2
|
-
<input type="text" name="<%= property.name %>" id="<%= property.name %>" value="<%= content.send(property.name
|
1
|
+
<label for="<%= property.name %>"><%= property.label %></label>
|
2
|
+
<input type="text" name="<%= property.name %>" id="<%= property.name %>" value="<%= content.send(property.name) %>" />
|
@@ -1,7 +1,7 @@
|
|
1
|
-
<% content_count = content.send(property.name
|
2
|
-
<% related_ids = content.send(property.name
|
3
|
-
<% related_content = content.send(property.name
|
4
|
-
<% related_model = property.
|
1
|
+
<% content_count = content.send(property.name).size %>
|
2
|
+
<% related_ids = content.send(property.name).map(&:id) %>
|
3
|
+
<% related_content = content.send(property.name)[0...10] %>
|
4
|
+
<% related_model = property.model %>
|
5
5
|
<input type="hidden" name="related_<%= property.name %>" class="related_ids" value="unset" />
|
6
6
|
<label for="<%= property.name %>"><%= related_model.display_name %></label>
|
7
7
|
<div class="search" id="search-<%= related_model.name %>">
|
@@ -17,7 +17,7 @@
|
|
17
17
|
<tr>
|
18
18
|
<th class="checkbox"> </th>
|
19
19
|
<% related_model.get_list_properties.each do |p| %>
|
20
|
-
<th><%= p.
|
20
|
+
<th><%= p.humanized_name %></th>
|
21
21
|
<% end %>
|
22
22
|
</tr>
|
23
23
|
</thead>
|
@@ -44,7 +44,8 @@
|
|
44
44
|
<tr>
|
45
45
|
<td class="checkbox"><input type="checkbox" name="selection[<%= c.id %>]" value="<%= c.id %>" id="selection_<%= related_model.name %>_<%= c.id %>" checked="checked" /></td>
|
46
46
|
<% related_model.get_list_properties.each_with_index do |p,i| %>
|
47
|
-
|
47
|
+
<% v = c.send(p.name) || '-' %>
|
48
|
+
<td><% if i == 0 %><a href="/edit/<%= related_model.name %>/<%= c.id %>"><%= v %></a><% else %><%= v %><% end %></td>
|
48
49
|
<% end %>
|
49
50
|
</tr>
|
50
51
|
<% end %>
|
@@ -1,2 +1,2 @@
|
|
1
|
-
<label for="<%= property.name %>"><%= property.
|
2
|
-
<input type="text" name="<%= property.name %>" id="<%= property.name %>" value="<%= content.send(property.name
|
1
|
+
<label for="<%= property.name %>"><%= property.label %></label>
|
2
|
+
<input type="text" name="<%= property.name %>" id="<%= property.name %>" value="<%= content.send(property.name) %>" />
|
@@ -1,7 +1,7 @@
|
|
1
|
-
<% content_count = content.send(property.name
|
2
|
-
<% related_ids = content.send(property.name
|
3
|
-
<% related_content = content.send(property.name
|
4
|
-
<% related_model = property.
|
1
|
+
<% content_count = content.send(property.name).size %>
|
2
|
+
<% related_ids = content.send(property.name).map(&:id) %>
|
3
|
+
<% related_content = content.send(property.name)[0...10] %>
|
4
|
+
<% related_model = property.model %>
|
5
5
|
<input type="hidden" name="related_<%= property.name %>" class="related_ids" value="unset" />
|
6
6
|
<label for="<%= property.name %>"><%= related_model.display_name %></label>
|
7
7
|
<div class="search" id="search-<%= related_model.name %>">
|
@@ -17,7 +17,7 @@
|
|
17
17
|
<tr>
|
18
18
|
<th class="checkbox"> </th>
|
19
19
|
<% related_model.get_list_properties.each do |p| %>
|
20
|
-
<th><%= p.
|
20
|
+
<th><%= p.humanized_name %></th>
|
21
21
|
<% end %>
|
22
22
|
</tr>
|
23
23
|
</thead>
|
@@ -44,7 +44,8 @@
|
|
44
44
|
<tr>
|
45
45
|
<td class="checkbox"><input type="checkbox" name="selection[<%= c.id %>]" value="<%= c.id %>" id="selection_<%= related_model.name %>_<%= c.id %>" checked="checked" /></td>
|
46
46
|
<% related_model.get_list_properties.each_with_index do |p,i| %>
|
47
|
-
|
47
|
+
<% v = c.send(p.name) || '-' %>
|
48
|
+
<td><% if i == 0 %><a href="/edit/<%= related_model.name %>/<%= c.id %>"><%= v %></a><% else %><%= v %><% end %></td>
|
48
49
|
<% end %>
|
49
50
|
</tr>
|
50
51
|
<% end %>
|
@@ -1,2 +1,2 @@
|
|
1
|
-
<label for="<%= property.name %>"><%= property.
|
2
|
-
<input type="text" name="<%= property.name %>" id="<%= property.name %>" value="<%= content.send(property.name
|
1
|
+
<label for="<%= property.name %>"><%= property.label %></label>
|
2
|
+
<input type="text" name="<%= property.name %>" id="<%= property.name %>" value="<%= content.send(property.name) %>" />
|
@@ -1,2 +1,2 @@
|
|
1
|
-
<label for="<%= property.name %>"><%= property.
|
2
|
-
<textarea name="<%= property.name %>" id="<%= property.name %>" rows="10" cols="50"><%= content.send(property.name
|
1
|
+
<label for="<%= property.name %>"><%= property.label %></label>
|
2
|
+
<textarea name="<%= property.name %>" id="<%= property.name %>" rows="10" cols="50"><%= content.send(property.name) %></textarea>
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: togo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 3
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 6
|
9
|
-
-
|
10
|
-
version: 0.6.
|
9
|
+
- 2
|
10
|
+
version: 0.6.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Matt King
|
@@ -15,29 +15,13 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-11-
|
18
|
+
date: 2010-11-18 00:00:00 -08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
22
|
-
name: dm-core
|
23
|
-
prerelease: false
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
|
-
requirements:
|
27
|
-
- - ">"
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
hash: 53
|
30
|
-
segments:
|
31
|
-
- 0
|
32
|
-
- 10
|
33
|
-
- 1
|
34
|
-
version: 0.10.1
|
35
|
-
type: :runtime
|
36
|
-
version_requirements: *id001
|
37
21
|
- !ruby/object:Gem::Dependency
|
38
22
|
name: erubis
|
39
23
|
prerelease: false
|
40
|
-
requirement: &
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
41
25
|
none: false
|
42
26
|
requirements:
|
43
27
|
- - ">"
|
@@ -49,8 +33,8 @@ dependencies:
|
|
49
33
|
- 0
|
50
34
|
version: 0.0.0
|
51
35
|
type: :runtime
|
52
|
-
version_requirements: *
|
53
|
-
description: With a few lines of code in your Ruby ORMs, you get a highly configurable and extensive content
|
36
|
+
version_requirements: *id001
|
37
|
+
description: With a few lines of code in your Ruby ORMs, you get a highly configurable and extensive content management tool (CMS).
|
54
38
|
email: matt@mking.me
|
55
39
|
executables:
|
56
40
|
- togo-admin
|
@@ -95,6 +79,7 @@ files:
|
|
95
79
|
- lib/togo/dispatch/dispatch.rb
|
96
80
|
- lib/togo/dispatch.rb
|
97
81
|
- lib/togo/model/model.rb
|
82
|
+
- lib/togo/model/property_wrapper/property_wrapper.rb
|
98
83
|
- lib/togo/model/relationship_manager/many_to_one.rb
|
99
84
|
- lib/togo/model/relationship_manager/one_to_many.rb
|
100
85
|
- lib/togo/model/relationship_manager/relationship_manager.rb
|
@@ -147,6 +132,6 @@ rubyforge_project:
|
|
147
132
|
rubygems_version: 1.3.7
|
148
133
|
signing_key:
|
149
134
|
specification_version: 3
|
150
|
-
summary:
|
135
|
+
summary: CMS Framework for Ruby ORMs
|
151
136
|
test_files: []
|
152
137
|
|