betty_resource 0.0.8 → 0.0.9

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,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- OTdiYWZmNDY0OTZkNTQ3NDMwMTllMDM1YjkwMDkxMjA1YTNlY2Y0NA==
5
- data.tar.gz: !binary |-
6
- Mzc5NmIxMDg0NzUyNmExZWQxOTZkOGUyNjljNTRkOTRjNzZiMzJkOQ==
7
- !binary "U0hBNTEy":
8
- metadata.gz: !binary |-
9
- YmIxNGMxNGUxNWQ1OGNlMjhiMDdmZjlmZTU2ZTkzZThhMjBkNzU3ODIzYjdh
10
- NGI3ZjBmNWQyYzBiZjc1ZDNmZmM3ODMyYWQ4NmYwMDNjMmQ2ZDRjZDMxMDc0
11
- NjEzOGFkOTU5NzVhMTI4MDg4YTM3NGJjOGMxYzg2MTYwYTU3ZjM=
12
- data.tar.gz: !binary |-
13
- OWE1MjE5NDI4ODRiY2VhMmU4ZjBlOGE5YTg0M2Q2MmI5ODBkNjU2NGYzZDVi
14
- YWEyYTdmNmMzMWI3NWNkY2FhZjhkMjM3NTRmNDExNTMxOTUwYTJiOGVlMGM0
15
- ZTFhYzIyNDYxNDc1YWMwYzczMzU2NGI1YTM1NGVkNGQxODQ1NTI=
2
+ SHA1:
3
+ metadata.gz: cfa495aa7363146a42eed8058b57cb3c6ce730b4
4
+ data.tar.gz: ad3b006f15cf5825b317afe092a435913a3f0807
5
+ SHA512:
6
+ metadata.gz: cf411c5cfe9e29b168c0043c774f353fe91a7cb75faafb3ae16935a4384593468f1bded2a8c2a274a898335840509c67fa46f8ad9a2bcdd81fd430b47dc921ce
7
+ data.tar.gz: f5bb929a910371dab0c0e54e0d99cb0bd5f8236358a3c3076c21adfa567f3ebff0ea4329cc9a68a6812674acd85d220b3a46950d9705e99bd3b882e7a31fc384
data/CHANGELOG.rdoc CHANGED
@@ -1,5 +1,13 @@
1
1
  = BettyResource CHANGELOG
2
2
 
3
+ === 0.0.9 / 2013-05-14
4
+
5
+ * 4 improvements:
6
+ * Improved belongs-to reliability
7
+ * Correct unit tests
8
+ * Normalize query strings as json
9
+ * Requiring 'mocha >= 0.13.3'
10
+
3
11
  === 0.0.8 / 2013-04-04
4
12
 
5
13
  * 1 feature:
data/Gemfile CHANGED
@@ -10,6 +10,6 @@ end
10
10
 
11
11
  group :gem_test do
12
12
  gem "minitest"
13
- gem "mocha", :require => "mocha/setup"
13
+ gem "mocha", ">= 0.13.3", :require => "mocha/setup"
14
14
  gem "simplecov", ">= 0.4.0"
15
15
  end
@@ -5,6 +5,8 @@ module BettyResource
5
5
  base_uri "#{BettyResource.config.host}/api"
6
6
  format :json
7
7
  basic_auth BettyResource.config.user, BettyResource.config.password
8
-
8
+ query_string_normalizer proc{|query|
9
+ query.to_json
10
+ }
9
11
  end
10
12
  end
@@ -19,6 +19,11 @@ module BettyResource
19
19
  properties.detect{|p|p.name == name.to_s}
20
20
  end
21
21
 
22
+ def typecast(key, value)
23
+ property = self.property(key)
24
+ property ? property.typecast(value) : value
25
+ end
26
+
22
27
  def attributes
23
28
  properties.collect(&:name)
24
29
  end
@@ -13,7 +13,14 @@ module BettyResource
13
13
  @id, @name, @kind, @options = id, name, kind, options
14
14
  end
15
15
 
16
- # TODO: Clean this up as this is a dirty quick fix for loading belongs_to properties at the moment
16
+ def typecast(value)
17
+ if kind == "belongs_to" && id = value["id"]
18
+ model.get(id)
19
+ else
20
+ value
21
+ end
22
+ end
23
+
17
24
  def model
18
25
  BettyResource.meta_data.models.values.detect{|x| x.id == options["model"]} if kind == "belongs_to"
19
26
  end
@@ -1,3 +1,26 @@
1
+ class DirtyHashy < HashWithIndifferentAccess
2
+
3
+ alias_method :regular_reader, :[]
4
+ def [](key, mapped = false)
5
+ typecasted(key) || set_typecasted(key, regular_reader(key, mapped))
6
+ end
7
+
8
+ protected
9
+
10
+ def typecasted(key)
11
+ instance_variable_get("@typecasted_#{key}")
12
+ end
13
+
14
+ def set_typecasted(key, value)
15
+ if @model
16
+ @model.typecast(key, value)
17
+ else
18
+ value
19
+ end
20
+ end
21
+
22
+ end
23
+
1
24
  module BettyResource
2
25
  class Model
3
26
  class Record
@@ -17,6 +40,7 @@ module BettyResource
17
40
  @errors = {}
18
41
  super()
19
42
  self.attributes = Hash[model.attributes.collect{|x| [x, nil]}].merge attributes
43
+ self.attributes.instance_variable_set(:@model, model)
20
44
  end
21
45
 
22
46
  def new_record?
@@ -67,23 +91,6 @@ module BettyResource
67
91
 
68
92
  private
69
93
 
70
- # TODO: Clean this mess up as this is a dirty quick fix for loading belongs_to properties at the moment
71
- def method_missing(method, *args)
72
- if method.to_s.match(/^(\w+).id=$/)
73
- if model.attributes.include?($1)
74
- instance = attributes[$1] ||= begin
75
- if property = model.properties.detect{|x| x.name == $1}
76
- property.model.new
77
- end
78
- end
79
- if instance
80
- return instance.instance_variable_set :@id, args.first
81
- end
82
- end
83
- end
84
- super
85
- end
86
-
87
94
  def to_params
88
95
  {:body => {:record => attributes_as_json}}
89
96
  end
@@ -1,7 +1,7 @@
1
1
  module BettyResource
2
2
  MAJOR = 0
3
3
  MINOR = 0
4
- TINY = 8
4
+ TINY = 9
5
5
 
6
6
  VERSION = [MAJOR, MINOR, TINY].join(".")
7
7
  end
@@ -12,7 +12,7 @@ module Unit
12
12
 
13
13
  it "should return its attributes" do
14
14
  relation = BettyResource::Relation.new
15
- assert_equal %w(first_name id last_name), relation.attributes.keys.sort
15
+ assert_equal %w(first_name group id last_name), relation.attributes.keys.sort
16
16
  end
17
17
 
18
18
  it "should create a method for writing each attribute" do
@@ -58,7 +58,8 @@ module Unit
58
58
  assert_equal({"id" => nil, "first_name" => "Paul", "last_name" => "Engel"}, relation.as_json)
59
59
 
60
60
  relation = BettyResource::Relation.get(1)
61
- assert_equal({"id" => 1, "first_name" => "Daniel", "last_name" => "Willemse"}, relation.as_json)
61
+ assert_equal({"id" => 1, "first_name" => "Daniel", "last_name" => "Willemse", "group"=>{"id"=>1}}, relation.as_json)
62
+ assert_equal({"id" => 1, "name" => "group one"}, relation.group.as_json)
62
63
  end
63
64
 
64
65
  it "should save itself" do
@@ -109,6 +110,24 @@ module Unit
109
110
  relation = BettyResource::Relation.get(relation.id)
110
111
  assert_equal "Stephan", relation.first_name
111
112
  end
113
+
114
+ it "should be able to fetch a belongs-to value" do
115
+ relation = BettyResource::Relation.get(1)
116
+ assert_equal 1, relation.group.id
117
+
118
+ filter = {
119
+ "operator" => "and",
120
+ "conditions" => [
121
+ "path" => [BettyResource::Relation.property(:id).id],
122
+ "predicate" => "eq",
123
+ "criteria" => 1
124
+ ]
125
+ }
126
+
127
+ relations = BettyResource::Relation.all(:filters => [filter])
128
+ assert_equal 1, relations.size
129
+ assert_equal 1, relations[0].group.id
130
+ end
112
131
  end
113
132
 
114
133
  end
@@ -11,7 +11,7 @@ module Unit
11
11
  end
12
12
 
13
13
  it "should know its attributes" do
14
- assert_equal %w(first_name id last_name), BettyResource::Relation.attributes.sort
14
+ assert_equal %w(first_name group id last_name), BettyResource::Relation.attributes.sort
15
15
  end
16
16
 
17
17
  it "should return a new record instance" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: betty_resource
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chiel Wester
@@ -11,48 +11,48 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2013-04-04 00:00:00.000000000 Z
14
+ date: 2013-05-14 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: httparty
18
18
  requirement: !ruby/object:Gem::Requirement
19
19
  requirements:
20
- - - ! '>='
20
+ - - '>='
21
21
  - !ruby/object:Gem::Version
22
22
  version: '0'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - ! '>='
27
+ - - '>='
28
28
  - !ruby/object:Gem::Version
29
29
  version: '0'
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: activesupport
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  requirements:
34
- - - ! '>='
34
+ - - '>='
35
35
  - !ruby/object:Gem::Version
36
36
  version: '0'
37
37
  type: :runtime
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
- - - ! '>='
41
+ - - '>='
42
42
  - !ruby/object:Gem::Version
43
43
  version: '0'
44
44
  - !ruby/object:Gem::Dependency
45
45
  name: crack
46
46
  requirement: !ruby/object:Gem::Requirement
47
47
  requirements:
48
- - - ! '>='
48
+ - - '>='
49
49
  - !ruby/object:Gem::Version
50
50
  version: '0'
51
51
  type: :runtime
52
52
  prerelease: false
53
53
  version_requirements: !ruby/object:Gem::Requirement
54
54
  requirements:
55
- - - ! '>='
55
+ - - '>='
56
56
  - !ruby/object:Gem::Version
57
57
  version: '0'
58
58
  - !ruby/object:Gem::Dependency
@@ -73,28 +73,28 @@ dependencies:
73
73
  name: multi_json
74
74
  requirement: !ruby/object:Gem::Requirement
75
75
  requirements:
76
- - - ! '>='
76
+ - - '>='
77
77
  - !ruby/object:Gem::Version
78
78
  version: '0'
79
79
  type: :runtime
80
80
  prerelease: false
81
81
  version_requirements: !ruby/object:Gem::Requirement
82
82
  requirements:
83
- - - ! '>='
83
+ - - '>='
84
84
  - !ruby/object:Gem::Version
85
85
  version: '0'
86
86
  - !ruby/object:Gem::Dependency
87
87
  name: minitest
88
88
  requirement: !ruby/object:Gem::Requirement
89
89
  requirements:
90
- - - ! '>='
90
+ - - '>='
91
91
  - !ruby/object:Gem::Version
92
92
  version: '0'
93
93
  type: :development
94
94
  prerelease: false
95
95
  version_requirements: !ruby/object:Gem::Requirement
96
96
  requirements:
97
- - - ! '>='
97
+ - - '>='
98
98
  - !ruby/object:Gem::Version
99
99
  version: '0'
100
100
  description: Map Betty5 application resources to Ruby objects through the JSON API
@@ -136,17 +136,17 @@ require_paths:
136
136
  - lib
137
137
  required_ruby_version: !ruby/object:Gem::Requirement
138
138
  requirements:
139
- - - ! '>='
139
+ - - '>='
140
140
  - !ruby/object:Gem::Version
141
141
  version: '0'
142
142
  required_rubygems_version: !ruby/object:Gem::Requirement
143
143
  requirements:
144
- - - ! '>='
144
+ - - '>='
145
145
  - !ruby/object:Gem::Version
146
146
  version: '0'
147
147
  requirements: []
148
148
  rubyforge_project:
149
- rubygems_version: 2.0.3
149
+ rubygems_version: 2.0.0
150
150
  signing_key:
151
151
  specification_version: 4
152
152
  summary: Map Betty5 application resources to Ruby objects