origin 1.0.0.beta → 1.0.0.rc

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/Rakefile CHANGED
@@ -27,9 +27,4 @@ RSpec::Core::RakeTask.new("spec") do |spec|
27
27
  spec.pattern = "spec/**/*_spec.rb"
28
28
  end
29
29
 
30
- RSpec::Core::RakeTask.new("spec:progress") do |spec|
31
- spec.rspec_opts = %w(--format progress)
32
- spec.pattern = "spec/**/*_spec.rb"
33
- end
34
-
35
30
  task :default => :spec
@@ -154,7 +154,13 @@ module Origin
154
154
  # @since 1.0.0
155
155
  def __override__(criterion, operator)
156
156
  selection(criterion) do |selector, field, value|
157
- selector.store(field, { operator => prepare(field, operator, value) })
157
+ existing = selector[field]
158
+ expression = { operator => prepare(field, operator, value) }
159
+ if existing.respond_to?(:merge!)
160
+ selector.store(field, existing.merge!(expression))
161
+ else
162
+ selector.store(field, expression)
163
+ end
158
164
  end
159
165
  end
160
166
 
@@ -256,9 +256,15 @@ module Origin
256
256
  #
257
257
  # @since 1.0.0
258
258
  def add_sort_option(options, field, direction)
259
- sorting = (options[:sort] || {}).dup
260
- sorting[field] = direction
261
- options.store(:sort, sorting)
259
+ if driver == :mongo
260
+ sorting = (options[:sort] || []).dup
261
+ sorting.push([ field, direction ])
262
+ options.store(:sort, sorting)
263
+ else
264
+ sorting = (options[:sort] || {}).dup
265
+ sorting[field] = direction
266
+ options.store(:sort, sorting)
267
+ end
262
268
  end
263
269
 
264
270
  # Take the provided criterion and store it as an option in the query
@@ -5,6 +5,54 @@ module Origin
5
5
  # such as skip, limit, and sorting criteria.
6
6
  class Options < Smash
7
7
 
8
+ # Convenience method for getting the field options.
9
+ #
10
+ # @example Get the fields options.
11
+ # options.fields
12
+ #
13
+ # @return [ Hash ] The fields options.
14
+ #
15
+ # @since 1.0.0
16
+ def fields
17
+ self[:fields]
18
+ end
19
+
20
+ # Convenience method for getting the limit option.
21
+ #
22
+ # @example Get the limit option.
23
+ # options.limit
24
+ #
25
+ # @return [ Integer ] The limit option.
26
+ #
27
+ # @since 1.0.0
28
+ def limit
29
+ self[:limit]
30
+ end
31
+
32
+ # Convenience method for getting the skip option.
33
+ #
34
+ # @example Get the skip option.
35
+ # options.skip
36
+ #
37
+ # @return [ Integer ] The skip option.
38
+ #
39
+ # @since 1.0.0
40
+ def skip
41
+ self[:skip]
42
+ end
43
+
44
+ # Convenience method for getting the sort options.
45
+ #
46
+ # @example Get the sort options.
47
+ # options.sort
48
+ #
49
+ # @return [ Hash ] The sort options.
50
+ #
51
+ # @since 1.0.0
52
+ def sort
53
+ self[:sort]
54
+ end
55
+
8
56
  # Store the value in the options for the provided key. The options will
9
57
  # handle all necessary serialization and localization in this step.
10
58
  #
@@ -23,8 +23,9 @@ module Origin
23
23
  include Optional
24
24
 
25
25
  # @attribute [r] aliases The aliases.
26
+ # @attribute [r] driver The Mongo driver being used.
26
27
  # @attribute [r] serializers The serializers.
27
- attr_reader :aliases, :serializers
28
+ attr_reader :aliases, :driver, :serializers
28
29
 
29
30
  # Is this queryable equal to another object? Is true if the selector and
30
31
  # options are equal.
@@ -48,11 +49,13 @@ module Origin
48
49
  # @example Initialize the queryable.
49
50
  # Origin::Queryable.new
50
51
  #
52
+ # @param [ Hash ] aliases The optional field aliases.
51
53
  # @param [ Hash ] serializers The optional field serializers.
54
+ # @param [ Symbol ] driver The driver being used.
52
55
  #
53
56
  # @since 1.0.0
54
- def initialize(aliases = {}, serializers = {})
55
- @aliases, @serializers = aliases, serializers
57
+ def initialize(aliases = {}, serializers = {}, driver = :moped)
58
+ @aliases, @driver, @serializers = aliases, driver.to_sym, serializers
56
59
  @options, @selector =
57
60
  Options.new(aliases, serializers), Selector.new(aliases, serializers)
58
61
  yield(self) if block_given?
@@ -55,7 +55,7 @@ module Origin
55
55
  serializer = serializers[name]
56
56
  [ normalized_key(name, serializer), evolve(serializer, _value) ]
57
57
  end]
58
- end
58
+ end.uniq
59
59
  end
60
60
 
61
61
  # Evolve a single key selection with various types of values.
@@ -1,4 +1,4 @@
1
1
  # encoding: utf-8
2
2
  module Origin
3
- VERSION = "1.0.0.beta"
3
+ VERSION = "1.0.0.rc"
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: origin
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.beta
4
+ version: 1.0.0.rc
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-03 00:00:00.000000000 Z
12
+ date: 2012-05-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -142,7 +142,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
142
142
  version: '0'
143
143
  segments:
144
144
  - 0
145
- hash: -293711780185043147
145
+ hash: -4419291883979862477
146
146
  required_rubygems_version: !ruby/object:Gem::Requirement
147
147
  none: false
148
148
  requirements:
@@ -151,7 +151,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
151
151
  version: 1.3.6
152
152
  requirements: []
153
153
  rubyforge_project: origin
154
- rubygems_version: 1.8.19
154
+ rubygems_version: 1.8.24
155
155
  signing_key:
156
156
  specification_version: 3
157
157
  summary: Simple DSL for MongoDB query generation