restfolia 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/Changelog.md ADDED
@@ -0,0 +1,12 @@
1
+ # Restfolia Changelog
2
+
3
+ ## 1.0.2 / edge
4
+
5
+ * \+ [Resource Creator supports Json - Array](https://github.com/rogerleite/restfolia/commit/363b00abf379a2849790ed4be86b9085bddbd2af)
6
+ * \+ [Support to multiple levels of hash on ResourceCreator](https://github.com/rogerleite/restfolia/commit/aa1e96a82f9b34a9415e46066874e35dfb7a1dbd)
7
+ * ! [Fix bug on not supporting id attribute on resource](https://github.com/rogerleite/restfolia/issues/5)
8
+ * \+ [Support http basic authentication](https://github.com/rogerleite/restfolia/commit/372aa40b9b2f4df35b7c30ed70534fc99e3b3233)
9
+
10
+ ## 1.0.1 / 2012-05-28
11
+
12
+ * ! [Fix bug on links method](https://github.com/rogerleite/restfolia/issues/4)
data/ReadmeDeveloper.md CHANGED
@@ -10,7 +10,6 @@ $ gem install redcarpet
10
10
  $ yard
11
11
  $ open doc/index.html
12
12
  ```
13
- **Obs:** ignore errors :X, until my [pull request](https://github.com/rubyworks/yard-tomdoc/pull/5) be accepted.
14
13
 
15
14
  ## TODO:
16
15
 
@@ -46,6 +46,7 @@ module Restfolia::HTTP
46
46
  verb["Cookie"] = cookies
47
47
  end
48
48
 
49
+ verb.basic_auth(uri.user, uri.password) if uri.user
49
50
  http.request(verb)
50
51
  end
51
52
 
@@ -56,7 +56,7 @@ module Restfolia
56
56
  #Add json keys as methods of Resource
57
57
  #http://blog.jayfields.com/2008/02/ruby-replace-methodmissing-with-dynamic.html
58
58
  @_json.each do |method, value|
59
- next if self.respond_to?(method) #avoid method already defined
59
+ next if self.respond_to?(method) && (method != :id)
60
60
 
61
61
  (class << self; self; end).class_eval do
62
62
  define_method(method) do |*args|
@@ -38,24 +38,45 @@ module Restfolia
38
38
  # objects and transforming in Resources. To create Resource,
39
39
  # this method use #resource_class.new(json).
40
40
  #
41
- # json - Hash parsed from Response body.
41
+ # json - Hash or Array parsed from Response body.
42
+ #
43
+ # Returns if json is Hash, returns Resource from #resource_class if
44
+ # json is Array, returns an Array of Resource from #resource_class.
45
+ # Raises ArgumentError if json is not a Hash or Array.
46
+ def create(json)
47
+ if json.is_a?(Array)
48
+ json.inject([]) do |result, json_hash|
49
+ result << create_resource(json_hash)
50
+ end
51
+ elsif json.is_a?(Hash)
52
+ create_resource(json)
53
+ else
54
+ raise(ArgumentError, "JSON parameter have to be a Hash or Array object", caller)
55
+ end
56
+ end
57
+
58
+ protected
59
+
60
+ # Internals: creates Resource looking recursively for JSON
61
+ # objects and transforming in Resources. To create Resource,
62
+ # this method use #resource_class.new(json).
63
+ #
64
+ # json_hash - Hash parsed from Response body.
42
65
  #
43
66
  # Returns Resource from #resource_class.
44
67
  # Raises ArgumentError if json is not a Hash.
45
- def create(json)
46
- unless json.is_a?(Hash)
68
+ def create_resource(json_hash)
69
+ unless json_hash.is_a?(Hash)
47
70
  raise(ArgumentError, "JSON parameter have to be a Hash object", caller)
48
71
  end
49
72
 
50
73
  json_parsed = {}
51
- json.each do |attr, value|
74
+ json_hash.each do |attr, value|
52
75
  json_parsed[attr] = look_for_resource(attr, value)
53
76
  end
54
77
  resource_class.new(json_parsed)
55
78
  end
56
79
 
57
- protected
58
-
59
80
  # Internal: By default, returns Restfolia::Resource. You can use
60
81
  # this method to override and returns a custom Resource.
61
82
  #
@@ -108,6 +129,11 @@ module Restfolia
108
129
  resources << look_for_resource(attr_name, array_obj)
109
130
  end
110
131
  elsif value.is_a?(Hash)
132
+
133
+ value.each do |attr, v|
134
+ value[attr] = look_for_resource(attr, v)
135
+ end
136
+
111
137
  value = resource_class.new(value)
112
138
  end
113
139
  value
@@ -1,3 +1,3 @@
1
1
  module Restfolia
2
- VERSION = "1.0.1"
2
+ VERSION = "1.0.2"
3
3
  end
@@ -59,6 +59,38 @@ describe Restfolia::ResourceCreator do
59
59
  resource.attr_test[0][0].nested.must_equal("nested2")
60
60
  end
61
61
 
62
+ it "transforms multiple levels of hash" do
63
+ resource = subject.create(:slug => "4fb15a526f32412f37000012",
64
+ :hash1 => {
65
+ :hash2 => {
66
+ :link => [
67
+ {:href => "http://exemplo.com",
68
+ :rel => "interno",
69
+ :type => "image/jpeg"
70
+ }
71
+ ],
72
+ :origem => "sistema",
73
+ :hash3 => {
74
+ :test => "test"
75
+ }
76
+ }
77
+ })
78
+
79
+ resource.slug.must_equal("4fb15a526f32412f37000012")
80
+ resource.hash1.must_be_instance_of(OpenStruct)
81
+ resource.hash1.hash2.must_be_instance_of(OpenStruct)
82
+ resource.hash1.hash2.origem.must_equal("sistema")
83
+ resource.hash1.hash2.hash3.must_be_instance_of(OpenStruct)
84
+ end
85
+
86
+ it "supports Array of hashes" do
87
+ resource = subject.create([{:slug => "slug1"}, {:slug => "slug2"}])
88
+
89
+ resource.must_be_instance_of(Array)
90
+ resource[0].slug.must_equal("slug1")
91
+ resource[1].slug.must_equal("slug2")
92
+ end
93
+
62
94
  end
63
95
 
64
96
  end
@@ -21,6 +21,12 @@ describe Restfolia::Resource do
21
21
  resource.attr_test.must_equal("test")
22
22
  end
23
23
 
24
+ it "should support id attribute" do
25
+ resource = subject.new(:id => "123abc")
26
+
27
+ resource.id.must_equal("123abc")
28
+ end
29
+
24
30
  end
25
31
 
26
32
  describe "#links" do
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: restfolia
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
- - 1
10
- version: 1.0.1
9
+ - 2
10
+ version: 1.0.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Roger Leite
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-05-28 00:00:00 Z
18
+ date: 2012-06-22 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: multi_json
@@ -104,6 +104,7 @@ files:
104
104
  - .gitignore
105
105
  - .travis.yml
106
106
  - .yardopts
107
+ - Changelog.md
107
108
  - Gemfile
108
109
  - MIT-LICENSE
109
110
  - Rakefile