kelredd-resourceful 0.5.11 → 0.6.1

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.
@@ -16,7 +16,10 @@ module Resourceful
16
16
  block = opts.delete(:on_response)
17
17
  (yield set_agent.get(path, opts, &block)).collect{|data| new(data)}
18
18
  end
19
-
19
+ def self.find(id, opts, force)
20
+ raise NotImplementedError, "no find method has been defined"
21
+ end
22
+
20
23
  def initialize(data)
21
24
  end
22
25
 
@@ -66,7 +69,7 @@ module Resourceful
66
69
  end
67
70
 
68
71
  def self.attribute(name, type, config={})
69
- clean_name = name.to_s.gsub(/\W/,'')
72
+ clean_name = cleanup_name(name)
70
73
  add_to_attributes(name.to_s)
71
74
  config ||= {}
72
75
  config[:path] ||= clean_name
@@ -102,61 +105,8 @@ module Resourceful
102
105
  end
103
106
  end
104
107
 
105
- def self.has_one(name, config={})
106
- clean_name = name.to_s.gsub(/\W/,'')
107
- config ||= {}
108
- config[:path] ||= clean_name
109
- define_method(name) do
110
- instance_variable_get("@#{clean_name}") || \
111
- instance_variable_set("@#{clean_name}", \
112
- if (c = child(config))
113
- config[:klass].constantize.new(c) rescue c
114
- else
115
- c
116
- end
117
- )
118
- end
119
- end
120
-
121
- def self.has_many(name, config={})
122
- clean_name = name.to_s.gsub(/\W/,'')
123
- config ||= {}
124
- config[:path] ||= clean_name
125
- define_method(name) do
126
- instance_variable_get("@#{clean_name}") || \
127
- instance_variable_set("@#{clean_name}", \
128
- if ((c = child(config)) && c.respond_to?(:collect))
129
- c.collect do |item|
130
- config[:klass].constantize.new(item) rescue item
131
- end
132
- else
133
- c
134
- end
135
- )
136
- end
137
- end
138
-
139
- def self.belongs_to(name, config={})
140
- clean_name = name.to_s.gsub(/\W/,'')
141
- config ||= {}
142
- config[:id] ||= "#{clean_name}_id"
143
- define_method(name) do
144
- instance_variable_get("@#{clean_name}") || \
145
- instance_variable_set("@#{clean_name}", \
146
- if ((k = config[:klass].constantize) && k.respond_to?(:find))
147
- if self.respond_to?(config[:id]) && \
148
- (bt_id = self.send(config[:id])) && \
149
- !bt_id.nil? && \
150
- !bt_id.empty?
151
- k.find(bt_id)
152
- else
153
- nil
154
- end
155
- else
156
- nil
157
- end
158
- )
159
- end
108
+ def self.cleanup_name(name)
109
+ name.to_s.gsub(/\W/,'')
160
110
  end
161
111
 
162
112
  private
@@ -0,0 +1,55 @@
1
+ module Resourceful
2
+ module Model
3
+ module EmbeddedAssociations
4
+
5
+ module ClassMethods
6
+
7
+ protected
8
+
9
+ def contains_one(name, config={})
10
+ clean_name = cleanup_name(name)
11
+ config ||= {}
12
+ config[:path] ||= clean_name
13
+ define_method(name) do
14
+ instance_variable_get("@#{clean_name}") || \
15
+ instance_variable_set("@#{clean_name}", \
16
+ if (c = child(config))
17
+ config[:class].constantize.new(c) rescue c
18
+ else
19
+ c
20
+ end
21
+ )
22
+ end
23
+ end
24
+
25
+ def contains_many(name, config={})
26
+ clean_name = cleanup_name(name)
27
+ config ||= {}
28
+ config[:path] ||= clean_name
29
+ define_method(name) do
30
+ instance_variable_get("@#{clean_name}") || \
31
+ instance_variable_set("@#{clean_name}", \
32
+ if ((c = child(config)) && c.respond_to?(:collect))
33
+ c.collect do |item|
34
+ config[:class].constantize.new(item) rescue item
35
+ end
36
+ else
37
+ c
38
+ end
39
+ )
40
+ end
41
+ end
42
+
43
+ end
44
+
45
+ module InstanceMethods
46
+ end
47
+
48
+ def self.included(receiver)
49
+ receiver.extend ClassMethods
50
+ receiver.send :include, InstanceMethods
51
+ end
52
+
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,68 @@
1
+ module Resourceful
2
+ module Model
3
+ module ExternalAssociations
4
+
5
+ module ClassMethods
6
+
7
+ protected
8
+
9
+ def has_one(name, config={})
10
+ has_many(name, config).first
11
+ end
12
+
13
+ def has_many(name, config={})
14
+ clean_name = cleanup_name(name)
15
+ config ||= {}
16
+ raise ArgumentError, "has_many requires a :class option to be specified" unless config[:class]
17
+ klass = config.delete(:class)
18
+ force = config.delete(:force) || true
19
+ define_method(name) do
20
+ unless klass.to_s.constantize.respond_to?(:find)
21
+ raise NotImplementedError, "has_many expects #{klass} to be findable (ie mixin the Findable helper)"
22
+ end
23
+ instance_variable_get("@#{clean_name}") || \
24
+ instance_variable_set("@#{clean_name}", \
25
+ klass.to_s.constantize.find(:all, config, force)
26
+ )
27
+ end
28
+ end
29
+
30
+ def belongs_to(name, config={})
31
+ clean_name = cleanup_name(name)
32
+ config ||= {}
33
+ raise ArgumentError, "has_many requires a :class option to be specified" unless config[:class]
34
+ klass = config.delete(:class)
35
+ foreign_key = config.delete(:foreign_key) || "#{clean_name}_id"
36
+ force = config.delete(:force) || true
37
+ define_method(name) do
38
+ unless self.respond_to?(foreign_key)
39
+ raise ArgumentError, "belongs_to requires a '#{foreign_key}' method defined to return the foreign_key"
40
+ end
41
+ unless klass.to_s.constantize.respond_to?(:find)
42
+ raise NotImplementedError, "has_many expects #{klass} to be findable (ie mixin the Findable helper)"
43
+ end
44
+ fk = self.send(foreign_key)
45
+ if fk.nil? || fk.empty?
46
+ nil
47
+ else
48
+ instance_variable_get("@#{clean_name}") || \
49
+ instance_variable_set("@#{clean_name}", \
50
+ klass.to_s.constantize.find(fk, config, force)
51
+ )
52
+ end
53
+ end
54
+ end
55
+
56
+ end
57
+
58
+ module InstanceMethods
59
+ end
60
+
61
+ def self.included(receiver)
62
+ receiver.extend ClassMethods
63
+ receiver.send :include, InstanceMethods
64
+ end
65
+
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,44 @@
1
+ module Resourceful
2
+ module Model
3
+ module Findable
4
+
5
+ module ClassMethods
6
+
7
+ def find(id, opts={}, force=true)
8
+ opts ||= {}
9
+ opts = findable_default_opts.merge(opts) if respond_to?(:findable_default_opts)
10
+ case id
11
+ when :all
12
+ self.get_collection("#{findable_index}.#{format}", opts, force)
13
+ when :first
14
+ self.get_collection("#{findable_index}.#{format}", opts, force).first
15
+ else
16
+ self.get("#{findable_index}/#{id}.#{format}", opts, force)
17
+ end
18
+ end
19
+
20
+ def all
21
+ find(:all)
22
+ end
23
+ def first
24
+ find(:first)
25
+ end
26
+
27
+ def findable_index
28
+ raise NotImplementedError, "Findable expects a public class method 'findable_index'"
29
+ end
30
+
31
+ end
32
+
33
+ module InstanceMethods
34
+
35
+ end
36
+
37
+ def self.included(receiver)
38
+ receiver.extend ClassMethods
39
+ receiver.send :include, InstanceMethods
40
+ end
41
+
42
+ end
43
+ end
44
+ end
@@ -35,6 +35,10 @@ module Resourceful
35
35
 
36
36
  protected
37
37
 
38
+ def self.format
39
+ Resourceful::Resource::Json.to_s
40
+ end
41
+
38
42
  def attribute(config)
39
43
  begin
40
44
  get_node(config[:path])
@@ -54,6 +58,7 @@ module Resourceful
54
58
  def get_node(path_config)
55
59
  self.class.get_node(@data, path_config)
56
60
  end
61
+
57
62
  end
58
63
 
59
64
  end
@@ -35,6 +35,10 @@ module Resourceful
35
35
 
36
36
  protected
37
37
 
38
+ def self.format
39
+ Resourceful::Resource::Xml.to_s
40
+ end
41
+
38
42
  def attribute(config)
39
43
  begin
40
44
  get_node(config[:path]).first.send((config[:content] || 'content').to_s)
@@ -2,8 +2,8 @@ module Resourceful
2
2
  module Version
3
3
 
4
4
  MAJOR = 0
5
- MINOR = 5
6
- TINY = 11
5
+ MINOR = 6
6
+ TINY = 1
7
7
 
8
8
  def self.to_s # :nodoc:
9
9
  [MAJOR, MINOR, TINY].join('.')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kelredd-resourceful
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.11
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kelly Redding
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-08-31 00:00:00 -07:00
12
+ date: 2009-09-01 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -93,6 +93,9 @@ files:
93
93
  - lib/resourceful/extensions.rb
94
94
  - lib/resourceful/model
95
95
  - lib/resourceful/model/base.rb
96
+ - lib/resourceful/model/embedded_associations.rb
97
+ - lib/resourceful/model/external_associations.rb
98
+ - lib/resourceful/model/findable.rb
96
99
  - lib/resourceful/model/json.rb
97
100
  - lib/resourceful/model/xml.rb
98
101
  - lib/resourceful/model.rb