static_model 0.2.0 → 0.2.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/History.txt CHANGED
@@ -1,4 +1,10 @@
1
- == 0.2.0 2008-10-27
1
+ == 0.2.1 2008-12-03
2
+
3
+ * 1 minor enhancement
4
+
5
+ * IDs are assigned automatically if not given in the YAML file
6
+
7
+ == 0.2.0 2008-11-27
2
8
 
3
9
  * 2 major enhancements
4
10
 
@@ -9,10 +9,12 @@ module StaticModel
9
9
  attr_reader :id
10
10
 
11
11
 
12
- def initialize(attribute_hash = {})
12
+ def initialize(attribute_hash = {}, force_load = true)
13
+ self.class.load if force_load
13
14
  raise(StaticModel::BadOptions, "Initializing a model is done with a Hash {} given #{attribute_hash.inspect}") unless attribute_hash.is_a?(Hash)
14
- @id = attribute_hash.delete('id') || attribute_hash.delete(:id) || (self.class.count + 1)
15
+ @id = attribute_hash.delete('id') || attribute_hash.delete(:id) || self.class.next_id
15
16
  self.attributes = attribute_hash
17
+ self.class.last_id = @id
16
18
  end
17
19
 
18
20
  def to_s
@@ -74,7 +76,11 @@ module StaticModel
74
76
  def load(reload = false)
75
77
  return if loaded? && !reload
76
78
  raise(StaticModel::DataFileNotFound, "You must set a data file to load from") unless File.readable?(data_file)
77
- data = YAML::load_file(data_file)
79
+ begin
80
+ data = YAML::load_file(data_file)
81
+ rescue
82
+ raise(StaticModel::BadDataFile, "The data file you specified '#{data_file}' was not in a readable format.")
83
+ end
78
84
  records = []
79
85
  if data.is_a?(Hash) && data.has_key?('records')
80
86
  records = data.delete('records')
@@ -82,10 +88,13 @@ module StaticModel
82
88
  elsif data.is_a?(Array)
83
89
  records = data
84
90
  end
85
- @records = records && !records.empty? ? records.dup.collect {|r| new(r) } : []
91
+ @last_id = 0
92
+ @records = records && !records.empty? ? records.dup.collect {|r| new(r, false) } : []
86
93
  @loaded = true
87
- # rescue
88
- # raise(StaticModel::BadDataFile, "The data file you specified '#{data_file}' was not in a readable format.")
94
+ end
95
+
96
+ def reload!
97
+ load(true)
89
98
  end
90
99
 
91
100
  def loaded?
@@ -121,12 +130,24 @@ module StaticModel
121
130
  load
122
131
  @records
123
132
  end
133
+
134
+ def next_id
135
+ last_id + 1
136
+ end
137
+
138
+ def last_id
139
+ @last_id ||= 0
140
+ end
124
141
 
142
+ def last_id=(new_last_id)
143
+ @last_id = new_last_id if new_last_id > self.last_id
144
+ end
145
+
125
146
  protected
126
147
  def default_data_file_path
127
148
  File.join(@@load_path, "#{self.to_s.tableize}.yml")
128
149
  end
129
-
150
+
130
151
  private
131
152
  def method_missing(meth, *args)
132
153
  meth_name = meth.to_s
@@ -2,7 +2,7 @@ module StaticModel #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 2
5
- TINY = 0
5
+ TINY = 1
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
data/test/test_helper.rb CHANGED
@@ -39,6 +39,10 @@ class Page < StaticModel::Base
39
39
 
40
40
  end
41
41
 
42
+ class Store < StaticModel::Base
43
+ set_data_file File.join(File.dirname(__FILE__), 'data', 'stores.yml')
44
+
45
+ end
42
46
 
43
47
 
44
48
 
@@ -85,6 +85,69 @@ class TestStaticModel < Test::Unit::TestCase
85
85
  end
86
86
  end
87
87
 
88
+ context "next_id" do
89
+ context "if id's were automaticaly assigned" do
90
+ should "be length + 1" do
91
+ Store.load
92
+ assert_equal Store.count + 1, Store.next_id
93
+ end
94
+ end
95
+
96
+ context "if ids were manualy assigned" do
97
+ should "be 1 after the last id" do
98
+ Publisher.load
99
+ assert_equal 8, Publisher.next_id
100
+ end
101
+ end
102
+ end
103
+
104
+ context "where the records are defined without ids" do
105
+ setup do
106
+ Store.reload!
107
+ end
108
+
109
+ context "loading" do
110
+ setup do
111
+ @stores = Store.all
112
+ end
113
+
114
+ should "automaticaly assign ids" do
115
+ @stores.each do |store|
116
+ assert store.id
117
+ assert store.id.is_a?(Fixnum)
118
+ end
119
+ end
120
+
121
+ should "assign next id" do
122
+ assert Store.next_id
123
+ assert_equal 3, Store.next_id
124
+ end
125
+ end
126
+
127
+ context "initializing without id" do
128
+ setup do
129
+ @store = Store.new({:name => 'Metro Comics', :city => 'New York'})
130
+ end
131
+
132
+ should "return instance" do
133
+ assert @store.is_a?(Store)
134
+ end
135
+
136
+ should "set attributes" do
137
+ assert_equal 'New York', @store.city
138
+ end
139
+
140
+ should "assign id from next id" do
141
+ assert_equal 3, @store.id
142
+ end
143
+
144
+ should "increment next_id" do
145
+ assert_equal 4, Store.next_id
146
+ end
147
+
148
+ end
149
+ end
150
+
88
151
  context "find" do
89
152
 
90
153
  context "with an integer" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: static_model
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Quint
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-11-28 00:00:00 -05:00
12
+ date: 2008-12-03 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -30,7 +30,7 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 1.8.0
33
+ version: 1.8.2
34
34
  version:
35
35
  description: ActiveRecord like functionalities for reading from YAML with a simple class implementation
36
36
  email:
@@ -43,7 +43,6 @@ extra_rdoc_files:
43
43
  - History.txt
44
44
  - License.txt
45
45
  - Manifest.txt
46
- - README.rdoc
47
46
  files:
48
47
  - History.txt
49
48
  - License.txt
@@ -67,7 +66,7 @@ homepage: http://quirkey.rubyforge.org
67
66
  post_install_message: ""
68
67
  rdoc_options:
69
68
  - --main
70
- - README.rdoc
69
+ - README.txt
71
70
  require_paths:
72
71
  - lib
73
72
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -85,7 +84,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
85
84
  requirements: []
86
85
 
87
86
  rubyforge_project: quirkey
88
- rubygems_version: 1.3.1
87
+ rubygems_version: 1.2.0
89
88
  signing_key:
90
89
  specification_version: 2
91
90
  summary: ActiveRecord like functionalities for reading from YAML with a simple class implementation