placid 0.0.3 → 0.0.4

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/History.md CHANGED
@@ -1,6 +1,13 @@
1
1
  Placid History
2
2
  ==============
3
3
 
4
+ 0.0.4
5
+ -----
6
+
7
+ - Remove get/post/put/delete convenience methods
8
+ - Side effect: avoid Hashie::Mash doing unwanted `delete` calls
9
+
10
+
4
11
  0.0.3
5
12
  -----
6
13
 
data/README.md CHANGED
@@ -5,6 +5,9 @@ Placid is an ActiveRecord-ish model using a REST API for storage. The REST API
5
5
  can be any backend you choose or create yourself, provided it follows some basic
6
6
  conventions.
7
7
 
8
+ [Documentation is on rdoc.info.](http://rdoc.info/github/a-e/placid/master/frames)
9
+
10
+
8
11
  Installation
9
12
  ------------
10
13
 
@@ -48,7 +51,7 @@ define on your model. For example:
48
51
  unique_id :email
49
52
 
50
53
  def add_phone(phone_number)
51
- put(model, id, 'add_phone', phone_number)
54
+ request(:put, model, id, 'add_phone', phone_number)
52
55
  end
53
56
  end
54
57
 
@@ -56,7 +59,56 @@ define on your model. For example:
56
59
 
57
60
  jenny.add_phone('867-5309')
58
61
  # Same as:
59
- jenny.put('person', 'jenny@example.com', 'add_phone', '867-5309')
62
+ jenny.request(:put, 'person', 'jenny@example.com', 'add_phone', '867-5309')
63
+
64
+
65
+ Model names
66
+ -----------
67
+
68
+ By default, Placid assumes that your REST pathnames use the `snake_case`
69
+ version of your model's name. That is, if you have these models:
70
+
71
+ class Person < Placid::Model
72
+ end
73
+
74
+ class HomeAddress < Placid::Model
75
+ end
76
+
77
+ then Placid will use these REST paths:
78
+
79
+ /person
80
+ /home_address
81
+
82
+ To override this behavior for a single model, simply define the `model` class
83
+ method. For instance, if the REST path for `HomeAddress` should be `addr`, do:
84
+
85
+ class HomeAddress < Placid::Model
86
+ def self.model
87
+ 'addr'
88
+ end
89
+ end
90
+
91
+ If you want to override this behavior for all models in your app, create a
92
+ shared base class derived from `Placid::Model`, and override the `model` class
93
+ method there. For example, if your REST paths use the exact `CamelCase` model
94
+ name, you could do:
95
+
96
+ class Model < Placid::Model
97
+ def self.model
98
+ self.name
99
+ end
100
+ end
101
+
102
+ class Person < Model
103
+ end
104
+
105
+ class HomeAddress < Model
106
+ end
107
+
108
+ This configuration will use REST paths like:
109
+
110
+ /Person
111
+ /HomeAddress
60
112
 
61
113
 
62
114
  License
data/lib/placid/helper.rb CHANGED
@@ -43,7 +43,8 @@ module Placid
43
43
  #
44
44
  # @overload request(method, *path, params={})
45
45
  # @param [String, Symbol] method
46
- # Request method to use ('get', 'post', 'put', 'delete', etc.)
46
+ # Request method to use, as a string ('get', 'post', 'put', 'delete')
47
+ # or symbol (:get, :post, :put, :delete)
47
48
  # @param [Array] path
48
49
  # Path components for the request
49
50
  # @param [Hash] params
@@ -70,68 +71,6 @@ module Placid
70
71
  return JSON.parse(response) rescue {}
71
72
  end
72
73
 
73
- # Send a GET request and return the parsed JSON response.
74
- #
75
- # @example
76
- # get('people', 'eric')
77
- # get('people', {:name => 'eric'})
78
- #
79
- # @overload get(*path, params={})
80
- # See {#request} for allowed parameters.
81
- #
82
- # @return [Hash]
83
- # Parsed response, or an empty hash if parsing failed
84
- #
85
- def get(*path)
86
- request('get', *path)
87
- end
88
-
89
- # Send a POST request and return the parsed JSON response.
90
- #
91
- # @example
92
- # post('people', 'new', {:name => 'eric'})
93
- #
94
- # @overload post(*path, params={})
95
- # See {#request} for allowed parameters.
96
- #
97
- # @return [Hash]
98
- # Parsed response, or an empty hash if parsing failed
99
- #
100
- def post(*path)
101
- request('post', *path)
102
- end
103
-
104
- # Send a PUT request and return the parsed JSON response.
105
- #
106
- # @example
107
- # put('people', 'eric', {:title => 'Developer'})
108
- #
109
- # @overload put(*path, params={})
110
- # See {#request} for allowed parameters.
111
- #
112
- # @return [Hash]
113
- # Parsed response, or an empty hash if parsing failed
114
- #
115
- def put(*path)
116
- request('put', *path)
117
- end
118
-
119
- # Send a DELETE request and return the parsed JSON response.
120
- #
121
- # @example
122
- # delete('people', 'eric')
123
- # delete('people', {:name => 'eric'})
124
- #
125
- # @overload delete(*path, params={})
126
- # See {#request} for allowed parameters.
127
- #
128
- # @return [Hash]
129
- # Parsed response, or an empty hash if parsing failed
130
- #
131
- def delete(*path)
132
- request('delete', *path)
133
- end
134
-
135
74
  # Send a GET to a path that returns a single JSON object, and return the
136
75
  # result as a Hashie::Mash.
137
76
  #
@@ -141,7 +80,7 @@ module Placid
141
80
  # @return [Hashie::Mash]
142
81
  #
143
82
  def get_mash(*path)
144
- json = get(*path)
83
+ json = request(:get, *path)
145
84
  begin
146
85
  return Hashie::Mash.new(json)
147
86
  rescue => e
@@ -159,7 +98,7 @@ module Placid
159
98
  # @return [Array]
160
99
  #
161
100
  def get_mashes(*path)
162
- json = get(*path)
101
+ json = request(:get, *path)
163
102
  begin
164
103
  return json.map {|rec| Hashie::Mash.new(rec)}
165
104
  rescue => e
data/lib/placid/model.rb CHANGED
@@ -112,7 +112,7 @@ module Placid
112
112
  # @return [Model]
113
113
  #
114
114
  def self.find(id)
115
- json = get(model, id)
115
+ json = request(:get, model, id)
116
116
  return self.new(json)
117
117
  end
118
118
 
@@ -125,7 +125,7 @@ module Placid
125
125
  #
126
126
  def self.create(attrs={})
127
127
  obj = self.new(attrs)
128
- json = post(model, attrs)
128
+ json = request(:post, model, attrs)
129
129
  obj.merge!(json)
130
130
  return obj
131
131
  end
@@ -141,7 +141,7 @@ module Placid
141
141
  #
142
142
  def self.update(id, attrs={})
143
143
  obj = self.new(attrs)
144
- json = put(model, id, attrs)
144
+ json = request(:put, model, id, attrs)
145
145
  obj.merge!(json)
146
146
  return obj
147
147
  end
@@ -152,7 +152,7 @@ module Placid
152
152
  # Identifier for the model instance to delete
153
153
  #
154
154
  def self.destroy(id)
155
- delete(model, id)
155
+ request(:delete, model, id)
156
156
  end
157
157
 
158
158
  end
data/placid.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "placid"
3
- s.version = "0.0.3"
3
+ s.version = "0.0.4"
4
4
  s.summary = "Models from REST"
5
5
  s.description = <<-EOS
6
6
  EOS
@@ -18,6 +18,18 @@ describe Placid::Helper do
18
18
  end
19
19
 
20
20
  describe "#request" do
21
+ it "accepts a string for method" do
22
+ RestClient.stub(:get => '["success"]')
23
+ json = request('get')
24
+ json.should == ["success"]
25
+ end
26
+
27
+ it "accepts a symbol for method" do
28
+ RestClient.stub(:get => '["success"]')
29
+ json = request(:get)
30
+ json.should == ["success"]
31
+ end
32
+
21
33
  it "returns a legitimate response as JSON" do
22
34
  RestClient.stub(:get => '["success"]')
23
35
  json = request('get')
@@ -69,38 +81,6 @@ describe Placid::Helper do
69
81
  end
70
82
  end
71
83
 
72
- describe "#get" do
73
- it "sends a GET request to the given path" do
74
- RestClient.should_receive(:get).
75
- with('http://localhost/foo/bar', {:params => {:baz => 'hi'}})
76
- get('foo', 'bar', :baz => 'hi')
77
- end
78
- end
79
-
80
- describe "#post" do
81
- it "sends a POST request to the given path" do
82
- RestClient.should_receive(:post).
83
- with('http://localhost/foo/bar', {:baz => 'hi'})
84
- post('foo', 'bar', :baz => 'hi')
85
- end
86
- end
87
-
88
- describe "#put" do
89
- it "sends a PUT request to the given path" do
90
- RestClient.should_receive(:put).
91
- with('http://localhost/foo/bar', {:baz => 'hi'})
92
- put('foo', 'bar', :baz => 'hi')
93
- end
94
- end
95
-
96
- describe "#delete" do
97
- it "sends a DELETE request to the given path" do
98
- RestClient.should_receive(:delete).
99
- with('http://localhost/foo/bar', {:baz => 'hi'})
100
- delete('foo', 'bar', :baz => 'hi')
101
- end
102
- end
103
-
104
84
  describe "#get_mash" do
105
85
  it "returns a Hashie::Mash for hash data" do
106
86
  data = {
@@ -68,21 +68,21 @@ describe Placid::Model do
68
68
  it "returns false if errors were reported" do
69
69
  thing = Thing.new
70
70
  Thing.stub(:find => nil)
71
- Thing.stub(:post => {'errors' => 'Missing id'})
71
+ Thing.stub(:request).with(:post, 'thing', {}) { {'errors' => 'Missing id'} }
72
72
  thing.save.should be_false
73
73
  end
74
74
 
75
75
  it "returns true if errors is an empty list" do
76
76
  thing = Thing.new(:id => '123')
77
77
  Thing.stub(:find => nil)
78
- Thing.stub(:post => {'errors' => []})
78
+ Thing.stub(:request).with(:post, 'thing', {'id' => '123'}) { {'errors' => []} }
79
79
  thing.save.should be_true
80
80
  end
81
81
 
82
82
  it "returns true if no errors were reported" do
83
83
  thing = Thing.new(:id => '123')
84
84
  Thing.stub(:find => nil)
85
- Thing.stub(:post => {})
85
+ Thing.stub(:request).with(:post, 'thing', {'id' => '123'}) { {} }
86
86
  thing.save.should be_true
87
87
  end
88
88
  end
@@ -165,11 +165,11 @@ describe Placid::Model do
165
165
  end
166
166
 
167
167
  describe "helpers" do
168
- it "can call #get on an instance" do
168
+ it "can call #request on an instance" do
169
169
  thing = Thing.new
170
170
  RestClient.should_receive(:get).
171
171
  with('http://localhost/thing/foo', {:params => {:x => 'y'}})
172
- thing.get('thing', 'foo', :x => 'y')
172
+ thing.request(:get, 'thing', 'foo', :x => 'y')
173
173
  end
174
174
  end
175
175
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: placid
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 3
10
- version: 0.0.3
9
+ - 4
10
+ version: 0.0.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Eric Pierce
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-05-23 00:00:00 Z
18
+ date: 2012-05-31 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: hashie