crud-service 0.0.8 → 0.0.9
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.
- 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
|