fauna 1.3.2 → 1.3.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,5 @@
1
1
  module Fauna
2
- class Resource
2
+ class Resource # rubocop:disable Metrics/ClassLength
3
3
  def self.resource_subclass(fauna_class)
4
4
  case fauna_class
5
5
  when 'databases' then Fauna::NamedResource
@@ -18,7 +18,7 @@ module Fauna
18
18
 
19
19
  def self.new(fauna_class, attrs = {})
20
20
  obj = resource_subclass(fauna_class).allocate
21
- obj.instance_variable_set('@struct', { 'ref' => nil, 'ts' => nil, 'deleted' => false, 'class' => fauna_class })
21
+ obj.instance_variable_set('@struct', 'ref' => nil, 'ts' => nil, 'deleted' => false, 'class' => fauna_class)
22
22
  obj.struct = attrs
23
23
  obj
24
24
  end
@@ -32,7 +32,7 @@ module Fauna
32
32
  end
33
33
 
34
34
  attr_reader :struct
35
- alias :to_hash :struct
35
+ alias_method :to_hash, :struct
36
36
 
37
37
  def ts
38
38
  struct['ts'] ? Fauna.time_from_usecs(struct['ts']) : nil
@@ -42,27 +42,47 @@ module Fauna
42
42
  struct['ts'] = Fauna.usecs_from_time(time)
43
43
  end
44
44
 
45
- def ref; struct['ref'] end
46
- def fauna_class; struct['class'] end
47
- def deleted; struct['deleted'] end
48
- def constraints; struct['constraints'] ||= {} end
49
- def data; struct['data'] ||= {} end
50
- def references; struct['references'] ||= {} end
51
- def permissions; struct['permissions'] ||= {} end
45
+ def ref
46
+ struct['ref']
47
+ end
48
+
49
+ def fauna_class
50
+ struct['class']
51
+ end
52
+
53
+ def deleted
54
+ struct['deleted']
55
+ end
56
+
57
+ def constraints
58
+ struct['constraints'] ||= {}
59
+ end
60
+
61
+ def data
62
+ struct['data'] ||= {}
63
+ end
64
+
65
+ def references
66
+ struct['references'] ||= {}
67
+ end
68
+
69
+ def permissions
70
+ struct['permissions'] ||= {}
71
+ end
52
72
 
53
73
  def events(pagination = {})
54
74
  EventsPage.find("#{ref}/events", {}, pagination)
55
75
  end
56
76
 
57
77
  def new_event(action, time)
58
- if persisted?
59
- Fauna::Event.new(
60
- 'resource' => ref,
61
- 'set' => ref,
62
- 'action' => action,
63
- 'ts' => Fauna.usecs_from_time(time)
64
- )
65
- end
78
+ return unless persisted?
79
+
80
+ Fauna::Event.new(
81
+ 'resource' => ref,
82
+ 'set' => ref,
83
+ 'action' => action,
84
+ 'ts' => Fauna.usecs_from_time(time),
85
+ )
66
86
  end
67
87
 
68
88
  def set(name)
@@ -70,9 +90,9 @@ module Fauna
70
90
  end
71
91
 
72
92
  def eql?(other)
73
- self.fauna_class == other.fauna_class && self.ref == other.ref && self.ref != nil
93
+ fauna_class == other.fauna_class && ref == other.ref && !ref.nil?
74
94
  end
75
- alias :== :eql?
95
+ alias_method :==, :eql?
76
96
 
77
97
  # dynamic field access
78
98
 
@@ -81,9 +101,9 @@ module Fauna
81
101
  end
82
102
 
83
103
  def method_missing(method, *args)
84
- if field = getter_method(method)
104
+ if (field = getter_method(method))
85
105
  struct[field]
86
- elsif field = setter_method(method)
106
+ elsif (field = setter_method(method))
87
107
  struct[field] = args.first
88
108
  else
89
109
  super
@@ -92,11 +112,17 @@ module Fauna
92
112
 
93
113
  # object lifecycle
94
114
 
95
- def new_record?; ref.nil? end
115
+ def new_record?
116
+ ref.nil?
117
+ end
96
118
 
97
- def deleted?; !!deleted end
119
+ def deleted?
120
+ !!deleted
121
+ end
98
122
 
99
- def persisted?; !(new_record? || deleted?) end
123
+ def persisted?
124
+ !(new_record? || deleted?)
125
+ end
100
126
 
101
127
  def save
102
128
  new_record? ? post : put
@@ -124,15 +150,17 @@ module Fauna
124
150
  # TODO: make this configurable, and possible to invert to a white list
125
151
  UNASSIGNABLE_ATTRIBUTES = %w(ts deleted fauna_class).inject({}) { |h, attr| h.update attr => true }
126
152
 
127
- DEFAULT_ATTRIBUTES = {"data" => {}, "references" => {}, "constraints" => {} }
128
-
129
153
  def struct=(attributes)
130
- DEFAULT_ATTRIBUTES.merge(attributes).each do |name, val|
154
+ default_attributes.merge(attributes).each do |name, val|
131
155
  send "#{name}=", val unless UNASSIGNABLE_ATTRIBUTES[name.to_s]
132
156
  end
133
157
  end
134
158
 
135
- private
159
+ private
160
+
161
+ def default_attributes
162
+ { 'data' => {}, 'references' => {}, 'constraints' => {} }
163
+ end
136
164
 
137
165
  def getter_method(method)
138
166
  field = method.to_s
@@ -140,7 +168,7 @@ module Fauna
140
168
  end
141
169
 
142
170
  def setter_method(method)
143
- (/(.*)=$/ =~ method.to_s) ? $1 : nil
171
+ (/(.*)=$/ =~ method.to_s) ? Regexp.last_match[1] : nil
144
172
  end
145
173
  end
146
174
  end
data/lib/fauna/set.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  module Fauna
2
2
  class Set
3
-
4
3
  attr_reader :ref
5
4
 
6
5
  def initialize(ref)
@@ -62,16 +61,12 @@ module Fauna
62
61
  def param_strings
63
62
  if @function == 'match'
64
63
  # Escape strings for match values
65
- @params = @params[0..1] + @params[2..-1].map do |p|
66
- if p.is_a?(String)
67
- p.inspect
68
- else
69
- p
70
- end
64
+ @params = @params[0..1] + @params[2..-1].collect do |p|
65
+ p.is_a?(String) ? p.inspect : p
71
66
  end
72
67
  end
73
68
 
74
- @param_strings ||= @params.map do |p|
69
+ @param_strings ||= @params.collect do |p|
75
70
  if p.respond_to? :expr
76
71
  p.expr
77
72
  elsif p.respond_to? :ref
@@ -156,16 +151,24 @@ module Fauna
156
151
  refs.empty?
157
152
  end
158
153
 
159
- def fauna_count; struct['count'] end
160
- def length; refs.length end
161
- def size; refs.size end
154
+ def fauna_count
155
+ struct['count']
156
+ end
157
+
158
+ def length
159
+ refs.length
160
+ end
161
+
162
+ def size
163
+ refs.size
164
+ end
162
165
  end
163
166
 
164
167
  class EventsPage < Fauna::Resource
165
168
  include Enumerable
166
169
 
167
170
  def events
168
- @events ||= struct['events'].map { |e| Event.new(e) }
171
+ @events ||= struct['events'].collect { |e| Event.new(e) }
169
172
  end
170
173
 
171
174
  def each(&block)
@@ -176,9 +179,17 @@ module Fauna
176
179
  events.empty?
177
180
  end
178
181
 
179
- def fauna_count; struct['count'] end
180
- def length; events.length end
181
- def size; events.size end
182
+ def fauna_count
183
+ struct['count']
184
+ end
185
+
186
+ def length
187
+ events.length
188
+ end
189
+
190
+ def size
191
+ events.size
192
+ end
182
193
  end
183
194
 
184
195
  class Event
@@ -223,7 +234,7 @@ module Fauna
223
234
  end
224
235
 
225
236
  def editable?
226
- ['create', 'delete'].include? action
237
+ %w(create delete).include? action
227
238
  end
228
239
  end
229
240
  end
data/lib/fauna/util.rb CHANGED
@@ -1,9 +1,9 @@
1
1
  module Fauna
2
2
  def self.time_from_usecs(microseconds)
3
- Time.at(microseconds/1_000_000, microseconds % 1_000_000)
3
+ Time.at(microseconds / 1_000_000, microseconds % 1_000_000)
4
4
  end
5
5
 
6
6
  def self.usecs_from_time(time)
7
- time.to_i * 1000000 + time.usec
7
+ time.to_i * 1_000_000 + time.usec
8
8
  end
9
9
  end
data/lib/tasks/fauna.rake CHANGED
@@ -2,7 +2,7 @@
2
2
  task :environment
3
3
 
4
4
  namespace :fauna do
5
- desc "Migrate your Fauna database to the latest version of your schema"
5
+ desc 'Migrate your Fauna database to the latest version of your schema'
6
6
  task :migrate => :environment do
7
7
  puts "Migrating #{Rails.env} Fauna database schema"
8
8
  Fauna::Client.context(Fauna.connection) do
@@ -10,14 +10,14 @@ namespace :fauna do
10
10
  end
11
11
  end
12
12
 
13
- desc "Completely reset your Fauna database"
13
+ desc 'Completely reset your Fauna database'
14
14
  task :reset => :environment do
15
15
  if Rails.env.production?
16
16
  puts "Won't reset #{Rails.env} Fauna database"
17
17
  else
18
18
  Fauna::Client.context(Fauna.root_connection) do
19
19
  puts "Resetting #{Rails.env} Fauna database"
20
- Fauna::Client.delete("everything")
20
+ Fauna::Client.delete('everything')
21
21
  end
22
22
  Fauna.auth!
23
23
  end
@@ -29,8 +29,8 @@ namespace :fauna do
29
29
  Fauna::Client.context(Fauna.connection) do
30
30
  FileUtils.mkdir_p(Fauna::FIXTURES_DIR)
31
31
 
32
- class_configs = Fauna.connection.get("/classes")["references"] || {}
33
- class_configs["users"] = nil
32
+ class_configs = Fauna.connection.get('/classes')['references'] || {}
33
+ class_configs['users'] = nil
34
34
 
35
35
  Dir.chdir(Fauna::FIXTURES_DIR) do
36
36
  class_configs.each do |ref, value|
@@ -38,10 +38,10 @@ namespace :fauna do
38
38
  FileUtils.mkdir_p(class_name)
39
39
 
40
40
  Dir.chdir(class_name) do
41
- # FIXME shouldn't round trip JSON
42
- File.open("config.json", "w") { |f| f.write(value.to_json)} if value
43
- (Fauna.connection.get(class_name)["references"] || {}).each do |ref, value|
44
- File.open("#{ref.split("/").last}.json", "w") { |f| f.write(value.to_json) }
41
+ # FIXME: shouldn't round trip JSON
42
+ File.open('config.json', 'w') { |f| f.write(value.to_json) } if value
43
+ (Fauna.connection.get(class_name)['references'] || {}).each do |inner_ref, inner_value|
44
+ File.open("#{inner_ref.split('/').last}.json", 'w') { |f| f.write(inner_value.to_json) }
45
45
  end
46
46
  end
47
47
  end
@@ -49,17 +49,17 @@ namespace :fauna do
49
49
  end
50
50
  end
51
51
 
52
- desc "Load the contents of your Fauna database"
52
+ desc 'Load the contents of your Fauna database'
53
53
  task :load => :environment do
54
54
  puts "Loading #{Rails.env} Fauna database contents from #{Fauna::FIXTURES_DIR}"
55
55
  Fauna::Client.context(Fauna.connection) do
56
56
  Dir.chdir(Fauna::FIXTURES_DIR) do
57
- Dir["**/*.json"].map do |filename|
57
+ Dir['**/*.json'].collect do |filename|
58
58
  value = JSON.parse(File.open(filename) { |f| f.read })
59
59
  begin
60
- Fauna.connection.put(value["ref"], value)
60
+ Fauna.connection.put(value['ref'], value)
61
61
  rescue Fauna::Connection::NotFound
62
- Fauna.connection.post(value["ref"].split("/")[0..-2].join("/"), value)
62
+ Fauna.connection.post(value['ref'].split('/')[0..-2].join('/'), value)
63
63
  end
64
64
  end
65
65
  end
@@ -68,4 +68,4 @@ namespace :fauna do
68
68
 
69
69
  end
70
70
 
71
- task :test => ["fauna:reset", "fauna:migrate", "fauna:load"]
71
+ task :test => ['fauna:reset', 'fauna:migrate', 'fauna:load']
data/test/class_test.rb CHANGED
@@ -1,12 +1,17 @@
1
1
  require File.expand_path('../test_helper', __FILE__)
2
2
 
3
3
  class ClassTest < MiniTest::Unit::TestCase
4
-
5
4
  def setup
6
5
  super
7
6
  @model = Fauna::Resource.new('classes/pigs')
8
7
  end
9
8
 
9
+ def test_new
10
+ settings = Fauna::Resource.new('settings', :ref => 'settings/12345678', :email => 'test@test.com')
11
+ user = Fauna::Resource.new('users', :ref => 'users/87654321')
12
+ assert user.data.object_id != settings.data.object_id
13
+ end
14
+
10
15
  def test_create
11
16
  pig = Fauna::Resource.create 'classes/pigs', :data => { :visited => true }
12
17
  assert_equal true, pig.data['visited']
data/test/client_test.rb CHANGED
@@ -3,12 +3,12 @@ require File.expand_path('../test_helper', __FILE__)
3
3
  class ClientTest < MiniTest::Unit::TestCase
4
4
  def setup
5
5
  super
6
- @attributes = { "name" => "Princess Eilonwy", "email" => email, "password" => password }
6
+ @attributes = { 'name' => 'Princess Eilonwy', 'email' => email, 'password' => password }
7
7
  end
8
8
 
9
9
  def test_database_context
10
10
  Fauna::Client.context(@server_connection) do
11
- user = Fauna::Client.post("users", @attributes)
11
+ user = Fauna::Client.post('users', @attributes)
12
12
  user = Fauna::Client.get(user['ref'])
13
13
  Fauna::Client.delete(user['ref'])
14
14
  end
@@ -16,10 +16,11 @@ class ClientTest < MiniTest::Unit::TestCase
16
16
 
17
17
  def test_client_context
18
18
  Fauna::Client.context(@client_connection) do
19
- user = Fauna::Resource.create("users", @attributes)
19
+ Fauna::Resource.create('users', @attributes)
20
+
20
21
  Fauna::Client.context(@client_connection) do
21
22
  assert_raises(Fauna::Connection::PermissionDenied) do
22
- instance = Fauna::Resource.create("classes/posts", @attributes)
23
+ Fauna::Resource.create('classes/posts', @attributes)
23
24
  end
24
25
  end
25
26
  end
@@ -27,11 +28,11 @@ class ClientTest < MiniTest::Unit::TestCase
27
28
 
28
29
  def test_token_context
29
30
  Fauna::Client.context(@server_connection) do
30
- Fauna::Client.post("users", @attributes)
31
+ Fauna::Client.post('users', @attributes)
31
32
  end
32
33
 
33
34
  Fauna::Client.context(@client_connection) do
34
- @token = Fauna::Client.post("tokens", @attributes)
35
+ @token = Fauna::Client.post('tokens', @attributes)
35
36
  end
36
37
 
37
38
  Fauna::Client.context(Fauna::Connection.new(:secret => @token['secret'], :domain => @server_connection.domain, :scheme => @server_connection.scheme, :port => @server_connection.port)) do
@@ -42,7 +43,7 @@ class ClientTest < MiniTest::Unit::TestCase
42
43
 
43
44
  def test_caching_1
44
45
  Fauna::Client.context(@server_connection) do
45
- user = Fauna::Client.post("users", @attributes)
46
+ user = Fauna::Client.post('users', @attributes)
46
47
  @server_connection.expects(:get).never
47
48
  Fauna::Client.get(user['ref'])
48
49
  end
@@ -50,7 +51,7 @@ class ClientTest < MiniTest::Unit::TestCase
50
51
 
51
52
  def test_caching_2
52
53
  Fauna::Client.context(@client_connection) do
53
- user = Fauna::Client.post("users", @attributes)
54
+ user = Fauna::Client.post('users', @attributes)
54
55
 
55
56
  Fauna::Client.context(@server_connection) do
56
57
  Fauna::Client.get(user['ref'])
@@ -3,47 +3,47 @@ require File.expand_path('../test_helper', __FILE__)
3
3
  class ConnectionTest < MiniTest::Unit::TestCase
4
4
  def setup
5
5
  super
6
- @attributes = { "name" => "Arawn", "email" => email, "password" => password }
6
+ @attributes = { 'name' => 'Arawn', 'email' => email, 'password' => password }
7
7
  end
8
8
 
9
9
  def test_get
10
- @server_connection.get("users/instances")
10
+ @server_connection.get('users/instances')
11
11
  end
12
12
 
13
13
  def test_get_with_invalid_key
14
14
  connection = Fauna::Connection.new(:secret => 'bad_key', :domain => @server_connection.domain, :scheme => @server_connection.scheme, :port => @server_connection.port)
15
15
  assert_raises(Fauna::Connection::Unauthorized) do
16
- connection.get("users/instances")
16
+ connection.get('users/instances')
17
17
  end
18
18
  end
19
19
 
20
20
  def test_post
21
- @client_connection.post("users", @attributes)['resource']
21
+ @client_connection.post('users', @attributes)['resource']
22
22
  end
23
23
 
24
24
  def test_put
25
- user = @server_connection.post("users", @attributes)['resource']
26
- user = @server_connection.put(user['ref'], {:data => {:pockets => 2}})['resource']
25
+ user = @server_connection.post('users', @attributes)['resource']
26
+ user = @server_connection.put(user['ref'], :data => { :pockets => 2 })['resource']
27
27
 
28
28
  assert_equal 2, user['data']['pockets']
29
29
 
30
- user = @server_connection.put(user['ref'], {:data => {:apples => 3}})['resource']
30
+ user = @server_connection.put(user['ref'], :data => { :apples => 3 })['resource']
31
31
 
32
32
  assert_nil user['data']['pockets']
33
33
  assert_equal 3, user['data']['apples']
34
34
  end
35
35
 
36
36
  def test_patch
37
- user = @server_connection.post("users", @attributes)['resource']
38
- user = @server_connection.patch(user['ref'], {:data => {:pockets => 2}})['resource']
39
- user = @server_connection.patch(user['ref'], {:data => {:apples => 3}})['resource']
37
+ user = @server_connection.post('users', @attributes)['resource']
38
+ user = @server_connection.patch(user['ref'], :data => { :pockets => 2 })['resource']
39
+ user = @server_connection.patch(user['ref'], :data => { :apples => 3 })['resource']
40
40
 
41
41
  assert_equal 2, user['data']['pockets']
42
42
  assert_equal 3, user['data']['apples']
43
43
  end
44
44
 
45
45
  def test_delete
46
- user = @server_connection.post("users", @attributes)['resource']
46
+ user = @server_connection.post('users', @attributes)['resource']
47
47
  @server_connection.delete(user['ref'])
48
48
  assert_raises(Fauna::Connection::NotFound) do
49
49
  @server_connection.get(user['ref'])
@@ -61,6 +61,6 @@ class ConnectionTest < MiniTest::Unit::TestCase
61
61
  # raise RestClient::ServerBrokeConnection
62
62
  # end
63
63
  # end
64
- # @server_connection.get("users/instances")
64
+ # @server_connection.get('users/instances')
65
65
  # end
66
66
  end