extjsizable 1.0.1.alpha1 → 1.0.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/README.rdoc +20 -0
- data/VERSION +1 -1
- data/extjsizable.gemspec +3 -3
- data/lib/extjsizable/core_ext/array/extjs.rb +24 -1
- data/spec/extjsizable_spec.rb +15 -0
- metadata +17 -20
data/README.rdoc
CHANGED
@@ -70,6 +70,26 @@ It is generated executing
|
|
70
70
|
|
71
71
|
Parameters accepted are the same as <b>as_json</b> from Array, nesting into each record.
|
72
72
|
|
73
|
+
if <em>Array.dasherize_keys</em> is true, then nested Hashes are plained:
|
74
|
+
|
75
|
+
{ 'total' : 2,
|
76
|
+
'data' : [
|
77
|
+
{ 'id' : 1, 'title' : 'First Post', 'owner' : { 'name' : 'John'} },
|
78
|
+
{ 'id' : 2, 'title' : 'Second Post', 'owner' : { 'name' : 'Frank'} }
|
79
|
+
]
|
80
|
+
}
|
81
|
+
|
82
|
+
, becomes to
|
83
|
+
|
84
|
+
{ 'total' : 2,
|
85
|
+
'data' : [
|
86
|
+
{ 'id' : 1, 'title' : 'First Post', 'owner_name' : 'John' },
|
87
|
+
{ 'id' : 2, 'title' : 'Second Post', 'owner_name' : 'Frank' }
|
88
|
+
]
|
89
|
+
}
|
90
|
+
|
91
|
+
For now, it works in belongs_to associations. has_many requires duplication of each line when a nested Array appears. I dont think you need that.
|
92
|
+
|
73
93
|
== TODO
|
74
94
|
|
75
95
|
* Tests, tests, tests....
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.
|
1
|
+
1.0.2
|
data/extjsizable.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "extjsizable"
|
8
|
-
s.version = "1.0.
|
8
|
+
s.version = "1.0.2"
|
9
9
|
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new("
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Ungue"]
|
12
|
-
s.date = "2011-
|
12
|
+
s.date = "2011-11-08"
|
13
13
|
s.description = "You can create REST services to be used for Ext JS 4 in an easy manner by calling to_extjs in your models or arrays."
|
14
14
|
s.email = "ungue79@yahoo.es"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -4,6 +4,12 @@ module Extjsizable
|
|
4
4
|
module ExtJs
|
5
5
|
extend ActiveSupport::Concern
|
6
6
|
|
7
|
+
included do
|
8
|
+
class_attribute :dasherize_keys
|
9
|
+
|
10
|
+
self.dasherize_keys = false
|
11
|
+
end
|
12
|
+
|
7
13
|
module InstanceMethods
|
8
14
|
|
9
15
|
# Creates a JSON object by specifying which attributes we want to be shown.
|
@@ -16,7 +22,24 @@ module Extjsizable
|
|
16
22
|
# }
|
17
23
|
|
18
24
|
def to_extjs(options = {})
|
19
|
-
|
25
|
+
array_json_data = as_json(options)
|
26
|
+
|
27
|
+
if ::Array.dasherize_keys?
|
28
|
+
array_json_data.map! { |h| dasherize_hash_keys(h) }
|
29
|
+
end
|
30
|
+
|
31
|
+
{ :total => (options.delete(:total) || self.length), :data => array_json_data }.with_indifferent_access
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
# Dasherize keys that {:a => {:b => :c} } becomes to { 'a_b' => :c }
|
37
|
+
def dasherize_hash_keys(h, dash_key = '')
|
38
|
+
return { dash_key => h } unless h.is_a?(Hash)
|
39
|
+
|
40
|
+
h.reduce({}) do |nh, (k, v)|
|
41
|
+
nh.merge(dasherize_hash_keys(v, dash_key.blank? ? k.to_s : "#{dash_key}_#{k.to_s}"))
|
42
|
+
end
|
20
43
|
end
|
21
44
|
|
22
45
|
end
|
data/spec/extjsizable_spec.rb
CHANGED
@@ -178,6 +178,21 @@ describe "Extjsizable" do
|
|
178
178
|
h[:products].should have(2).items
|
179
179
|
end
|
180
180
|
end
|
181
|
+
|
182
|
+
it 'should return only related data attributes with :include => :category and dasherize all keys' do
|
183
|
+
Array.dasherize_keys = true
|
184
|
+
json_hash = Product.all.to_extjs :include => :category
|
185
|
+
json_hash.should have_key(:total)
|
186
|
+
json_hash[:total].should == 8
|
187
|
+
|
188
|
+
json_hash.should have_key(:data)
|
189
|
+
json_hash[:data].should have(8).items
|
190
|
+
json_hash[:data].each do |h|
|
191
|
+
h.should have_key('name')
|
192
|
+
h.should have_key('id')
|
193
|
+
h.should have_key('category_name')
|
194
|
+
end
|
195
|
+
end
|
181
196
|
|
182
197
|
end
|
183
198
|
end
|
metadata
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: extjsizable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
5
|
-
prerelease:
|
4
|
+
version: 1.0.2
|
5
|
+
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Ungue
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-11-08 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
16
|
-
requirement: &
|
16
|
+
requirement: &9241320 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '3.0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *9241320
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: activerecord
|
27
|
-
requirement: &
|
27
|
+
requirement: &9240800 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '3.0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *9240800
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec
|
38
|
-
requirement: &
|
38
|
+
requirement: &9240300 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 2.3.0
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *9240300
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: bundler
|
49
|
-
requirement: &
|
49
|
+
requirement: &9239740 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 1.0.0
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *9239740
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: jeweler
|
60
|
-
requirement: &
|
60
|
+
requirement: &9239240 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 1.6.3
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *9239240
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rcov
|
71
|
-
requirement: &
|
71
|
+
requirement: &9238740 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,7 +76,7 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *9238740
|
80
80
|
description: You can create REST services to be used for Ext JS 4 in an easy manner
|
81
81
|
by calling to_extjs in your models or arrays.
|
82
82
|
email: ungue79@yahoo.es
|
@@ -112,15 +112,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
112
112
|
- - ! '>='
|
113
113
|
- !ruby/object:Gem::Version
|
114
114
|
version: '0'
|
115
|
-
segments:
|
116
|
-
- 0
|
117
|
-
hash: -4318746047491848362
|
118
115
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
119
116
|
none: false
|
120
117
|
requirements:
|
121
|
-
- - ! '
|
118
|
+
- - ! '>='
|
122
119
|
- !ruby/object:Gem::Version
|
123
|
-
version:
|
120
|
+
version: '0'
|
124
121
|
requirements: []
|
125
122
|
rubyforge_project:
|
126
123
|
rubygems_version: 1.8.10
|