storage_room 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +3 -0
- data/VERSION +1 -1
- data/examples/create_entry.rb +1 -1
- data/lib/storage_room/accessors.rb +15 -4
- data/lib/storage_room/embeddeds/fields/atomic/array_field.rb +6 -0
- data/lib/storage_room/embeddeds/fields/atomic/json_field.rb +6 -0
- data/lib/storage_room/model.rb +6 -3
- data/lib/storage_room/resource.rb +2 -2
- data/lib/storage_room.rb +17 -9
- data/spec/storage_room/embeddeds/fields/atomic/array_field_spec.rb +5 -0
- data/spec/storage_room/embeddeds/fields/atomic/json_field_spec.rb +5 -0
- data/spec/storage_room/model_spec.rb +3 -3
- data/spec/storage_room/models/collection_spec.rb +4 -4
- data/spec/storage_room/resource_spec.rb +2 -2
- data/spec/storage_room_spec.rb +1 -1
- data/storage_room.gemspec +6 -2
- data/tasks/storage_room.rake +1 -1
- metadata +7 -3
data/History.txt
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.1
|
data/examples/create_entry.rb
CHANGED
@@ -8,7 +8,7 @@ guidebook_collection = StorageRoom::Collection.find('4dda7761b65245fde100005d')
|
|
8
8
|
category_collection = StorageRoom::Collection.find('4dda7761b65245fde100001a')
|
9
9
|
|
10
10
|
category = category_collection.entries.resources.first # find the first category
|
11
|
-
guidebook = guidebook_collection.entry_class.new(:title => 'Bar', :price => 2.23, :category => category)
|
11
|
+
guidebook = guidebook_collection.entry_class.new(:title => 'Bar', :price => 2.23, :category => category, :tags => ['tag1', 'tag2'])
|
12
12
|
|
13
13
|
if guidebook.save # save the guidebook with the associated category
|
14
14
|
puts "Guidebook Entry saved (#{guidebook[:@url]})"
|
@@ -57,9 +57,9 @@ module StorageRoom
|
|
57
57
|
|
58
58
|
self.attributes.each do |name, value|
|
59
59
|
hash[name] = if value.is_a?(::Array)
|
60
|
-
value.map{|x| x.respond_to?(:to_hash) ? x
|
60
|
+
value.map {|x| x.respond_to?(:to_hash) ? call_method_with_optional_parameters(x, :to_hash, :nested => true) : x}
|
61
61
|
elsif value.respond_to?(:to_hash)
|
62
|
-
value
|
62
|
+
call_method_with_optional_parameters(value, :to_hash, :nested => true)
|
63
63
|
elsif value.respond_to?(:as_json)
|
64
64
|
value.as_json(:nested => true)
|
65
65
|
else
|
@@ -69,7 +69,7 @@ module StorageRoom
|
|
69
69
|
|
70
70
|
hash
|
71
71
|
end
|
72
|
-
|
72
|
+
|
73
73
|
def inspect # :nodoc:
|
74
74
|
body = attributes.map{|k, v| "#{k}: #{attribute_for_inspect(v)}"}.join(', ')
|
75
75
|
"#<#{self.class} #{body}>"
|
@@ -92,6 +92,17 @@ module StorageRoom
|
|
92
92
|
end
|
93
93
|
|
94
94
|
protected
|
95
|
+
# Helper to not call to_hash with the wrong number of arguments
|
96
|
+
def call_method_with_optional_parameters(object, method_name, parameters)
|
97
|
+
if object.respond_to?(method_name)
|
98
|
+
if object.method(method_name).arity == -1
|
99
|
+
object.send(method_name, parameters)
|
100
|
+
else
|
101
|
+
object.send(method_name)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
95
106
|
# Iterate over the response data and initialize the attributes
|
96
107
|
def initialize_from_response_data # :nodoc:
|
97
108
|
self.class.attribute_options.each do |name, options|
|
@@ -114,7 +125,7 @@ module StorageRoom
|
|
114
125
|
if loaded?
|
115
126
|
yield if block_given?
|
116
127
|
else
|
117
|
-
raise StorageRoom::
|
128
|
+
raise StorageRoom::ResourceNotLoadedError
|
118
129
|
end
|
119
130
|
end
|
120
131
|
|
data/lib/storage_room/model.rb
CHANGED
@@ -21,15 +21,15 @@ module StorageRoom
|
|
21
21
|
|
22
22
|
#
|
23
23
|
def index_path # :nodoc:
|
24
|
-
raise StorageRoom::
|
24
|
+
raise StorageRoom::AbstractMethodError.new
|
25
25
|
end
|
26
26
|
|
27
27
|
def show_path(id) # :nodoc:
|
28
|
-
raise StorageRoom::
|
28
|
+
raise StorageRoom::AbstractMethodError.new
|
29
29
|
end
|
30
30
|
|
31
31
|
def json_name # :nodoc:
|
32
|
-
raise StorageRoom::
|
32
|
+
raise StorageRoom::AbstractMethodError.new
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
@@ -110,7 +110,10 @@ module StorageRoom
|
|
110
110
|
|
111
111
|
if httparty.response.code == '200' || httparty.response.code == '201'
|
112
112
|
self.set_from_response_data(httparty.parsed_response.first[1])
|
113
|
+
@errors = []
|
113
114
|
true
|
115
|
+
elsif httparty.response.code == '409' # optimistic locking
|
116
|
+
raise OptimisticLockingError.new("The Model has been updated by somebody else")
|
114
117
|
else
|
115
118
|
@errors = httparty.parsed_response['error']['message']
|
116
119
|
false
|
@@ -15,9 +15,9 @@ module StorageRoom
|
|
15
15
|
# Handle known server errors
|
16
16
|
def handle_critical_response_errors(httparty) # :nodoc:
|
17
17
|
case httparty.response.code
|
18
|
-
when '200', '201', '422' then true
|
18
|
+
when '200', '201', '409', '422' then true
|
19
19
|
else
|
20
|
-
raise StorageRoom::
|
20
|
+
raise StorageRoom::RequestFailedError.new("Invalid HTTP Response: #{httparty.response.code}")
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
data/lib/storage_room.rb
CHANGED
@@ -10,10 +10,11 @@ require 'storage_room/extensions/const_defined'
|
|
10
10
|
require 'storage_room/plugins'
|
11
11
|
|
12
12
|
module StorageRoom
|
13
|
-
class
|
14
|
-
class
|
15
|
-
class
|
16
|
-
class
|
13
|
+
class AbstractMethodError < RuntimeError; end
|
14
|
+
class RequestFailedError < RuntimeError; end
|
15
|
+
class ResourceNotLoadedError < RuntimeError; end
|
16
|
+
class ClassNotFoundError < RuntimeError; end
|
17
|
+
class OptimisticLockingError < RuntimeError; end
|
17
18
|
|
18
19
|
autoload :Plugins, 'storage_room/plugins'
|
19
20
|
autoload :Accessors, 'storage_room/accessors'
|
@@ -38,7 +39,9 @@ module StorageRoom
|
|
38
39
|
autoload :FloatField, 'storage_room/embeddeds/fields/atomic/float_field'
|
39
40
|
autoload :DateField, 'storage_room/embeddeds/fields/atomic/date_field'
|
40
41
|
autoload :BooleanField, 'storage_room/embeddeds/fields/atomic/boolean_field'
|
41
|
-
|
42
|
+
autoload :ArrayField, 'storage_room/embeddeds/fields/atomic/array_field'
|
43
|
+
autoload :JsonField, 'storage_room/embeddeds/fields/atomic/json_field'
|
44
|
+
|
42
45
|
autoload :CompoundField, 'storage_room/embeddeds/fields/compound_field'
|
43
46
|
autoload :AttachmentField, 'storage_room/embeddeds/fields/compound/attachment_field'
|
44
47
|
autoload :FileField, 'storage_room/embeddeds/fields/compound/file_field'
|
@@ -112,13 +115,18 @@ module StorageRoom
|
|
112
115
|
# Return a Ruby class for a StorageRoom type
|
113
116
|
def class_for_name(name)
|
114
117
|
name_with_mapping = entry_class_for_name(name)
|
118
|
+
|
119
|
+
begin
|
120
|
+
if StorageRoom.is_constant_defined?(name)
|
121
|
+
return "StorageRoom::#{name}".constantize
|
122
|
+
end
|
123
|
+
rescue NameError # could contain spaces etc.
|
124
|
+
end
|
115
125
|
|
116
|
-
if
|
117
|
-
"StorageRoom::#{name}".constantize
|
118
|
-
elsif Object.is_constant_defined?(name_with_mapping)
|
126
|
+
if Object.is_constant_defined?(name_with_mapping)
|
119
127
|
name_with_mapping.constantize
|
120
128
|
else
|
121
|
-
raise
|
129
|
+
raise ClassNotFoundError.new("Unknown class: #{name}")
|
122
130
|
end
|
123
131
|
end
|
124
132
|
|
@@ -29,7 +29,7 @@ describe StorageRoom::Model do
|
|
29
29
|
it "should raise" do
|
30
30
|
lambda {
|
31
31
|
StorageRoom::Model.show_path(1)
|
32
|
-
}.should raise_error(StorageRoom::
|
32
|
+
}.should raise_error(StorageRoom::AbstractMethodError)
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
@@ -37,7 +37,7 @@ describe StorageRoom::Model do
|
|
37
37
|
it "should raise" do
|
38
38
|
lambda {
|
39
39
|
StorageRoom::Model.index_path
|
40
|
-
}.should raise_error(StorageRoom::
|
40
|
+
}.should raise_error(StorageRoom::AbstractMethodError)
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
@@ -45,7 +45,7 @@ describe StorageRoom::Model do
|
|
45
45
|
it "should raise" do
|
46
46
|
lambda {
|
47
47
|
StorageRoom::Model.json_name
|
48
|
-
}.should raise_error(StorageRoom::
|
48
|
+
}.should raise_error(StorageRoom::AbstractMethodError)
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
@@ -41,7 +41,7 @@ describe StorageRoom::Collection do
|
|
41
41
|
end
|
42
42
|
|
43
43
|
it "should have an error if not loaded" do
|
44
|
-
lambda { @collection2.entries }.should raise_error(StorageRoom::
|
44
|
+
lambda { @collection2.entries }.should raise_error(StorageRoom::ResourceNotLoadedError)
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
@@ -51,7 +51,7 @@ describe StorageRoom::Collection do
|
|
51
51
|
end
|
52
52
|
|
53
53
|
it "should have an error if not loaded" do
|
54
|
-
lambda { @collection2.entry_class_name }.should raise_error(StorageRoom::
|
54
|
+
lambda { @collection2.entry_class_name }.should raise_error(StorageRoom::ResourceNotLoadedError)
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
@@ -61,7 +61,7 @@ describe StorageRoom::Collection do
|
|
61
61
|
end
|
62
62
|
|
63
63
|
it "should have an error if not loaded" do
|
64
|
-
lambda { @collection2.entry_class }.should raise_error(StorageRoom::
|
64
|
+
lambda { @collection2.entry_class }.should raise_error(StorageRoom::ResourceNotLoadedError)
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
@@ -75,7 +75,7 @@ describe StorageRoom::Collection do
|
|
75
75
|
end
|
76
76
|
|
77
77
|
it "should have an error if not loaded" do
|
78
|
-
lambda { @collection2.field('name') }.should raise_error(StorageRoom::
|
78
|
+
lambda { @collection2.field('name') }.should raise_error(StorageRoom::ResourceNotLoadedError)
|
79
79
|
end
|
80
80
|
end
|
81
81
|
end
|
@@ -44,7 +44,7 @@ describe StorageRoom::Resource do
|
|
44
44
|
|
45
45
|
lambda {
|
46
46
|
StorageRoom::Array.load('/collections')
|
47
|
-
}.should raise_error(StorageRoom::
|
47
|
+
}.should raise_error(StorageRoom::RequestFailedError)
|
48
48
|
|
49
49
|
end
|
50
50
|
end
|
@@ -73,7 +73,7 @@ describe StorageRoom::Resource do
|
|
73
73
|
it "should raise error" do
|
74
74
|
lambda {
|
75
75
|
StorageRoom::Resource.handle_critical_response_errors(mock_httparty(500))
|
76
|
-
}.should raise_error(StorageRoom::
|
76
|
+
}.should raise_error(StorageRoom::RequestFailedError)
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|
data/spec/storage_room_spec.rb
CHANGED
@@ -127,7 +127,7 @@ describe StorageRoom do
|
|
127
127
|
it "should raise an error for unknown classes" do
|
128
128
|
lambda {
|
129
129
|
StorageRoom.class_for_name("Unknown")
|
130
|
-
}.should raise_error(StorageRoom::
|
130
|
+
}.should raise_error(StorageRoom::ClassNotFoundError)
|
131
131
|
|
132
132
|
end
|
133
133
|
end
|
data/storage_room.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{storage_room}
|
8
|
-
s.version = "0.3.
|
8
|
+
s.version = "0.3.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Sascha Konietzke"]
|
12
|
-
s.date = %q{2011-06-
|
12
|
+
s.date = %q{2011-06-22}
|
13
13
|
s.description = %q{StorageRoom is a CMS system for Mobile Applications (iPhone, Android, BlackBerry, ...). This library gives you an ActiveModel-like interface to your data.}
|
14
14
|
s.email = %q{sascha@thriventures.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -41,10 +41,12 @@ Gem::Specification.new do |s|
|
|
41
41
|
"lib/storage_room/embeddeds/fields/association_field.rb",
|
42
42
|
"lib/storage_room/embeddeds/fields/associations/many_association_field.rb",
|
43
43
|
"lib/storage_room/embeddeds/fields/associations/one_association_field.rb",
|
44
|
+
"lib/storage_room/embeddeds/fields/atomic/array_field.rb",
|
44
45
|
"lib/storage_room/embeddeds/fields/atomic/boolean_field.rb",
|
45
46
|
"lib/storage_room/embeddeds/fields/atomic/date_field.rb",
|
46
47
|
"lib/storage_room/embeddeds/fields/atomic/float_field.rb",
|
47
48
|
"lib/storage_room/embeddeds/fields/atomic/integer_field.rb",
|
49
|
+
"lib/storage_room/embeddeds/fields/atomic/json_field.rb",
|
48
50
|
"lib/storage_room/embeddeds/fields/atomic/string_field.rb",
|
49
51
|
"lib/storage_room/embeddeds/fields/atomic/time_field.rb",
|
50
52
|
"lib/storage_room/embeddeds/fields/atomic_field.rb",
|
@@ -75,10 +77,12 @@ Gem::Specification.new do |s|
|
|
75
77
|
"spec/storage_room/embeddeds/fields/association_field_spec.rb",
|
76
78
|
"spec/storage_room/embeddeds/fields/associations/many_association_field_spec.rb",
|
77
79
|
"spec/storage_room/embeddeds/fields/associations/one_association_field_spec.rb",
|
80
|
+
"spec/storage_room/embeddeds/fields/atomic/array_field_spec.rb",
|
78
81
|
"spec/storage_room/embeddeds/fields/atomic/boolean_field_spec.rb",
|
79
82
|
"spec/storage_room/embeddeds/fields/atomic/date_field_spec.rb",
|
80
83
|
"spec/storage_room/embeddeds/fields/atomic/float_field_spec.rb",
|
81
84
|
"spec/storage_room/embeddeds/fields/atomic/integer_field_spec.rb",
|
85
|
+
"spec/storage_room/embeddeds/fields/atomic/json_field_spec.rb",
|
82
86
|
"spec/storage_room/embeddeds/fields/atomic/string_field_spec.rb",
|
83
87
|
"spec/storage_room/embeddeds/fields/atomic/time_field_spec.rb",
|
84
88
|
"spec/storage_room/embeddeds/fields/atomic_field_spec.rb",
|
data/tasks/storage_room.rake
CHANGED
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 3
|
8
|
-
-
|
9
|
-
version: 0.3.
|
8
|
+
- 1
|
9
|
+
version: 0.3.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Sascha Konietzke
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-06-
|
17
|
+
date: 2011-06-22 00:00:00 -03:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -109,10 +109,12 @@ files:
|
|
109
109
|
- lib/storage_room/embeddeds/fields/association_field.rb
|
110
110
|
- lib/storage_room/embeddeds/fields/associations/many_association_field.rb
|
111
111
|
- lib/storage_room/embeddeds/fields/associations/one_association_field.rb
|
112
|
+
- lib/storage_room/embeddeds/fields/atomic/array_field.rb
|
112
113
|
- lib/storage_room/embeddeds/fields/atomic/boolean_field.rb
|
113
114
|
- lib/storage_room/embeddeds/fields/atomic/date_field.rb
|
114
115
|
- lib/storage_room/embeddeds/fields/atomic/float_field.rb
|
115
116
|
- lib/storage_room/embeddeds/fields/atomic/integer_field.rb
|
117
|
+
- lib/storage_room/embeddeds/fields/atomic/json_field.rb
|
116
118
|
- lib/storage_room/embeddeds/fields/atomic/string_field.rb
|
117
119
|
- lib/storage_room/embeddeds/fields/atomic/time_field.rb
|
118
120
|
- lib/storage_room/embeddeds/fields/atomic_field.rb
|
@@ -143,10 +145,12 @@ files:
|
|
143
145
|
- spec/storage_room/embeddeds/fields/association_field_spec.rb
|
144
146
|
- spec/storage_room/embeddeds/fields/associations/many_association_field_spec.rb
|
145
147
|
- spec/storage_room/embeddeds/fields/associations/one_association_field_spec.rb
|
148
|
+
- spec/storage_room/embeddeds/fields/atomic/array_field_spec.rb
|
146
149
|
- spec/storage_room/embeddeds/fields/atomic/boolean_field_spec.rb
|
147
150
|
- spec/storage_room/embeddeds/fields/atomic/date_field_spec.rb
|
148
151
|
- spec/storage_room/embeddeds/fields/atomic/float_field_spec.rb
|
149
152
|
- spec/storage_room/embeddeds/fields/atomic/integer_field_spec.rb
|
153
|
+
- spec/storage_room/embeddeds/fields/atomic/json_field_spec.rb
|
150
154
|
- spec/storage_room/embeddeds/fields/atomic/string_field_spec.rb
|
151
155
|
- spec/storage_room/embeddeds/fields/atomic/time_field_spec.rb
|
152
156
|
- spec/storage_room/embeddeds/fields/atomic_field_spec.rb
|