maiha-merb_inspector 0.1 → 0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +7 -7
- data/lib/merb_inspector/helper.rb +15 -21
- data/lib/merb_inspector/inspector.rb +51 -61
- data/lib/merb_inspector/manager.rb +76 -0
- data/lib/merb_inspector.rb +20 -10
- metadata +16 -22
- data/lib/merb_inspector/inspectors/base.rb +0 -60
- data/lib/merb_inspector/inspectors/data_mapper.rb +0 -103
- data/mirror/public/stylesheets/merb_inspector.css +0 -87
- data/templates/data_mapper/collection/_records.html.erb +0 -38
- data/templates/data_mapper/resource/_edit.html.erb +0 -15
- data/templates/data_mapper/resource/_new.html.erb +0 -24
- data/templates/data_mapper/resource/_record.html.erb +0 -42
- data/templates/data_mapper/resource/_show.html.erb +0 -13
- data/test/merb_inspector_test.rb +0 -0
- data/test/test_helper.rb +0 -1
data/Rakefile
CHANGED
@@ -4,12 +4,12 @@ require 'rake/gempackagetask'
|
|
4
4
|
require 'merb-core'
|
5
5
|
require 'merb-core/tasks/merb'
|
6
6
|
|
7
|
-
GEM_NAME
|
8
|
-
GEM_VERSION = "0.
|
9
|
-
AUTHOR
|
10
|
-
EMAIL
|
11
|
-
HOMEPAGE
|
12
|
-
SUMMARY
|
7
|
+
GEM_NAME = "merb_inspector"
|
8
|
+
GEM_VERSION = "0.2"
|
9
|
+
AUTHOR = "Maiha"
|
10
|
+
EMAIL = "maiha@wota.jp"
|
11
|
+
HOMEPAGE = "http://github.com/maiha/merb_inspector"
|
12
|
+
SUMMARY = "Merb plugin that provides powerful 'inspect' helper method"
|
13
13
|
|
14
14
|
spec = Gem::Specification.new do |s|
|
15
15
|
s.rubyforge_project = 'merb'
|
@@ -23,7 +23,7 @@ spec = Gem::Specification.new do |s|
|
|
23
23
|
s.author = AUTHOR
|
24
24
|
s.email = EMAIL
|
25
25
|
s.homepage = HOMEPAGE
|
26
|
-
s.add_dependency('merb', '>= 1.0.
|
26
|
+
s.add_dependency('merb', '>= 1.0.7')
|
27
27
|
s.require_path = 'lib'
|
28
28
|
s.files = %w(LICENSE README Rakefile TODO) + Dir.glob("{lib,spec}/**/*")
|
29
29
|
|
@@ -1,10 +1,19 @@
|
|
1
1
|
module Merb
|
2
|
-
|
2
|
+
class Inspector
|
3
3
|
module Helper
|
4
4
|
def inspect(object = nil, options = {})
|
5
5
|
return super() unless object
|
6
|
-
|
7
|
-
|
6
|
+
|
7
|
+
options = {:action=>options} if options.is_a?(Symbol)
|
8
|
+
action = options[:action] || :show
|
9
|
+
inspector = (Manager.lookup(object) || Merb::Inspector.default).new(Merb::Request.new({}))
|
10
|
+
|
11
|
+
if inspector.respond_to?(action)
|
12
|
+
inspector.send action, object, options
|
13
|
+
else
|
14
|
+
message = "%s doesn't recognize '%s' action" % [inspector.class, action]
|
15
|
+
raise Merb::Inspector::ActionNotFound, message
|
16
|
+
end
|
8
17
|
end
|
9
18
|
|
10
19
|
def column_header(p)
|
@@ -19,7 +28,7 @@ module Merb
|
|
19
28
|
|
20
29
|
def column_form(record, p)
|
21
30
|
# first, search class prefixed method that user override
|
22
|
-
method = "#{record.class.name
|
31
|
+
method = "#{Extlib::Inflection.demodulize(record.class.name)}_#{p.name}_form"
|
23
32
|
return send(method, record, p) if respond_to?(method, true)
|
24
33
|
|
25
34
|
# second, search method that user override
|
@@ -27,29 +36,14 @@ module Merb
|
|
27
36
|
return send(method, record, p) if respond_to?(method, true)
|
28
37
|
|
29
38
|
# second, guess form from property type
|
30
|
-
if p.type == DataMapper::Types::Serial
|
39
|
+
if p.type == ::DataMapper::Types::Serial
|
31
40
|
record.send p.name
|
32
|
-
elsif p.type == DataMapper::Types::Text
|
41
|
+
elsif p.type == ::DataMapper::Types::Text
|
33
42
|
text_area p.name
|
34
43
|
else
|
35
44
|
text_field p.name
|
36
45
|
end
|
37
46
|
end
|
38
|
-
|
39
|
-
######################################################################
|
40
|
-
### Patch for broken merb methods
|
41
|
-
|
42
|
-
def xxx_form_for(name, attrs = {}, &blk)
|
43
|
-
if !attrs[:action] and defined?(DataMapper::Resource) and name.is_a?(DataMapper::Resource)
|
44
|
-
if name.new_record?
|
45
|
-
model = name.class.name.demodulize.snake_case.pluralize.intern
|
46
|
-
attrs[:action] = resource(model, :new)
|
47
|
-
else
|
48
|
-
attrs[:action] = resource(name)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
super(name, attrs, &blk)
|
52
|
-
end
|
53
47
|
end
|
54
48
|
end
|
55
49
|
end
|
@@ -1,87 +1,77 @@
|
|
1
1
|
module Merb
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
end
|
2
|
+
class Inspector < Application
|
3
|
+
######################################################################
|
4
|
+
### for exceptins
|
6
5
|
|
7
|
-
|
6
|
+
class Merb::Inspector::ActionNotFound < Merb::ControllerExceptions::ActionNotFound; end
|
7
|
+
|
8
|
+
######################################################################
|
9
|
+
### for module
|
8
10
|
|
9
11
|
def self.root
|
10
|
-
@root ||= File.expand_path(File.dirname(__FILE__) + "/../../")
|
12
|
+
@root ||= Pathname(File.expand_path(File.dirname(__FILE__) + "/../../"))
|
11
13
|
end
|
12
14
|
|
13
15
|
def self.default
|
14
|
-
|
16
|
+
Inspector
|
15
17
|
end
|
16
18
|
|
17
|
-
|
18
|
-
|
19
|
-
|
19
|
+
def self.log(message)
|
20
|
+
path = Merb.root / "log" / "inspector.log"
|
21
|
+
message = "[Inspector] %s" % message.to_s.strip
|
22
|
+
File.open(path, "a+") {|f| f.puts message}
|
20
23
|
end
|
21
24
|
|
22
|
-
self.
|
23
|
-
|
24
|
-
|
25
|
-
def self.reset
|
26
|
-
@caches = Hash.new
|
25
|
+
def self.model(model, inspector = self)
|
26
|
+
Merb::Inspector::Manager.register(model, inspector)
|
27
27
|
end
|
28
28
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
29
|
+
######################################################################
|
30
|
+
### for class
|
31
|
+
|
32
|
+
def show(object, options = {})
|
33
|
+
@object = object
|
34
|
+
@options = options
|
35
|
+
|
36
|
+
execute
|
33
37
|
end
|
34
38
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
return @caches[object.class]
|
39
|
+
private
|
40
|
+
def name
|
41
|
+
self.class.name.sub(/^Merb::/,'').sub(/Inspector$/,'').snake_case.gsub(/::/, '/')
|
39
42
|
end
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
}
|
44
|
-
@caches[object.class] = @stores[klass]
|
45
|
-
if klass
|
46
|
-
log "lookup: %s => %s (registered)" % [object.class, @caches[object.class]]
|
47
|
-
else
|
48
|
-
log "lookup: %s => nil (registered as negative cache)" % [object.class]
|
43
|
+
|
44
|
+
def dir
|
45
|
+
Merb::Inspector.root + "templates" + name
|
49
46
|
end
|
50
|
-
return @stores[klass]
|
51
|
-
end
|
52
47
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
File.open(path, "a+") {|f| f.puts message}
|
57
|
-
end
|
48
|
+
def template_for(name)
|
49
|
+
dir + name.to_s
|
50
|
+
end
|
58
51
|
|
59
|
-
|
60
|
-
|
52
|
+
def execute
|
53
|
+
partial template_for(template), current_options
|
54
|
+
end
|
61
55
|
|
62
|
-
|
63
|
-
|
64
|
-
|
56
|
+
def template
|
57
|
+
:default
|
58
|
+
end
|
65
59
|
|
66
|
-
|
67
|
-
|
68
|
-
target_dir = File.join(Merb.root, dir)
|
69
|
-
FileUtils.mkdir_p(target_dir) unless File.exist?(target_dir)
|
70
|
-
|
71
|
-
Dir[source_dir + "/*"].each do |src|
|
72
|
-
time = File.mtime(src)
|
73
|
-
file = File.basename(src)
|
74
|
-
dst = File.join(target_dir, file)
|
75
|
-
|
76
|
-
next if File.directory?(src)
|
77
|
-
next if File.exist?(dst) and File.mtime(dst) >= time
|
78
|
-
FileUtils.copy(src, dst)
|
79
|
-
File.utime(time, time, dst)
|
80
|
-
command = File.exist?(dst) ? "update" : "install"
|
81
|
-
log "#{command}: #{dir}/#{file}"
|
60
|
+
def current_options
|
61
|
+
basic_options.merge(options)
|
82
62
|
end
|
83
|
-
end
|
84
63
|
|
64
|
+
def options
|
65
|
+
{}
|
66
|
+
end
|
67
|
+
|
68
|
+
def basic_options
|
69
|
+
{:inspector=>self, :options=>@options, :dir=>dir, :id=>@object.object_id}
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def self.inspector
|
74
|
+
Merb::Inspector
|
85
75
|
end
|
86
76
|
end
|
87
77
|
|
@@ -0,0 +1,76 @@
|
|
1
|
+
module Merb
|
2
|
+
class Inspector
|
3
|
+
module Manager
|
4
|
+
######################################################################
|
5
|
+
### for module
|
6
|
+
|
7
|
+
class << self
|
8
|
+
attr_accessor :stores
|
9
|
+
attr_accessor :caches
|
10
|
+
end
|
11
|
+
|
12
|
+
self.stores = Hash.new
|
13
|
+
self.caches = Hash.new
|
14
|
+
|
15
|
+
def self.reset
|
16
|
+
self.caches = Hash.new
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.register(klass, inspector)
|
20
|
+
raise "#{klass} inspector already setup" if stores.has_key?(klass)
|
21
|
+
stores[klass] = inspector
|
22
|
+
log "registered %s -> %s" % [klass, inspector]
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.lookup(object)
|
26
|
+
if caches.has_key?(object.class)
|
27
|
+
log "lookup: %s => %s (cached)" % [object.class, caches[object.class] || 'nil']
|
28
|
+
return caches[object.class]
|
29
|
+
end
|
30
|
+
klass = object.class.ancestors.find{|klass|
|
31
|
+
log "lookup: %s = %s ... %s" % [object.class, klass, stores[klass]]
|
32
|
+
stores.has_key?(klass)
|
33
|
+
}
|
34
|
+
caches[object.class] = stores[klass]
|
35
|
+
if klass
|
36
|
+
log "lookup: %s => %s (registered)" % [object.class, caches[object.class]]
|
37
|
+
else
|
38
|
+
log "lookup: %s => nil (registered as negative cache)" % [object.class]
|
39
|
+
end
|
40
|
+
return stores[klass]
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.log(message)
|
44
|
+
path = Merb.root / "log" / "inspector.log"
|
45
|
+
message = "[Inspector] %s" % message.to_s.strip
|
46
|
+
File.open(path, "a+") {|f| f.puts message}
|
47
|
+
end
|
48
|
+
|
49
|
+
######################################################################
|
50
|
+
### Install
|
51
|
+
|
52
|
+
def self.install
|
53
|
+
mirror("public/stylesheets")
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.mirror(dir)
|
57
|
+
source_dir = File.join(File.dirname(__FILE__), '..', '..', 'mirror', dir)
|
58
|
+
target_dir = File.join(Merb.root, dir)
|
59
|
+
FileUtils.mkdir_p(target_dir) unless File.exist?(target_dir)
|
60
|
+
|
61
|
+
Dir[source_dir + "/*"].each do |src|
|
62
|
+
time = File.mtime(src)
|
63
|
+
file = File.basename(src)
|
64
|
+
dst = File.join(target_dir, file)
|
65
|
+
|
66
|
+
next if File.directory?(src)
|
67
|
+
next if File.exist?(dst) and File.mtime(dst) >= time
|
68
|
+
FileUtils.copy(src, dst)
|
69
|
+
File.utime(time, time, dst)
|
70
|
+
command = File.exist?(dst) ? "update" : "install"
|
71
|
+
log "#{command}: #{dir}/#{file}"
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
data/lib/merb_inspector.rb
CHANGED
@@ -3,15 +3,6 @@ if defined?(Merb::Plugins)
|
|
3
3
|
|
4
4
|
$: << File.dirname(__FILE__) unless $:.include?(File.dirname(__FILE__))
|
5
5
|
|
6
|
-
require "merb_inspector" / "inspector"
|
7
|
-
require "merb_inspector" / "helper"
|
8
|
-
require "merb_inspector" / "inspectors" / "base"
|
9
|
-
require "merb_inspector" / "inspectors" / "data_mapper" if defined?(DataMapper)
|
10
|
-
|
11
|
-
module Merb::GlobalHelpers
|
12
|
-
include Merb::Inspector::Helper
|
13
|
-
end
|
14
|
-
|
15
6
|
# Merb gives you a Merb::Plugins.config hash...feel free to put your stuff in your piece of it
|
16
7
|
Merb::Plugins.config[:merb_inspector] = {
|
17
8
|
:chickens => false
|
@@ -19,10 +10,29 @@ if defined?(Merb::Plugins)
|
|
19
10
|
|
20
11
|
Merb::BootLoader.before_app_loads do
|
21
12
|
# require code that must be loaded before the application
|
22
|
-
Merb::Inspector.install
|
23
13
|
end
|
24
14
|
|
25
15
|
Merb::BootLoader.after_app_loads do
|
16
|
+
inspector_dir = File.dirname(__FILE__) / "../inspectors"
|
17
|
+
|
18
|
+
require "merb_inspector" / "inspector"
|
19
|
+
require "merb_inspector" / "manager"
|
20
|
+
require "merb_inspector" / "helper"
|
21
|
+
|
22
|
+
Dir["#{inspector_dir}/*.rb"].sort.each do |file|
|
23
|
+
begin
|
24
|
+
require file
|
25
|
+
rescue Exeption => error
|
26
|
+
message = "[MerbInspector] load error: #{error} (#{error.class})"
|
27
|
+
Merb.logger.error message
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
class ::Application
|
32
|
+
include Merb::Inspector::Helper
|
33
|
+
end
|
34
|
+
|
35
|
+
Merb::Inspector::Manager.install
|
26
36
|
end
|
27
37
|
|
28
38
|
Merb::Plugins.add_rakefiles "merb_inspector/merbtasks"
|
metadata
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: maiha-merb_inspector
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: "0.
|
4
|
+
version: "0.2"
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- Maiha
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-12-
|
12
|
+
date: 2008-12-29 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
|
-
name: merb
|
16
|
+
name: merb
|
17
17
|
version_requirement:
|
18
18
|
version_requirements: !ruby/object:Gem::Requirement
|
19
19
|
requirements:
|
@@ -21,35 +21,29 @@ dependencies:
|
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: 1.0.7
|
23
23
|
version:
|
24
|
-
description:
|
24
|
+
description: Merb plugin that provides powerful 'inspect' helper method
|
25
25
|
email: maiha@wota.jp
|
26
26
|
executables: []
|
27
27
|
|
28
28
|
extensions: []
|
29
29
|
|
30
|
-
extra_rdoc_files:
|
31
|
-
|
30
|
+
extra_rdoc_files:
|
31
|
+
- README
|
32
|
+
- LICENSE
|
33
|
+
- TODO
|
32
34
|
files:
|
33
35
|
- LICENSE
|
34
36
|
- README
|
35
37
|
- Rakefile
|
36
38
|
- TODO
|
37
|
-
- lib/merb_inspector
|
39
|
+
- lib/merb_inspector
|
38
40
|
- lib/merb_inspector/helper.rb
|
39
|
-
- lib/merb_inspector/inspector.rb
|
40
|
-
- lib/merb_inspector/inspectors/base.rb
|
41
|
-
- lib/merb_inspector/inspectors/data_mapper.rb
|
42
41
|
- lib/merb_inspector/merbtasks.rb
|
43
|
-
-
|
44
|
-
-
|
42
|
+
- lib/merb_inspector/manager.rb
|
43
|
+
- lib/merb_inspector/inspector.rb
|
44
|
+
- lib/merb_inspector.rb
|
45
45
|
- spec/spec_helper.rb
|
46
|
-
-
|
47
|
-
- templates/data_mapper/resource/_edit.html.erb
|
48
|
-
- templates/data_mapper/resource/_new.html.erb
|
49
|
-
- templates/data_mapper/resource/_record.html.erb
|
50
|
-
- templates/data_mapper/resource/_show.html.erb
|
51
|
-
- test/merb_inspector_test.rb
|
52
|
-
- test/test_helper.rb
|
46
|
+
- spec/merb_inspector_spec.rb
|
53
47
|
has_rdoc: true
|
54
48
|
homepage: http://github.com/maiha/merb_inspector
|
55
49
|
post_install_message:
|
@@ -71,10 +65,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
71
65
|
version:
|
72
66
|
requirements: []
|
73
67
|
|
74
|
-
rubyforge_project:
|
68
|
+
rubyforge_project: merb
|
75
69
|
rubygems_version: 1.2.0
|
76
70
|
signing_key:
|
77
71
|
specification_version: 2
|
78
|
-
summary:
|
72
|
+
summary: Merb plugin that provides powerful 'inspect' helper method
|
79
73
|
test_files: []
|
80
74
|
|
@@ -1,60 +0,0 @@
|
|
1
|
-
module Merb
|
2
|
-
module Inspectors
|
3
|
-
class Base
|
4
|
-
class << self
|
5
|
-
def register(klass)
|
6
|
-
Merb::Inspector.register(klass, self)
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
def initialize(object, caller, options = {})
|
11
|
-
@object = object
|
12
|
-
@caller = caller
|
13
|
-
@options = options
|
14
|
-
@options = {:action=>@options} unless @options.is_a?(Hash)
|
15
|
-
# @context = context || binding # not used yet
|
16
|
-
end
|
17
|
-
|
18
|
-
def execute
|
19
|
-
@object.inspect
|
20
|
-
end
|
21
|
-
|
22
|
-
private
|
23
|
-
def name
|
24
|
-
self.class.name.sub(/^Merb::Inspectors::/,'').sub(/Inspector$/,'').snake_case.gsub(/::/, '/')
|
25
|
-
end
|
26
|
-
|
27
|
-
def dir
|
28
|
-
File.join Merb::Inspector.root, "templates", name
|
29
|
-
end
|
30
|
-
|
31
|
-
def id
|
32
|
-
@object.object_id
|
33
|
-
end
|
34
|
-
|
35
|
-
def template_for(name)
|
36
|
-
File.join dir, name
|
37
|
-
end
|
38
|
-
|
39
|
-
def partial(name)
|
40
|
-
@caller.send :partial, template_for(name), current_options
|
41
|
-
end
|
42
|
-
|
43
|
-
def current_options
|
44
|
-
basic_options.merge(options)
|
45
|
-
end
|
46
|
-
|
47
|
-
def options
|
48
|
-
{}
|
49
|
-
end
|
50
|
-
|
51
|
-
def basic_options
|
52
|
-
{:inspector=>self, :options=>@options, :dir=>dir, :id=>id}
|
53
|
-
end
|
54
|
-
|
55
|
-
def method_missing(*args, &block)
|
56
|
-
@caller.send(*args, &block)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
@@ -1,103 +0,0 @@
|
|
1
|
-
module Merb
|
2
|
-
module Inspectors
|
3
|
-
module DataMapper
|
4
|
-
module Resourceful
|
5
|
-
def resource_name
|
6
|
-
model.name.demodulize.plural.snake_case
|
7
|
-
end
|
8
|
-
|
9
|
-
def link_to_new(label = 'New', opts = {})
|
10
|
-
@caller.link_to label, @caller.resource(resource_name, :new), opts
|
11
|
-
rescue Merb::Router::GenerationError
|
12
|
-
end
|
13
|
-
|
14
|
-
def link_to_show(record = @object, label = 'Show', opts = {})
|
15
|
-
@caller.link_to label, @caller.resource(record), opts
|
16
|
-
rescue Merb::Router::GenerationError
|
17
|
-
end
|
18
|
-
|
19
|
-
def link_to_edit(record = @object, label = 'Edit', opts = {})
|
20
|
-
@caller.link_to label, @caller.resource(record, :edit), opts
|
21
|
-
rescue Merb::Router::GenerationError
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
class CollectionInspector < Base
|
26
|
-
register ::DataMapper::Collection
|
27
|
-
include Resourceful
|
28
|
-
|
29
|
-
def execute
|
30
|
-
partial "records"
|
31
|
-
end
|
32
|
-
|
33
|
-
def columns
|
34
|
-
@object.properties
|
35
|
-
end
|
36
|
-
|
37
|
-
private
|
38
|
-
def model
|
39
|
-
@object.query.model
|
40
|
-
end
|
41
|
-
|
42
|
-
def options
|
43
|
-
{:model=>model, :records=>@object}
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
class ResourceInspector < Base
|
48
|
-
register ::DataMapper::Resource
|
49
|
-
include Resourceful
|
50
|
-
|
51
|
-
def execute
|
52
|
-
partial template
|
53
|
-
end
|
54
|
-
|
55
|
-
def columns
|
56
|
-
model.properties
|
57
|
-
end
|
58
|
-
|
59
|
-
def edit_columns
|
60
|
-
columns.reject{|p| p.type == ::DataMapper::Types::Serial}
|
61
|
-
end
|
62
|
-
|
63
|
-
private
|
64
|
-
def id
|
65
|
-
oid = @object.new_record? ? "new" : @object.id
|
66
|
-
"#{resource_name}_#{oid}"
|
67
|
-
end
|
68
|
-
|
69
|
-
def model
|
70
|
-
@object.class
|
71
|
-
end
|
72
|
-
|
73
|
-
def template
|
74
|
-
if @options[:action].to_s == 'new'
|
75
|
-
"new"
|
76
|
-
else
|
77
|
-
"record"
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
def edit
|
82
|
-
%w( new edit ).include?(@options[:action].to_s)
|
83
|
-
end
|
84
|
-
|
85
|
-
def toggle
|
86
|
-
"$('##{id} .record').toggle();return false;"
|
87
|
-
end
|
88
|
-
|
89
|
-
def save_action
|
90
|
-
if @object.new_record?
|
91
|
-
"/" + resource_name
|
92
|
-
else
|
93
|
-
resource(@object)
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
def options
|
98
|
-
{:model=>model, :record=>@object, :edit=>edit, :save_action=>save_action, :toggle=>toggle}
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
@@ -1,87 +0,0 @@
|
|
1
|
-
table.data-mapper-collection {
|
2
|
-
border-collapse:collapse;
|
3
|
-
}
|
4
|
-
|
5
|
-
|
6
|
-
table.data-mapper-collection th {
|
7
|
-
background-color: #555;
|
8
|
-
text-align: left;
|
9
|
-
}
|
10
|
-
|
11
|
-
table.data-mapper-collection th a,
|
12
|
-
table.data-mapper-collection th p {
|
13
|
-
font: bold 11px arial, sans-serif;
|
14
|
-
display: block;
|
15
|
-
background-color: #555;
|
16
|
-
}
|
17
|
-
|
18
|
-
table.data-mapper-collection th a {
|
19
|
-
color: #fff;
|
20
|
-
padding: 2px 15px 2px 5px;
|
21
|
-
}
|
22
|
-
|
23
|
-
table.data-mapper-collection th p {
|
24
|
-
color: #eee;
|
25
|
-
padding: 2px 5px;
|
26
|
-
}
|
27
|
-
|
28
|
-
table.data-mapper-collection th a:hover {
|
29
|
-
background-color: #000;
|
30
|
-
color: #ff8;
|
31
|
-
}
|
32
|
-
|
33
|
-
table.data-mapper-collection > tbody > tr.record td {
|
34
|
-
background-color: #E6F2FF;
|
35
|
-
}
|
36
|
-
|
37
|
-
table.data-mapper-collection > tbody > tr.record > td {
|
38
|
-
padding: 5px 4px;
|
39
|
-
color: #333;
|
40
|
-
font-family: Verdana, sans-serif;
|
41
|
-
font-size: 11px;
|
42
|
-
border-bottom: solid 1px #C5DBF7;
|
43
|
-
border-left: solid 1px #C5DBF7;
|
44
|
-
}
|
45
|
-
|
46
|
-
table.data-mapper-collection > tbody > tr.even-record td {
|
47
|
-
background-color: #fff;
|
48
|
-
}
|
49
|
-
|
50
|
-
table.data-mapper-collection > tbody > tr.even-record > td {
|
51
|
-
border-left: solid 1px #ddd;
|
52
|
-
}
|
53
|
-
|
54
|
-
table.data-mapper-collection > tbody > tr.record > td.sorted {
|
55
|
-
background-color: #B9DCFF;
|
56
|
-
border-bottom: solid 1px #AFD0F5;
|
57
|
-
}
|
58
|
-
|
59
|
-
table.data-mapper-collection > tbody > tr.even-record > td.sorted {
|
60
|
-
background-color: #E6F2FF;
|
61
|
-
border-bottom: solid 1px #AFD0F5;
|
62
|
-
}
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
.record table
|
67
|
-
{
|
68
|
-
background-color: #fff;
|
69
|
-
border-collapse: collapse;
|
70
|
-
border-spacing: 0px;
|
71
|
-
}
|
72
|
-
.record table th
|
73
|
-
{
|
74
|
-
background-color: #dee7ec;
|
75
|
-
border: 1px solid #8cacbb;
|
76
|
-
padding: 3px;
|
77
|
-
}
|
78
|
-
.record table td
|
79
|
-
{
|
80
|
-
border: 1px solid #8cacbb;
|
81
|
-
padding: 3px;
|
82
|
-
}
|
83
|
-
|
84
|
-
table.logical th,
|
85
|
-
table.logical td {
|
86
|
-
border: 0px;
|
87
|
-
}
|
@@ -1,38 +0,0 @@
|
|
1
|
-
<div>
|
2
|
-
<table class="data-mapper-collection">
|
3
|
-
<thead>
|
4
|
-
<tr>
|
5
|
-
<%- inspector.columns.each do |p| -%>
|
6
|
-
<th><p><%= column_header(p) %></p></th>
|
7
|
-
<%- end -%>
|
8
|
-
<th></th>
|
9
|
-
</tr>
|
10
|
-
</thead>
|
11
|
-
<tbody class="records">
|
12
|
-
<%- records.each_with_index do |record, i| -%>
|
13
|
-
<%-
|
14
|
-
tr_class = (i % 2 == 0) ? "even-record" : ""
|
15
|
-
tr_class += " #{list_row_class(record)}" if respond_to? :list_row_class
|
16
|
-
-%>
|
17
|
-
<tr class="record <%=tr_class%>">
|
18
|
-
<%- inspector.columns.each do |p| -%>
|
19
|
-
<td><%=h column_value(record, p) %></td>
|
20
|
-
<%- end -%>
|
21
|
-
<td>
|
22
|
-
<table class="logical">
|
23
|
-
<tr>
|
24
|
-
<td><%= inspector.link_to_show(record) %></td>
|
25
|
-
<td><%= inspector.link_to_edit(record) %></td>
|
26
|
-
<td><%# delete_button(article, "Delete #{article.title}") %></td>
|
27
|
-
</tr>
|
28
|
-
</table>
|
29
|
-
</td>
|
30
|
-
</tr>
|
31
|
-
<%- end -%>
|
32
|
-
</tbody>
|
33
|
-
</table>
|
34
|
-
|
35
|
-
<%= inspector.link_to_new 'New' %>
|
36
|
-
|
37
|
-
</div>
|
38
|
-
|
@@ -1,15 +0,0 @@
|
|
1
|
-
<div>
|
2
|
-
<%= form_for record do %>
|
3
|
-
<table class="record show">
|
4
|
-
<tbody>
|
5
|
-
<%- columns.each do |p| -%>
|
6
|
-
<tr>
|
7
|
-
<th><%= column_header(p) %></th>
|
8
|
-
<td><%=h column_form(record, p) %></td>
|
9
|
-
</tr>
|
10
|
-
<%- end -%>
|
11
|
-
</tbody>
|
12
|
-
</table>
|
13
|
-
<% end =%>
|
14
|
-
</div>
|
15
|
-
|
@@ -1,24 +0,0 @@
|
|
1
|
-
<div id="<%=id%>" style="display:block;">
|
2
|
-
|
3
|
-
<div id="<%=id%>_edit" class="record edit" style="display:block;">
|
4
|
-
<%= form_for record, :action=>save_action do %>
|
5
|
-
<table>
|
6
|
-
<tbody>
|
7
|
-
<%- inspector.columns.each do |p| -%>
|
8
|
-
<tr>
|
9
|
-
<th><%= column_header(p) %></th>
|
10
|
-
<td><%= column_form(record, p) %></td>
|
11
|
-
</tr>
|
12
|
-
<%- end -%>
|
13
|
-
<tr>
|
14
|
-
<td colspan=2 align=center>
|
15
|
-
<%= submit "create".t %>
|
16
|
-
<%= link_to "cancel".t, "#", :onclick=>"$('##{id}').hide();return false;" %>
|
17
|
-
</td>
|
18
|
-
</tr>
|
19
|
-
</tbody>
|
20
|
-
</table>
|
21
|
-
<% end =%>
|
22
|
-
</div>
|
23
|
-
</div>
|
24
|
-
|
@@ -1,42 +0,0 @@
|
|
1
|
-
<div id="<%=id%>">
|
2
|
-
|
3
|
-
<div id="<%=id%>_show" class="record show" style="display:<%= edit ? 'none' : 'display' %>">
|
4
|
-
<table>
|
5
|
-
<tbody>
|
6
|
-
<%- inspector.columns.each do |p| -%>
|
7
|
-
<tr>
|
8
|
-
<th><%= column_header(p) %></th>
|
9
|
-
<td><%=h column_value(record, p) %></td>
|
10
|
-
</tr>
|
11
|
-
<%- end -%>
|
12
|
-
<tr>
|
13
|
-
<td colspan=2 align=center>
|
14
|
-
<%= link_to "edit", "#", :onclick=>toggle %>
|
15
|
-
</td>
|
16
|
-
</tr>
|
17
|
-
</tbody>
|
18
|
-
</table>
|
19
|
-
</div>
|
20
|
-
|
21
|
-
<div id="<%=id%>_edit" class="record edit" style="display:<%= edit ? 'display' : 'none' %>">
|
22
|
-
<%= form_for record, :action=>save_action do %>
|
23
|
-
<table>
|
24
|
-
<tbody>
|
25
|
-
<%- inspector.columns.each do |p| -%>
|
26
|
-
<tr>
|
27
|
-
<th><%= column_header(p) %></th>
|
28
|
-
<td><%= column_form(record, p) %></td>
|
29
|
-
</tr>
|
30
|
-
<%- end -%>
|
31
|
-
<tr>
|
32
|
-
<td colspan=2 align=center>
|
33
|
-
<%= submit (record.new_record? ? "create" : "update").t %>
|
34
|
-
<%= link_to "cancel", "#", :onclick=>toggle %>
|
35
|
-
</td>
|
36
|
-
</tr>
|
37
|
-
</tbody>
|
38
|
-
</table>
|
39
|
-
<% end =%>
|
40
|
-
</div>
|
41
|
-
</div>
|
42
|
-
|
data/test/merb_inspector_test.rb
DELETED
File without changes
|
data/test/test_helper.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
$:.push File.join(File.dirname(__FILE__), '..', 'lib')
|