betty_resource 0.0.8 → 0.0.9

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
- 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