rack-core-data 0.0.3 → 0.1.0
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/Gemfile.lock +1 -1
- data/lib/rack/core-data.rb +24 -3
- data/lib/rack/core-data/data_model/attribute.rb +38 -8
- data/lib/rack/core-data/version.rb +1 -1
- data/rack-core-data-0.0.3.gem +0 -0
- metadata +5 -4
data/Gemfile.lock
CHANGED
data/lib/rack/core-data.rb
CHANGED
@@ -31,9 +31,11 @@ module Rack
|
|
31
31
|
|
32
32
|
klass.class_eval do
|
33
33
|
self.strict_param_setting = false
|
34
|
+
self.raise_on_save_failure = false
|
34
35
|
|
35
36
|
plugin :json_serializer, :naked => true, :include => :url, :except => :id
|
36
37
|
plugin :schema
|
38
|
+
plugin :validation_helpers
|
37
39
|
|
38
40
|
def url
|
39
41
|
"/#{self.class.table_name}/#{id}"
|
@@ -53,6 +55,8 @@ module Rack
|
|
53
55
|
primary_key :id
|
54
56
|
|
55
57
|
entity.attributes.each do |attribute|
|
58
|
+
next if attribute.transient?
|
59
|
+
|
56
60
|
options = {
|
57
61
|
:null => attribute.optional?,
|
58
62
|
:index => attribute.indexed?,
|
@@ -90,10 +94,27 @@ module Rack
|
|
90
94
|
create_table unless table_exists?
|
91
95
|
end
|
92
96
|
|
97
|
+
klass.send :define_method, :validate do
|
98
|
+
entity.attributes.each do |attribute|
|
99
|
+
case attribute.type
|
100
|
+
when "Integer 16", "Integer 32", "Integer 64"
|
101
|
+
validates_integer attribute.name
|
102
|
+
when "Float", "Double", "Decimal"
|
103
|
+
validates_numeric attribute.name
|
104
|
+
when "String"
|
105
|
+
validates_min_length attribute.minimum_value, attribute.name if attribute.minimum_value
|
106
|
+
validates_max_length attribute.maximum_value, attribute.name if attribute.maximum_value
|
107
|
+
validates_min_length attribute.minimum_value, attribute.name if attribute.minimum_value
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
93
112
|
app.class_eval do
|
94
113
|
include Rack::CoreData::Models
|
95
114
|
klass = Rack::CoreData::Models.const_get(entity.name.capitalize)
|
96
115
|
|
116
|
+
disable :raise_errors, :show_exceptions
|
117
|
+
|
97
118
|
get "/#{entity.name.downcase.pluralize}/?" do
|
98
119
|
klass.all.to_json
|
99
120
|
end
|
@@ -105,7 +126,7 @@ module Rack
|
|
105
126
|
record.to_json
|
106
127
|
else
|
107
128
|
status 406
|
108
|
-
record.errors.to_json
|
129
|
+
{errors: record.errors}.to_json
|
109
130
|
end
|
110
131
|
end
|
111
132
|
|
@@ -120,7 +141,7 @@ module Rack
|
|
120
141
|
record.to_json
|
121
142
|
else
|
122
143
|
status 406
|
123
|
-
record.errors.to_json
|
144
|
+
{errors: record.errors}.to_json
|
124
145
|
end
|
125
146
|
end
|
126
147
|
|
@@ -130,7 +151,7 @@ module Rack
|
|
130
151
|
status 200
|
131
152
|
else
|
132
153
|
status 406
|
133
|
-
record.errors.to_json
|
154
|
+
{errors: record.errors}.to_json
|
134
155
|
end
|
135
156
|
end
|
136
157
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
class Rack::CoreData::DataModel
|
2
2
|
class Attribute
|
3
|
-
attr_reader :name, :type, :identifier, :version_hash_modifier, :default_value
|
3
|
+
attr_reader :name, :type, :identifier, :version_hash_modifier, :default_value, :minimum_value, :maximum_value, :regular_expression
|
4
4
|
|
5
5
|
def initialize(attribute)
|
6
6
|
raise ArgumentError unless ::Nokogiri::XML::Element === attribute
|
@@ -9,12 +9,12 @@ class Rack::CoreData::DataModel
|
|
9
9
|
@type = attribute['attributeType']
|
10
10
|
@identifier = attribute['elementID']
|
11
11
|
@version_hash_modifier = attribute['versionHashModifier']
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
12
|
+
|
13
|
+
@default_value = default_value_from_string(attribute['defaultValueString'])
|
14
|
+
@minimum_value = range_value_from_string(attribute['minValueString'])
|
15
|
+
@maximum_value = range_value_from_string(attribute['maxValueString'])
|
16
|
+
|
17
|
+
@regular_expression = Regexp.new(attributes['regularExpressionString']) rescue nil
|
18
18
|
|
19
19
|
@optional = attribute['optional'] == "YES"
|
20
20
|
@transient = attribute['transient'] == "YES"
|
@@ -23,11 +23,41 @@ class Rack::CoreData::DataModel
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def to_s
|
26
|
-
@name
|
26
|
+
[@name, @type].to_s
|
27
27
|
end
|
28
28
|
|
29
29
|
[:optional, :transient, :indexed, :syncable].each do |symbol|
|
30
30
|
define_method("#{symbol}?") {!!instance_variable_get(("@#{symbol}").intern)}
|
31
31
|
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def default_value_from_string(string)
|
36
|
+
return nil unless string
|
37
|
+
|
38
|
+
return case @type
|
39
|
+
when "Integer 16", "Integer 32", "Integer 64"
|
40
|
+
string.to_i
|
41
|
+
when "Float", "Decimal"
|
42
|
+
string.to_f
|
43
|
+
when "Boolean"
|
44
|
+
string == "YES"
|
45
|
+
else
|
46
|
+
string
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def range_value_from_string(string)
|
51
|
+
return nil unless string
|
52
|
+
|
53
|
+
return case @type
|
54
|
+
when "Float", "Decimal"
|
55
|
+
string.to_f
|
56
|
+
when "Date"
|
57
|
+
string
|
58
|
+
else
|
59
|
+
string.to_i
|
60
|
+
end
|
61
|
+
end
|
32
62
|
end
|
33
63
|
end
|
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-core-data
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-11-
|
12
|
+
date: 2012-11-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -138,6 +138,7 @@ files:
|
|
138
138
|
- ./lib/rack/core-data/version.rb
|
139
139
|
- ./lib/rack/core-data.rb
|
140
140
|
- ./LICENSE
|
141
|
+
- ./rack-core-data-0.0.3.gem
|
141
142
|
- ./rack-core-data.gemspec
|
142
143
|
- ./Rakefile
|
143
144
|
- ./README.md
|
@@ -155,7 +156,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
155
156
|
version: '0'
|
156
157
|
segments:
|
157
158
|
- 0
|
158
|
-
hash:
|
159
|
+
hash: -107443950940570454
|
159
160
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
160
161
|
none: false
|
161
162
|
requirements:
|
@@ -164,7 +165,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
164
165
|
version: '0'
|
165
166
|
segments:
|
166
167
|
- 0
|
167
|
-
hash:
|
168
|
+
hash: -107443950940570454
|
168
169
|
requirements: []
|
169
170
|
rubyforge_project:
|
170
171
|
rubygems_version: 1.8.24
|