active_hash 0.8.0 → 0.8.1

Sign up to get free protection for your applications and to get access to all the features.
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