active_hash 0.8.0 → 0.8.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.
data/CHANGELOG CHANGED
@@ -1,3 +1,6 @@
1
+ 2010-05-04
2
+ - When calling ActiveFile::Base.reload do not actually perform the reload if nothing has been modified unless you call reload(true) to force (Michael Schubert)
3
+
1
4
  2010-04-25
2
5
  - When ActiveRecord model belongs_to an ActiveHash and the associated id is nil, returns nil instead of raising RecordNotFound (Jeremy Weiskotten)
3
6
  - Merged Nakajima's "add" alias for "create" - gotta save those ASCII characters :)
data/README.md CHANGED
@@ -337,6 +337,7 @@ The field specified as the _enum_accessor_ must contain unique data values.
337
337
  * Brian Takita
338
338
  * Corey Innis
339
339
  * Peter Jaros
340
+ * Michael Schubert
340
341
 
341
342
  ## Copyright
342
343
 
data/Rakefile CHANGED
@@ -8,7 +8,7 @@ begin
8
8
  gem.summary = %Q{An ActiveRecord-like model that uses a hash or file as a datasource}
9
9
  gem.email = "jeff@zilkey.com"
10
10
  gem.homepage = "http://github.com/zilkey/active_hash"
11
- gem.authors = ["Jeff Dean", "Mike Dalessio", "Corey Innis", "Peter Jaros", "Brandon Keene", "Brian Takita", "Pat Nakajima", "John Pignata", "Jeremy Weiskotten"]
11
+ gem.authors = ["Jeff Dean", "Mike Dalessio", "Corey Innis", "Peter Jaros", "Brandon Keene", "Brian Takita", "Pat Nakajima", "John Pignata", "Michael Schubert", "Jeremy Weiskotten"]
12
12
  gem.add_dependency('activesupport', [">= 2.2.2"])
13
13
  gem.post_install_message = ""
14
14
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.8.0
1
+ 0.8.1
data/active_hash.gemspec CHANGED
@@ -1,15 +1,15 @@
1
1
  # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
2
+ # DO NOT EDIT THIS FILE
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{active_hash}
8
- s.version = "0.8.0"
8
+ s.version = "0.8.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Jeff Dean", "Mike Dalessio", "Corey Innis", "Peter Jaros", "Brandon Keene", "Brian Takita", "Pat Nakajima", "John Pignata", "Jeremy Weiskotten"]
12
- s.date = %q{2010-04-25}
11
+ s.authors = ["Jeff Dean", "Mike Dalessio", "Corey Innis", "Peter Jaros", "Brandon Keene", "Brian Takita", "Pat Nakajima", "John Pignata", "Michael Schubert", "Jeremy Weiskotten"]
12
+ s.date = %q{2010-05-04}
13
13
  s.email = %q{jeff@zilkey.com}
14
14
  s.extra_rdoc_files = [
15
15
  "LICENSE",
@@ -71,4 +71,3 @@ Gem::Specification.new do |s|
71
71
  s.add_dependency(%q<activesupport>, [">= 2.2.2"])
72
72
  end
73
73
  end
74
-
@@ -15,9 +15,11 @@ module ActiveFile
15
15
  super
16
16
  end
17
17
 
18
- def reload(foo = true)
18
+ def reload(force = false)
19
+ return if !self.dirty && !force && self.data_loaded
19
20
  self.data_loaded = true
20
21
  self.data = load_file
22
+ mark_clean
21
23
  end
22
24
 
23
25
  def set_filename(name)
@@ -4,11 +4,12 @@ module ActiveHash
4
4
  end
5
5
 
6
6
  class Base
7
- class_inheritable_accessor :data
7
+ class_inheritable_accessor :data, :dirty
8
8
  class << self
9
9
  attr_reader :field_names
10
10
 
11
11
  def data=(array_of_hashes)
12
+ mark_dirty
12
13
  @records = nil
13
14
  write_inheritable_attribute(:data, array_of_hashes)
14
15
  if array_of_hashes
@@ -22,6 +23,7 @@ module ActiveHash
22
23
  def insert(record)
23
24
  @records ||= []
24
25
  record.attributes[:id] ||= next_id
26
+ mark_dirty
25
27
  @records << record
26
28
  end
27
29
 
@@ -37,6 +39,7 @@ module ActiveHash
37
39
  def create(attributes = {})
38
40
  record = new(attributes)
39
41
  record.save
42
+ mark_dirty
40
43
  record
41
44
  end
42
45
  alias_method :add, :create
@@ -62,6 +65,7 @@ module ActiveHash
62
65
  end
63
66
 
64
67
  def delete_all
68
+ mark_dirty
65
69
  @records = []
66
70
  end
67
71
 
@@ -217,10 +221,23 @@ module ActiveHash
217
221
 
218
222
  def reload
219
223
  self.data = read_inheritable_attribute(:data)
224
+ mark_clean
220
225
  end
221
226
 
222
227
  private :reload
223
228
 
229
+ def mark_dirty
230
+ self.dirty = true
231
+ end
232
+
233
+ private :mark_dirty
234
+
235
+ def mark_clean
236
+ self.dirty = false
237
+ end
238
+
239
+ private :mark_clean
240
+
224
241
  end
225
242
 
226
243
  attr_reader :attributes
@@ -80,4 +80,52 @@ describe ActiveFile::Base do
80
80
  end
81
81
  end
82
82
 
83
+ describe ".reload" do
84
+ before do
85
+ class Country
86
+ def self.load_file()
87
+ {"new_york"=>{"name"=>"New York", "id"=>1}}.values
88
+ end
89
+ end
90
+ Country.reload # initial load
91
+ end
92
+
93
+ context "when nothing has been modified" do
94
+ it "does not reload anything" do
95
+ class Country
96
+ def self.load_file()
97
+ raise "should not have been called"
98
+ end
99
+ end
100
+ Country.dirty.should be_false
101
+ Country.reload
102
+ Country.dirty.should be_false
103
+ end
104
+ end
105
+
106
+ context "when forced" do
107
+ it "reloads the data" do
108
+ class Country
109
+ def self.load_file()
110
+ {"new_york"=>{"name"=>"New York", "id"=>2}}.values
111
+ end
112
+ end
113
+ Country.dirty.should be_false
114
+ Country.find_by_id(2).should be_nil
115
+ Country.reload(true)
116
+ Country.dirty.should be_false
117
+ Country.find(2).name.should == "New York"
118
+ end
119
+ end
120
+
121
+ context "when the data has been modified" do
122
+ it "reloads the data" do
123
+ Country.create!
124
+ Country.dirty.should be_true
125
+ Country.reload
126
+ Country.dirty.should be_false
127
+ end
128
+ end
129
+ end
130
+
83
131
  end
@@ -66,6 +66,12 @@ describe ActiveHash, "Base" do
66
66
  Country.data.should == [{:name => "US", :id => 1}, {:name => "Canada", :id => 2}]
67
67
  Region.data.should == [{:description => "A big region", :id => 1}, {:description => "A remote region", :id => 2}]
68
68
  end
69
+
70
+ it "marks the class as dirty" do
71
+ Country.dirty.should be_false
72
+ Country.data = []
73
+ Country.dirty.should be_true
74
+ end
69
75
  end
70
76
 
71
77
  describe ".add" do
@@ -79,6 +85,12 @@ describe ActiveHash, "Base" do
79
85
  }.should change { Country.count }
80
86
  end
81
87
 
88
+ it "marks the class as dirty" do
89
+ Country.dirty.should be_false
90
+ Country.add :name => "Russia"
91
+ Country.dirty.should be_true
92
+ end
93
+
82
94
  it "returns the record" do
83
95
  record = Country.add :name => "Russia"
84
96
  record.name.should == "Russia"
@@ -620,6 +632,12 @@ describe ActiveHash, "Base" do
620
632
  Country.all.should == [country]
621
633
  end
622
634
 
635
+ it "marks the class as dirty" do
636
+ Country.dirty.should be_false
637
+ Country.new(:id => 1, :name => "foo").save
638
+ Country.dirty.should be_true
639
+ end
640
+
623
641
  end
624
642
 
625
643
  describe ".create" do
@@ -676,6 +694,12 @@ describe ActiveHash, "Base" do
676
694
  Country.all.should == [country]
677
695
  end
678
696
 
697
+ it "marks the class as dirty" do
698
+ Country.dirty.should be_false
699
+ Country.create! :id => 1, :name => "foo"
700
+ Country.dirty.should be_true
701
+ end
702
+
679
703
  end
680
704
 
681
705
  describe "#valid?" do
@@ -742,6 +766,12 @@ describe ActiveHash, "Base" do
742
766
  Country.all.should be_empty
743
767
  end
744
768
 
769
+ it "marks the class as dirty" do
770
+ Country.dirty.should be_false
771
+ Country.delete_all
772
+ Country.dirty.should be_true
773
+ end
774
+
745
775
  end
746
776
 
747
777
  describe "using with Fixjour" do
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 8
8
- - 0
9
- version: 0.8.0
8
+ - 1
9
+ version: 0.8.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Jeff Dean
@@ -17,12 +17,13 @@ authors:
17
17
  - Brian Takita
18
18
  - Pat Nakajima
19
19
  - John Pignata
20
+ - Michael Schubert
20
21
  - Jeremy Weiskotten
21
22
  autorequire:
22
23
  bindir: bin
23
24
  cert_chain: []
24
25
 
25
- date: 2010-04-25 00:00:00 -04:00
26
+ date: 2010-05-04 00:00:00 +00:00
26
27
  default_executable:
27
28
  dependencies:
28
29
  - !ruby/object:Gem::Dependency