rest_resource 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ *.gem
2
+ .bundle
3
+ pkg/*
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --colour
2
+ --format documentation
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm ree@rest_resource
data/.travis.yml ADDED
@@ -0,0 +1,7 @@
1
+ script: "bundle exec rake spec"
2
+ rvm:
3
+ - ree
4
+ - 1.9.2
5
+ notifications:
6
+ email:
7
+ - dev@whiteglove.com
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem 'rest-client'
4
+ gem 'active_support'
5
+ gem 'rake'
6
+ group :test do
7
+ gem 'rspec'
8
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,28 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ active_support (3.0.0)
5
+ activesupport (= 3.0.0)
6
+ activesupport (3.0.0)
7
+ diff-lcs (1.1.3)
8
+ mime-types (1.16)
9
+ rake (0.9.2)
10
+ rest-client (1.6.7)
11
+ mime-types (>= 1.16)
12
+ rspec (2.6.0)
13
+ rspec-core (~> 2.6.0)
14
+ rspec-expectations (~> 2.6.0)
15
+ rspec-mocks (~> 2.6.0)
16
+ rspec-core (2.6.4)
17
+ rspec-expectations (2.6.0)
18
+ diff-lcs (~> 1.1.2)
19
+ rspec-mocks (2.6.0)
20
+
21
+ PLATFORMS
22
+ ruby
23
+
24
+ DEPENDENCIES
25
+ active_support
26
+ rake
27
+ rest-client
28
+ rspec
data/README.md ADDED
@@ -0,0 +1,30 @@
1
+ rest_resource -- rest-client gem wrapper to provide a simple CRUD interface
2
+ ====================================
3
+
4
+ [![Build Status](https://secure.travis-ci.org/ywen/rest_resource.png)](http://travis-ci.org/ywen/rest_resource)
5
+
6
+
7
+ ## DESCRIPTION
8
+ The gem provides a basic CRUD operation to the resources. It is basically rest-client wrapper. Once you use it, you have find, create, update and delete (Currently I implemented only find and create)
9
+
10
+ ## USAGE
11
+ Given you need to fetch user from a web service. You can write:
12
+
13
+ class User < RestResource::Resource
14
+ class << self
15
+ def url
16
+ "http://www.example.com/users"
17
+ end
18
+ end
19
+ end
20
+
21
+ To use it, you can just do:
22
+
23
+ User.find 1
24
+
25
+ User.create :name => "Leslie Cheung", :login => "singer"
26
+
27
+ Both operation assume your web service controller returns a json string which can be initialized into an object.
28
+
29
+ ##Contributors
30
+ * Yi Wen
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ import File.join(File.expand_path(File.dirname(__FILE__)), "tasks", "rspec.rake")
2
+ require 'bundler/gem_tasks'
@@ -0,0 +1,6 @@
1
+ require "rest_resource/version"
2
+ require 'rubygems'
3
+ require 'rest-client'
4
+ require 'active_support'
5
+ require 'rest_resource/rest_crud'
6
+ require 'rest_resource/resource'
@@ -0,0 +1,34 @@
1
+ module RestResource
2
+ class Resource
3
+ attr_reader :attributes
4
+ private :attributes
5
+
6
+ class << self
7
+ def find(resource_id)
8
+ self.new(rest_crud.find(resource_id))
9
+ end
10
+
11
+ def create(params)
12
+ self.new(rest_crud.create(params))
13
+ end
14
+
15
+ private
16
+
17
+ def rest_crud
18
+ RestCrud.new(url)
19
+ end
20
+ end
21
+
22
+ def initialize(params={})
23
+ params_hash = ActiveSupport::JSON.decode params
24
+ @attributes = params_hash
25
+ (class << self; self; end).class_eval do
26
+ params_hash.each_pair do |method_name, value|
27
+ define_method(method_name) do
28
+ value
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,17 @@
1
+ module RestResource
2
+ class RestCrud
3
+ attr_reader :url
4
+ private :url
5
+ def initialize(url)
6
+ @url = url
7
+ end
8
+
9
+ def find(resource_id)
10
+ RestClient.get "#{url}/#{resource_id}.json"
11
+ end
12
+
13
+ def create(params)
14
+ RestClient.post "#{url}.json", params
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,3 @@
1
+ module RestResource
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "rest_resource/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "rest_resource"
7
+ s.version = RestResource::VERSION
8
+ s.authors = ["Yi Wen"]
9
+ s.email = ["hayafirst@gmail.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{A wrapper over rest-client providing basic CRUD restful web service operation}
12
+ s.description = %q{A wrapper over rest-client providing basic CRUD restful web service operation}
13
+
14
+ s.rubyforge_project = "rest_resource"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+ s.add_runtime_dependency(%q<rest-client>, [">= 0"])
21
+ s.add_runtime_dependency(%q<active_support>, [">= 0"])
22
+ end
@@ -0,0 +1,63 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), "..", "spec_helper")
2
+ module RestResource
3
+ describe Resource do
4
+ let(:rest_crud) {double :rest_crud, :find => "{}", :create => "{}"}
5
+ let(:find_params) {123}
6
+ let(:create_params) {{"attr1" => "val1"}}
7
+ let(:klass) {
8
+ Class.new(Resource) do
9
+ def self.url
10
+ "http://www.example.com/resources"
11
+ end
12
+ end
13
+ }
14
+
15
+ %w(find create).each do |method_name|
16
+ describe ".#{method_name}" do
17
+ before(:each) do
18
+ RestCrud.stub(:new).and_return rest_crud
19
+ end
20
+
21
+
22
+ it "should initialize a rest crud object" do
23
+ RestCrud.should_receive(:new).with("http://www.example.com/resources").and_return rest_crud
24
+ klass.send(method_name, send("#{method_name}_params"))
25
+ end
26
+
27
+ it "should ask rest crud to do the finding" do
28
+ rest_crud.should_receive(method_name).with(send("#{method_name}_params"))
29
+ klass.send(method_name, send("#{method_name}_params"))
30
+ end
31
+
32
+ it "should intialize a resource object" do
33
+ rest_crud.stub(:find).and_return(ActiveSupport::JSON.encode("attr1" => "val1", "attr2" => "val2"))
34
+ object = klass.send(method_name, send("#{method_name}_params"))
35
+ object.should be_a klass
36
+ end
37
+
38
+ end
39
+ end
40
+
41
+ describe ".new" do
42
+ let(:params) { ActiveSupport::JSON.encode( {"attr1" => "val1", "attr2" => "val2"} ) }
43
+ let(:resource) {klass.new(params)}
44
+ {"attr1" => "val1", "attr2" => "val2"}.each_pair do |attr, val|
45
+ it "should generate '#{attr}' method and return '#{val}'" do
46
+ resource.send(attr).should == val
47
+ end
48
+ end
49
+
50
+ context "when the objects are initialized multiple times" do
51
+ attr_reader :resource1
52
+ before(:each) do
53
+ @resource1 = klass.new( ActiveSupport::JSON.encode("attr1" => "val1"))
54
+ klass.new( ActiveSupport::JSON.encode("attr1" => "val2"))
55
+ end
56
+
57
+ it "should work" do
58
+ resource1.attr1.should == "val1"
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,20 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), "..", "spec_helper")
2
+
3
+ module RestResource
4
+ describe RestCrud do
5
+ subject {RestCrud.new("http://example.com/resources")}
6
+ describe ".find" do
7
+ it "should get the resource specified" do
8
+ RestClient.should_receive(:get).with("http://example.com/resources/123.json")
9
+ subject.find 123
10
+ end
11
+ end
12
+
13
+ describe ".create" do
14
+ it "should post the resource specified" do
15
+ RestClient.should_receive(:post).with("http://example.com/resources.json", {:param1 => "value1", :param2 => "values2"})
16
+ subject.create({:param1 => "value1", :param2 => "values2"})
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,17 @@
1
+ require 'rubygems'
2
+ require 'rspec'
3
+ RSpec.configure do |config|
4
+ # == Mock Framework
5
+ #
6
+ # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
7
+ #
8
+ # config.mock_with :mocha
9
+ # config.mock_with :flexmock
10
+ # config.mock_with :rr
11
+ config.mock_with :rspec
12
+
13
+ # If you're not using ActiveRecord, or you'd prefer not to run each of your
14
+ # examples within a transaction, comment the following line or assign false
15
+ # instead of true.
16
+ end
17
+ require File.join(File.expand_path(File.dirname(__FILE__)), "../lib", "rest_resource")
data/tasks/rspec.rake ADDED
@@ -0,0 +1,17 @@
1
+ begin
2
+ require 'rspec/core'
3
+ require 'rspec/core/rake_task'
4
+
5
+ spec_prereq = :noop
6
+ task :noop do
7
+ end
8
+
9
+ desc "Run all specs in spec directory (excluding plugin specs)"
10
+ RSpec::Core::RakeTask.new(:spec => spec_prereq) do |t|
11
+ t.rspec_opts = ["--format", "documentation", "--colour"]
12
+ t.pattern = "spec/**/*_spec.rb"
13
+ end
14
+
15
+ rescue LoadError => e
16
+ p e
17
+ end
metadata ADDED
@@ -0,0 +1,113 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rest_resource
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Yi Wen
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-10-06 00:00:00 -05:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rest-client
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: active_support
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 0
46
+ version: "0"
47
+ type: :runtime
48
+ version_requirements: *id002
49
+ description: A wrapper over rest-client providing basic CRUD restful web service operation
50
+ email:
51
+ - hayafirst@gmail.com
52
+ executables: []
53
+
54
+ extensions: []
55
+
56
+ extra_rdoc_files: []
57
+
58
+ files:
59
+ - .gitignore
60
+ - .rspec
61
+ - .rvmrc
62
+ - .travis.yml
63
+ - Gemfile
64
+ - Gemfile.lock
65
+ - README.md
66
+ - Rakefile
67
+ - lib/rest_resource.rb
68
+ - lib/rest_resource/resource.rb
69
+ - lib/rest_resource/rest_crud.rb
70
+ - lib/rest_resource/version.rb
71
+ - rest_resource.gemspec
72
+ - spec/rest_resource/resource_spec.rb
73
+ - spec/rest_resource/rest_crud_spec.rb
74
+ - spec/spec_helper.rb
75
+ - tasks/rspec.rake
76
+ has_rdoc: true
77
+ homepage: ""
78
+ licenses: []
79
+
80
+ post_install_message:
81
+ rdoc_options: []
82
+
83
+ require_paths:
84
+ - lib
85
+ required_ruby_version: !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ hash: 3
91
+ segments:
92
+ - 0
93
+ version: "0"
94
+ required_rubygems_version: !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ hash: 3
100
+ segments:
101
+ - 0
102
+ version: "0"
103
+ requirements: []
104
+
105
+ rubyforge_project: rest_resource
106
+ rubygems_version: 1.4.2
107
+ signing_key:
108
+ specification_version: 3
109
+ summary: A wrapper over rest-client providing basic CRUD restful web service operation
110
+ test_files:
111
+ - spec/rest_resource/resource_spec.rb
112
+ - spec/rest_resource/rest_crud_spec.rb
113
+ - spec/spec_helper.rb