storage_room 0.3.0 → 0.3.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.
- 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
|