extjs-mvc 0.0.1 → 0.1.2
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 +4 -0
- data/VERSION +1 -0
- data/lib/action_controller/controller.rb +55 -0
- data/lib/action_view/helpers/store.rb +39 -0
- data/lib/active_record/model.rb +63 -0
- data/lib/dm/model.rb +0 -0
- data/lib/mvc.rb +18 -0
- metadata +9 -8
- data/.document +0 -5
- data/.gitignore +0 -5
- data/mvc.gemspec +0 -55
data/Rakefile
CHANGED
@@ -11,12 +11,16 @@ begin
|
|
11
11
|
gem.homepage = "http://github.com/extjs/mvc"
|
12
12
|
gem.authors = ["Chris Scott"]
|
13
13
|
gem.add_development_dependency "thoughtbot-shoulda"
|
14
|
+
gem.test_files = []
|
15
|
+
gem.files = FileList["[A-Z]*", "{bin,generators,lib,test}/**/*", 'lib/jeweler/templates/.gitignore']
|
16
|
+
|
14
17
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
15
18
|
end
|
16
19
|
rescue LoadError
|
17
20
|
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
18
21
|
end
|
19
22
|
|
23
|
+
|
20
24
|
require 'rake/testtask'
|
21
25
|
Rake::TestTask.new(:test) do |test|
|
22
26
|
test.libs << 'lib' << 'test'
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.2
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module ExtJS::Controller
|
2
|
+
|
3
|
+
def self.included(controller)
|
4
|
+
controller.send(:extend, ClassMethods)
|
5
|
+
end
|
6
|
+
|
7
|
+
##
|
8
|
+
# Controller class methods
|
9
|
+
#
|
10
|
+
module ClassMethods
|
11
|
+
|
12
|
+
def extjs_reader(model)
|
13
|
+
{
|
14
|
+
"successProperty" => extjs_success_property,
|
15
|
+
"root" => extjs_root,
|
16
|
+
"messageProperty" => extjs_message_property
|
17
|
+
}.merge(model.extjs_record)
|
18
|
+
end
|
19
|
+
|
20
|
+
def extjs_proxy(params)
|
21
|
+
proxy = {}
|
22
|
+
if params[:proxy] === 'direct'
|
23
|
+
actions = ['create', 'read', 'update', 'destroy']
|
24
|
+
proxy["api"] = {}
|
25
|
+
direct_actions.each_index do |n|
|
26
|
+
proxy["api"][actions[n]] = direct_actions[n][:name]
|
27
|
+
end
|
28
|
+
else
|
29
|
+
if params[:config]["api"]
|
30
|
+
proxy["api"] = {}
|
31
|
+
params[:config]["api"].each {|k,v| proxy["api"][k] = "/#{params[:controller]}/#{v}" }
|
32
|
+
else
|
33
|
+
proxy["url"] = "/#{params[:controller]}.#{params[:format].to_s}"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
proxy
|
37
|
+
end
|
38
|
+
|
39
|
+
def extjs_root(value=nil)
|
40
|
+
ExtJS::MVC.root = value unless value.nil?
|
41
|
+
ExtJS::MVC.root
|
42
|
+
end
|
43
|
+
|
44
|
+
def extjs_success_property(value=nil)
|
45
|
+
ExtJS::MVC.success_property = value unless value.nil?
|
46
|
+
ExtJS::MVC.success_property
|
47
|
+
end
|
48
|
+
|
49
|
+
def extjs_message_property(value=nil)
|
50
|
+
ExtJS::MVC.message_property = value unless value.nil?
|
51
|
+
ExtJS::MVC.message_property
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module ExtJS::Helpers
|
2
|
+
module Store
|
3
|
+
def extjs_store(params)
|
4
|
+
params[:format] = 'json' if params[:format].nil?
|
5
|
+
params[:proxy] = 'http' if params[:proxy].nil?
|
6
|
+
|
7
|
+
controller = "#{params[:controller].to_s.capitalize}Controller".constantize
|
8
|
+
model = ((params[:model]) ? params[:model] : params[:controller].singularize).capitalize.constantize
|
9
|
+
|
10
|
+
reader = controller.extjs_reader(model)
|
11
|
+
proxy = controller.extjs_proxy(params)
|
12
|
+
|
13
|
+
params[:config]["storeId"] = model.to_s.downcase
|
14
|
+
params[:config].merge!(reader)
|
15
|
+
params[:config].merge!(proxy)
|
16
|
+
|
17
|
+
type = (params[:proxy] === 'direct' ? params[:proxy] : params[:format]).capitalize
|
18
|
+
|
19
|
+
script = ''
|
20
|
+
# ugly hack for DirectProxy API. Have to add an Ext.onReady() after the Store constructor to set API
|
21
|
+
if params[:proxy] === 'direct'
|
22
|
+
auto_load = params[:config].delete("autoLoad")
|
23
|
+
cname = params[:controller].capitalize
|
24
|
+
script = "Ext.onReady(function() { var s = Ext.StoreMgr.get('#{model.to_s.downcase}');"
|
25
|
+
if (params[:config]["directFn"])
|
26
|
+
script += "s.proxy.directFn = #{cname}.#{params[:config]["directFn"]};"
|
27
|
+
else
|
28
|
+
script += "s.proxy.setApi({create:#{cname}.#{params[:config]["api"]["create"]},read:#{cname}.#{params[:config]["api"]["read"]},update:#{cname}.#{params[:config]["api"]["update"]},destroy:#{cname}.#{params[:config]["api"]["destroy"]}});"
|
29
|
+
end
|
30
|
+
if auto_load
|
31
|
+
script += "s.load();"
|
32
|
+
end
|
33
|
+
script += "});"
|
34
|
+
end
|
35
|
+
"new Ext.data.#{type}Store(#{params[:config].to_json});#{script}"
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module ExtJS
|
2
|
+
module Model
|
3
|
+
def self.included(model)
|
4
|
+
model.send(:extend, ClassMethods)
|
5
|
+
model.send(:include, InstanceMethods)
|
6
|
+
end
|
7
|
+
|
8
|
+
##
|
9
|
+
# InstanceMethods
|
10
|
+
#
|
11
|
+
module InstanceMethods
|
12
|
+
def to_record
|
13
|
+
data = {self.class.primary_key => self.send(self.class.primary_key)}
|
14
|
+
self.class.extjs_fields.each do |f|
|
15
|
+
data[f] = self.send(f)
|
16
|
+
end
|
17
|
+
data
|
18
|
+
end
|
19
|
+
end
|
20
|
+
##
|
21
|
+
# ClassMethods
|
22
|
+
#
|
23
|
+
module ClassMethods
|
24
|
+
@@fields = []
|
25
|
+
##
|
26
|
+
# Defines the subset of AR columns used to create Ext.data.Record def'n.
|
27
|
+
# @param {Array/Hash} list-of-fields to include, :only, or :exclude
|
28
|
+
#
|
29
|
+
def extjs_fields(*params)
|
30
|
+
options = params.extract_options!
|
31
|
+
if !options.keys.empty?
|
32
|
+
if options[:only]
|
33
|
+
@@fields = options[:only]
|
34
|
+
elsif options[:exclude]
|
35
|
+
@@fields = self.columns.reject {|c| options[:exclude].find {|ex| c.name.to_sym === ex}}.collect {|c| c.name.to_sym}
|
36
|
+
end
|
37
|
+
elsif !params.empty?
|
38
|
+
@@fields = params
|
39
|
+
else
|
40
|
+
@@fields
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
##
|
45
|
+
# render AR columns to Ext.data.Record.create format
|
46
|
+
# eg: {name:'foo', type: 'string'}
|
47
|
+
#
|
48
|
+
def extjs_record
|
49
|
+
@@fields = self.columns.collect {|c| c.name.to_sym } if @@fields.empty?
|
50
|
+
{
|
51
|
+
"fields" => @@fields.collect {|f|
|
52
|
+
col = self.columns.find {|c| c.name.to_sym === f}
|
53
|
+
field = {:name => col.name, :allowBlank => col.null, :type => col.type}
|
54
|
+
field[:dateFormat] = "c" if col.type === :datetime || col.type === :date # <-- ugly hack for date
|
55
|
+
field
|
56
|
+
},
|
57
|
+
"idProperty" => self.primary_key
|
58
|
+
}
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
data/lib/dm/model.rb
ADDED
File without changes
|
data/lib/mvc.rb
CHANGED
@@ -0,0 +1,18 @@
|
|
1
|
+
module ExtJS
|
2
|
+
class MVC
|
3
|
+
@@success_property = :success
|
4
|
+
@@message_property = :message
|
5
|
+
@@root = :data
|
6
|
+
cattr_accessor :success_property
|
7
|
+
cattr_accessor :message_property
|
8
|
+
cattr_accessor :root
|
9
|
+
|
10
|
+
if defined?(ActiveRecord)
|
11
|
+
require 'active_record/model'
|
12
|
+
end
|
13
|
+
require 'action_controller/controller'
|
14
|
+
require 'action_view/helpers/store'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: extjs-mvc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Scott
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-08-
|
12
|
+
date: 2009-08-28 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -33,14 +33,16 @@ extra_rdoc_files:
|
|
33
33
|
- README
|
34
34
|
- README.rdoc
|
35
35
|
files:
|
36
|
-
- .document
|
37
|
-
- .gitignore
|
38
36
|
- LICENSE
|
39
37
|
- README
|
40
38
|
- README.rdoc
|
41
39
|
- Rakefile
|
40
|
+
- VERSION
|
41
|
+
- lib/action_controller/controller.rb
|
42
|
+
- lib/action_view/helpers/store.rb
|
43
|
+
- lib/active_record/model.rb
|
44
|
+
- lib/dm/model.rb
|
42
45
|
- lib/mvc.rb
|
43
|
-
- mvc.gemspec
|
44
46
|
- test/mvc_test.rb
|
45
47
|
- test/test_helper.rb
|
46
48
|
has_rdoc: true
|
@@ -70,6 +72,5 @@ rubygems_version: 1.3.5
|
|
70
72
|
signing_key:
|
71
73
|
specification_version: 2
|
72
74
|
summary: Ruby tools for ExtJS development
|
73
|
-
test_files:
|
74
|
-
|
75
|
-
- test/mvc_test.rb
|
75
|
+
test_files: []
|
76
|
+
|
data/.document
DELETED
data/mvc.gemspec
DELETED
@@ -1,55 +0,0 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
|
4
|
-
# -*- encoding: utf-8 -*-
|
5
|
-
|
6
|
-
Gem::Specification.new do |s|
|
7
|
-
s.name = %q{mvc}
|
8
|
-
s.version = "0.0.1"
|
9
|
-
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ["Chris Scott"]
|
12
|
-
s.date = %q{2009-08-26}
|
13
|
-
s.description = %q{MVC tools to assist with ExtJS development in Rails and Merb}
|
14
|
-
s.email = %q{christocracy@gmail.com}
|
15
|
-
s.extra_rdoc_files = [
|
16
|
-
"LICENSE",
|
17
|
-
"README",
|
18
|
-
"README.rdoc"
|
19
|
-
]
|
20
|
-
s.files = [
|
21
|
-
".document",
|
22
|
-
".gitignore",
|
23
|
-
"LICENSE",
|
24
|
-
"README",
|
25
|
-
"README.rdoc",
|
26
|
-
"Rakefile",
|
27
|
-
"lib/mvc.rb",
|
28
|
-
"mvc.gemspec",
|
29
|
-
"test/mvc_test.rb",
|
30
|
-
"test/test_helper.rb"
|
31
|
-
]
|
32
|
-
s.has_rdoc = true
|
33
|
-
s.homepage = %q{http://github.com/extjs/mvc}
|
34
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
35
|
-
s.require_paths = ["lib"]
|
36
|
-
s.rubygems_version = %q{1.3.1}
|
37
|
-
s.summary = %q{Ruby tools for ExtJS development}
|
38
|
-
s.test_files = [
|
39
|
-
"test/test_helper.rb",
|
40
|
-
"test/mvc_test.rb"
|
41
|
-
]
|
42
|
-
|
43
|
-
if s.respond_to? :specification_version then
|
44
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
45
|
-
s.specification_version = 2
|
46
|
-
|
47
|
-
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
48
|
-
s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
49
|
-
else
|
50
|
-
s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
51
|
-
end
|
52
|
-
else
|
53
|
-
s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
54
|
-
end
|
55
|
-
end
|