active_hash 0.9.3 → 0.9.4
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.
- data/CHANGELOG +4 -0
- data/README.md +1 -1
- data/lib/active_file/base.rb +16 -6
- data/lib/active_hash/base.rb +19 -6
- data/lib/active_hash/version.rb +1 -1
- data/spec/active_hash/base_spec.rb +47 -0
- metadata +1 -17
data/CHANGELOG
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
2011-06-05
|
|
2
|
+
- fixed deprecation warnings for class_inheritable_accessor (thanks scudco!)
|
|
3
|
+
- added basic compatibility with the `where` method from Arel (thanks rgarver!)
|
|
4
|
+
|
|
1
5
|
2011-04-19
|
|
2
6
|
- better dependency management and compatibility with ActiveSupport 2.x (thanks vandrijevik!)
|
|
3
7
|
|
data/README.md
CHANGED
|
@@ -290,7 +290,7 @@ The two methods you need to implement are load_file, which needs to return an ar
|
|
|
290
290
|
Setting the default file location in Rails:
|
|
291
291
|
|
|
292
292
|
# config/initializers/active_file.rb
|
|
293
|
-
ActiveFile.set_root_path "config/activefiles"
|
|
293
|
+
ActiveFile::Base.set_root_path "config/activefiles"
|
|
294
294
|
|
|
295
295
|
In Rails, in development mode, it reloads the entire class, which reloads the file. In production, the data cached in memory.
|
|
296
296
|
|
data/lib/active_file/base.rb
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
module ActiveFile
|
|
2
2
|
|
|
3
3
|
class Base < ActiveHash::Base
|
|
4
|
-
|
|
4
|
+
|
|
5
|
+
if respond_to?(:class_attribute)
|
|
6
|
+
class_attribute :filename, :root_path, :data_loaded
|
|
7
|
+
else
|
|
8
|
+
class_inheritable_accessor :filename, :root_path, :data_loaded
|
|
9
|
+
end
|
|
5
10
|
|
|
6
11
|
class << self
|
|
7
12
|
|
|
@@ -10,6 +15,11 @@ module ActiveFile
|
|
|
10
15
|
super
|
|
11
16
|
end
|
|
12
17
|
|
|
18
|
+
def where(options)
|
|
19
|
+
reload unless data_loaded
|
|
20
|
+
super
|
|
21
|
+
end
|
|
22
|
+
|
|
13
23
|
def delete_all
|
|
14
24
|
self.data_loaded = true
|
|
15
25
|
super
|
|
@@ -23,11 +33,11 @@ module ActiveFile
|
|
|
23
33
|
end
|
|
24
34
|
|
|
25
35
|
def set_filename(name)
|
|
26
|
-
|
|
36
|
+
self.filename = name
|
|
27
37
|
end
|
|
28
38
|
|
|
29
39
|
def set_root_path(path)
|
|
30
|
-
|
|
40
|
+
self.root_path = path
|
|
31
41
|
end
|
|
32
42
|
|
|
33
43
|
def load_file
|
|
@@ -35,9 +45,9 @@ module ActiveFile
|
|
|
35
45
|
end
|
|
36
46
|
|
|
37
47
|
def full_path
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
File.join(
|
|
48
|
+
actual_root_path = root_path || Dir.pwd
|
|
49
|
+
actual_filename = filename || name.tableize
|
|
50
|
+
File.join(actual_root_path, "#{actual_filename}.#{extension}")
|
|
41
51
|
end
|
|
42
52
|
|
|
43
53
|
def extension
|
data/lib/active_hash/base.rb
CHANGED
|
@@ -7,7 +7,12 @@ module ActiveHash
|
|
|
7
7
|
end
|
|
8
8
|
|
|
9
9
|
class Base
|
|
10
|
-
|
|
10
|
+
|
|
11
|
+
if respond_to?(:class_attribute)
|
|
12
|
+
class_attribute :_data, :dirty
|
|
13
|
+
else
|
|
14
|
+
class_inheritable_accessor :_data, :dirty
|
|
15
|
+
end
|
|
11
16
|
|
|
12
17
|
if Object.const_defined?(:ActiveModel)
|
|
13
18
|
extend ActiveModel::Naming
|
|
@@ -29,10 +34,14 @@ module ActiveHash
|
|
|
29
34
|
end
|
|
30
35
|
end
|
|
31
36
|
|
|
37
|
+
def data
|
|
38
|
+
_data
|
|
39
|
+
end
|
|
40
|
+
|
|
32
41
|
def data=(array_of_hashes)
|
|
33
42
|
mark_dirty
|
|
34
43
|
@records = nil
|
|
35
|
-
|
|
44
|
+
self._data = array_of_hashes
|
|
36
45
|
if array_of_hashes
|
|
37
46
|
auto_assign_fields(array_of_hashes)
|
|
38
47
|
array_of_hashes.each do |hash|
|
|
@@ -74,14 +83,18 @@ module ActiveHash
|
|
|
74
83
|
|
|
75
84
|
def all(options={})
|
|
76
85
|
if options.has_key?(:conditions)
|
|
77
|
-
(
|
|
78
|
-
options[:conditions].all? {|col, match| record[col] == match}
|
|
79
|
-
end
|
|
86
|
+
where(options[:conditions])
|
|
80
87
|
else
|
|
81
88
|
@records || []
|
|
82
89
|
end
|
|
83
90
|
end
|
|
84
91
|
|
|
92
|
+
def where(options)
|
|
93
|
+
(@records || []).select do |record|
|
|
94
|
+
options.all? {|col, match| record[col] == match}
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
85
98
|
def count
|
|
86
99
|
all.length
|
|
87
100
|
end
|
|
@@ -272,7 +285,7 @@ module ActiveHash
|
|
|
272
285
|
end
|
|
273
286
|
|
|
274
287
|
def reload
|
|
275
|
-
self.data =
|
|
288
|
+
self.data = _data
|
|
276
289
|
mark_clean
|
|
277
290
|
end
|
|
278
291
|
|
data/lib/active_hash/version.rb
CHANGED
|
@@ -191,6 +191,53 @@ describe ActiveHash, "Base" do
|
|
|
191
191
|
end
|
|
192
192
|
end
|
|
193
193
|
|
|
194
|
+
describe ".where" do
|
|
195
|
+
before do
|
|
196
|
+
Country.field :name
|
|
197
|
+
Country.field :language
|
|
198
|
+
Country.data = [
|
|
199
|
+
{:id => 1, :name => "US", :language => 'English'},
|
|
200
|
+
{:id => 2, :name => "Canada", :language => 'English'},
|
|
201
|
+
{:id => 2, :name => "Mexico", :language => 'Spanish'}
|
|
202
|
+
]
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
it "raises ArgumentError if no conditions are provided" do
|
|
206
|
+
lambda{
|
|
207
|
+
Country.where
|
|
208
|
+
}.should raise_error(ArgumentError)
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
it "returns all data as inflated objects" do
|
|
212
|
+
Country.where(:language => 'English').all? { |country| country.should be_kind_of(Country) }
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
it "populates the data correctly" do
|
|
216
|
+
records = Country.where(:language => 'English')
|
|
217
|
+
records.first.id.should == 1
|
|
218
|
+
records.first.name.should == "US"
|
|
219
|
+
records.last.id.should == 2
|
|
220
|
+
records.last.name.should == "Canada"
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
it "re-populates the records after data= is called" do
|
|
224
|
+
Country.data = [
|
|
225
|
+
{:id => 45, :name => "Canada"}
|
|
226
|
+
]
|
|
227
|
+
records = Country.where(:name => 'Canada')
|
|
228
|
+
records.first.id.should == 45
|
|
229
|
+
records.first.name.should == "Canada"
|
|
230
|
+
records.length.should == 1
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
it "filters the records from a AR-like conditions hash" do
|
|
234
|
+
record = Country.where(:name => 'US')
|
|
235
|
+
record.count.should == 1
|
|
236
|
+
record.first.id.should == 1
|
|
237
|
+
record.first.name.should == 'US'
|
|
238
|
+
end
|
|
239
|
+
end
|
|
240
|
+
|
|
194
241
|
describe ".count" do
|
|
195
242
|
before do
|
|
196
243
|
Country.data = [
|
metadata
CHANGED
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: active_hash
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
hash: 61
|
|
5
4
|
prerelease:
|
|
6
|
-
|
|
7
|
-
- 0
|
|
8
|
-
- 9
|
|
9
|
-
- 3
|
|
10
|
-
version: 0.9.3
|
|
5
|
+
version: 0.9.4
|
|
11
6
|
platform: ruby
|
|
12
7
|
authors:
|
|
13
8
|
- Jeff Dean
|
|
@@ -40,11 +35,6 @@ dependencies:
|
|
|
40
35
|
requirements:
|
|
41
36
|
- - ">="
|
|
42
37
|
- !ruby/object:Gem::Version
|
|
43
|
-
hash: 3
|
|
44
|
-
segments:
|
|
45
|
-
- 2
|
|
46
|
-
- 2
|
|
47
|
-
- 2
|
|
48
38
|
version: 2.2.2
|
|
49
39
|
type: :runtime
|
|
50
40
|
version_requirements: *id001
|
|
@@ -91,18 +81,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
91
81
|
requirements:
|
|
92
82
|
- - ">="
|
|
93
83
|
- !ruby/object:Gem::Version
|
|
94
|
-
hash: 3
|
|
95
|
-
segments:
|
|
96
|
-
- 0
|
|
97
84
|
version: "0"
|
|
98
85
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
99
86
|
none: false
|
|
100
87
|
requirements:
|
|
101
88
|
- - ">="
|
|
102
89
|
- !ruby/object:Gem::Version
|
|
103
|
-
hash: 3
|
|
104
|
-
segments:
|
|
105
|
-
- 0
|
|
106
90
|
version: "0"
|
|
107
91
|
requirements: []
|
|
108
92
|
|