crud-service 0.0.8 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/lib/api.rb +5 -5
- data/lib/dal.rb +14 -5
- data/spec/unit/dal_spec.rb +62 -28
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
OWU4YWI0ZDc4OWRiYTU2YjhjYjg5MzFjNWM2MDg2MjJhZjQwYzU4YQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NDFkMmFkZmZmODQ3YjVhNzA3Y2M4MzgwMjgzYzg2NGU1MzAxYTM4YQ==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YTI3MDU2ZmU4MTc1ZDU2MWM3NmM1MGFiYTIwMDYzYWEzNWY3MGQ1MzY3YjBh
|
10
|
+
Y2Q5NWEyYjczZmIzZmMzZGY0Mjg5MGEzMTViOWE4NGRiODc1NThjZjA5NGE0
|
11
|
+
MzcyZmQxMmIxZDE2ZmZhMGY3OGY1NzU4ZjE0ZDczMTE4NGQ4ZWQ=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YTQzOGZlMjM2MDkxODAzZDU0ZmMyZDM1MzQ2Njc0ZTM2MTg1MmQ4ZmI4MTAw
|
14
|
+
NzVmZTkzNDJmMTRlNjBlNDQ2YmQ1MTY1YzE0MmI1MzljZTZhZjE4ZWJkODky
|
15
|
+
N2I0MjIwMWE0M2IwZjA2YjMxMmU2NzRhODhjNWM3MWY3ZDZiNjI=
|
data/lib/api.rb
CHANGED
@@ -39,7 +39,7 @@ module CrudService
|
|
39
39
|
return 400 unless service.valid_insert?(data)
|
40
40
|
|
41
41
|
# Already Exists?
|
42
|
-
return 409 if service.exists_by_primary_key?(data[
|
42
|
+
return 409 if service.exists_by_primary_key?(data[primary_key_name])
|
43
43
|
|
44
44
|
# Do Insert
|
45
45
|
record = service.insert(data)
|
@@ -57,7 +57,7 @@ module CrudService
|
|
57
57
|
service = settings.send(service_name)
|
58
58
|
|
59
59
|
# Must Exist
|
60
|
-
return 404 unless service.exists_by_primary_key?(params[
|
60
|
+
return 404 unless service.exists_by_primary_key?(params[primary_key_name.to_sym])
|
61
61
|
|
62
62
|
# Get The Data
|
63
63
|
begin
|
@@ -70,7 +70,7 @@ module CrudService
|
|
70
70
|
return 400 unless service.valid_update?(data)
|
71
71
|
|
72
72
|
# Do Update
|
73
|
-
record = service.update_by_primary_key(params[
|
73
|
+
record = service.update_by_primary_key(params[primary_key_name.to_sym],data)
|
74
74
|
|
75
75
|
# Other Error
|
76
76
|
return 500 if record.nil?
|
@@ -85,10 +85,10 @@ module CrudService
|
|
85
85
|
service = settings.send(service_name)
|
86
86
|
|
87
87
|
# Must Exist
|
88
|
-
return 404 unless service.exists_by_primary_key?(params[
|
88
|
+
return 404 unless service.exists_by_primary_key?(params[primary_key_name.to_sym])
|
89
89
|
|
90
90
|
# Do Delete
|
91
|
-
return 400 unless service.delete_by_primary_key(params[
|
91
|
+
return 400 unless service.delete_by_primary_key(params[primary_key_name.to_sym])
|
92
92
|
|
93
93
|
204
|
94
94
|
end
|
data/lib/dal.rb
CHANGED
@@ -7,7 +7,7 @@ module CrudService
|
|
7
7
|
# Your should extend this class to provide configuration for your dal, please see
|
8
8
|
# the README file at http://github.com/tomcully/crud-service
|
9
9
|
class Dal
|
10
|
-
attr_accessor :mysql, :memcache, :log, :table_name, :fields, :relations, :primary_key
|
10
|
+
attr_accessor :mysql, :memcache, :log, :table_name, :fields, :relations, :primary_key, :auto_primary_key, :cache_prefix
|
11
11
|
|
12
12
|
# Create an instance.
|
13
13
|
def initialize(mysql, memcache = nil, log)
|
@@ -29,7 +29,7 @@ module CrudService
|
|
29
29
|
table_versions = ""
|
30
30
|
|
31
31
|
tables.each do |table|
|
32
|
-
tbversion = @memcache.get(table+"-version")
|
32
|
+
tbversion = @memcache.get("#{@cache_prefix}-"+table+"-version")
|
33
33
|
if tbversion.nil?
|
34
34
|
expire_table_cache([table])
|
35
35
|
tbversion = 1
|
@@ -38,7 +38,7 @@ module CrudService
|
|
38
38
|
end
|
39
39
|
|
40
40
|
# Get the Query Hash
|
41
|
-
querymd5 = "
|
41
|
+
querymd5 = "#{@cache_prefix}-"+Digest::MD5.hexdigest(query+":"+table_versions)
|
42
42
|
|
43
43
|
# Read Cache and return if hit
|
44
44
|
results = @memcache.get querymd5
|
@@ -189,6 +189,11 @@ module CrudService
|
|
189
189
|
@mysql.escape(str)
|
190
190
|
end
|
191
191
|
|
192
|
+
# Get the last insert id
|
193
|
+
def get_last_id
|
194
|
+
return @mysql.last_id
|
195
|
+
end
|
196
|
+
|
192
197
|
# Get one record via a query
|
193
198
|
def get_one(query)
|
194
199
|
res = get_all_by_query(query)
|
@@ -358,7 +363,7 @@ module CrudService
|
|
358
363
|
return if @memcache.nil?
|
359
364
|
|
360
365
|
table_names.each do |table_name|
|
361
|
-
key = table_name+"-version"
|
366
|
+
key = "#{@cache_prefix}-"+table_name+"-version"
|
362
367
|
version = @memcache.get(key)
|
363
368
|
if version.nil?
|
364
369
|
@memcache.set(key,1,nil,{:raw=>true})
|
@@ -427,7 +432,11 @@ module CrudService
|
|
427
432
|
|
428
433
|
expire_table_cache(get_all_related_tables)
|
429
434
|
|
430
|
-
|
435
|
+
if @auto_primary_key
|
436
|
+
get_one({@primary_key => get_last_id})
|
437
|
+
else
|
438
|
+
get_one({@primary_key => data[@primary_key]})
|
439
|
+
end
|
431
440
|
end
|
432
441
|
|
433
442
|
# Update a record by its primary key from data
|
data/spec/unit/dal_spec.rb
CHANGED
@@ -8,6 +8,7 @@ describe CrudService::Dal do
|
|
8
8
|
|
9
9
|
@generic_dal = CrudService::Dal.new(@mock_mysql, @mock_memcache, @mock_log)
|
10
10
|
@generic_dal.table_name = "testtable"
|
11
|
+
@generic_dal.cache_prefix = "prefix"
|
11
12
|
end
|
12
13
|
|
13
14
|
describe '#initialize' do
|
@@ -26,9 +27,9 @@ describe CrudService::Dal do
|
|
26
27
|
mock_result = mysql_result_mock(testdata)
|
27
28
|
|
28
29
|
query = 'test invalid query'
|
29
|
-
query_hash = "
|
30
|
+
query_hash = "prefix-"+Digest::MD5.hexdigest(query+":testtable-1")
|
30
31
|
|
31
|
-
@mock_memcache.should_receive(:get).ordered.with("testtable-version").and_return(1)
|
32
|
+
@mock_memcache.should_receive(:get).ordered.with("prefix-testtable-version").and_return(1)
|
32
33
|
@mock_memcache.should_receive(:get).ordered.with(query_hash).and_return(nil)
|
33
34
|
@mock_mysql.should_receive(:query).with(query).and_return(mock_result)
|
34
35
|
@mock_memcache.should_receive(:set).ordered.with(query_hash, testdata)
|
@@ -39,9 +40,9 @@ describe CrudService::Dal do
|
|
39
40
|
it 'should not attempt to query the database on a cache hit' do
|
40
41
|
testdata = [ { "field_one" => "one" } ]
|
41
42
|
query = 'test invalid query'
|
42
|
-
query_hash = "
|
43
|
+
query_hash = "prefix-"+Digest::MD5.hexdigest(query+":testtable-1")
|
43
44
|
|
44
|
-
@mock_memcache.should_receive(:get).ordered.with("testtable-version").and_return(1)
|
45
|
+
@mock_memcache.should_receive(:get).ordered.with("prefix-testtable-version").and_return(1)
|
45
46
|
@mock_memcache.should_receive(:get).ordered.with(query_hash).and_return(testdata)
|
46
47
|
@mock_mysql.should_not_receive(:query)
|
47
48
|
@mock_memcache.should_not_receive(:set).ordered
|
@@ -65,11 +66,11 @@ describe CrudService::Dal do
|
|
65
66
|
mock_result = mysql_result_mock(testdata)
|
66
67
|
|
67
68
|
query = 'test invalid query'
|
68
|
-
query_hash = "
|
69
|
+
query_hash = "prefix-"+Digest::MD5.hexdigest(query+":testtable-1")
|
69
70
|
|
70
|
-
@mock_memcache.should_receive(:get).ordered.with("testtable-version").and_return(nil)
|
71
|
-
@mock_memcache.should_receive(:get).ordered.with("testtable-version").and_return(nil)
|
72
|
-
@mock_memcache.should_receive(:set).ordered.with("testtable-version",1,nil,{:raw=>true})
|
71
|
+
@mock_memcache.should_receive(:get).ordered.with("prefix-testtable-version").and_return(nil)
|
72
|
+
@mock_memcache.should_receive(:get).ordered.with("prefix-testtable-version").and_return(nil)
|
73
|
+
@mock_memcache.should_receive(:set).ordered.with("prefix-testtable-version",1,nil,{:raw=>true})
|
73
74
|
@mock_memcache.should_receive(:get).ordered.with(query_hash).and_return(nil)
|
74
75
|
@mock_mysql.should_receive(:query).ordered.with(query).and_return(mock_result)
|
75
76
|
@mock_memcache.should_receive(:set).ordered.with(query_hash, testdata)
|
@@ -83,18 +84,18 @@ describe CrudService::Dal do
|
|
83
84
|
mock_result = mysql_result_mock(testdata)
|
84
85
|
|
85
86
|
query = 'test invalid query'
|
86
|
-
query_hash = "
|
87
|
+
query_hash = "prefix-"+Digest::MD5.hexdigest(query+":testtable-1")
|
87
88
|
|
88
|
-
@mock_memcache.should_receive(:get).ordered.with("testtable-version").and_return(1)
|
89
|
+
@mock_memcache.should_receive(:get).ordered.with("prefix-testtable-version").and_return(1)
|
89
90
|
@mock_memcache.should_receive(:get).ordered.with(query_hash).and_return(nil)
|
90
91
|
@mock_mysql.should_receive(:query).with(query).and_return(mock_result)
|
91
92
|
@mock_memcache.should_receive(:set).ordered.with(query_hash, testdata)
|
92
93
|
|
93
94
|
@generic_dal.cached_query(query,[]).should eq testdata
|
94
95
|
|
95
|
-
query_hash = "
|
96
|
+
query_hash = "prefix-"+Digest::MD5.hexdigest(query+":testtable-2")
|
96
97
|
|
97
|
-
@mock_memcache.should_receive(:get).ordered.with("testtable-version").and_return(2)
|
98
|
+
@mock_memcache.should_receive(:get).ordered.with("prefix-testtable-version").and_return(2)
|
98
99
|
@mock_memcache.should_receive(:get).ordered.with(query_hash).and_return(nil)
|
99
100
|
@mock_mysql.should_receive(:query).with(query).and_return(mock_result)
|
100
101
|
@mock_memcache.should_receive(:set).ordered.with(query_hash, testdata)
|
@@ -443,6 +444,13 @@ describe CrudService::Dal do
|
|
443
444
|
end
|
444
445
|
end
|
445
446
|
|
447
|
+
describe '#get_last_id' do
|
448
|
+
it 'should call mysql last_id' do
|
449
|
+
@mock_mysql.should_receive(:last_id)
|
450
|
+
@generic_dal.get_last_id
|
451
|
+
end
|
452
|
+
end
|
453
|
+
|
446
454
|
describe '#get_one' do
|
447
455
|
before(:each) do
|
448
456
|
memcache_null(@mock_memcache)
|
@@ -778,26 +786,26 @@ describe CrudService::Dal do
|
|
778
786
|
describe '#expire_table_cache' do
|
779
787
|
it 'should set a table version when it doesnt exist' do
|
780
788
|
|
781
|
-
@mock_memcache.should_receive(:get).ordered.with("testtable-version").and_return(nil)
|
782
|
-
@mock_memcache.should_receive(:set).ordered.with("testtable-version",1,nil,{:raw=>true}).and_return(nil)
|
789
|
+
@mock_memcache.should_receive(:get).ordered.with("prefix-testtable-version").and_return(nil)
|
790
|
+
@mock_memcache.should_receive(:set).ordered.with("prefix-testtable-version",1,nil,{:raw=>true}).and_return(nil)
|
783
791
|
|
784
792
|
@generic_dal.expire_table_cache(['testtable'])
|
785
793
|
end
|
786
794
|
|
787
795
|
it 'should increment a table version when it exists' do
|
788
796
|
|
789
|
-
@mock_memcache.should_receive(:get).ordered.with("testtable-version").and_return(1)
|
790
|
-
@mock_memcache.should_receive(:incr).ordered.with("testtable-version",1,nil).and_return(nil)
|
797
|
+
@mock_memcache.should_receive(:get).ordered.with("prefix-testtable-version").and_return(1)
|
798
|
+
@mock_memcache.should_receive(:incr).ordered.with("prefix-testtable-version",1,nil).and_return(nil)
|
791
799
|
|
792
800
|
@generic_dal.expire_table_cache(['testtable'])
|
793
801
|
end
|
794
802
|
|
795
803
|
it 'should expire multiple tables' do
|
796
804
|
|
797
|
-
@mock_memcache.should_receive(:get).ordered.with("testtable-version").and_return(1)
|
798
|
-
@mock_memcache.should_receive(:incr).ordered.with("testtable-version",1,nil).and_return(nil)
|
799
|
-
@mock_memcache.should_receive(:get).ordered.with("tabletwo-version").and_return(1)
|
800
|
-
@mock_memcache.should_receive(:incr).ordered.with("tabletwo-version",1,nil).and_return(nil)
|
805
|
+
@mock_memcache.should_receive(:get).ordered.with("prefix-testtable-version").and_return(1)
|
806
|
+
@mock_memcache.should_receive(:incr).ordered.with("prefix-testtable-version",1,nil).and_return(nil)
|
807
|
+
@mock_memcache.should_receive(:get).ordered.with("prefix-tabletwo-version").and_return(1)
|
808
|
+
@mock_memcache.should_receive(:incr).ordered.with("prefix-tabletwo-version",1,nil).and_return(nil)
|
801
809
|
|
802
810
|
@generic_dal.expire_table_cache(['testtable','tabletwo'])
|
803
811
|
end
|
@@ -1082,19 +1090,45 @@ describe CrudService::Dal do
|
|
1082
1090
|
@generic_dal.fields = {
|
1083
1091
|
"field_one" => { :type => :integer }
|
1084
1092
|
}
|
1093
|
+
@generic_dal.auto_primary_key = false
|
1085
1094
|
|
1086
1095
|
query = "INSERT INTO `test_table` (`field_one`) VALUES ('one')"
|
1087
1096
|
|
1088
1097
|
@mock_mysql.should_receive(:query).ordered.with(query)
|
1098
|
+
@mock_mysql.should_not_receive(:last_id)
|
1089
1099
|
|
1090
|
-
@mock_memcache.should_receive(:get).ordered.with('test_table-version').and_return(1)
|
1091
|
-
@mock_memcache.should_receive(:incr).ordered.with('test_table-version',1,nil)
|
1100
|
+
@mock_memcache.should_receive(:get).ordered.with('prefix-test_table-version').and_return(1)
|
1101
|
+
@mock_memcache.should_receive(:incr).ordered.with('prefix-test_table-version',1,nil)
|
1092
1102
|
|
1093
|
-
@mock_memcache.should_receive(:get).ordered.with('test_table-version').and_return(1)
|
1103
|
+
@mock_memcache.should_receive(:get).ordered.with('prefix-test_table-version').and_return(1)
|
1094
1104
|
@mock_memcache.should_receive(:get).ordered.and_return([{ "field_one" => "one","id"=>1 }])
|
1095
1105
|
|
1096
1106
|
@generic_dal.insert(testdata)
|
1097
1107
|
end
|
1108
|
+
|
1109
|
+
it 'should call last_id when auto_primary_key is true' do
|
1110
|
+
testdata = { "field_one" => "one" }
|
1111
|
+
|
1112
|
+
@generic_dal.table_name = "test_table"
|
1113
|
+
@generic_dal.fields = {
|
1114
|
+
"field_one" => { :type => :integer }
|
1115
|
+
}
|
1116
|
+
@generic_dal.auto_primary_key = true
|
1117
|
+
|
1118
|
+
query = "INSERT INTO `test_table` (`field_one`) VALUES ('one')"
|
1119
|
+
|
1120
|
+
@mock_mysql.should_receive(:query).ordered.with(query)
|
1121
|
+
@mock_mysql.should_receive(:last_id)
|
1122
|
+
|
1123
|
+
@mock_memcache.should_receive(:get).ordered.with('prefix-test_table-version').and_return(1)
|
1124
|
+
@mock_memcache.should_receive(:incr).ordered.with('prefix-test_table-version',1,nil)
|
1125
|
+
|
1126
|
+
@mock_memcache.should_receive(:get).ordered.with('prefix-test_table-version').and_return(1)
|
1127
|
+
@mock_memcache.should_receive(:get).ordered.and_return([{ "field_one" => "one","id"=>1 }])
|
1128
|
+
@mock_memcache.should_not_receive(:last_id)
|
1129
|
+
|
1130
|
+
@generic_dal.insert(testdata)
|
1131
|
+
end
|
1098
1132
|
end
|
1099
1133
|
|
1100
1134
|
describe '#update_by_primary_key' do
|
@@ -1111,10 +1145,10 @@ describe CrudService::Dal do
|
|
1111
1145
|
|
1112
1146
|
@mock_mysql.should_receive(:query).ordered.with(query)
|
1113
1147
|
|
1114
|
-
@mock_memcache.should_receive(:get).ordered.with('test_table-version').and_return(1)
|
1115
|
-
@mock_memcache.should_receive(:incr).ordered.with('test_table-version',1,nil)
|
1148
|
+
@mock_memcache.should_receive(:get).ordered.with('prefix-test_table-version').and_return(1)
|
1149
|
+
@mock_memcache.should_receive(:incr).ordered.with('prefix-test_table-version',1,nil)
|
1116
1150
|
|
1117
|
-
@mock_memcache.should_receive(:get).ordered.with('test_table-version').and_return(1)
|
1151
|
+
@mock_memcache.should_receive(:get).ordered.with('prefix-test_table-version').and_return(1)
|
1118
1152
|
@mock_memcache.should_receive(:get).ordered.and_return([{ "field_one" => "two","id"=>2}])
|
1119
1153
|
|
1120
1154
|
@generic_dal.update_by_primary_key(2, testdata)
|
@@ -1130,8 +1164,8 @@ describe CrudService::Dal do
|
|
1130
1164
|
query = "DELETE FROM `test_table` WHERE (`code` = 'three')"
|
1131
1165
|
|
1132
1166
|
@mock_mysql.should_receive(:query).ordered.with(query)
|
1133
|
-
@mock_memcache.should_receive(:get).ordered.with('test_table-version').and_return(1)
|
1134
|
-
@mock_memcache.should_receive(:incr).ordered.with('test_table-version',1,nil)
|
1167
|
+
@mock_memcache.should_receive(:get).ordered.with('prefix-test_table-version').and_return(1)
|
1168
|
+
@mock_memcache.should_receive(:incr).ordered.with('prefix-test_table-version',1,nil)
|
1135
1169
|
|
1136
1170
|
@generic_dal.delete_by_primary_key('three')
|
1137
1171
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: crud-service
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tom Cully
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-09-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: coveralls
|