acfs 0.8.0 → 0.9.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 70e3e163082aec963c5162cd4fd59d69eb915819
4
- data.tar.gz: c4385962f0d06f27a89cb48e4d5d214e904478a9
3
+ metadata.gz: a1bfc6cac043fef9d28d10c28ed7c4ad25e8ed22
4
+ data.tar.gz: 2c5a99cfc3a1d02bfc5ea0012f71b8d5a904ff17
5
5
  SHA512:
6
- metadata.gz: f1e2908198cf1314b37fa8c1829ac1995ec36458069203daf334ff0a46b1e35efe9e022f9b375c12dfe3ef6dff9a140594671e33866ecd479384c8c26a1900a7
7
- data.tar.gz: d1c128c7028e83f9e79a52bbd449495c38a5aa97c116d02df18828fe2084c739a5b06dd65e805b80e477c19d56e0819c47e802dff01cff45271db2b67e6ccb38
6
+ metadata.gz: 3a142008f5361b14a32070cd42d63353ef31f63a75b78101b0584f67f9f903a2aeeb8cf9886ae215e9831fe36e0e322ebb71e9a555a832bcf65184c1751685d0
7
+ data.tar.gz: 193516f56822194e967ac7048e04c85c311a8e5ebc7aaf9074ee853392b98dd3237d2b0444b786a91c3cfb35343fc7a15b2e4054b37761cc655801ea793a0496
data/README.md CHANGED
@@ -13,7 +13,7 @@ level and automatic request queuing and parallel processing. See Usage for more.
13
13
 
14
14
  Add this line to your application's Gemfile:
15
15
 
16
- gem 'acfs', '0.8.0'
16
+ gem 'acfs', '~> 0.9.0'
17
17
 
18
18
  **Note:** Acfs is under development. I'll try to avoid changes to the public
19
19
  API but internal APIs may change quite often.
@@ -143,15 +143,21 @@ Acfs has basic update support using `PUT` requests:
143
143
 
144
144
  ## Roadmap
145
145
 
146
- * Create operations
147
146
  * Update
148
147
  * Better new? detection eg. storing ETag from request resources.
149
148
  * Use PATCH for with only changed attributes and `If-Unmodifed-Since`
150
149
  and `If-Match` header fields if resource was surly loaded from service
151
150
  and not created with an id (e.g `User.new id: 5, name: "john"`).
151
+ * Conflict detection (ETag / If-Unmodified-Since)
152
152
  * High level features
153
+ * Support for custom mime types on client and server side. (`application/vnd.myservice.user.v2+msgpack`)
154
+ * Server side components
155
+ * Reusing model definitions for generating responses?
156
+ * Rails responders providing REST operations with integrated ETag,
157
+ Modified Headers, conflict detection, ...
153
158
  * Pagination? Filtering? (If service API provides such features.)
154
159
  * Messaging Queue support for services and models
160
+ * Allow stubbing of resources as objects for testing services.
155
161
  * Documentation
156
162
 
157
163
  ## Contributing
@@ -4,6 +4,7 @@ module Acfs
4
4
  # Allow to track the persistence state of a model.
5
5
  #
6
6
  module Persistence
7
+ extend ActiveSupport::Concern
7
8
 
8
9
  # Check if the model is persisted. A model is persisted if
9
10
  # it is saved after beeing created or when it was not changed
@@ -55,6 +56,23 @@ module Acfs
55
56
  self.class.service.run request
56
57
  end
57
58
 
59
+ module ClassMethods
60
+
61
+ # Create a new resource sending given data.
62
+ #
63
+ def create(data, opts = {})
64
+ model = new
65
+ request = Acfs::Request.new url, method: :post, data: data
66
+ request.on_complete do |response|
67
+ model.attributes = response.data
68
+ model.loaded!
69
+ end
70
+
71
+ service.run request
72
+ model
73
+ end
74
+ end
75
+
58
76
  private
59
77
  def update_with(data)
60
78
  self.attributes = data
@@ -1,7 +1,7 @@
1
1
  module Acfs
2
2
  module VERSION
3
3
  MAJOR = 0
4
- MINOR = 8
4
+ MINOR = 9
5
5
  PATCH = 0
6
6
  STAGE = nil
7
7
 
@@ -46,6 +46,17 @@ describe "Acfs" do
46
46
  expect(@user).to be_persisted
47
47
  end
48
48
 
49
+ it 'should create a single resource synchronously' do
50
+ stub = stub_request(:post, "http://users.example.org/sessions")
51
+ .to_return body: '{"id":"sessionhash","user":1}', headers: {'Content-Type' => 'application/json'}
52
+
53
+ session = Session.create ident: 'Anon'
54
+
55
+ expect(stub).to have_been_requested
56
+ expect(session.id).to be == 'sessionhash'
57
+ expect(session.user).to be == 1
58
+ end
59
+
49
60
  it 'should load single resource' do
50
61
  @user = MyUser.find(2)
51
62
 
@@ -20,6 +20,14 @@ class MyUser
20
20
  attribute :age, :integer
21
21
  end
22
22
 
23
+ class Session
24
+ include Acfs::Model
25
+ service UserService
26
+
27
+ attribute :id, :string
28
+ attribute :user, :integer
29
+ end
30
+
23
31
  class Comment
24
32
  include Acfs::Model
25
33
  service CommentService
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acfs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Graichen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-04-23 00:00:00.000000000 Z
11
+ date: 2013-04-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport