ambry 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/Changelog.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Ambry Changelog
2
2
 
3
+ ## [0.2.1](https://github.com/norman/ambry/tree/0.2.1) - 2001-09-20 ([diff](https://github.com/norman/ambry/compare/0.2.0...0.2.1))
4
+
5
+ ### [Norman Clarke](https://github.com/norman)
6
+
7
+ * Fix handling of attributes with falsy values
8
+
9
+
3
10
  ## [0.2.0](https://github.com/norman/ambry/tree/0.2.0) - 2001-09-05 ([diff](https://github.com/norman/ambry/compare/0.1.2...0.2.0))
4
11
 
5
12
  ### [Norman Clarke](https://github.com/norman)
data/README.md CHANGED
@@ -59,6 +59,14 @@ quick samples.
59
59
  first_alphabetical = Country.alphabetical.first
60
60
  last_alphabetical = Country.alphabetical.last
61
61
 
62
+ ## When should I use Ambry?
63
+
64
+ Ambry can be useful for refactoring code with large hash constants and long case
65
+ statements. Sometimes it's hard to figure out where code ends and data begins,
66
+ but if your code looks like it could be simplified significantly by putting some
67
+ things in a data store, yet it's not enough data to justify something like
68
+ SQLite, then Ambry could be a good fit.
69
+
62
70
 
63
71
  ## Installation
64
72
 
data/extras/bench.rb CHANGED
@@ -6,8 +6,6 @@ require "ambry"
6
6
 
7
7
  N = 500
8
8
 
9
- Ambry::Adapter.new
10
-
11
9
  class Person
12
10
  extend Ambry::Model
13
11
  field :email, :name, :age
@@ -114,8 +114,8 @@ module Ambry
114
114
  run_callbacks(:destroy) { delete }
115
115
  end
116
116
 
117
- def update_attributes
118
- run_callbacks(:save) { update }
117
+ def update_attributes(*args)
118
+ run_callbacks(:save) { update(*args) }
119
119
  end
120
120
  end
121
121
  end
@@ -6,14 +6,25 @@ module Ambry
6
6
  class HashProxy
7
7
  attr :hash
8
8
 
9
+ def self.with(hash, &block)
10
+ new.with(hash, &block)
11
+ end
12
+
9
13
  # Allows accessing a hash attribute as a method.
10
14
  def method_missing(symbol)
11
15
  hash[symbol] or hash[symbol.to_s] or raise NoMethodError
12
16
  end
13
17
 
14
18
  # Allows accessing a hash attribute as hash key, either a string or symbol.
15
- def [](value)
16
- hash[value || value.to_sym || value.to_s]
19
+ def [](key)
20
+ if hash.key?(key) then hash[key]
21
+ elsif hash.key?(key.to_sym) then hash[key.to_sym]
22
+ elsif hash.key?(key.to_s) then hash[key.to_s]
23
+ end
24
+ end
25
+
26
+ def key?(key)
27
+ hash.key?(key) or hash.key?(key.to_sym) or hash.key?(key.to_s)
17
28
  end
18
29
 
19
30
  # Remove the hash.
data/lib/ambry/model.rb CHANGED
@@ -27,7 +27,7 @@ module Ambry
27
27
  attribute_names << name.to_sym
28
28
  class_eval(<<-EOM, __FILE__, __LINE__ + 1)
29
29
  def #{name}
30
- @#{name} or (@attributes[:#{name}] || @attributes['#{name}'] if @attributes)
30
+ defined?(@#{name}) ? @#{name} : @attributes[:#{name}]
31
31
  end
32
32
 
33
33
  def #{name}=(value)
@@ -152,9 +152,10 @@ module Ambry
152
152
 
153
153
  # Update this instance's attributes and invoke #save.
154
154
  def update(attributes)
155
- self.class.attribute_names.each do |name|
156
- value = attributes[name] || attributes[name.to_s]
157
- send("#{name}=", value) if value
155
+ HashProxy.with(attributes) do |proxy|
156
+ self.class.attribute_names.each do |name|
157
+ send("#{name}=", proxy[name]) if proxy.key?(name)
158
+ end
158
159
  end
159
160
  save
160
161
  end
data/lib/ambry/version.rb CHANGED
@@ -2,7 +2,7 @@ module Ambry
2
2
  module Version
3
3
  MAJOR = 0
4
4
  MINOR = 2
5
- TINY = 0
5
+ TINY = 1
6
6
  BUILD = nil
7
7
  STRING = [MAJOR, MINOR, TINY, BUILD].compact.join('.')
8
8
  end
data/spec/model_spec.rb CHANGED
@@ -150,6 +150,12 @@ describe Ambry::Model do
150
150
  assert_equal count, Person.count
151
151
  end
152
152
 
153
+ it "should allow false as an update value (regression)" do
154
+ p = Person.get("moe@3stooges.com")
155
+ p.update(:name => false)
156
+ assert_equal false, p.name
157
+ end
158
+
153
159
  end
154
160
 
155
161
  describe "#save" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ambry
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-09-05 00:00:00.000000000 Z
12
+ date: 2011-09-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ffaker
16
- requirement: &70333211234400 !ruby/object:Gem::Requirement
16
+ requirement: &70104361299880 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70333211234400
24
+ version_requirements: *70104361299880
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: minitest
27
- requirement: &70333211233680 !ruby/object:Gem::Requirement
27
+ requirement: &70104361299380 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 2.2.2
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70333211233680
35
+ version_requirements: *70104361299380
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: mocha
38
- requirement: &70333211232940 !ruby/object:Gem::Requirement
38
+ requirement: &70104361298940 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70333211232940
46
+ version_requirements: *70104361298940
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: activesupport
49
- requirement: &70333211232060 !ruby/object:Gem::Requirement
49
+ requirement: &70104361298360 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '3.0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70333211232060
57
+ version_requirements: *70104361298360
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: activemodel
60
- requirement: &70333211231280 !ruby/object:Gem::Requirement
60
+ requirement: &70104361297820 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '3.0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70333211231280
68
+ version_requirements: *70104361297820
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rake
71
- requirement: &70333211230900 !ruby/object:Gem::Requirement
71
+ requirement: &70104361297440 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,7 +76,7 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70333211230900
79
+ version_requirements: *70104361297440
80
80
  description: ! " Ambry is not an ORM, man! It's a database and ORM replacement
81
81
  for (mostly)\n static models and small datasets. It provides ActiveModel compatibility,
82
82
  and\n flexible searching and storage.\n"
@@ -137,7 +137,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
137
137
  version: '0'
138
138
  requirements: []
139
139
  rubyforge_project: ! '[none]'
140
- rubygems_version: 1.8.6
140
+ rubygems_version: 1.8.5
141
141
  signing_key:
142
142
  specification_version: 3
143
143
  summary: An ActiveModel-compatible ORM-like library for storing model instances in