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.
Files changed (5) hide show
  1. checksums.yaml +8 -8
  2. data/lib/api.rb +5 -5
  3. data/lib/dal.rb +14 -5
  4. data/spec/unit/dal_spec.rb +62 -28
  5. metadata +2 -2
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- Mzc4NzcyMDZkZjYyNmY1NDcwMjVmMDI2NWVhMGEwN2ZiN2QyOGViZA==
4
+ OWU4YWI0ZDc4OWRiYTU2YjhjYjg5MzFjNWM2MDg2MjJhZjQwYzU4YQ==
5
5
  data.tar.gz: !binary |-
6
- YTk5OTkyYzY3YmQ5MmEzYTc3YmZhN2VjM2JiM2Q1MGEzYjRhMDBjYg==
6
+ NDFkMmFkZmZmODQ3YjVhNzA3Y2M4MzgwMjgzYzg2NGU1MzAxYTM4YQ==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- Y2RmY2NjNGU2MDMwNjZlNzA3ODhjZjlhN2MxMmNlMmI5MjQ3ZmU4ODdlZmVm
10
- ZTRjN2Q2MTJkNWU0YmVlNjVmY2I4M2Y0NGUxOTIwODJkNGEzODg1NzBhOWQy
11
- ZWI0OWEyYjU5ZTFkNDZiNzlkN2M0ZjkxZWEyYzUzNjI2MzExZWE=
9
+ YTI3MDU2ZmU4MTc1ZDU2MWM3NmM1MGFiYTIwMDYzYWEzNWY3MGQ1MzY3YjBh
10
+ Y2Q5NWEyYjczZmIzZmMzZGY0Mjg5MGEzMTViOWE4NGRiODc1NThjZjA5NGE0
11
+ MzcyZmQxMmIxZDE2ZmZhMGY3OGY1NzU4ZjE0ZDczMTE4NGQ4ZWQ=
12
12
  data.tar.gz: !binary |-
13
- OGZiNGMyZmE0MDYxNWU3MDhjYTYyNmFmNTgyNjYwZTU1Y2RiODY3NGEyZTRi
14
- YjYzMGY1YTM5MjZmOTZhNWNhNjNlMDkwYmUyYTliZTAyZGRlZjBjYTJkMzEz
15
- MDk2MzZiM2YxMDk1ZTMyMDQyNDQwYjJlMmI2OWYzY2Q2MTkzYzk=
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['code'])
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[:code])
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[:code],data)
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[:code])
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[:code])
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 = "geoservice-"+Digest::MD5.hexdigest(query+":"+table_versions)
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
- get_one({@primary_key => data[@primary_key]})
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
@@ -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 = "geoservice-"+Digest::MD5.hexdigest(query+":testtable-1")
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 = "geoservice-"+Digest::MD5.hexdigest(query+":testtable-1")
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 = "geoservice-"+Digest::MD5.hexdigest(query+":testtable-1")
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 = "geoservice-"+Digest::MD5.hexdigest(query+":testtable-1")
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 = "geoservice-"+Digest::MD5.hexdigest(query+":testtable-2")
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.8
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-08-26 00:00:00.000000000 Z
12
+ date: 2013-09-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: coveralls