medea 0.6.9 → 0.7.0
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/lib/medea/jason_base.rb +73 -3
- data/lib/medea/jason_blob.rb +9 -1
- data/lib/medea/jasondb.rb +2 -1
- data/lib/medea/jasonobject.rb +3 -39
- data/lib/medea/version.rb +1 -1
- data/spec/deferred_query_spec.rb +1 -1
- data/spec/jason_object_spec.rb +3 -3
- metadata +2 -2
    
        data/lib/medea/jason_base.rb
    CHANGED
    
    | @@ -2,9 +2,12 @@ module Medea | |
| 2 2 | 
             
              class JasonBase
         | 
| 3 3 | 
             
                #meta-programming interface for lists
         | 
| 4 4 | 
             
                include ClassLevelInheritableAttributes
         | 
| 5 | 
            -
                inheritable_attributes :owned
         | 
| 5 | 
            +
                inheritable_attributes :owned, :public
         | 
| 6 6 | 
             
                @owned = false
         | 
| 7 7 |  | 
| 8 | 
            +
                #these verbs are able to be made public
         | 
| 9 | 
            +
                HTTP_VERBS = [:GET, :POST, :PUT, :DELETE]
         | 
| 10 | 
            +
             | 
| 8 11 | 
             
                #the resolve method takes a key and returns the JasonObject that has that key
         | 
| 9 12 | 
             
                #This is useful when you have the key, but not the class
         | 
| 10 13 | 
             
                def self.resolve(key, mode=:lazy)
         | 
| @@ -30,6 +33,13 @@ module Medea | |
| 30 33 | 
             
                  end
         | 
| 31 34 | 
             
                end
         | 
| 32 35 |  | 
| 36 | 
            +
                def initialize
         | 
| 37 | 
            +
                  @public = []
         | 
| 38 | 
            +
                  if opts[:public]
         | 
| 39 | 
            +
                    opts[:public].each {|i| @public << i}
         | 
| 40 | 
            +
                  end
         | 
| 41 | 
            +
                end
         | 
| 42 | 
            +
             | 
| 33 43 | 
             
                def ==(other)
         | 
| 34 44 | 
             
                  return false if not other.is_a? JasonBase
         | 
| 35 45 | 
             
                  jason_key == other.jason_key
         | 
| @@ -124,12 +134,72 @@ module Medea | |
| 124 134 | 
             
                  @__jason_data = JSON.parse response
         | 
| 125 135 | 
             
                  @__jason_etag = response.headers[:etag]
         | 
| 126 136 | 
             
                  @__jason_timestamp = response.headers[:timestamp]
         | 
| 127 | 
            -
                  if response.headers[: | 
| 128 | 
            -
                    @public =  | 
| 137 | 
            +
                  if response.headers[:http_x_permissions]
         | 
| 138 | 
            +
                    @public = []
         | 
| 139 | 
            +
                    response.headers[:http_x_permissions].match /PUBLIC:\[([A-Z]+)(,[A-Z]+)*\]/ do |m|
         | 
| 140 | 
            +
                      m.captures.each do |c|
         | 
| 141 | 
            +
                        @public << c.slice(/[A-Z]+/)
         | 
| 142 | 
            +
                      end
         | 
| 143 | 
            +
                    end
         | 
| 129 144 | 
             
                  end
         | 
| 130 145 | 
             
                  @__jason_state = :stale
         | 
| 131 146 | 
             
                end
         | 
| 132 147 |  | 
| 148 | 
            +
                def add_public *args
         | 
| 149 | 
            +
                  args.reject! do |i|
         | 
| 150 | 
            +
                    not HTTP_VERBS.include? i
         | 
| 151 | 
            +
                  end
         | 
| 152 | 
            +
                  args.uniq!
         | 
| 153 | 
            +
                  @public += args
         | 
| 154 | 
            +
                  @public.uniq!
         | 
| 155 | 
            +
                  @__jason_state = :dirty unless args.empty?
         | 
| 156 | 
            +
                end
         | 
| 157 | 
            +
             | 
| 158 | 
            +
                def remove_public *args
         | 
| 159 | 
            +
                  args.reject! do |i|
         | 
| 160 | 
            +
                    not HTTP_VERBS.include? i
         | 
| 161 | 
            +
                  end
         | 
| 162 | 
            +
                  @public -= args
         | 
| 163 | 
            +
                  @public.uniq!
         | 
| 164 | 
            +
                  @__jason_state = :dirty unless args.empty?
         | 
| 165 | 
            +
                end
         | 
| 133 166 |  | 
| 167 | 
            +
                def set_public *args
         | 
| 168 | 
            +
                  args.reject! do |i|
         | 
| 169 | 
            +
                    not HTTP_VERBS.include? i
         | 
| 170 | 
            +
                  end
         | 
| 171 | 
            +
                  args.uniq!
         | 
| 172 | 
            +
                  @__jason_state = :dirty unless args.sort == @public.sort
         | 
| 173 | 
            +
                  @public = args
         | 
| 174 | 
            +
                end
         | 
| 175 | 
            +
             | 
| 176 | 
            +
                def get_public
         | 
| 177 | 
            +
                  @public
         | 
| 178 | 
            +
                end
         | 
| 179 | 
            +
             | 
| 180 | 
            +
                def permissions_header
         | 
| 181 | 
            +
                  permissions = {}
         | 
| 182 | 
            +
                  if self.get_public.any?
         | 
| 183 | 
            +
                    permissions["PUBLIC"] = self.get_public.join(",")
         | 
| 184 | 
            +
                  end
         | 
| 185 | 
            +
             | 
| 186 | 
            +
                  result = []
         | 
| 187 | 
            +
                  
         | 
| 188 | 
            +
                  permissions.each do |k, v|
         | 
| 189 | 
            +
                    result << "#{k}:[#{v}]"
         | 
| 190 | 
            +
                  end
         | 
| 191 | 
            +
             | 
| 192 | 
            +
                  {"X-PERMISSIONS" => "{#{result.join ","}}"}
         | 
| 193 | 
            +
                end
         | 
| 194 | 
            +
             | 
| 195 | 
            +
                private
         | 
| 196 | 
            +
                def opts
         | 
| 197 | 
            +
                  if self.class.class_variable_defined? :@@opts
         | 
| 198 | 
            +
                    self.class.class_variable_get :@@opts
         | 
| 199 | 
            +
                  else
         | 
| 200 | 
            +
                    {}
         | 
| 201 | 
            +
                  end
         | 
| 202 | 
            +
                end
         | 
| 203 | 
            +
                
         | 
| 134 204 | 
             
              end
         | 
| 135 205 | 
             
            end
         | 
    
        data/lib/medea/jason_blob.rb
    CHANGED
    
    | @@ -1,8 +1,14 @@ | |
| 1 1 | 
             
            module Medea
         | 
| 2 | 
            -
              class JasonBlob < JasonBase
         | 
| 2 | 
            +
              class JasonBlob < Medea::JasonBase
         | 
| 3 3 | 
             
                attr_accessor :parent, :attachment_name
         | 
| 4 4 |  | 
| 5 5 | 
             
                def initialize initialiser=nil, mode=:eager
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                  @public = []
         | 
| 8 | 
            +
                  if opts[:public]
         | 
| 9 | 
            +
                    opts[:public].each {|i| @public << i}
         | 
| 10 | 
            +
                  end
         | 
| 11 | 
            +
             | 
| 6 12 | 
             
                  if initialiser
         | 
| 7 13 | 
             
                    if initialiser.is_a? Hash
         | 
| 8 14 | 
             
                      @parent = initialiser[:parent]
         | 
| @@ -102,6 +108,8 @@ module Medea | |
| 102 108 | 
             
                      #may also want to add any other indexable fields that the user specifies?
         | 
| 103 109 | 
             
                  }
         | 
| 104 110 |  | 
| 111 | 
            +
                  post_headers.merge! permissions_header
         | 
| 112 | 
            +
             | 
| 105 113 | 
             
                  resp = RestClient.post to_url, contents, post_headers
         | 
| 106 114 |  | 
| 107 115 | 
             
                  if resp.code == 201
         | 
    
        data/lib/medea/jasondb.rb
    CHANGED
    
    
    
        data/lib/medea/jasonobject.rb
    CHANGED
    
    | @@ -5,10 +5,7 @@ module Medea | |
| 5 5 | 
             
              require 'json'
         | 
| 6 6 | 
             
              require 'uuidtools'
         | 
| 7 7 |  | 
| 8 | 
            -
              class JasonObject < JasonBase
         | 
| 9 | 
            -
             | 
| 10 | 
            -
                #these verbs are able to be made public
         | 
| 11 | 
            -
                HTTP_VERBS = [:GET, :POST, :PUT, :DELETE]
         | 
| 8 | 
            +
              class JasonObject < Medea::JasonBase
         | 
| 12 9 |  | 
| 13 10 | 
             
                include Medea::ActiveModelMethods
         | 
| 14 11 | 
             
                if defined? ActiveModel
         | 
| @@ -192,30 +189,6 @@ module Medea | |
| 192 189 | 
             
                    persist_changes :post
         | 
| 193 190 | 
             
                end
         | 
| 194 191 |  | 
| 195 | 
            -
                def add_public *args
         | 
| 196 | 
            -
                  args.reject! do |i|
         | 
| 197 | 
            -
                    not HTTP_VERBS.include? i
         | 
| 198 | 
            -
                  end
         | 
| 199 | 
            -
                  @public += args
         | 
| 200 | 
            -
                  @public.uniq!
         | 
| 201 | 
            -
                end
         | 
| 202 | 
            -
             | 
| 203 | 
            -
                def remove_public *args
         | 
| 204 | 
            -
                  args.reject! do |i|
         | 
| 205 | 
            -
                    not HTTP_VERBS.include? i
         | 
| 206 | 
            -
                  end
         | 
| 207 | 
            -
                  @public -= args
         | 
| 208 | 
            -
                  @public.uniq!
         | 
| 209 | 
            -
                end
         | 
| 210 | 
            -
             | 
| 211 | 
            -
                def set_public *args
         | 
| 212 | 
            -
                  args.reject! do |i|
         | 
| 213 | 
            -
                    not HTTP_VERBS.include? i
         | 
| 214 | 
            -
                  end
         | 
| 215 | 
            -
                  @public = args
         | 
| 216 | 
            -
                  @public.uniq!
         | 
| 217 | 
            -
                end
         | 
| 218 | 
            -
             | 
| 219 192 | 
             
                def to_url mode=:secure
         | 
| 220 193 | 
             
                  "#{JasonDB::db_auth_url mode}#{self.class.name}/#{self.jason_key}"
         | 
| 221 194 | 
             
                end
         | 
| @@ -250,9 +223,7 @@ module Medea | |
| 250 223 | 
             
                    end
         | 
| 251 224 | 
             
                  end
         | 
| 252 225 |  | 
| 253 | 
            -
                   | 
| 254 | 
            -
                    post_headers["X-PUBLIC"] = @public.join(",")
         | 
| 255 | 
            -
                  end
         | 
| 226 | 
            +
                  post_headers.merge! permissions_header
         | 
| 256 227 |  | 
| 257 228 | 
             
                  url = to_url()
         | 
| 258 229 |  | 
| @@ -280,13 +251,6 @@ module Medea | |
| 280 251 |  | 
| 281 252 | 
             
                #end object persistence
         | 
| 282 253 |  | 
| 283 | 
            -
             | 
| 284 | 
            -
                def opts
         | 
| 285 | 
            -
                  if self.class.class_variable_defined? :@@opts
         | 
| 286 | 
            -
                    self.class.class_variable_get :@@opts
         | 
| 287 | 
            -
                  else
         | 
| 288 | 
            -
                    {}
         | 
| 289 | 
            -
                  end
         | 
| 290 | 
            -
                end
         | 
| 254 | 
            +
             | 
| 291 255 | 
             
              end
         | 
| 292 256 | 
             
            end
         | 
    
        data/lib/medea/version.rb
    CHANGED
    
    
    
        data/spec/deferred_query_spec.rb
    CHANGED
    
    | @@ -33,7 +33,7 @@ describe "Deferred Query" do | |
| 33 33 | 
             
              end
         | 
| 34 34 |  | 
| 35 35 | 
             
              it "should be able to fetch those since a particular time" do
         | 
| 36 | 
            -
                u = User.all[ | 
| 36 | 
            +
                u = User.all[User.all.count - 1]
         | 
| 37 37 | 
             
                User.all(:since => u.jason_timestamp).each do |i|
         | 
| 38 38 | 
             
                  i.jason_timestamp.should be >= u.jason_timestamp
         | 
| 39 39 | 
             
                end
         | 
    
        data/spec/jason_object_spec.rb
    CHANGED
    
    | @@ -121,13 +121,13 @@ describe "JasonObject" do | |
| 121 121 |  | 
| 122 122 | 
             
              it "should post security information properly" do
         | 
| 123 123 | 
             
                @user.add_public :GET, :POST
         | 
| 124 | 
            -
                RestClient.should_receive(:post).with(anything(), anything(), hash_including("X- | 
| 124 | 
            +
                RestClient.should_receive(:post).with(anything(), anything(), hash_including("X-PERMISSIONS" => "{PUBLIC:[GET,POST]}")).and_return(DummyResponse.new)
         | 
| 125 125 | 
             
                @user.save!
         | 
| 126 126 | 
             
              end
         | 
| 127 127 |  | 
| 128 128 | 
             
              it "should only post valid verbs" do
         | 
| 129 129 | 
             
                @user.add_public :GET, :FAKEVERB
         | 
| 130 | 
            -
                RestClient.should_receive(:post).with(anything(), anything(), hash_including("X- | 
| 130 | 
            +
                RestClient.should_receive(:post).with(anything(), anything(), hash_including("X-PERMISSIONS" => "{PUBLIC:[GET]}")).and_return(DummyResponse.new)
         | 
| 131 131 | 
             
                @user.save!
         | 
| 132 132 | 
             
              end
         | 
| 133 133 |  | 
| @@ -135,6 +135,6 @@ describe "JasonObject" do | |
| 135 135 | 
             
                @user.set_public :GET, :POST
         | 
| 136 136 | 
             
                @user.save!
         | 
| 137 137 | 
             
                retrieved_user = User.get_by_key @user.jason_key
         | 
| 138 | 
            -
                 | 
| 138 | 
            +
                retrieved_user.get_public.should eq(["GET", "POST"])
         | 
| 139 139 | 
             
              end
         | 
| 140 140 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -2,7 +2,7 @@ | |
| 2 2 | 
             
            name: medea
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 4 | 
             
              prerelease: 
         | 
| 5 | 
            -
              version: 0. | 
| 5 | 
            +
              version: 0.7.0
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors: 
         | 
| 8 8 | 
             
            - Michael Jensen
         | 
| @@ -10,7 +10,7 @@ autorequire: | |
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 12 |  | 
| 13 | 
            -
            date: 2011-02- | 
| 13 | 
            +
            date: 2011-02-28 00:00:00 +11:00
         | 
| 14 14 | 
             
            default_executable: 
         | 
| 15 15 | 
             
            dependencies: 
         | 
| 16 16 | 
             
            - !ruby/object:Gem::Dependency 
         |