lookup_by 0.1.0 → 0.1.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: faef63af11f71cb58ed963cb274535be04ee72a1
4
+ data.tar.gz: 52faac6d69885248e29fb4292433786c73ba4d9f
5
+ SHA512:
6
+ metadata.gz: 141b39d68b61dc72c1bcb12f87a192ffbc41d312649b88ccd6e996db19003f65e051ec41412fa16462f59bd30ac9555175fd682e7b3475a5ff9ecbe80db92c06
7
+ data.tar.gz: b0ccddd30f0245895891cd39f4152c1a9a17aceb1e3c945b74a06057d4fc8c6cf084dd3ba73a28eb35cbbda4ffbf38503a7284503115271987eaa6a5612349dc
@@ -51,6 +51,10 @@ module LookupBy
51
51
  end
52
52
  end
53
53
 
54
+ def clear
55
+ cache.clear if cache?
56
+ end
57
+
54
58
  def create!(*args, &block)
55
59
  created = klass.create!(*args, &block)
56
60
  cache[created.id] = created if cache?
@@ -72,6 +76,10 @@ module LookupBy
72
76
  found
73
77
  end
74
78
 
79
+ def has_cache?
80
+ !!type
81
+ end
82
+
75
83
  def read_through?
76
84
  @read
77
85
  end
@@ -118,10 +126,6 @@ module LookupBy
118
126
  value.is_a?(Fixnum) ? primary_key : field
119
127
  end
120
128
 
121
- def cache?
122
- !!type && enabled?
123
- end
124
-
125
129
  def enabled?
126
130
  enabled
127
131
  end
@@ -130,6 +134,10 @@ module LookupBy
130
134
  type == :all
131
135
  end
132
136
 
137
+ def cache?
138
+ !!type && enabled?
139
+ end
140
+
133
141
  def write?
134
142
  !!write
135
143
  end
@@ -9,7 +9,7 @@ module LookupBy
9
9
  options.symbolize_keys!
10
10
  options.assert_valid_keys :order, :cache, :normalize, :find, :find_or_create, :raise
11
11
 
12
- raise "#{self} already uses lookup_by" if is_a? LookupBy::Lookup::ClassMethods
12
+ raise "#{self} already called lookup_by" if is_a? LookupBy::Lookup::ClassMethods
13
13
  raise "#{self} responds_to :[], needed for lookup_by" if respond_to? :[]
14
14
  raise "#{self} responds_to :lookup, needed for lookup_by" if respond_to? :lookup
15
15
 
@@ -35,8 +35,9 @@ module LookupBy
35
35
  end
36
36
 
37
37
  module ClassMethods
38
- def all
38
+ def all(*args)
39
39
  return super if @lookup.read_through?
40
+ return super if args.any?
40
41
 
41
42
  @lookup.cache.values
42
43
  end
@@ -64,6 +65,30 @@ module LookupBy
64
65
  else raise TypeError, "#{name}[arg]: arg must be a String, Symbol, Fixnum, nil, or #{name}"
65
66
  end
66
67
  end
68
+
69
+ def destroy_all(conditions = nil)
70
+ raise NotImplementedError, "#{name}.destroy_all is not supported on cached lookup tables." if @lookup.has_cache?
71
+
72
+ super
73
+ end
74
+
75
+ def destroy(id)
76
+ raise NotImplementedError, "#{name}.destroy(arg) is not supported on cached lookup tables" if @lookup.has_cache?
77
+
78
+ super
79
+ end
80
+
81
+ def delete_all(conditions = nil)
82
+ raise NotImplementedError, "#{name}.delete_all is not supported on cached lookup tables." if @lookup.has_cache?
83
+
84
+ super
85
+ end
86
+
87
+ def delete(id_or_array)
88
+ raise NotImplementedError, "#{name}.delete(arg) is not supported on cached lookup tables." if @lookup.has_cache?
89
+
90
+ super
91
+ end
67
92
  end
68
93
 
69
94
  module InstanceMethods
@@ -1,3 +1,3 @@
1
1
  module LookupBy
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -41,10 +41,6 @@ describe LookupBy::Association do
41
41
  City.create(name: "New York")
42
42
  end
43
43
 
44
- after do
45
- City.delete_all
46
- end
47
-
48
44
  subject { Address.new }
49
45
 
50
46
  context "Address.lookup_for :city, strict: false" do
@@ -39,6 +39,23 @@ shared_examples "a proxy" do
39
39
  subject.update(original.id, name: "updated")
40
40
  subject[original.id].name.should_not eq original.name
41
41
  end
42
+
43
+ it "allows .destroy_all" do
44
+ subject.destroy_all.should == []
45
+ end
46
+
47
+ it "allows .destroy" do
48
+ instance = subject.create(name: "foo")
49
+ subject.destroy(instance.id).should == instance
50
+ end
51
+
52
+ it "allows .delete_all" do
53
+ subject.delete_all.should == 0
54
+ end
55
+
56
+ it "allows .delete" do
57
+ subject.delete(1).should == 0
58
+ end
42
59
  end
43
60
 
44
61
  shared_examples "a cache" do
@@ -56,6 +73,22 @@ shared_examples "a cache" do
56
73
 
57
74
  subject.lookup.enabled = was_enabled
58
75
  end
76
+
77
+ it "raises on .destroy_all" do
78
+ expect { subject.destroy_all }.to raise_error NotImplementedError, /destroy_all.*not supported/
79
+ end
80
+
81
+ it "raises on .destroy(id)" do
82
+ expect { subject.destroy(1) }.to raise_error NotImplementedError, /destroy.*not supported/
83
+ end
84
+
85
+ it "raises on .delete_all" do
86
+ expect { subject.delete_all }.to raise_error NotImplementedError, /delete_all.*not supported/
87
+ end
88
+
89
+ it "raises on .delete(id)" do
90
+ expect { subject.delete(1) }.to raise_error NotImplementedError, /delete.*not supported/
91
+ end
59
92
  end
60
93
 
61
94
  shared_examples "a strict cache" do
@@ -67,6 +100,12 @@ shared_examples "a strict cache" do
67
100
  expect { subject.create(name: "add") }.to_not change(subject, :all)
68
101
  end
69
102
 
103
+ it "reloads .all when called with args" do
104
+ new = subject.create(name: "new")
105
+ subject.all.should_not include(new)
106
+ subject.all({}).should include(new)
107
+ end
108
+
70
109
  it "caches .pluck" do
71
110
  subject.create(name: "pluck this")
72
111
  subject.pluck(:name).should_not include("pluck this")
metadata CHANGED
@@ -1,32 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lookup_by
3
3
  version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 0.1.0
4
+ version: 0.1.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Erik Peterson
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-02-07 00:00:00.000000000 Z
11
+ date: 2014-05-08 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- version_requirements: !ruby/object:Gem::Requirement
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ! '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 3.0.0
20
- none: false
21
- name: rails
22
20
  type: :runtime
23
21
  prerelease: false
24
- requirement: !ruby/object:Gem::Requirement
22
+ version_requirements: !ruby/object:Gem::Requirement
25
23
  requirements:
26
- - - ! '>='
24
+ - - ">="
27
25
  - !ruby/object:Gem::Version
28
26
  version: 3.0.0
29
- none: false
30
27
  description: Use database lookup tables in AR models.
31
28
  email:
32
29
  - erik@enova.com
@@ -34,9 +31,9 @@ executables: []
34
31
  extensions: []
35
32
  extra_rdoc_files: []
36
33
  files:
37
- - .gitignore
38
- - .rvmrc
39
- - .travis.yml
34
+ - ".gitignore"
35
+ - ".rvmrc"
36
+ - ".travis.yml"
40
37
  - Gemfile
41
38
  - MIT-LICENSE
42
39
  - README.md
@@ -86,27 +83,26 @@ files:
86
83
  - spec/support/shared_examples_for_a_lookup.rb
87
84
  homepage: http://www.github.com/companygardener/lookup_by
88
85
  licenses: []
86
+ metadata: {}
89
87
  post_install_message:
90
88
  rdoc_options: []
91
89
  require_paths:
92
90
  - lib
93
91
  required_ruby_version: !ruby/object:Gem::Requirement
94
92
  requirements:
95
- - - ! '>='
93
+ - - ">="
96
94
  - !ruby/object:Gem::Version
97
95
  version: '0'
98
- none: false
99
96
  required_rubygems_version: !ruby/object:Gem::Requirement
100
97
  requirements:
101
- - - ! '>='
98
+ - - ">="
102
99
  - !ruby/object:Gem::Version
103
100
  version: '0'
104
- none: false
105
101
  requirements: []
106
102
  rubyforge_project:
107
- rubygems_version: 1.8.23
103
+ rubygems_version: 2.2.2
108
104
  signing_key:
109
- specification_version: 3
105
+ specification_version: 4
110
106
  summary: A thread-safe lookup table cache for ActiveRecord
111
107
  test_files:
112
108
  - spec/association_spec.rb