xurrency 001 → 002

Sign up to get free protection for your applications and to get access to all the features.
data/.gemified CHANGED
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  :summary: ruby-xurrency is a wrapper library for API xurrency(http://xurrency.com/api).
3
3
  :email: keita.yamaguchi@gmail.com
4
- :has_rdoc: true
5
4
  :name: xurrency
5
+ :has_rdoc: true
6
6
  :homepage: http://rubyforge.org/projects/xurrency/
7
- :version: "001"
7
+ :version: "002"
8
+ :rubyforge_project: xurrency
8
9
  :dependencies:
9
10
  - soap4r
10
- :rubyforge_project: xurrency
11
11
  :author: Keita Yamaguchi
@@ -1,4 +1,10 @@
1
+ = 002: 2008-04-20
2
+
3
+ * Keita Yamaguchi:
4
+ * new methods: Xurrency#update_*, #clear_*, and #*_cached?
5
+ * deleted: Xurrency#update
6
+
1
7
  = 001: 2008-04-15
2
8
 
3
- * Keita Yamaguchi
9
+ * Keita Yamaguchi:
4
10
  * Initial release
@@ -5,7 +5,7 @@ require "singleton"
5
5
  require "delegate"
6
6
 
7
7
  class Xurrency
8
- VERSION = "001"
8
+ VERSION = "002"
9
9
 
10
10
  # Soap client.
11
11
  class Client < Delegator #:nodoc:
@@ -89,13 +89,6 @@ class Xurrency
89
89
  end
90
90
  end
91
91
 
92
- # Updates the result value.
93
- def update(name, *args)
94
- raise ArgumentError, name unless @cache.has_key?(name)
95
- @cache[name][args] = nil
96
- __send__(name, *args)
97
- end
98
-
99
92
  # Calculates the value without quering getValue.
100
93
  def value(amount, base, target)
101
94
  values(base)[target] * amount
@@ -106,11 +99,22 @@ class Xurrency
106
99
  # Memoize some queries.
107
100
  def memoize(name)
108
101
  @cache[name] = {}
109
- (class << self; self; end).__send__(:define_method, name) do |*args|
102
+ klass = (class << self; self; end)
103
+ klass.__send__(:define_method, name) do |*args|
110
104
  return @cache[name][args] if @cache[name].has_key?(args)
111
105
  @cache[name][args] = Request.send(name, *args)
112
106
  @cache[name][args][:timestamp] = Time.now if name.to_s =~ /values/
113
107
  return @cache[name][args]
114
108
  end
109
+ klass.__send__(:define_method, "update_#{name}") do |*args|
110
+ @cache[name].delete(args)
111
+ __send__(name, *args)
112
+ end
113
+ klass.__send__(:define_method, "#{name}_cached?") do |*args|
114
+ @cache[name].has_key?(args)
115
+ end
116
+ klass.__send__(:define_method, "clear_#{name}") do |*args|
117
+ @cache[name].delete(args)
118
+ end
115
119
  end
116
120
  end
@@ -16,6 +16,34 @@ describe "Xurrency" do
16
16
  res = $xu.zone("jpy")
17
17
  res.should == "Japan"
18
18
  res.__id__.should == $xu.zone("jpy").__id__
19
- res.__id__.should.not == $xu.update(:zone, "jpy").__id__
19
+ res.__id__.should.not == $xu.update_zone("jpy").__id__
20
+ end
21
+
22
+ it "should know weather cached or not" do
23
+ $xu.zone_cached?("cny").should.be.false
24
+ $xu.zone("cny")
25
+ $xu.zone_cached?("cny").should.be.true
26
+ end
27
+
28
+ it "should clear cache" do
29
+ $xu.zone("usd")
30
+ $xu.zone_cached?("usd").should.be.true
31
+ $xu.clear_zone("usd")
32
+ $xu.zone_cached?("usd").should.be.false
33
+ end
34
+
35
+ it "should respond methods" do
36
+ methods = []
37
+ list = [ "currency_name",
38
+ "zone",
39
+ "url",
40
+ "currencies",
41
+ "values",
42
+ "values_inverse" ]
43
+ methods += list
44
+ methods += list.map {|name| "update_#{name}" }
45
+ methods += list.map {|name| "clear_#{name}" }
46
+ methods += list.map {|name| "#{name}_cached?" }
47
+ methods.each {|name| $xu.methods.should.include? name }
20
48
  end
21
49
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xurrency
3
3
  version: !ruby/object:Gem::Version
4
- version: "001"
4
+ version: "002"
5
5
  platform: ruby
6
6
  authors:
7
7
  - Keita Yamaguchi
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-04-15 00:00:00 +09:00
12
+ date: 2008-04-20 00:00:00 +09:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency