forked from kaleidos/grails-postgresql-extensions
-
Notifications
You must be signed in to change notification settings - Fork 0
/
PostgresqlExtensionsGrailsPlugin.groovy
82 lines (69 loc) · 2.99 KB
/
PostgresqlExtensionsGrailsPlugin.groovy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import net.kaleidos.hibernate.postgresql.criteria.ArrayCriterias
import net.kaleidos.hibernate.postgresql.criteria.HstoreCriterias
class PostgresqlExtensionsGrailsPlugin {
// the plugin version
def version = "0.6.7"
// the version or versions of Grails the plugin is designed for
def grailsVersion = "2.0 > *"
// the other plugins this plugin depends on
def dependsOn = [:]
// resources that are excluded from plugin packaging
def pluginExcludes = [
"grails-app/views/error.gsp",
"grails-app/controllers/**",
"grails-app/domain/**",
"grails-app/i18n/**",
"grails-app/services/**",
"grails-app/taglib/**",
"grails-app/utils/**",
"grails-app/views/**",
"web-app/**"
]
def title = "Grails Postgresql Extensions Plugin"
def author = "Iván López"
def authorEmail = "[email protected]"
def description = '''\
This plugin provides support for Postgresql Native Types like Arrays, HStores, JSON,...
'''
// URL to the plugin's documentation
def documentation = "https://github.com/kaleidos/grails-postgresql-extensions/blob/master/README.md"
// Extra (optional) plugin metadata
// License: one of 'APACHE', 'GPL2', 'GPL3'
def license = "APACHE"
// Details of company behind the plugin (if there is one)
def organization = [ name: "Kaleidos", url: "http://kaleidos.net" ]
// Any additional developers beyond the author specified above.
def developers = [ [ name: "Alonso Torres", email: "[email protected]" ]]
// Location of the plugin's issue tracker.
def issueManagement = [ system: "GITHUB", url: "https://github.com/kaleidos/grails-postgresql-extensions/issues" ]
// Online location of the plugin's browseable source code.
def scm = [ url: "https://github.com/kaleidos/grails-postgresql-extensions" ]
// TODO: Extract to utils class or service
private decorateConstructor(className, metaclass) {
def hstoreProperties = []
metaclass.properties.each { prop->
if (prop.type == net.kaleidos.hibernate.postgresql.hstore.HstoreDomainType) {
println "[PostgresqlExtensions] Adding property ${className}.${prop.name} as a hstore property"
hstoreProperties << prop.name
}
}
if (hstoreProperties.size() > 0) {
def constructor = metaclass.retrieveConstructor(Map)
metaclass.constructor = { Map m ->
hstoreProperties.each { name->
m[name] = new net.kaleidos.hibernate.postgresql.hstore.HstoreDomainType(m[name])
}
return constructor.newInstance(m)
}
}
}
def doWithDynamicMethods = { ctx ->
new ArrayCriterias()
new HstoreCriterias()
}
def doWithApplicationContext = { ctx ->
for (domainClass in application.domainClasses) {
decorateConstructor(domainClass.clazz.name, domainClass.metaClass)
}
}
}