remote_api 0.1.0 → 0.1.2

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/Manifest.txt CHANGED
@@ -5,9 +5,7 @@ README.txt
5
5
  Rakefile
6
6
  setup.rb
7
7
 
8
- lib/dsl_accessor.rb
9
8
  lib/remote_api.rb
10
-
11
9
  lib/remote_api/base.rb
12
10
  lib/remote_api/xml.rb
13
11
  lib/remote_api/xml_response.rb
data/README.txt CHANGED
@@ -1,3 +1,41 @@
1
- README for remote_api
2
- =====================
1
+ Simple Readme for now.
3
2
 
3
+ Rubyforge Project: http://rubyforge.org/projects/remote-api/
4
+
5
+ === Installation
6
+
7
+ gem install remote_api
8
+
9
+ === Example
10
+
11
+ This is an example of how to access a little API that allows you to change the title of an object.
12
+ The API would return the title, but in Title Case, and we want to capture that.
13
+
14
+ require 'remote_api'
15
+
16
+ class MyAPI < RemoteAPI
17
+
18
+ attr_reader :title
19
+
20
+ url 'http://test.com/posts/change_title'
21
+
22
+ def request
23
+ "title=#{@title}&post_id={@post_id}"
24
+ end
25
+
26
+ def assert_success
27
+ if @response =~ /&?error=(.+?)&?/
28
+ raise ResponseFailure, $1
29
+ end
30
+ end
31
+
32
+ def process
33
+ @title = @response.match(/&?title=(.+?)&?/)[1]
34
+ end
35
+
36
+ end
37
+
38
+ result = MyAPI.new(:post_id => 123, :title => 'hello world')
39
+ # API call happens here
40
+
41
+ result.title #=> 'Hello World'
data/Rakefile CHANGED
@@ -44,6 +44,6 @@ hoe = Hoe.new(GEM_NAME, VERS) do |p|
44
44
 
45
45
  # == Optional
46
46
  #p.changes - A description of the release's latest changes.
47
- p.extra_deps = %w( activesupport )
47
+ p.extra_deps = [['activesupport'], ['dsl_accessor']]
48
48
  #p.spec_extras - A hash of extra values to set in the gemspec.
49
49
  end
@@ -1,7 +1,8 @@
1
1
  class RemoteAPI
2
2
  class ResponseFailure < RuntimeError; end
3
3
 
4
- dsl_accessor :debug
4
+ dsl_accessor :debug
5
+ dsl_accessor :log_file
5
6
  dsl_accessor :url
6
7
  dsl_accessor :content_type
7
8
 
@@ -57,12 +58,12 @@ class RemoteAPI
57
58
  true
58
59
  end
59
60
 
60
- def process(*args)
61
+ def process
61
62
  raise 'You must define a "process" method! This should should parse the @response and' +
62
63
  'extract relevant data.'
63
64
  end
64
65
 
65
- def request(*args)
66
+ def request
66
67
  raise 'You must define a "request" method! This should create the body of your API request'
67
68
  end
68
69
 
@@ -88,33 +89,45 @@ class RemoteAPI
88
89
  def format_response(response)
89
90
  response
90
91
  end
92
+
93
+ def log(data)
94
+ data = "\n\n\n\n\n*** #{Time.now}\n\n" + data
95
+ if file = self.class.log_file
96
+ File.open(file, 'a') { |f| f.write data }
97
+ end
98
+ end
91
99
 
92
100
  def debug_request(request_body)
93
- return unless self.class.debug
94
- puts <<DEBUG
101
+ return unless self.class.debug || self.class.log_file
102
+ text = <<DEBUG
95
103
 
96
104
  -----------
97
105
  - REQUEST -
98
106
  -----------
99
107
 
100
108
  #{request_body}
101
- DEBUG
109
+ DEBUG
110
+ puts text if self.class.debug
111
+ log(text) if self.class.log_file
102
112
  end
103
113
 
104
114
  def debug_response(response, url)
105
- return unless self.class.debug
115
+ return unless self.class.debug || self.class.log_file
106
116
 
107
- parsed_response = format_response(response)
117
+ text = format_response(response)
108
118
 
109
- puts <<DEBUG
119
+ text = <<DEBUG
110
120
 
111
121
  ------------"
112
122
  - RESPONSE -"
113
123
  ------------"
114
124
  --- From: #{url}"
115
125
 
116
- #{parsed_response}
126
+ #{text}
117
127
 
118
- DEBUG
128
+ DEBUG
129
+
130
+ puts text if self.class.debug
131
+ log(text) if self.class.log_file
119
132
  end
120
133
  end
@@ -2,7 +2,7 @@ class RemoteAPI #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 1
5
- TINY = 0
5
+ TINY = 2
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
data/lib/remote_api.rb CHANGED
@@ -1,13 +1,13 @@
1
+ # Standard Libraries
1
2
  require 'net/https'
2
3
  require 'rexml/document'
3
4
  require 'uri'
4
5
 
6
+ # Gems
5
7
  require 'active_support'
8
+ require 'dsl_accessor'
6
9
 
7
- # Why isn't this a gem?
8
- require File.join(File.dirname(__FILE__), 'dsl_accessor')
9
-
10
- # remote_api files
10
+ # remote_api
11
11
  require 'remote_api/base'
12
12
  require 'remote_api/xml'
13
13
  require 'remote_api/xml_response'
metadata CHANGED
@@ -1,10 +1,10 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.0
2
+ rubygems_version: 0.9.1
3
3
  specification_version: 1
4
4
  name: remote_api
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.1.0
7
- date: 2007-01-15 00:00:00 -08:00
6
+ version: 0.1.2
7
+ date: 2007-01-17 00:00:00 -08:00
8
8
  summary: Provides a basic framework for easily creating classes that access remote APIs.
9
9
  require_paths:
10
10
  - lib
@@ -34,7 +34,6 @@ files:
34
34
  - README.txt
35
35
  - Rakefile
36
36
  - setup.rb
37
- - lib/dsl_accessor.rb
38
37
  - lib/remote_api.rb
39
38
  - lib/remote_api/base.rb
40
39
  - lib/remote_api/xml.rb
@@ -68,3 +67,21 @@ dependencies:
68
67
  - !ruby/object:Gem::Version
69
68
  version: 0.0.0
70
69
  version:
70
+ - !ruby/object:Gem::Dependency
71
+ name: dsl_accessor
72
+ version_requirement:
73
+ version_requirements: !ruby/object:Gem::Version::Requirement
74
+ requirements:
75
+ - - ">"
76
+ - !ruby/object:Gem::Version
77
+ version: 0.0.0
78
+ version:
79
+ - !ruby/object:Gem::Dependency
80
+ name: hoe
81
+ version_requirement:
82
+ version_requirements: !ruby/object:Gem::Version::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: 1.1.7
87
+ version:
data/lib/dsl_accessor.rb DELETED
@@ -1,50 +0,0 @@
1
- class Class
2
- def dsl_accessor(name, options = {})
3
- raise TypeError, "DSL Error: options should be a hash. but got `#{options.class}'" unless options.is_a?(Hash)
4
- writer = options[:writer] || options[:setter]
5
- writer =
6
- case writer
7
- when NilClass then Proc.new{|value| value}
8
- when Symbol then Proc.new{|value| __send__(writer, value)}
9
- when Proc then writer
10
- else raise TypeError, "DSL Error: writer should be a symbol or proc. but got `#{options[:writer].class}'"
11
- end
12
- write_inheritable_attribute(:"#{name}_writer", writer)
13
-
14
- default =
15
- case options[:default]
16
- when NilClass then nil
17
- when [] then Proc.new{[]}
18
- when {} then Proc.new{{}}
19
- when Symbol then Proc.new{__send__(options[:default])}
20
- when Proc then options[:default]
21
- else Proc.new{options[:default]}
22
- end
23
- write_inheritable_attribute(:"#{name}_default", default)
24
-
25
- self.class.class_eval do
26
- define_method("#{name}=") do |value|
27
- writer = read_inheritable_attribute(:"#{name}_writer")
28
- value = writer.call(value) if writer
29
- write_inheritable_attribute(:"#{name}", value)
30
- end
31
-
32
- define_method(name) do |*values|
33
- if values.empty?
34
- # getter method
35
- key = :"#{name}"
36
- if !inheritable_attributes.has_key?(key)
37
- default = read_inheritable_attribute(:"#{name}_default")
38
- value = default ? default.call(self) : nil
39
- __send__("#{name}=", value)
40
- end
41
- read_inheritable_attribute(key)
42
- else
43
- # setter method
44
- __send__("#{name}=", *values)
45
- end
46
- end
47
- end
48
- end
49
- end
50
-