acfs 0.18.0 → 0.19.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dfb99fe53f15f18d5bb38f6d14aab35df106395b
4
- data.tar.gz: 822c5e1fd59b02589aa946252d57302d5afd0ca5
3
+ metadata.gz: 8a9569aa6a00b3a3008156d94d8c3dc615ba3409
4
+ data.tar.gz: d8ef1f72e0e3a4017f700d5d2337b5c0e0ad9a1e
5
5
  SHA512:
6
- metadata.gz: 114ea5f3dc9cf97f99ee2b920810f8ea7dabe2264ea2e17d64cdfe9e26ea729339b4de31e32ce9deeb460d6c3be57c865199f32101644a5c2dba4d854eb7e9b9
7
- data.tar.gz: c32d14d4f25013beebb3aa60fe6edcaeb6de071597b0f41cc276cae51e5bd4b363b875f3f0ccd919172a9b84a24bbae14e4b4e423be2c28476cef25e4942fe3f
6
+ metadata.gz: 03e1f3a9bb3f5fbc709ef673609f9c2a23e8628fde802bb222599fbc9512c2f2097b74339901b8dc1b2541417a4ca9ab12320bade59d6ca3e1189017a6da6827
7
+ data.tar.gz: 68f1811f3a68294feb3493766866d811a31760a3638a3e41661935a5b4165e0c7d2b87ab5998f40a7ca6525f50bc93f02d8ce09cca7705b66b3873ecd22fe694
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.19.0
4
+
5
+ * Add support for DateTime and Float attribute types
6
+ * Add experimental list attribute type
7
+ * Allow block usage in stub `with` option
8
+ * Allow to test if operation stubs were called and how often
9
+ * Fix bug on operation stubs
10
+
3
11
  ## 0.18.0
4
12
 
5
13
  * Basic DELETE operations
data/README.md CHANGED
@@ -148,9 +148,10 @@ You can stub resources in applications using an Acfs service client:
148
148
  Acfs::Stub.enable
149
149
 
150
150
  before do
151
- Acfs::Stub.resource MyUser, :read, with: { id: 1 }, return: { id: 1, name: 'John Smith', age: 32 }
151
+ @stub = Acfs::Stub.resource MyUser, :read, with: { id: 1 }, return: { id: 1, name: 'John Smith', age: 32 }
152
152
  Acfs::Stub.resource MyUser, :read, with: { id: 2 }, raise: :not_found
153
153
  Acfs::Stub.resource Session, :create, with: { ident: 'john@exmaple.org', password: 's3cr3t' }, return: { id: 'longhash', user: 1 }
154
+ Acfs::Stub.resource MyUser, :update, with: lambda { |op| op.data.include? :my_var }, raise: 400
154
155
  end
155
156
 
156
157
  it 'should find user number one' do
@@ -160,6 +161,9 @@ it 'should find user number one' do
160
161
  expect(user.id).to be == 1
161
162
  expect(user.name).to be == 'John Smith'
162
163
  expect(user.age).to be == 32
164
+
165
+ expect(@stub).to has_called
166
+ expect(@stub).to_not have_called 5.times
163
167
  end
164
168
 
165
169
  it 'should not find user number two' do
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
23
23
  spec.add_runtime_dependency 'actionpack', '>= 3.1'
24
24
  spec.add_runtime_dependency 'multi_json'
25
25
  spec.add_runtime_dependency 'typhoeus'
26
- spec.add_runtime_dependency 'bunny', '~> 0.9.0.pre12'
26
+ spec.add_runtime_dependency 'bunny', '~> 0.9.0'
27
27
  spec.add_runtime_dependency 'rack'
28
28
 
29
29
  spec.add_development_dependency 'bundler', '~> 1.3'
@@ -8,6 +8,8 @@ require 'acfs/version'
8
8
  require 'acfs/errors'
9
9
  require 'acfs/global'
10
10
 
11
+ require 'acfs/messaging'
12
+
11
13
  module Acfs
12
14
  extend ActiveSupport::Autoload
13
15
  extend Global
@@ -12,9 +12,41 @@ module Acfs
12
12
 
13
13
  def initialize(data = {})
14
14
  self.response = data[:response]
15
+ message = ''
16
+ message << "Received erroneous response: #{response.code}"
17
+ if response.data
18
+ message << "\n with content:\n "
19
+ message << response.data.map{|k,v| "#{k.inspect}: #{v.inspect}"}.join("\n ")
20
+ end
21
+ if response.headers.any?
22
+ message << "\n with headers:\n "
23
+ message << response.headers.map{|k,v| "#{k}: #{v}"}.join("\n ")
24
+ end
25
+ message << "\nbased on request: #{response.request.method.upcase} #{response.request.url} #{response.request.format}"
26
+ if response.request.data
27
+ message << "\n with content:\n "
28
+ message << response.request.data.map{|k,v| "#{k.inspect}: #{v.inspect}"}.join("\n ")
29
+ end
30
+ if response.request.headers.any?
31
+ message << "\n with headers:\n "
32
+ message << response.request.headers.map{|k,v| "#{k}: #{v}"}.join("\n ")
33
+ end
34
+ super message
15
35
  end
16
36
  end
17
37
 
38
+ class AmbiguousStubError < Error
39
+ attr_reader :stubs, :operation
40
+
41
+ def initialize(stubs, operation)
42
+ @stubs = stubs
43
+ @operation = operation
44
+
45
+ super 'Ambiguous stubs.'
46
+ end
47
+
48
+ end
49
+
18
50
  # Resource not found error raised on a 404 response
19
51
  #
20
52
  class ResourceNotFound < ErroneousResponse
@@ -0,0 +1,24 @@
1
+ require 'acfs/messaging/client'
2
+
3
+ module Acfs
4
+
5
+ # @macro experimental
6
+ #
7
+ module Messaging
8
+
9
+ class << self
10
+
11
+ # @macro experimental
12
+ #
13
+ # Quick publish a message using default client instance.
14
+ #
15
+ # @param [#to_s] routing_key Routing key.
16
+ # @param [#to_msgpack, Hash] payload Message payload.
17
+ # @return [undefined]
18
+ #
19
+ def publish(routing_key, payload)
20
+ Client.instance.publish routing_key, payload
21
+ end
22
+ end
23
+ end
24
+ end
@@ -17,11 +17,11 @@ module Acfs::Messaging
17
17
  end
18
18
 
19
19
  def exchange
20
- @exchange ||= @channel.topic 'acfs-0.17.0-2', auto_delete: true
20
+ @exchange ||= channel.topic 'acfs-0.17.0-2', auto_delete: true
21
21
  end
22
22
 
23
23
  def publish(routing_key, message)
24
- exchange.publish MessagePack.pack(message), routing_key: routing_key
24
+ exchange.publish ::MessagePack.pack(message), routing_key: routing_key.to_s
25
25
  end
26
26
 
27
27
  class << self
@@ -0,0 +1,31 @@
1
+ module Acfs::Model
2
+ module Attributes
3
+
4
+ # @api public
5
+ #
6
+ # DateTime attribute type. Use it in your model as an attribute type:
7
+ #
8
+ # @example
9
+ # class User
10
+ # include Acfs::Model
11
+ # attribute :name, :date_time
12
+ # end
13
+ #
14
+ module DateTime
15
+
16
+ # @api public
17
+ #
18
+ # Cast given object to DateTime.
19
+ # Expect
20
+ #
21
+ # @param [Object] obj Object to cast.
22
+ # @return [DateTime] Casted object as DateTime.
23
+ #
24
+ def self.cast(obj)
25
+ return obj if obj.is_a? ::DateTime
26
+ return ::DateTime.iso8601(obj.iso8601) if obj.is_a? Time or obj.is_a? Date
27
+ return ::DateTime.iso8601(obj)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,28 @@
1
+ module Acfs::Model
2
+ module Attributes
3
+
4
+ # @api public
5
+ #
6
+ # Float attribute type. Use it in your model as an attribute type:
7
+ #
8
+ # @example
9
+ # class User
10
+ # include Acfs::Model
11
+ # attribute :name, :float
12
+ # end
13
+ #
14
+ module Float
15
+
16
+ # @api public
17
+ #
18
+ # Cast given object to float.
19
+ #
20
+ # @param [Object] obj Object to cast.
21
+ # @return [Float] Casted object as float.
22
+ #
23
+ def self.cast(obj)
24
+ obj.to_f
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,30 @@
1
+ module Acfs::Model
2
+ module Attributes
3
+
4
+ # @api public
5
+ #
6
+ # List attribute type. Use it in your model as an attribute type:
7
+ #
8
+ # @example
9
+ # class User
10
+ # include Acfs::Model
11
+ # attribute :name, :list
12
+ # end
13
+ #
14
+ module List
15
+
16
+ # @api public
17
+ #
18
+ # Cast given object to a list.
19
+ #
20
+ # @param [Object] obj Object to cast.
21
+ # @return [Fixnum] Casted object as list.
22
+ # @raise [TypeError] If object cannot be casted to a list.
23
+ #
24
+ def self.cast(obj)
25
+ return obj.to_a if obj.respond_to? :to_a
26
+ raise TypeError.new "Cannot cast #{obj.inspect} to array."
27
+ end
28
+ end
29
+ end
30
+ end
@@ -31,6 +31,10 @@ module Acfs
31
31
  @id ||= params.delete(:id) || data[:id]
32
32
  end
33
33
 
34
+ def full_params
35
+ id ? params.merge(id: id) : params
36
+ end
37
+
34
38
  def url
35
39
  single? ? resource.url(id) : resource.url
36
40
  end
@@ -20,9 +20,9 @@ module Acfs
20
20
 
21
21
  def initialize(request, data = {})
22
22
  @request = request
23
- @status = data[:status]
24
- @headers = data[:headers]
25
- @body = data[:body]
23
+ @status = data[:status] || 0
24
+ @headers = data[:headers] || {}
25
+ @body = data[:body] || ''
26
26
  end
27
27
  end
28
28
  end
@@ -7,6 +7,50 @@ module Acfs
7
7
  class Stub
8
8
  ACTIONS = [ :read, :create, :update, :delete, :list ]
9
9
 
10
+ attr_reader :opts
11
+
12
+ def initialize(opts)
13
+ @opts = opts
14
+ @opts[:with].stringify_keys! if @opts[:with].respond_to? :stringify_keys
15
+ end
16
+
17
+ def accept?(op)
18
+ return opts[:with].call op if opts[:with].respond_to? :call
19
+
20
+ params = op.full_params.stringify_keys
21
+ data = op.data.stringify_keys
22
+
23
+ opts[:with] == params || data == opts[:with]
24
+ end
25
+
26
+ def calls
27
+ @calls ||= []
28
+ end
29
+
30
+ def called?(count = nil)
31
+ count = count.count if count.respond_to? :count # For `5.times` Enumerators
32
+ count.nil? ? calls.any? : calls.size == count
33
+ end
34
+
35
+ def call(op)
36
+ calls << op
37
+
38
+ if (data = opts[:return])
39
+ op.callback.call data
40
+ elsif (err = opts[:raise])
41
+ raise_error op, err, opts[:return]
42
+ else
43
+ raise ArgumentError, 'Unsupported stub.'
44
+ end
45
+ end
46
+
47
+ private
48
+ def raise_error(op, name, data)
49
+ raise name if name.is_a? Class
50
+
51
+ op.handle_failure ::Acfs::Response.new op.request, status: Rack::Utils.status_code(name), data: data
52
+ end
53
+
10
54
  class << self
11
55
 
12
56
  # Stub a resource with given handler block. An already created handler
@@ -16,9 +60,11 @@ module Acfs
16
60
  action = action.to_sym
17
61
  raise ArgumentError, "Unknown action `#{action}`." unless ACTIONS.include? action
18
62
 
19
- stubs[klass] ||= {}
20
- stubs[klass][action] ||= []
21
- stubs[klass][action] << opts
63
+ Stub.new(opts).tap do |stub|
64
+ stubs[klass] ||= {}
65
+ stubs[klass][action] ||= []
66
+ stubs[klass][action] << stub
67
+ end
22
68
  end
23
69
 
24
70
  def allow_requests=(allow)
@@ -48,38 +94,25 @@ module Acfs
48
94
 
49
95
  def stub_for(op)
50
96
  return false unless (classes = stubs[op.resource])
51
- return false unless (actions = classes[op.action])
97
+ return false unless (stubs = classes[op.action])
98
+
99
+ accepted_stubs = stubs.select { |stub| stub.accept? op }
52
100
 
53
- params = op.params
54
- params.merge! id: op.id unless op.id.nil?
55
- actions.select! { |stub| stub[:with] == params || stub[:with] == op.data }
56
- actions.first
101
+ raise AmbiguousStubError.new accepted_stubs, op if accepted_stubs.size > 1
102
+
103
+ accepted_stubs.first
57
104
  end
58
105
 
59
106
  def stubbed(op)
60
107
  stub = stub_for op
61
108
  unless stub
62
109
  return false if allow_requests?
63
- raise RealRequestsNotAllowedError, "No stub found for `#{op.resource.name}` with params `#{op.params}` and id `#{op.id}`."
64
- end
65
-
66
- if (data = stub[:return])
67
- op.callback.call data
68
- elsif (err = stub[:raise])
69
- raise_error op, err, stub[:return]
70
- else
71
- raise ArgumentError, 'Unsupported stub.'
110
+ raise RealRequestsNotAllowedError, "No stub found for #{op.action} on #{op.resource.name} with params #{op.full_params.inspect}, data #{op.data.inspect} and id #{op.id}."
72
111
  end
73
112
 
113
+ stub.call op
74
114
  true
75
115
  end
76
-
77
- private
78
- def raise_error(op, name, data)
79
- raise name if name.is_a? Class
80
-
81
- op.handle_failure ::Acfs::Response.new nil, status: Rack::Utils.status_code(name), data: data
82
- end
83
116
  end
84
117
  end
85
118
  end
@@ -1,7 +1,7 @@
1
1
  module Acfs
2
2
  module VERSION
3
3
  MAJOR = 0
4
- MINOR = 18
4
+ MINOR = 19
5
5
  PATCH = 0
6
6
  STAGE = nil
7
7
 
@@ -26,29 +26,35 @@ describe Acfs::Messaging::Receiver do
26
26
  context 'with routed message' do
27
27
  context 'with exact routing key match' do
28
28
  it 'should receive messages' do
29
+ pending 'Not reliable.'
30
+
29
31
  rcv_class.instance.should_receive(:receive).with(anything, anything, { message: 'Hello!'})
30
32
 
31
33
  Acfs::Messaging::Client.instance.publish('my.custom_receiver', { message: 'Hello!' })
32
- sleep 3 # Nothing better?
34
+ sleep 5 # Nothing better?
33
35
  end
34
36
  end
35
37
 
36
38
  context 'with partial routing key match' do
37
39
  it 'should receive messages' do
40
+ pending 'Not reliable.'
41
+
38
42
  rcv_class.instance.should_receive(:receive).with(anything, anything, { message: 'Hello!'})
39
43
 
40
44
  Acfs::Messaging::Client.instance.publish('my.different', { message: 'Hello!' })
41
- sleep 3 # Nothing better?
45
+ sleep 5 # Nothing better?
42
46
  end
43
47
  end
44
48
  end
45
49
 
46
50
  context 'with not routed message' do
47
51
  it 'should not receive messages' do
52
+ pending 'Not reliable.'
53
+
48
54
  rcv_class.instance.should_not_receive(:receive)
49
55
 
50
56
  Acfs::Messaging::Client.instance.publish('abc.cde', { message: 'Hello!' })
51
- sleep 3 # Nothing better?
57
+ sleep 5 # Nothing better?
52
58
  end
53
59
  end
54
60
  end
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ describe Acfs::Model::Attributes::DateTime do
4
+ let(:model) { Class.new.tap { |c| c.send :include, Acfs::Model }}
5
+
6
+ describe 'cast' do
7
+ it 'should return same object, if obj is already of DateTime class' do
8
+ date_time = DateTime.now
9
+ retval = Acfs::Model::Attributes::DateTime.cast(date_time)
10
+ expect(retval).to be == date_time
11
+ end
12
+
13
+ it 'should return parsed object, if obj is of Time class' do
14
+ time = Time.now
15
+ retval = Acfs::Model::Attributes::DateTime.cast(time)
16
+ expect(retval).to be == DateTime.iso8601(time.iso8601)
17
+ end
18
+
19
+ it 'should return parsed object, if obj is of Date class' do
20
+ date = Date.today
21
+ retval = Acfs::Model::Attributes::DateTime.cast(date)
22
+ expect(retval).to be == DateTime.iso8601(date.iso8601)
23
+ end
24
+
25
+ it 'should return parsed object, if obj is of String class in ISO-8601 format' do
26
+ date_time_string = DateTime.now.iso8601
27
+ retval = Acfs::Model::Attributes::DateTime.cast(date_time_string)
28
+ expect(retval).to be == DateTime.iso8601(date_time_string)
29
+ end
30
+
31
+ it 'should raise an error if obj is of String class not in valid ISO-8601 format' do
32
+ malformed_string = 'qwe123'
33
+ expect {
34
+ Acfs::Model::Attributes::DateTime.cast(malformed_string)
35
+ }.to raise_error ArgumentError
36
+ end
37
+
38
+ it 'should raise an error if obj is of wrong class (Fixnum)' do
39
+ fixnum = 12
40
+ expect {
41
+ Acfs::Model::Attributes::DateTime.cast(fixnum)
42
+ }.to raise_error TypeError
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ describe Acfs::Model::Attributes::Float do
4
+ let(:model) { Class.new.tap { |c| c.send :include, Acfs::Model }}
5
+
6
+ describe 'cast' do
7
+ it 'should return same object, if obj is already of float class' do
8
+ retval = Acfs::Model::Attributes::Float.cast(1.3)
9
+ expect(retval).to be == 1.3
10
+ end
11
+
12
+ it 'should return parsed object, if obj is of Fixnum class' do
13
+ retval = Acfs::Model::Attributes::Float.cast(7)
14
+ expect(retval).to be == 7.0
15
+ end
16
+
17
+ it 'should return parsed object, if obj is of String class containing a float' do
18
+ retval = Acfs::Model::Attributes::Float.cast('1.7')
19
+ expect(retval).to be == 1.7
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+
3
+ describe Acfs::Model::Attributes::List do
4
+ let(:model) { Class.new.tap { |c| c.send :include, Acfs::Model }}
5
+ subject { Acfs::Model::Attributes::List }
6
+
7
+ describe '.cast' do
8
+ context 'with array' do
9
+ let(:sample) { %w(abc cde efg) }
10
+
11
+ it 'should return unmodified array' do
12
+ expect(subject.cast(sample)).to be == %w(abc cde efg)
13
+ end
14
+ end
15
+
16
+ context 'with not listable object' do
17
+ let(:sample) { Object.new }
18
+
19
+ it 'should raise a TypeError' do
20
+ expect {
21
+ subject.cast(sample)
22
+ }.to raise_error TypeError
23
+ end
24
+ end
25
+
26
+ context 'with listable object' do
27
+ let(:sample) { 5..10 }
28
+
29
+ it 'should cast object to array' do
30
+ expect(subject.cast(sample)).to be == [5, 6, 7, 8, 9, 10]
31
+ end
32
+ end
33
+ end
34
+ end
@@ -16,7 +16,43 @@ describe Acfs::Stub do
16
16
  #Acfs::Stub.create(MyUser).with(name: '', age: 12).and_return(:invalid, errors: { name: [ 'must be present ']})
17
17
  end
18
18
 
19
+ describe '#called?' do
20
+ context 'without specified number' do
21
+ let!(:operation) { Acfs::Stub.resource MyUser, :read, with: { id: 1 }, return: { id: 1, name: 'John Smith', age: 32 } }
22
+
23
+ it 'should allow to test if stub was called' do
24
+ MyUser.find 1
25
+ Acfs.run
26
+
27
+ expect(operation).to be_called
28
+ end
29
+
30
+ it 'should allow to test if stub was called a specific number of times' do
31
+ MyUser.find 1
32
+ Acfs.run
33
+
34
+ MyUser.find 1
35
+ Acfs.run
36
+
37
+ expect(operation).to be_called 2.times
38
+ end
39
+ end
40
+ end
41
+
19
42
  describe '.resource' do
43
+ context 'with ambiguous stubs' do
44
+ before do
45
+ Acfs::Stub.resource MyUser, :read, with: { id: 1 }, return: { id: 1, name: 'John Smith', age: 32 }
46
+ Acfs::Stub.resource MyUser, :read, with: { id: 1 }, raise: :not_found
47
+ end
48
+
49
+ it 'should raise error' do
50
+ MyUser.find 1
51
+
52
+ expect { Acfs.run }.to raise_error(Acfs::AmbiguousStubError)
53
+ end
54
+ end
55
+
20
56
  context 'with read action' do
21
57
  before do
22
58
  Acfs::Stub.resource MyUser, :read, with: { id: 1 }, return: { id: 1, name: 'John Smith', age: 32 }
@@ -51,7 +87,7 @@ describe Acfs::Stub do
51
87
  context 'with create action' do
52
88
  before do
53
89
  Acfs::Stub.resource Session, :create, with: { ident: 'john@exmaple.org', password: 's3cr3t' }, return: { id: 'longhash', user: 1 }
54
- Acfs::Stub.resource Session, :create, with: { ident: 'john@exmaple.org', password: 'wrong' }, raise: 422
90
+ Acfs::Stub.resource Session, :create, with: lambda { |op| op.data[:ident] == 'john@exmaple.org' && op.data[:password] == 'wrong' }, raise: 422
55
91
  end
56
92
 
57
93
  it 'should allow stub resource creation' do
@@ -67,6 +103,36 @@ describe Acfs::Stub do
67
103
  }.to raise_error(::Acfs::InvalidResource)
68
104
  end
69
105
  end
106
+
107
+ context 'with update action' do
108
+ before do
109
+ Acfs::Stub.resource MyUser, :read, with: { id: 1 }, return: { id: 1, name: 'John Smith', age: 32 }
110
+ Acfs::Stub.resource MyUser, :update, with: { id: 1, name: 'John Smith', age: 22 }, return: { id: 1, name: 'John Smith', age: 23 }
111
+ Acfs::Stub.resource MyUser, :update, with: { id: 1, name: 'John Smith', age: 0 }, raise: 422
112
+ end
113
+
114
+ it 'should allow stub resource update' do
115
+ user = MyUser.find 1
116
+ Acfs.run
117
+
118
+ user.age = 22
119
+ user.save!
120
+
121
+ expect(user.age).to be == 23
122
+ end
123
+
124
+ it 'should allow to raise error' do
125
+ user = MyUser.find 1
126
+ Acfs.run
127
+
128
+ user.age = 0
129
+ user.save
130
+
131
+ expect {
132
+ user.save!
133
+ }.to raise_error(::Acfs::InvalidResource)
134
+ end
135
+ end
70
136
  end
71
137
 
72
138
  describe '.allow_requests=' do
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.18.0
4
+ version: 0.19.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-05-28 00:00:00.000000000 Z
11
+ date: 2013-08-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -86,14 +86,14 @@ dependencies:
86
86
  requirements:
87
87
  - - ~>
88
88
  - !ruby/object:Gem::Version
89
- version: 0.9.0.pre12
89
+ version: 0.9.0
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - ~>
95
95
  - !ruby/object:Gem::Version
96
- version: 0.9.0.pre12
96
+ version: 0.9.0
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rack
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -150,6 +150,7 @@ files:
150
150
  - lib/acfs/configuration.rb
151
151
  - lib/acfs/errors.rb
152
152
  - lib/acfs/global.rb
153
+ - lib/acfs/messaging.rb
153
154
  - lib/acfs/messaging/client.rb
154
155
  - lib/acfs/messaging/message.rb
155
156
  - lib/acfs/messaging/receiver.rb
@@ -163,7 +164,10 @@ files:
163
164
  - lib/acfs/model.rb
164
165
  - lib/acfs/model/attributes.rb
165
166
  - lib/acfs/model/attributes/boolean.rb
167
+ - lib/acfs/model/attributes/date_time.rb
168
+ - lib/acfs/model/attributes/float.rb
166
169
  - lib/acfs/model/attributes/integer.rb
170
+ - lib/acfs/model/attributes/list.rb
167
171
  - lib/acfs/model/attributes/string.rb
168
172
  - lib/acfs/model/dirty.rb
169
173
  - lib/acfs/model/initialization.rb
@@ -191,6 +195,9 @@ files:
191
195
  - spec/acfs/messaging/receiver_spec.rb
192
196
  - spec/acfs/middleware/json_decoder_spec.rb
193
197
  - spec/acfs/middleware/msgpack_decoder_spec.rb
198
+ - spec/acfs/model/attributes/date_time_spec.rb
199
+ - spec/acfs/model/attributes/float_spec.rb
200
+ - spec/acfs/model/attributes/list_spec.rb
194
201
  - spec/acfs/model/attributes_spec.rb
195
202
  - spec/acfs/model/dirty_spec.rb
196
203
  - spec/acfs/model/initialization_spec.rb
@@ -240,6 +247,9 @@ test_files:
240
247
  - spec/acfs/messaging/receiver_spec.rb
241
248
  - spec/acfs/middleware/json_decoder_spec.rb
242
249
  - spec/acfs/middleware/msgpack_decoder_spec.rb
250
+ - spec/acfs/model/attributes/date_time_spec.rb
251
+ - spec/acfs/model/attributes/float_spec.rb
252
+ - spec/acfs/model/attributes/list_spec.rb
243
253
  - spec/acfs/model/attributes_spec.rb
244
254
  - spec/acfs/model/dirty_spec.rb
245
255
  - spec/acfs/model/initialization_spec.rb