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.
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