storage_room 0.3.7 → 0.3.8

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 CHANGED
@@ -1,3 +1,6 @@
1
+ == Version 0.3.8
2
+ * Added symbol operator and array parameters
3
+
1
4
  == Version 0.3.7
2
5
  * Added support for DeletedEntries
3
6
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.7
1
+ 0.3.8
@@ -3,11 +3,20 @@
3
3
  require File.join(File.dirname(__FILE__), 'authentication')
4
4
 
5
5
  collection = StorageRoom::Collection.find('4dda7761b65245fde100005d')
6
+ Book = collection.entry_class
6
7
 
7
- entries = collection.entry_class.search(:title => 'Hitchhikers Guide to the Galaxy')
8
+ entries = Book.search(:title => 'Hitchhikers Guide to the Galaxy')
8
9
 
9
10
  puts "Entries with title 'Hitchhikers Guide to the Galaxy':"
10
11
 
11
12
  entries.resources.each do |entry|
12
13
  puts "- #{entry.title} : #{entry[:@url]}"
13
- end
14
+ end
15
+
16
+ # Some more example for searches
17
+
18
+ Book.search(:tags => ['fiction', 'future', 'novel']) # search for Books *with any* of these tags
19
+ Book.search(:tags.all => ['french', 'fiction']) # search for Books *with all* of these tags
20
+ Book.search(:tags.nin => ['german', 'chinese']) # search for Books *without any* of these tags
21
+
22
+ Book.find_by_urls('book_url1', 'book_url2', 'book_url3') # load multiple Books at once by their @url
data/lib/storage_room.rb CHANGED
@@ -8,6 +8,7 @@ require 'mime/types'
8
8
  require 'base64'
9
9
  require 'active_support/all'
10
10
  require 'storage_room/extensions/const_defined'
11
+ require 'storage_room/extensions/symbol'
11
12
 
12
13
  require 'storage_room/plugins'
13
14
 
@@ -1,12 +1,21 @@
1
- module ConstDefinedExtension
2
- def is_constant_defined?(const)
3
- if ::RUBY_VERSION =~ /1.9/
4
- const_defined?(const, false)
5
- else
6
- const_defined?(const)
1
+ module StorageRoom
2
+ module Extensions
3
+ module ConstDefined
4
+ def is_constant_defined?(const)
5
+ if ::RUBY_VERSION =~ /1.9/
6
+ const_defined?(const, false)
7
+ else
8
+ const_defined?(const)
9
+ end
10
+ end
7
11
  end
8
12
  end
9
13
  end
10
14
 
11
- Object.send(:include, ConstDefinedExtension)
12
- Module.send(:include, ConstDefinedExtension)
15
+ class Object
16
+ include StorageRoom::Extensions::ConstDefined
17
+ end
18
+
19
+ class Module
20
+ include StorageRoom::Extensions::ConstDefined
21
+ end
@@ -0,0 +1,91 @@
1
+ # encoding: UTF-8
2
+
3
+ module StorageRoom
4
+ module Extensions
5
+
6
+ # With inspiration from John Nunemaker's MongoMapper/Plucky
7
+ module Symbol
8
+ def gt
9
+ SymbolOperator.new(self, 'gt')
10
+ end
11
+
12
+ def lt
13
+ SymbolOperator.new(self, 'lt')
14
+ end
15
+
16
+ def gte
17
+ SymbolOperator.new(self, 'gte')
18
+ end
19
+
20
+ def lte
21
+ SymbolOperator.new(self, 'lte')
22
+ end
23
+
24
+ def ne
25
+ SymbolOperator.new(self, 'ne')
26
+ end
27
+
28
+ def in
29
+ SymbolOperator.new(self, 'in')
30
+ end
31
+
32
+ def nin
33
+ SymbolOperator.new(self, 'nin')
34
+ end
35
+
36
+ # def mod
37
+ # SymbolOperator.new(self, 'mod')
38
+ # end
39
+
40
+ def all
41
+ SymbolOperator.new(self, 'all')
42
+ end
43
+
44
+ # def size
45
+ # SymbolOperator.new(self, 'size')
46
+ # end unless Symbol.instance_methods.include?(:size) # Ruby 1.9 defines symbol size
47
+
48
+ # def exists
49
+ # SymbolOperator.new(self, 'exists')
50
+ # end
51
+ #
52
+ # def asc
53
+ # SymbolOperator.new(self, 'asc')
54
+ # end
55
+ #
56
+ # def desc
57
+ # SymbolOperator.new(self, 'desc')
58
+ # end
59
+ end
60
+ end
61
+ end
62
+
63
+ class SymbolOperator
64
+ include Comparable
65
+
66
+ attr_reader :field, :operator
67
+
68
+ def initialize(field, operator, options={})
69
+ @field, @operator = field, operator
70
+ end unless method_defined?(:initialize)
71
+
72
+ def <=>(other)
73
+ if field == other.field
74
+ operator <=> other.operator
75
+ else
76
+ field.to_s <=> other.field.to_s
77
+ end
78
+ end
79
+
80
+ def ==(other)
81
+ field == other.field && operator == other.operator
82
+ end
83
+
84
+ def to_s
85
+ "#{field}!#{operator}"
86
+ end
87
+ end
88
+
89
+ class Symbol
90
+ include StorageRoom::Extensions::Symbol
91
+ end
@@ -23,6 +23,16 @@ module StorageRoom
23
23
  def search(parameters = {})
24
24
  Array.load(search_path(parameters))
25
25
  end
26
+
27
+ # Find multiple Entries by their IDs with one query
28
+ def find_by_ids(*ids)
29
+ find_by_urls(*ids.map{|id| show_path(id)})
30
+ end
31
+
32
+ # Find multiple Entries by their URLs with one query
33
+ def find_by_urls(*urls)
34
+ search(:@url.in => urls)
35
+ end
26
36
  end
27
37
 
28
38
  # The collection of a entry
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ require 'storage_room/extensions/symbol'
4
+
5
+ describe StorageRoom::Extensions::Symbol do
6
+ it "should transform a known symbol with operator to string" do
7
+ :something.in.to_s.should == 'something!in'
8
+ end
9
+
10
+ it "should raise an error for an unknown operator" do
11
+ lambda {
12
+ :something.asdf
13
+ }.should raise_error(NoMethodError)
14
+ end
15
+ end
@@ -35,11 +35,11 @@ describe StorageRoom::Entry do
35
35
  end
36
36
  end
37
37
 
38
- describe "#search" do
39
- it "should load" do
40
- pending
41
- end
42
- end
38
+ # describe "#search" do
39
+ # it "should load" do
40
+ # pending
41
+ # end
42
+ # end
43
43
  end
44
44
 
45
45
  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.7"
8
+ s.version = "0.3.8"
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-07-21}
12
+ s.date = %q{2011-07-25}
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 = [
@@ -63,6 +63,7 @@ Gem::Specification.new do |s|
63
63
  "lib/storage_room/embeddeds/location.rb",
64
64
  "lib/storage_room/embeddeds/webhook_definition.rb",
65
65
  "lib/storage_room/extensions/const_defined.rb",
66
+ "lib/storage_room/extensions/symbol.rb",
66
67
  "lib/storage_room/identity_map.rb",
67
68
  "lib/storage_room/model.rb",
68
69
  "lib/storage_room/models/collection.rb",
@@ -106,6 +107,7 @@ Gem::Specification.new do |s|
106
107
  "spec/storage_room/embeddeds/image_version_spec.rb",
107
108
  "spec/storage_room/embeddeds/location_spec.rb",
108
109
  "spec/storage_room/embeddeds/webhook_definition_spec.rb",
110
+ "spec/storage_room/extensions/symbol_spec.rb",
109
111
  "spec/storage_room/identity_map_spec.rb",
110
112
  "spec/storage_room/model_spec.rb",
111
113
  "spec/storage_room/models/collection_spec.rb",
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 3
8
- - 7
9
- version: 0.3.7
8
+ - 8
9
+ version: 0.3.8
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-07-21 00:00:00 +02:00
17
+ date: 2011-07-25 00:00:00 +02:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -144,6 +144,7 @@ files:
144
144
  - lib/storage_room/embeddeds/location.rb
145
145
  - lib/storage_room/embeddeds/webhook_definition.rb
146
146
  - lib/storage_room/extensions/const_defined.rb
147
+ - lib/storage_room/extensions/symbol.rb
147
148
  - lib/storage_room/identity_map.rb
148
149
  - lib/storage_room/model.rb
149
150
  - lib/storage_room/models/collection.rb
@@ -187,6 +188,7 @@ files:
187
188
  - spec/storage_room/embeddeds/image_version_spec.rb
188
189
  - spec/storage_room/embeddeds/location_spec.rb
189
190
  - spec/storage_room/embeddeds/webhook_definition_spec.rb
191
+ - spec/storage_room/extensions/symbol_spec.rb
190
192
  - spec/storage_room/identity_map_spec.rb
191
193
  - spec/storage_room/model_spec.rb
192
194
  - spec/storage_room/models/collection_spec.rb