mixtli-mixtli-fred 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ pkg
2
+ doc
data/Manifest ADDED
@@ -0,0 +1,7 @@
1
+ README.rdoc
2
+ Manifest
3
+ fred.gemspec
4
+ init.rb
5
+ github-test.rb
6
+ lib/fred.rb
7
+ Rakefile
data/README.rdoc ADDED
File without changes
data/Rakefile ADDED
@@ -0,0 +1,23 @@
1
+ # Rakefile
2
+ require 'rubygems'
3
+ require 'rake'
4
+ #require 'echoe'
5
+
6
+
7
+ Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each { |ext| load ext }
8
+
9
+
10
+ begin
11
+ require 'jeweler'
12
+ Jeweler::Tasks.new do |gemspec|
13
+ gemspec.name = "mixtli-fred"
14
+ gemspec.summary = "Federal Reserve API"
15
+ gemspec.email = "mixtli@github.com"
16
+ gemspec.homepage = "http://github.com/mixtli/fred"
17
+ gemspec.description = "Federal Reserve API"
18
+ gemspec.authors = ["Ron McClain"]
19
+ end
20
+ rescue LoadError
21
+ puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
22
+ end
23
+
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.5
data/github-test.rb ADDED
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env ruby
2
+ require 'yaml'
3
+
4
+ if ARGV.size < 1
5
+ puts "Usage: github-test.rb my-project.gemspec"
6
+ exit
7
+ end
8
+
9
+ require 'rubygems/specification'
10
+ data = File.read(ARGV[0])
11
+ spec = nil
12
+
13
+ if data !~ %r{!ruby/object:Gem::Specification}
14
+ Thread.new { spec = eval("$SAFE = 3\n#{data}") }.join
15
+ else
16
+ spec = YAML.load(data)
17
+ end
18
+
19
+ spec.validate
20
+
21
+ puts spec
22
+ puts "OK"
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ require "fred"
data/lib/fred.rb ADDED
@@ -0,0 +1,108 @@
1
+ require 'rubygems'
2
+ require 'open-uri'
3
+ require 'hpricot'
4
+ require 'activeresource'
5
+
6
+
7
+ module Fred
8
+ class Base
9
+ cattr_accessor :api_key
10
+ class_inheritable_accessor :base_url, :primary_key, :collection_path, :element_path
11
+ attr_reader :attributes
12
+ self.base_url = "http://api.stlouisfed.org/fred"
13
+
14
+ def initialize(attrs)
15
+ @attributes = attrs
16
+ end
17
+
18
+ def self.get(id)
19
+ uri = base_url + "/#{element_path}?api_key=#{api_key}&#{primary_key}=#{id}"
20
+ RAILS_DEFAULT_LOGGER.debug uri
21
+ doc = Hpricot.XML(open(uri))
22
+ new(doc.search("/*/*")[1].attributes)
23
+ end
24
+
25
+ def self.find(params = {})
26
+ results = []
27
+ uri = base_url + "/" + collection_path + "?" + encode_params(params)
28
+ puts uri
29
+ doc = Hpricot.XML(open(uri))
30
+ doc.search("/*/*").each do |el|
31
+ results << new(el.attributes) if el.respond_to?(:attributes)
32
+ end
33
+ results
34
+ end
35
+
36
+ def self.encode_params(args)
37
+ args['api_key'] ||= api_key
38
+ args.map { |k,v| "%s=%s" % [URI.encode(k.to_s), URI.encode(v.to_s)] }.join('&') unless args.blank?
39
+ end
40
+ end
41
+
42
+ class Category < Base
43
+ self.collection_path = "category"
44
+ self.element_path = "category"
45
+ self.primary_key = "category_id"
46
+ end
47
+
48
+ class Release < Base
49
+ self.collection_path = "releases"
50
+ self.element_path = "release"
51
+ self.primary_key = "release_id"
52
+ end
53
+
54
+ class Series < Base
55
+ self.collection_path = "series/search"
56
+ self.element_path = "series"
57
+ self.primary_key = "series_id"
58
+
59
+ def observations(params = {})
60
+ data = []
61
+ puts params.inspect
62
+ params[:series_id] = attributes["id"]
63
+ uri = base_url + "/series/observations?" + self.class.encode_params(params)
64
+ puts "URI = " + uri
65
+ doc = Hpricot.XML(open(uri))
66
+ doc.search("/*/*").each do |el|
67
+ data << {:date => DateTime.parse(el.attributes['date']), :value => el.attributes['value'] } if el.respond_to?(:attributes)
68
+ #data << el.attributes if el.respond_to?(:attributes)
69
+ end
70
+ data
71
+ end
72
+ end
73
+
74
+ class Source < Base
75
+ self.collection_path = "sources"
76
+ self.element_path = "source"
77
+ self.primary_key = "source_id"
78
+ end
79
+
80
+ end
81
+
82
+ #Fred::Base.api_key = "xxxxxxxxxxxxxxxxxxxx"
83
+ #
84
+ #puts "Category.get"
85
+ #puts Fred::Category.get(125).inspect
86
+ #
87
+ #puts "Category.find"
88
+ #puts Fred::Category.find.inspect
89
+ #
90
+ #puts "Release.get"
91
+ #puts Fred::Release.get(178).inspect
92
+ #
93
+ #puts "Release.find"
94
+ #puts Fred::Release.find.inspect
95
+ #
96
+ #puts "Series.find"
97
+ #puts Fred::Series.find(:search_text => 'money').inspect
98
+ #
99
+ #puts "Series.get"
100
+ #s = Fred::Series.get('M2ASL')
101
+ #puts s.observations.inspect
102
+ #
103
+ #
104
+ #puts "Source.find"
105
+ #puts Fred::Source.find.inspect
106
+ #
107
+ #puts "Source.get"
108
+ #puts Fred::Source.get(36).inspect
@@ -0,0 +1,41 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{mixtli-fred}
5
+ s.version = "0.1.5"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Ron McClain"]
9
+ s.date = %q{2009-06-06}
10
+ s.description = %q{Federal Reserve API}
11
+ s.email = %q{mixtli@github.com}
12
+ s.extra_rdoc_files = [
13
+ "README.rdoc"
14
+ ]
15
+ s.files = [
16
+ ".gitignore",
17
+ "Manifest",
18
+ "README.rdoc",
19
+ "Rakefile",
20
+ "VERSION",
21
+ "github-test.rb",
22
+ "init.rb",
23
+ "lib/fred.rb",
24
+ "mixtli-fred.gemspec"
25
+ ]
26
+ s.homepage = %q{http://github.com/mixtli/fred}
27
+ s.rdoc_options = ["--charset=UTF-8"]
28
+ s.require_paths = ["lib"]
29
+ s.rubygems_version = %q{1.3.3}
30
+ s.summary = %q{Federal Reserve API}
31
+
32
+ if s.respond_to? :specification_version then
33
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
34
+ s.specification_version = 3
35
+
36
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
37
+ else
38
+ end
39
+ else
40
+ end
41
+ end
metadata ADDED
@@ -0,0 +1,61 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mixtli-mixtli-fred
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.5
5
+ platform: ruby
6
+ authors:
7
+ - Ron McClain
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-06-06 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: Federal Reserve API
17
+ email: mixtli@github.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README.rdoc
24
+ files:
25
+ - .gitignore
26
+ - Manifest
27
+ - README.rdoc
28
+ - Rakefile
29
+ - VERSION
30
+ - github-test.rb
31
+ - init.rb
32
+ - lib/fred.rb
33
+ - mixtli-fred.gemspec
34
+ has_rdoc: false
35
+ homepage: http://github.com/mixtli/fred
36
+ post_install_message:
37
+ rdoc_options:
38
+ - --charset=UTF-8
39
+ require_paths:
40
+ - lib
41
+ required_ruby_version: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: "0"
46
+ version:
47
+ required_rubygems_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: "0"
52
+ version:
53
+ requirements: []
54
+
55
+ rubyforge_project:
56
+ rubygems_version: 1.2.0
57
+ signing_key:
58
+ specification_version: 3
59
+ summary: Federal Reserve API
60
+ test_files: []
61
+