loquor 0.5.4 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- OWM1ZjMxMmJhNjYyM2IwNWMyMzllNWNiOWIzNzk5Mjc0MjU1ZTUyZg==
5
- data.tar.gz: !binary |-
6
- YmNkNzIzMTEzNmY0MmE4YTg5NWVhYjdhZDU4YTAwNGFiNjRiZDZjZQ==
2
+ SHA1:
3
+ metadata.gz: 2cfe52db79896211774e1d089c9214411c2357a6
4
+ data.tar.gz: 624d56b874f89f65dbcba8fae1d58701a12ae967
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- ZGYxZmZlNzlhZGM4NjViNGNhOTViM2I5Y2E0NzE2MzBjNGYyYTAzZDE2ZDcz
10
- MzRmNGJjNDYzMTllNmJiNWVhZTk1ZGJiY2U0MTI1MWMwODI5NjMwNTc5NDc4
11
- NzU0YmMyYjlkZDJlMjcwZjE1MGVlYTE0ZTI3MWFmMWQ0MWUzMWM=
12
- data.tar.gz: !binary |-
13
- NzJjMWM1ODcwNGI1ZjEyNDc1ZTExYTRlZTI1NDQ4YWFmZmFiNzQ3MTZjOGNl
14
- MzlhNjQwMWMwNTkwMGI3NjhiMDUwMzk4N2E5MGI4OWYyZTkzOGEzMDNiZjI2
15
- YmVkYTUyNWVlMzA0NzcyMGI5NGVjNWZhMWQ0MmEwODcyYWMyMDQ=
6
+ metadata.gz: 3b877ce234feba0ccbdf1b22da876456dac29f12fe4a3fad2b05114dbbf7f051bcc581ab9aabbbdfd04e2ab4b23389f870d8f801fe675c5bee99492f2eabe3af
7
+ data.tar.gz: 5a964b9378199a23451a913fbdf5a246009cb9820a06cf0c4ed7c98fc6dcd6e6bb40d22ecf72b7a14cd9f2e286fdc12517e69988c229364e821e329c53482048
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ # 0.6.0 / 2013-12-13
2
+ * [FEATURE] Add strict mode to ObjectHash
3
+ * [FEATURE] Don't allow arbitary sample attributes to be overriden
4
+
1
5
  # 0.5.4 / 2013-12-13
2
6
  * [FEATURE] Add support for basic resource caching
3
7
 
@@ -3,8 +3,9 @@ module Loquor
3
3
  end
4
4
 
5
5
  class ObjectHash
6
- def initialize(hash)
6
+ def initialize(hash, options = {})
7
7
  @hash = hash
8
+ @strict = options[:strict]
8
9
  end
9
10
 
10
11
  def ==(other)
@@ -20,13 +21,19 @@ module Loquor
20
21
  def [](key)
21
22
  fetch_indescriminately(key)
22
23
  rescue ObjectHashKeyMissingError
23
- nil
24
+ if @strict
25
+ raise $!
26
+ else
27
+ nil
28
+ end
24
29
  end
25
30
 
26
31
  def method_missing(name, *args)
27
- fetch_indescriminately(name, *args)
28
- rescue ObjectHashKeyMissingError
29
- @hash.send(name, *args)
32
+ if name[-1] == "="
33
+ @hash.send(name, *args)
34
+ else
35
+ self[name]
36
+ end
30
37
  end
31
38
 
32
39
  private
@@ -39,7 +46,7 @@ module Loquor
39
46
  elsif @hash.has_key?(name.to_s.to_sym)
40
47
  @hash[name.to_s.to_sym]
41
48
  else
42
- raise ObjectHashKeyMissingError.new
49
+ raise ObjectHashKeyMissingError.new(name)
43
50
  end
44
51
  end
45
52
  end
@@ -2,11 +2,13 @@ module Loquor
2
2
  class Resource
3
3
 
4
4
  def initialize(data)
5
- @data = ObjectHash.new(data)
5
+ @data = ObjectHash.new(data, strict: true)
6
6
  end
7
7
 
8
8
  def method_missing(name, *args)
9
9
  @data[name]
10
+ rescue
11
+ raise NameError.new("undefined local variable or method '#{name}' for #{self.class.name}")
10
12
  end
11
13
 
12
14
  def self.path=(path)
@@ -9,7 +9,7 @@ module Loquor
9
9
  attr = name.to_s[0..-2].to_sym
10
10
  @data[attr] = args[0]
11
11
  else
12
- raise NameError.new("undefined local variable or method '#{name}' for Resource Mock")
12
+ raise NameError.new("undefined local variable or method '#{name}' for #{self.class.name}")
13
13
  end
14
14
  else
15
15
  super(name, *args)
@@ -27,6 +27,10 @@ module Loquor
27
27
  end
28
28
 
29
29
  def sample(overrides = {})
30
+ arbitary_attributes = (overrides.keys - attributes.keys)
31
+ unless arbitary_attributes.empty?
32
+ raise NameError.new("undefined local variable or method '#{arbitary_attributes.first}' for #{self.name}")
33
+ end
30
34
  self.new(attributes.merge(overrides))
31
35
  end
32
36
 
@@ -1,3 +1,3 @@
1
1
  module Loquor
2
- VERSION = "0.5.4"
2
+ VERSION = "0.6.0"
3
3
  end
@@ -26,5 +26,18 @@ module Loquor
26
26
  representation = ObjectHash.new({foo: "bar"})
27
27
  assert_equal "bar", representation.foo
28
28
  end
29
+
30
+ def test_non_strict_returns_nil_on_missing_attribute
31
+ representation = ObjectHash.new({foo: "bar"})
32
+ assert_equal nil, representation.cat
33
+ end
34
+
35
+ def test_strict_raises_on_missing_attribute
36
+ representation = ObjectHash.new({foo: "bar"}, strict: true)
37
+ ex = assert_raises(ObjectHashKeyMissingError) do
38
+ representation.cat
39
+ end
40
+ assert_equal "cat", ex.message
41
+ end
29
42
  end
30
43
  end
@@ -18,9 +18,10 @@ module Loquor
18
18
 
19
19
  def test_should_not_be_able_to_set_arbitary_attributes
20
20
  foobar = Foobar.find(1)
21
- assert_raises(NameError) do
21
+ ex = assert_raises(NameError) do
22
22
  foobar.description = "Cat"
23
23
  end
24
+ assert_equal "undefined local variable or method 'description=' for Loquor::ResourceMockTest::Foobar", ex.message
24
25
  end
25
26
 
26
27
  def test_should_return_sample_object
@@ -33,6 +34,13 @@ module Loquor
33
34
  foobar = Foobar.sample(name: name)
34
35
  assert_equal name, foobar.name
35
36
  end
37
+
38
+ def test_should_not_be_able_to_override_arbitary_attributes
39
+ ex = assert_raises(NameError) do
40
+ Foobar.sample(cat: "foobar")
41
+ end
42
+ assert_equal "undefined local variable or method 'cat' for Loquor::ResourceMockTest::Foobar", ex.message
43
+ end
36
44
  end
37
45
  end
38
46
 
@@ -19,10 +19,11 @@ module Loquor
19
19
 
20
20
  def test_find_each_should_yield_block
21
21
  Loquor.expects(:get).returns([{id: 1}])
22
- ids = []
22
+ count = 0
23
23
  Foobar.find_each do |json|
24
- ids << json['id']
24
+ count += 1
25
25
  end
26
+ assert_equal 1, count
26
27
  end
27
28
 
28
29
  def test_select_should_proxy
@@ -43,13 +44,21 @@ module Loquor
43
44
  Loquor.expects(:put).with("/foobar/#{id}", payload: payload)
44
45
  Foobar.update(id, payload)
45
46
  end
46
-
47
+
47
48
  def test_can_read_path
48
49
  assert_equal "/foobar", Foobar.path
49
50
  end
50
-
51
+
51
52
  def test_cache_flag_false_by_default
52
53
  refute Foobar.cache
53
54
  end
55
+
56
+ def test_raises_on_missing_attribute
57
+ representation = Foobar.new({})
58
+ ex = assert_raises(NameError) do
59
+ representation.random_attr
60
+ end
61
+ assert_equal "undefined local variable or method 'random_attr' for Loquor::ResourceTest::Foobar", ex.message
62
+ end
54
63
  end
55
64
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: loquor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.4
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Walker
@@ -84,28 +84,28 @@ dependencies:
84
84
  name: mocha
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ! '>='
87
+ - - '>='
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ! '>='
94
+ - - '>='
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rake
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ! '>='
101
+ - - '>='
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ! '>='
108
+ - - '>='
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  description: An API dispatcher for Meducation
@@ -164,12 +164,12 @@ require_paths:
164
164
  - lib
165
165
  required_ruby_version: !ruby/object:Gem::Requirement
166
166
  requirements:
167
- - - ! '>='
167
+ - - '>='
168
168
  - !ruby/object:Gem::Version
169
169
  version: '0'
170
170
  required_rubygems_version: !ruby/object:Gem::Requirement
171
171
  requirements:
172
- - - ! '>='
172
+ - - '>='
173
173
  - !ruby/object:Gem::Version
174
174
  version: '0'
175
175
  requirements: []