constantrecord 0.2.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  A tiny ActiveRecord substitute for small, never changing database tables.
4
4
 
5
+ *** Works with Rails 2 and Rails 3! ***
6
+
5
7
  == Usage
6
8
 
7
9
  class Currency < ConstantRecord::Base
@@ -103,6 +105,10 @@ In this case, you must also change your validation:
103
105
  validates_inclusion_of :currency_id, :in => Currency.names
104
106
  end
105
107
 
108
+ == Sample Data
109
+
110
+ This Gem features sample data for U.S. states, Canadian provinces and
111
+ territories and German Bundesländer. Check out the sample directory!
106
112
 
107
113
  == Copyright
108
114
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.3.1
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{constantrecord}
8
- s.version = "0.2.0"
8
+ s.version = "0.3.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Christoph Petschnig"]
12
- s.date = %q{2010-06-29}
12
+ s.date = %q{2010-10-02}
13
13
  s.description = %q{A tiny ActiveRecord substitute for small, never changing database tables.}
14
14
  s.email = %q{info@purevirtual.de}
15
15
  s.extra_rdoc_files = [
@@ -23,6 +23,9 @@ Gem::Specification.new do |s|
23
23
  "VERSION",
24
24
  "constantrecord.gemspec",
25
25
  "lib/constantrecord.rb",
26
+ "samples/canadian_province.rb",
27
+ "samples/german_province.rb",
28
+ "samples/us_state.rb",
26
29
  "test/helper.rb",
27
30
  "test/test_constantrecord.rb"
28
31
  ]
@@ -2,7 +2,7 @@ module ConstantRecord #:nodoc:
2
2
 
3
3
  class ConstantNotFound < StandardError; end #:nodoc:
4
4
  class LoggerError < StandardError; end #:nodoc:
5
-
5
+
6
6
  # ConstantRecord::Base is a tiny ActiveRecord substitute for small, never
7
7
  # changing database tables.
8
8
  #
@@ -80,7 +80,11 @@ module ConstantRecord #:nodoc:
80
80
 
81
81
  raise TypeError.new("#{self}.find failed!\nArguments: #{args.inspect}") unless selector.kind_of?(Symbol) || selector.kind_of?(Fixnum)
82
82
 
83
- if selector == :first
83
+ case selector
84
+ when :all
85
+ # ignore conditions on :all
86
+ return find_all if selector == :all
87
+ when :first
84
88
  # no conditions given, return the first record
85
89
  return self.new(1, *@data[0]) if args.size == 1
86
90
 
@@ -103,22 +107,35 @@ module ConstantRecord #:nodoc:
103
107
  end
104
108
 
105
109
  return nil
110
+ when :last
111
+ return self.new(@data.size, *@data[-1])
112
+ else
113
+ # ignore conditions if id is given as the first argument
114
+ return find_by_id(selector) if selector.kind_of?(Fixnum)
106
115
  end
107
116
 
108
- return self.new(@data.size, *@data[-1]) if selector == :last
117
+ raise ArgumentError.new("#{self}.find failed!\nArguments: #{args.inspect}")
118
+ end
109
119
 
110
- # ignore conditions on :all
111
- return find_all if selector == :all
120
+ # shortcut to #find(:all)
121
+ def self.all(*args)
122
+ find_all
123
+ end
112
124
 
113
- # ignore conditions if id is given as the first argument
114
- return find_by_id(selector) if selector.kind_of?(Fixnum)
125
+ # shortcut to #find(:first)
126
+ def self.first(*args)
127
+ find(:first, *args)
128
+ end
115
129
 
116
- raise "#{self}.find failed!\nArguments: #{args.inspect}"
130
+ # shortcut to #find(:last)
131
+ def self.last(*args)
132
+ find(:last, *args)
117
133
  end
118
134
 
119
- # shortcut to #find(:all)
120
- def self.all
121
- find_all
135
+ # shortcut to retrieve value for name - eases dynamic lookup
136
+ def self.[](name)
137
+ ret = @data.detect{|datum| datum.first == name}
138
+ ret ? ret.last : raise(ConstantNotFound, "No such #{self.name} constant: #{name}")
122
139
  end
123
140
 
124
141
  # Implement +count+. Warning: <tt>:conditions</tt> are not supported!
@@ -129,7 +146,11 @@ module ConstantRecord #:nodoc:
129
146
  # ignore conditions on :all
130
147
  return @data.size if selector == :all
131
148
 
132
- raise "#{self}.count failed!\nArguments: #{args.inspect}"
149
+ raise ArgumentError.new("#{self}.count failed!\nArguments: #{args.inspect}")
150
+ end
151
+
152
+ def [](attr)
153
+ instance_variable_get("@#{attr}")
133
154
  end
134
155
 
135
156
  # A ConstantRecord will never be a new record
@@ -142,6 +163,11 @@ module ConstantRecord #:nodoc:
142
163
  false
143
164
  end
144
165
 
166
+ # Rails 3.0: this method is checked in ActiveRecord::Base.compute_type
167
+ def self.match(*args)
168
+ true
169
+ end
170
+
145
171
  # Show output in the form of `SELECT * FROM tablename;`
146
172
  def self.table
147
173
  # get columns in the form of {0 => :id, 1 => :name, ...}
@@ -0,0 +1,16 @@
1
+ # All provinces and territories of Canada with their name, two-character
2
+ # abbreviation, their capital and population of the year 2010.
3
+ # Data taken from http://en.wikipedia.org/wiki/Provinces_and_territories_of_Canada
4
+ class CanadianProvince < ConstantRecord::Base #:nodoc:
5
+ columns :name, :abbr, :capital, :population
6
+ data [ 'Alberta', 'AB', 'Alberta', 3724832 ],
7
+ [ 'British Columbia', 'BC', 'British Columbia', 4510858 ],
8
+ [ 'Manitoba', 'MB', 'Manitoba', 1232654 ],
9
+ [ 'New Brunswick', 'NB', 'New Brunswick', 751273 ],
10
+ [ 'Newfoundland and Labrador', 'NL', 'Newfoundland and Labrador', 510901 ],
11
+ [ 'Nova Scotia', 'NS', 'Nova Scotia', 940482 ],
12
+ [ 'Ontario', 'ON', 'Ontario', 13167894 ],
13
+ [ 'Prince Edward Island', 'PE', 'Charlottetown', 141551 ],
14
+ [ 'Quebec', 'QC', 'Quebec', 7886108 ],
15
+ [ 'Saskatchewan', 'SK', 'Saskatchewan', 1041729 ]
16
+ end
@@ -0,0 +1,24 @@
1
+ # encoding: UTF-8
2
+
3
+ # All provinces (Bundesländer) of Germany with their name, two-character
4
+ # abbreviation, their area in km² and population of the year 2007.
5
+ # Data taken from http://de.wikipedia.org/wiki/Land_(Deutschland)
6
+ class GermanProvince < ConstantRecord::Base #:nodoc:
7
+ columns :name, :abbr, :area, :population
8
+ data [ 'Baden-Württemberg', 'BW', 35751, 10750000 ],
9
+ [ 'Bayern', 'BY', 70552, 12520000 ],
10
+ [ 'Berlin', 'BE', 891, 3416000 ],
11
+ [ 'Brandenburg', 'BB', 29480, 2536000 ],
12
+ [ 'Bremen', 'HB', 419, 663000 ],
13
+ [ 'Hamburg', 'HH', 755, 1771000 ],
14
+ [ 'Hessen', 'HE', 21115, 6073000 ],
15
+ [ 'Mecklenburg-Vorpommern', 'MV', 23185, 1680000 ],
16
+ [ 'Niedersachsen', 'NI', 47625, 7972000 ],
17
+ [ 'Nordrhein-Westfalen', 'NW', 34086, 17997000 ],
18
+ [ 'Rheinland-Pfalz', 'RP', 19853, 4046000 ],
19
+ [ 'Saarland', 'SL', 2569, 1037000 ],
20
+ [ 'Sachsen', 'SN', 18418, 4220000 ],
21
+ [ 'Sachsen-Anhalt', 'ST', 20447, 2412000 ],
22
+ [ 'Schleswig-Holstein', 'SH', 15799, 2837000 ],
23
+ [ 'Thüringen', 'TH', 16172, 2289000 ]
24
+ end
@@ -0,0 +1,56 @@
1
+ # All states of the U.S.A. with their name, two-character abbreviation, area in
2
+ # square miles, population of the year 2009, the capital and the biggest city.
3
+ # Data taken from http://en.wikipedia.org/wiki/U.S._state
4
+ class USState < ConstantRecord::Base #:nodoc:
5
+ columns :name, :usps, :area, :population, :capital, :biggest_city
6
+ data ['Alabama', 'AL', 52419, 4708708, 'Montgomery', 'Birmingham' ],
7
+ ['Alaska', 'AK', 663267, 698473, 'Juneau', 'Anchorage' ],
8
+ ['Arizona', 'AZ', 113998, 6595778, 'Phoenix', 'Phoenix' ],
9
+ ['Arkansas', 'AR', 52897, 2889450, 'Little Rock', 'Little Rock' ],
10
+ ['California', 'CA', 163700, 36961664, 'Sacramento', 'Los Angeles' ],
11
+ ['Colorado', 'CO', 104185, 5024748, 'Denver', 'Denver' ],
12
+ ['Connecticut', 'CT', 5543, 3518288, 'Hartford', 'Bridgeport' ],
13
+ ['Delaware', 'DE', 2491, 885122, 'Dover', 'Wilmington' ],
14
+ ['Florida', 'FL', 65755, 18537969, 'Tallahassee', 'Jacksonville' ],
15
+ ['Georgia', 'GA', 59425, 9829211, 'Atlanta', 'Atlanta' ],
16
+ ['Hawaii', 'HI', 10931, 1295178, 'Honolulu', 'Honolulu' ],
17
+ ['Idaho', 'ID', 83642, 1545801, 'Boise', 'Boise' ],
18
+ ['Illinois', 'IL', 54440, 12910409, 'Springfield', 'Chicago' ],
19
+ ['Indiana', 'IN', 36418, 6423113, 'Indianapolis', 'Indianapolis' ],
20
+ ['Iowa', 'IA', 56272, 3007856, 'Des Moines', 'Des Moines' ],
21
+ ['Kansas', 'KS', 82277, 2818747, 'Topeka', 'Wichita' ],
22
+ ['Kentucky', 'KY', 40409, 4314113, 'Frankfort', 'Louisville' ],
23
+ ['Louisiana', 'LA', 52271, 4492076, 'Baton Rouge', 'New Orleans' ],
24
+ ['Maine', 'ME', 35385, 1318301, 'Augusta', 'Portland' ],
25
+ ['Maryland', 'MD', 12407, 5699478, 'Annapolis', 'Baltimore' ],
26
+ ['Massachusetts', 'MA', 10554, 6593587, 'Boston', 'Boston' ],
27
+ ['Michigan', 'MI', 97990, 9969727, 'Lansing', 'Detroit' ],
28
+ ['Minnesota', 'MN', 86943, 5266214, 'Saint Paul', 'Minneapolis' ],
29
+ ['Mississippi', 'MS', 48434, 2951996, 'Jackson', 'Jackson' ],
30
+ ['Missouri', 'MO', 69704, 5987580, 'Jefferson City', 'Kansas City' ],
31
+ ['Montana', 'MT', 147165, 974989, 'Helena', 'Billings' ],
32
+ ['Nebraska', 'NE', 77420, 1796619, 'Lincoln', 'Omaha' ],
33
+ ['Nevada', 'NV', 110567, 2643085, 'Carson City', 'Las Vegas' ],
34
+ ['New Hampshire', 'NH', 9350, 1324575, 'Concord', 'Manchester' ],
35
+ ['New Jersey', 'NJ', 8729, 8707739, 'Trenton', 'Newark' ],
36
+ ['New Mexico', 'NM', 121697, 2009671, 'Santa Fe', 'Albuquerque' ],
37
+ ['New York', 'NY', 54556, 19541453, 'Albany', 'New York City' ],
38
+ ['North Carolina', 'NC', 53865, 9380884, 'Raleigh', 'Charlotte' ],
39
+ ['North Dakota', 'ND', 70762, 646844, 'Bismarck', 'Fargo' ],
40
+ ['Ohio', 'OH', 44825, 11542645, 'Columbus', 'Columbus' ],
41
+ ['Oklahoma', 'OK', 69960, 3687050, 'Oklahoma City', 'Oklahoma City' ],
42
+ ['Oregon', 'OR', 98466, 3825657, 'Salem', 'Portland' ],
43
+ ['Pennsylvania', 'PA', 46055, 12604767, 'Harrisburg', 'Philadelphia' ],
44
+ ['Rhode Island', 'RI', 1210, 1053209, 'Providence', 'Providence' ],
45
+ ['South Carolina', 'SC', 32020, 4561242, 'Columbia', 'Columbia' ],
46
+ ['South Dakota', 'SD', 77184, 812383, 'Pierre', 'Sioux Falls' ],
47
+ ['Tennessee', 'TN', 42181, 6296254, 'Nashville', 'Memphis' ],
48
+ ['Texas', 'TX', 268820, 24782302, 'Austin', 'Houston' ],
49
+ ['Utah', 'UT', 84899, 2784572, 'Salt Lake City', 'Salt Lake City'],
50
+ ['Vermont', 'VT', 9623, 621760, 'Montpelier', 'Burlington' ],
51
+ ['Virginia', 'VA', 42774, 7882590, 'Richmond', 'Virginia Beach'],
52
+ ['Washington', 'WA', 71362, 6664195, 'Olympia', 'Seattle' ],
53
+ ['West Virginia', 'WV', 24230, 1819777, 'Charleston', 'Charleston' ],
54
+ ['Wisconsin', 'WI', 65498, 5654774, 'Madison', 'Milwaukee' ],
55
+ ['Wyoming', 'WY', 97818, 544270, 'Cheyenne', 'Cheyenne' ]
56
+ end
@@ -51,9 +51,15 @@ class TestConstantRecord < Test::Unit::TestCase
51
51
  assert_raise (RuntimeError) { SimpleClass.find_by_foo('bar') }
52
52
  assert_equal [ 'Lithuania', 'Latvia', 'Estonia' ], SimpleClass.find(:all).collect{|o| o.name}
53
53
  assert_equal [ 1, 2, 3 ], SimpleClass.find(:all).collect{|o| o.id}
54
+ assert_equal [ 1, 2, 3 ], SimpleClass.find(:all, :ignored => 'blah').collect{|o| o.id}
55
+ assert_equal [ 1, 2, 3 ], SimpleClass.all.collect{|o| o.id}
56
+ assert_equal [ 1, 2, 3 ], SimpleClass.all(:ignored => 'blah').collect{|o| o.id}
54
57
  assert_equal 3, SimpleClass.count
55
58
  assert_equal 'Lithuania', SimpleClass.find(:first).name
59
+ assert_equal 'Lithuania', SimpleClass.first.name
60
+ assert_equal 'Estonia', SimpleClass.first(:conditions => {:name => "Estonia"}).name
56
61
  assert_equal 'Estonia', SimpleClass.find(:last).name
62
+ assert_equal 'Estonia', SimpleClass.last.name
57
63
  end
58
64
 
59
65
  def test_simple_finder_with_custom_column_name
@@ -72,7 +78,7 @@ class TestConstantRecord < Test::Unit::TestCase
72
78
  end
73
79
 
74
80
  def test_multi_column_finder
75
- all = MultiColumnClass.find(:all)
81
+ all = MultiColumnClass.find(:all, :conditions => {})
76
82
  chf = all[4]
77
83
  assert 5 == chf.id && chf.short && 'Swiss franc' == chf.description
78
84
 
@@ -86,6 +92,10 @@ class TestConstantRecord < Test::Unit::TestCase
86
92
  assert_equal [ 'EUR', 'USD', 'CAD', 'GBP', 'CHF' ], MultiColumnClass.find(:all).collect{|o| o.short}
87
93
  assert_equal [ 1, 2, 3, 4, 5 ], MultiColumnClass.find(:all).collect{|o| o.id}
88
94
  assert_equal 5, MultiColumnClass.count
95
+
96
+ assert_equal 'Euro', MultiColumnClass['EUR']
97
+ assert_equal 'US Dollar', MultiColumnClass['USD']
98
+ assert_raise (ConstantRecord::ConstantNotFound) { MultiColumnClass['BadValue'] }
89
99
  end
90
100
 
91
101
  def test_multi_column_not_string_finder
@@ -137,4 +147,9 @@ class TestConstantRecord < Test::Unit::TestCase
137
147
  BadColumnNames.columns :instance_method, :class_variable # must log 2 warnings
138
148
  assert_equal ConstantRecord::Base.logger.warn_count - warnings_count, 2
139
149
  end
150
+
151
+ def test_attribute_accessors
152
+ # TODO!
153
+ end
154
+
140
155
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: constantrecord
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 17
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 2
9
- - 0
10
- version: 0.2.0
8
+ - 3
9
+ - 1
10
+ version: 0.3.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Christoph Petschnig
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-06-29 00:00:00 +02:00
18
+ date: 2010-10-02 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies: []
21
21
 
@@ -35,6 +35,9 @@ files:
35
35
  - VERSION
36
36
  - constantrecord.gemspec
37
37
  - lib/constantrecord.rb
38
+ - samples/canadian_province.rb
39
+ - samples/german_province.rb
40
+ - samples/us_state.rb
38
41
  - test/helper.rb
39
42
  - test/test_constantrecord.rb
40
43
  has_rdoc: true