rest_resource 0.0.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/.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