ampere 0.1.2 → 0.1.3
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/VERSION +1 -1
 - data/ampere.gemspec +2 -2
 - data/lib/ampere/model.rb +20 -0
 - data/spec/models/indices_spec.rb +1 -2
 - metadata +19 -19
 
    
        data/VERSION
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            0.1. 
     | 
| 
      
 1 
     | 
    
         
            +
            0.1.3
         
     | 
    
        data/ampere.gemspec
    CHANGED
    
    | 
         @@ -5,11 +5,11 @@ 
     | 
|
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
            Gem::Specification.new do |s|
         
     | 
| 
       7 
7 
     | 
    
         
             
              s.name = "ampere"
         
     | 
| 
       8 
     | 
    
         
            -
              s.version = "0.1. 
     | 
| 
      
 8 
     | 
    
         
            +
              s.version = "0.1.3"
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         
     | 
| 
       11 
11 
     | 
    
         
             
              s.authors = ["Max Thom Stahl"]
         
     | 
| 
       12 
     | 
    
         
            -
              s.date = "2012-01- 
     | 
| 
      
 12 
     | 
    
         
            +
              s.date = "2012-01-19"
         
     | 
| 
       13 
13 
     | 
    
         
             
              s.description = "An ActiveRecord/Mongoid-esque object model for the Redis key/value data store."
         
     | 
| 
       14 
14 
     | 
    
         
             
              s.email = "max@villainousindustri.es"
         
     | 
| 
       15 
15 
     | 
    
         
             
              s.extra_rdoc_files = [
         
     | 
    
        data/lib/ampere/model.rb
    CHANGED
    
    | 
         @@ -80,6 +80,15 @@ module Ampere 
     | 
|
| 
       80 
80 
     | 
    
         | 
| 
       81 
81 
     | 
    
         
             
                # Saves this record to the database.
         
     | 
| 
       82 
82 
     | 
    
         
             
                def save
         
     | 
| 
      
 83 
     | 
    
         
            +
                  self.class.unique_indices.each do |idx|
         
     | 
| 
      
 84 
     | 
    
         
            +
                    # For each uniquely-indexed field, look up the index for that field,
         
     | 
| 
      
 85 
     | 
    
         
            +
                    # and throw an exception if this record's value for that field is in
         
     | 
| 
      
 86 
     | 
    
         
            +
                    # the index already.
         
     | 
| 
      
 87 
     | 
    
         
            +
                    if Ampere.connection.hexists("ampere.index.#{self.class.to_s.downcase}.#{idx}", instance_variable_get("@#{idx}")) then
         
     | 
| 
      
 88 
     | 
    
         
            +
                      raise "Cannot save non-unique value for #{idx}"
         
     | 
| 
      
 89 
     | 
    
         
            +
                    end
         
     | 
| 
      
 90 
     | 
    
         
            +
                  end
         
     | 
| 
      
 91 
     | 
    
         
            +
                  
         
     | 
| 
       83 
92 
     | 
    
         
             
                  # Grab a fresh GUID from Redis by incrementing the "__guid" key
         
     | 
| 
       84 
93 
     | 
    
         
             
                  if @id.nil? then
         
     | 
| 
       85 
94 
     | 
    
         
             
                    @id = "#{self.class.to_s.downcase}.#{Ampere.connection.incr('__guid')}"
         
     | 
| 
         @@ -164,6 +173,7 @@ module Ampere 
     | 
|
| 
       164 
173 
     | 
    
         
             
                  @fields         ||= []
         
     | 
| 
       165 
174 
     | 
    
         
             
                  @field_defaults ||= {}
         
     | 
| 
       166 
175 
     | 
    
         
             
                  @indices        ||= []
         
     | 
| 
      
 176 
     | 
    
         
            +
                  @unique_indices ||= []
         
     | 
| 
       167 
177 
     | 
    
         
             
                  @field_types    ||= {}
         
     | 
| 
       168 
178 
     | 
    
         | 
| 
       169 
179 
     | 
    
         
             
                  @fields << name
         
     | 
| 
         @@ -260,13 +270,18 @@ module Ampere 
     | 
|
| 
       260 
270 
     | 
    
         | 
| 
       261 
271 
     | 
    
         
             
                # Defines an index. See the README for more details.
         
     | 
| 
       262 
272 
     | 
    
         
             
                def self.index(field_name, options = {})
         
     | 
| 
      
 273 
     | 
    
         
            +
                  # TODO There has just got to be a better way to handle this.
         
     | 
| 
       263 
274 
     | 
    
         
             
                  @fields         ||= []
         
     | 
| 
       264 
275 
     | 
    
         
             
                  @field_defaults ||= {}
         
     | 
| 
       265 
276 
     | 
    
         
             
                  @indices        ||= []
         
     | 
| 
      
 277 
     | 
    
         
            +
                  @unique_indices ||= []
         
     | 
| 
       266 
278 
     | 
    
         
             
                  @field_types    ||= {}
         
     | 
| 
      
 279 
     | 
    
         
            +
                  
         
     | 
| 
       267 
280 
     | 
    
         
             
                  if field_name.class == String or field_name.class == Symbol then
         
     | 
| 
      
 281 
     | 
    
         
            +
                    # Singular index
         
     | 
| 
       268 
282 
     | 
    
         
             
                    raise "Can't index a nonexistent field!" unless @fields.include?(field_name)
         
     | 
| 
       269 
283 
     | 
    
         
             
                  elsif field_name.class == Array then
         
     | 
| 
      
 284 
     | 
    
         
            +
                    # Compound index
         
     | 
| 
       270 
285 
     | 
    
         
             
                    field_name.each{|f| raise "Can't index a nonexistent field!" unless @fields.include?(f)}
         
     | 
| 
       271 
286 
     | 
    
         
             
                    field_name.sort!
         
     | 
| 
       272 
287 
     | 
    
         
             
                  else
         
     | 
| 
         @@ -274,12 +289,17 @@ module Ampere 
     | 
|
| 
       274 
289 
     | 
    
         
             
                  end
         
     | 
| 
       275 
290 
     | 
    
         | 
| 
       276 
291 
     | 
    
         
             
                  @indices << field_name
         
     | 
| 
      
 292 
     | 
    
         
            +
                  @unique_indices << field_name if options[:unique]
         
     | 
| 
       277 
293 
     | 
    
         
             
                end
         
     | 
| 
       278 
294 
     | 
    
         | 
| 
       279 
295 
     | 
    
         
             
                def self.indices
         
     | 
| 
       280 
296 
     | 
    
         
             
                  @indices
         
     | 
| 
       281 
297 
     | 
    
         
             
                end
         
     | 
| 
       282 
298 
     | 
    
         | 
| 
      
 299 
     | 
    
         
            +
                def self.unique_indices
         
     | 
| 
      
 300 
     | 
    
         
            +
                  @unique_indices
         
     | 
| 
      
 301 
     | 
    
         
            +
                end
         
     | 
| 
      
 302 
     | 
    
         
            +
                
         
     | 
| 
       283 
303 
     | 
    
         
             
                # Finds an array of records which match the given conditions. This method is
         
     | 
| 
       284 
304 
     | 
    
         
             
                # much faster when all the fields given are indexed.
         
     | 
| 
       285 
305 
     | 
    
         
             
                def self.where(options = {})
         
     | 
    
        data/spec/models/indices_spec.rb
    CHANGED
    
    | 
         @@ -68,8 +68,7 @@ describe "Model indices", :indices => true do 
     | 
|
| 
       68 
68 
     | 
    
         
             
                }).should raise_error
         
     | 
| 
       69 
69 
     | 
    
         
             
              end
         
     | 
| 
       70 
70 
     | 
    
         | 
| 
       71 
     | 
    
         
            -
              it 'should enforce the uniqueness of unique single-field indices' do
         
     | 
| 
       72 
     | 
    
         
            -
                pending
         
     | 
| 
      
 71 
     | 
    
         
            +
              it 'should enforce the uniqueness of unique single-field indices', wip:true do
         
     | 
| 
       73 
72 
     | 
    
         
             
                # The student_id_num field of Student is unique. If two Students
         
     | 
| 
       74 
73 
     | 
    
         
             
                # with the same student_id_num are stored, the second should not 
         
     | 
| 
       75 
74 
     | 
    
         
             
                # save successfully, throwing an exception instead.
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: ampere
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.1. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.1.3
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 
         
     | 
| 
       6 
6 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       7 
7 
     | 
    
         
             
            authors:
         
     | 
| 
         @@ -9,11 +9,11 @@ authors: 
     | 
|
| 
       9 
9 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       10 
10 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       11 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
     | 
    
         
            -
            date: 2012-01- 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2012-01-19 00:00:00.000000000Z
         
     | 
| 
       13 
13 
     | 
    
         
             
            dependencies:
         
     | 
| 
       14 
14 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       15 
15 
     | 
    
         
             
              name: redis
         
     | 
| 
       16 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 16 
     | 
    
         
            +
              requirement: &70296343880340 !ruby/object:Gem::Requirement
         
     | 
| 
       17 
17 
     | 
    
         
             
                none: false
         
     | 
| 
       18 
18 
     | 
    
         
             
                requirements:
         
     | 
| 
       19 
19 
     | 
    
         
             
                - - ! '>='
         
     | 
| 
         @@ -21,10 +21,10 @@ dependencies: 
     | 
|
| 
       21 
21 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       22 
22 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       23 
23 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       24 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 24 
     | 
    
         
            +
              version_requirements: *70296343880340
         
     | 
| 
       25 
25 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       26 
26 
     | 
    
         
             
              name: shoulda
         
     | 
| 
       27 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 27 
     | 
    
         
            +
              requirement: &70296343658140 !ruby/object:Gem::Requirement
         
     | 
| 
       28 
28 
     | 
    
         
             
                none: false
         
     | 
| 
       29 
29 
     | 
    
         
             
                requirements:
         
     | 
| 
       30 
30 
     | 
    
         
             
                - - ! '>='
         
     | 
| 
         @@ -32,10 +32,10 @@ dependencies: 
     | 
|
| 
       32 
32 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       33 
33 
     | 
    
         
             
              type: :development
         
     | 
| 
       34 
34 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       35 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 35 
     | 
    
         
            +
              version_requirements: *70296343658140
         
     | 
| 
       36 
36 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       37 
37 
     | 
    
         
             
              name: cucumber
         
     | 
| 
       38 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 38 
     | 
    
         
            +
              requirement: &70296343657240 !ruby/object:Gem::Requirement
         
     | 
| 
       39 
39 
     | 
    
         
             
                none: false
         
     | 
| 
       40 
40 
     | 
    
         
             
                requirements:
         
     | 
| 
       41 
41 
     | 
    
         
             
                - - ! '>='
         
     | 
| 
         @@ -43,10 +43,10 @@ dependencies: 
     | 
|
| 
       43 
43 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       44 
44 
     | 
    
         
             
              type: :development
         
     | 
| 
       45 
45 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       46 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 46 
     | 
    
         
            +
              version_requirements: *70296343657240
         
     | 
| 
       47 
47 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       48 
48 
     | 
    
         
             
              name: bundler
         
     | 
| 
       49 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 49 
     | 
    
         
            +
              requirement: &70296343656200 !ruby/object:Gem::Requirement
         
     | 
| 
       50 
50 
     | 
    
         
             
                none: false
         
     | 
| 
       51 
51 
     | 
    
         
             
                requirements:
         
     | 
| 
       52 
52 
     | 
    
         
             
                - - ~>
         
     | 
| 
         @@ -54,10 +54,10 @@ dependencies: 
     | 
|
| 
       54 
54 
     | 
    
         
             
                    version: 1.0.0
         
     | 
| 
       55 
55 
     | 
    
         
             
              type: :development
         
     | 
| 
       56 
56 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       57 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 57 
     | 
    
         
            +
              version_requirements: *70296343656200
         
     | 
| 
       58 
58 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       59 
59 
     | 
    
         
             
              name: jeweler
         
     | 
| 
       60 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 60 
     | 
    
         
            +
              requirement: &70296343655220 !ruby/object:Gem::Requirement
         
     | 
| 
       61 
61 
     | 
    
         
             
                none: false
         
     | 
| 
       62 
62 
     | 
    
         
             
                requirements:
         
     | 
| 
       63 
63 
     | 
    
         
             
                - - ~>
         
     | 
| 
         @@ -65,10 +65,10 @@ dependencies: 
     | 
|
| 
       65 
65 
     | 
    
         
             
                    version: 1.6.4
         
     | 
| 
       66 
66 
     | 
    
         
             
              type: :development
         
     | 
| 
       67 
67 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       68 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 68 
     | 
    
         
            +
              version_requirements: *70296343655220
         
     | 
| 
       69 
69 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       70 
70 
     | 
    
         
             
              name: simplecov
         
     | 
| 
       71 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 71 
     | 
    
         
            +
              requirement: &70296343654580 !ruby/object:Gem::Requirement
         
     | 
| 
       72 
72 
     | 
    
         
             
                none: false
         
     | 
| 
       73 
73 
     | 
    
         
             
                requirements:
         
     | 
| 
       74 
74 
     | 
    
         
             
                - - ! '>='
         
     | 
| 
         @@ -76,10 +76,10 @@ dependencies: 
     | 
|
| 
       76 
76 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       77 
77 
     | 
    
         
             
              type: :development
         
     | 
| 
       78 
78 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       79 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 79 
     | 
    
         
            +
              version_requirements: *70296343654580
         
     | 
| 
       80 
80 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       81 
81 
     | 
    
         
             
              name: rspec
         
     | 
| 
       82 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 82 
     | 
    
         
            +
              requirement: &70296343653980 !ruby/object:Gem::Requirement
         
     | 
| 
       83 
83 
     | 
    
         
             
                none: false
         
     | 
| 
       84 
84 
     | 
    
         
             
                requirements:
         
     | 
| 
       85 
85 
     | 
    
         
             
                - - ! '>='
         
     | 
| 
         @@ -87,10 +87,10 @@ dependencies: 
     | 
|
| 
       87 
87 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       88 
88 
     | 
    
         
             
              type: :development
         
     | 
| 
       89 
89 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       90 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 90 
     | 
    
         
            +
              version_requirements: *70296343653980
         
     | 
| 
       91 
91 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       92 
92 
     | 
    
         
             
              name: rdoc
         
     | 
| 
       93 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 93 
     | 
    
         
            +
              requirement: &70296343653400 !ruby/object:Gem::Requirement
         
     | 
| 
       94 
94 
     | 
    
         
             
                none: false
         
     | 
| 
       95 
95 
     | 
    
         
             
                requirements:
         
     | 
| 
       96 
96 
     | 
    
         
             
                - - ! '>='
         
     | 
| 
         @@ -98,7 +98,7 @@ dependencies: 
     | 
|
| 
       98 
98 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       99 
99 
     | 
    
         
             
              type: :development
         
     | 
| 
       100 
100 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       101 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 101 
     | 
    
         
            +
              version_requirements: *70296343653400
         
     | 
| 
       102 
102 
     | 
    
         
             
            description: An ActiveRecord/Mongoid-esque object model for the Redis key/value data
         
     | 
| 
       103 
103 
     | 
    
         
             
              store.
         
     | 
| 
       104 
104 
     | 
    
         
             
            email: max@villainousindustri.es
         
     | 
| 
         @@ -151,7 +151,7 @@ required_ruby_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       151 
151 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       152 
152 
     | 
    
         
             
                  segments:
         
     | 
| 
       153 
153 
     | 
    
         
             
                  - 0
         
     | 
| 
       154 
     | 
    
         
            -
                  hash:  
     | 
| 
      
 154 
     | 
    
         
            +
                  hash: -723934337440945373
         
     | 
| 
       155 
155 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
       156 
156 
     | 
    
         
             
              none: false
         
     | 
| 
       157 
157 
     | 
    
         
             
              requirements:
         
     |