You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by sn...@apache.org on 2016/10/24 13:05:47 UTC
[02/83] [abbrv] usergrid git commit: Moving older SDKs to a
difference location and updating main README to link to new SDK locations.
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ruby-on-rails/lib/usergrid_ironhorse/query.rb
----------------------------------------------------------------------
diff --git a/sdks/ruby-on-rails/lib/usergrid_ironhorse/query.rb b/sdks/ruby-on-rails/lib/usergrid_ironhorse/query.rb
deleted file mode 100644
index 6562b8f..0000000
--- a/sdks/ruby-on-rails/lib/usergrid_ironhorse/query.rb
+++ /dev/null
@@ -1,929 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# http://guides.rubyonrails.org/active_record_querying.html
-
-module Usergrid
- module Ironhorse
-
- class Query
-
- RecordNotFound = ActiveRecord::RecordNotFound
-
- def initialize(model_class)
- @model_class = model_class
- @options = {}
- end
-
- ## Initializes new record from relation while maintaining the current
- ## scope.
- ##
- ## Expects arguments in the same format as +Base.new+.
- ##
- ## users = User.where(name: 'DHH')
- ## user = users.new # => #<User id: nil, name: "DHH", created_at: nil, updated_at: nil>
- ##
- ## You can also pass a block to new with the new record as argument:
- ##
- ## user = users.new { |user| user.name = 'Oscar' }
- ## user.name # => Oscar
- #def new(*args, &block)
- # scoping { @model_class.new(*args, &block) }
- #end
-
- # Find by uuid or name - This can either be a specific uuid or name (1), a list of uuids
- # or names (1, 5, 6), or an array of uuids or names ([5, 6, 10]).
- # If no record can be found for all of the listed ids, then RecordNotFound will be raised.
- #
- # Person.find(1) # returns the object for ID = 1
- # Person.find("1") # returns the object for ID = 1
- # Person.find(1, 2, 6) # returns an array for objects with IDs in (1, 2, 6)
- # Person.find([7, 17]) # returns an array for objects with IDs in (7, 17)
- # Person.find([1]) # returns an array for the object with ID = 1
- # Person.where("administrator = 1").order("created_on DESC").find(1)
- #
- def find(*ids)
- raise RecordNotFound unless ids
- ids = ids.first if ids.first.is_a? Array
- @records = ids.collect { |id| find_one! id } # todo: can this be optimized in one call?
- #entities = @model_class.resource[ids.join '&'].get.entities
- #raise RecordNotFound unless (entities.size == ids.size)
- #@records = entities.collect {|entity| @model_class.model_name.constantize.new(entity.data) }
- @records.size == 1 ? @records.first : @records
- end
-
- # Finds the first record matching the specified conditions. There
- # is no implied ordering so if order matters, you should specify it
- # yourself.
- #
- # If no record is found, returns <tt>nil</tt>.
- #
- # Post.find_by name: 'Spartacus', rating: 4
- # Post.find_by "published_at < ?", 2.weeks.ago
- def find_by(*conditions)
- where(*conditions).take
- end
-
- # Like <tt>find_by</tt>, except that if no record is found, raises
- # an <tt>ActiveRecord::RecordNotFound</tt> error.
- def find_by!(*conditions)
- where(*conditions).take!
- end
-
- # Gives a record (or N records if a parameter is supplied) without any implied
- # order.
- #
- # Person.take # returns an object fetched by SELECT * FROM people
- # Person.take(5) # returns 5 objects fetched by SELECT * FROM people LIMIT 5
- # Person.where(["name LIKE '%?'", name]).take
- def take(limit=1)
- limit(limit).to_a
- end
-
- # Same as +take+ but raises <tt>ActiveRecord::RecordNotFound</tt> if no record
- # is found. Note that <tt>take!</tt> accepts no arguments.
- def take!
- take or raise RecordNotFound
- end
-
- # Find the first record (or first N records if a parameter is supplied).
- # If no order is defined it will order by primary key.
- #
- # Person.first # returns the first object fetched by SELECT * FROM people
- # Person.where(["user_name = ?", user_name]).first
- # Person.where(["user_name = :u", { :u => user_name }]).first
- # Person.order("created_on DESC").offset(5).first
- # Person.first(3) # returns the first three objects fetched by SELECT * FROM people LIMIT 3
- def first(limit=1)
- limit(limit).load.first
- end
-
- # Same as +first+ but raises <tt>ActiveRecord::RecordNotFound</tt> if no record
- # is found. Note that <tt>first!</tt> accepts no arguments.
- def first!
- first or raise RecordNotFound
- end
-
- # Find the last record (or last N records if a parameter is supplied).
- # If no order is defined it will order by primary key.
- #
- # Person.last # returns the last object fetched by SELECT * FROM people
- # Person.where(["user_name = ?", user_name]).last
- # Person.order("created_on DESC").offset(5).last
- # Person.last(3) # returns the last three objects fetched by SELECT * FROM people.
- #
- # Take note that in that last case, the results are sorted in ascending order:
- #
- # [#<Person id:2>, #<Person id:3>, #<Person id:4>]
- #
- # and not:
- #
- # [#<Person id:4>, #<Person id:3>, #<Person id:2>]
- def last(limit=1)
- limit(limit).reverse_order.load.first
- end
-
- # Same as +last+ but raises <tt>ActiveRecord::RecordNotFound</tt> if no record
- # is found. Note that <tt>last!</tt> accepts no arguments.
- def last!
- last or raise RecordNotFound
- end
-
- def each
- to_a.each { |*block_args| yield(*block_args) }
- while @response.data['cursor'] && !limit_value
- next_page
- to_a.each { |*block_args| yield(*block_args) }
- end
- end
-
- def next_page
- @options[:cursor] = @response.data['cursor']
- @records = nil
- load
- self
- end
-
- # Returns +true+ if a record exists in the table that matches the +id+ or
- # conditions given, or +false+ otherwise. The argument can take six forms:
- #
- # * String - Finds the record with a primary key corresponding to this
- # string (such as <tt>'5'</tt>).
- # * Array - Finds the record that matches these +find+-style conditions
- # (such as <tt>['color = ?', 'red']</tt>).
- # * Hash - Finds the record that matches these +find+-style conditions
- # (such as <tt>{color: 'red'}</tt>).
- # * +false+ - Returns always +false+.
- # * No args - Returns +false+ if the table is empty, +true+ otherwise.
- #
- # For more information about specifying conditions as a Hash or Array,
- # see the Conditions section in the introduction to ActiveRecord::Base.
- def exists?(conditions=nil)
- # todo: does not yet handle all conditions described above
- case conditions
- when Array, Hash
- pluck :uuid
- !where(conditions).take.empty?
- else
- !!find_one(conditions)
- end
- end
- alias_method :any?, :exists?
- alias_method :many?, :exists?
-
- def limit(limit=1)
- @options[:limit] = limit
- self
- end
-
- def offset(num)
- @options[:offset] = num
- self
- end
-
- # Removes from the query the condition(s) specified in +skips+.
- #
- # Example:
- #
- # Post.order('id asc').except(:order) # discards the order condition
- # Post.where('id > 10').order('id asc').except(:where) # discards the where condition but keeps the order
- #
- def except(*skips)
- skips.each {|option| @options.delete option}
- end
-
- # Removes any condition from the query other than the one(s) specified in +onlies+.
- #
- # Example:
- #
- # Post.order('id asc').only(:where) # discards the order condition
- # Post.order('id asc').only(:where, :order) # uses the specified order
- #
- def only(*onlies)
- @options.keys do |k|
- unless onlines.include? k
- @options.delete k
- end
- end
- end
-
- # Allows to specify an order attribute:
- #
- # User.order('name')
- # => SELECT "users".* FROM "users" ORDER BY name
- #
- # User.order('name DESC')
- # => SELECT "users".* FROM "users" ORDER BY name DESC
- #
- # User.order('name DESC, email')
- # => SELECT "users".* FROM "users" ORDER BY name DESC, email
- def order(*args)
- @options[:order] << args
- end
-
- # Replaces any existing order defined on the relation with the specified order.
- #
- # User.order('email DESC').reorder('id ASC') # generated SQL has 'ORDER BY id ASC'
- #
- # Subsequent calls to order on the same relation will be appended. For example:
- #
- # User.order('email DESC').reorder('id ASC').order('name ASC')
- #
- # generates a query with 'ORDER BY name ASC, id ASC'.
- def reorder(*args)
- @options[:order] = args
- end
-
- def all
- @options[:conditions] = nil
- self
- end
-
- # Works in two unique ways.
- #
- # First: takes a block so it can be used just like Array#select.
- #
- # Model.all.select { |m| m.field == value }
- #
- # This will build an array of objects from the database for the scope,
- # converting them into an array and iterating through them using Array#select.
- #
- # Second: Modifies the SELECT statement for the query so that only certain
- # fields are retrieved:
- #
- # Model.select(:field)
- # # => [#<Model field:value>]
- #
- # Although in the above example it looks as though this method returns an
- # array, it actually returns a relation object and can have other query
- # methods appended to it, such as the other methods in ActiveRecord::QueryMethods.
- #
- # The argument to the method can also be an array of fields.
- #
- # Model.select(:field, :other_field, :and_one_more)
- # # => [#<Model field: "value", other_field: "value", and_one_more: "value">]
- #
- def select(*fields)
- if block_given?
- to_a.select { |*block_args| yield(*block_args) }
- else
- raise ArgumentError, 'Call this with at least one field' if fields.empty?
- clone.select!(*fields)
- end
- end
-
- # Like #select, but modifies relation in place.
- def select!(*fields)
- @options[:select] ||= fields.join ','
- self
- end
- alias_method :pluck, :select!
-
- def reverse_order
- @options[:reversed] = true
- self
- end
-
- def readonly
- @options[:readonly] = true
- self
- end
-
- def to_a
- load
- @records
- end
-
- def as_json(options = nil) #:nodoc:
- to_a.as_json(options)
- end
-
- # Returns size of the results (not size of the stored collection)
- def size
- loaded? ? @records.length : count
- end
-
- # true if there are no records
- def empty?
- return @records.empty? if loaded?
-
- c = count
- c.respond_to?(:zero?) ? c.zero? : c.empty?
- end
-
- # true if there are any records
- def any?
- if block_given?
- to_a.any? { |*block_args| yield(*block_args) }
- else
- !empty?
- end
- end
-
- # true if there is more than one record
- def many?
- if block_given?
- to_a.many? { |*block_args| yield(*block_args) }
- else
- limit_value ? to_a.many? : size > 1
- end
- end
-
- # find_all_by_
- # find_by_
- # find_first_by_
- # find_last_by_
- def method_missing(method_name, *args)
-
- method = method_name.to_s
-
- if method.end_with? '!'
- method.chop!
- error_on_empty = true
- end
-
- if method.start_with? 'find_all_by_'
- attribs = method.gsub /^find_all_by_/, ''
- elsif method.start_with? 'find_by_'
- attribs = method.gsub /^find_by_/, ''
- limit(1)
- elsif method.start_with? 'find_first_by_'
- limit(1)
- find_first = true
- attribs = method.gsub /^find_first_by_/, ''
- elsif method.start_with? 'find_last_by_'
- limit(1)
- find_last = true
- attribs = method.gsub /^find_last_by_/, ''
- else
- super
- end
-
- attribs = attribs.split '_and_'
- conditions = {}
- attribs.each { |attr| conditions[attr] = args.shift }
-
- where(conditions, *args)
- load
- raise RecordNotFound if error_on_empty && @records.empty?
- return @records.first if limit_value == 1
- @records
- end
-
- # Tries to create a new record with the same scoped attributes
- # defined in the relation. Returns the initialized object if validation fails.
- #
- # Expects arguments in the same format as +Base.create+.
- #
- # ==== Examples
- # users = User.where(name: 'Oscar')
- # users.create # #<User id: 3, name: "oscar", ...>
- #
- # users.create(name: 'fxn')
- # users.create # #<User id: 4, name: "fxn", ...>
- #
- # users.create { |user| user.name = 'tenderlove' }
- # # #<User id: 5, name: "tenderlove", ...>
- #
- # users.create(name: nil) # validation on name
- # # #<User id: nil, name: nil, ...>
- def create(*args, &block)
- @model_class.create(*args, &block)
- end
-
- # Similar to #create, but calls +create!+ on the base class. Raises
- # an exception if a validation error occurs.
- #
- # Expects arguments in the same format as <tt>Base.create!</tt>.
- def create!(*args, &block)
- @model_class.create!(*args, &block)
- end
-
- # Tries to load the first record; if it fails, then <tt>create</tt> is called with the same arguments as this method.
- #
- # Expects arguments in the same format as +Base.create+.
- #
- # ==== Examples
- # # Find the first user named Pen�lope or create a new one.
- # User.where(:first_name => 'Pen�lope').first_or_create
- # # => <User id: 1, first_name: 'Pen�lope', last_name: nil>
- #
- # # Find the first user named Pen�lope or create a new one.
- # # We already have one so the existing record will be returned.
- # User.where(:first_name => 'Pen�lope').first_or_create
- # # => <User id: 1, first_name: 'Pen�lope', last_name: nil>
- #
- # # Find the first user named Scarlett or create a new one with a particular last name.
- # User.where(:first_name => 'Scarlett').first_or_create(:last_name => 'Johansson')
- # # => <User id: 2, first_name: 'Scarlett', last_name: 'Johansson'>
- #
- # # Find the first user named Scarlett or create a new one with a different last name.
- # # We already have one so the existing record will be returned.
- # User.where(:first_name => 'Scarlett').first_or_create do |user|
- # user.last_name = "O'Hara"
- # end
- # # => <User id: 2, first_name: 'Scarlett', last_name: 'Johansson'>
- def first_or_create(attributes={}, &block)
- result = first
- unless result
- attributes = @options[:hash].merge(attributes) if @options[:hash]
- result = create(attributes, &block)
- end
- result
- end
-
- # Like <tt>first_or_create</tt> but calls <tt>create!</tt> so an exception is raised if the created record is invalid.
- #
- # Expects arguments in the same format as <tt>Base.create!</tt>.
- def first_or_create!(attributes={}, &block)
- result = first
- unless result
- attributes = @options[:hash].merge(attributes) if @options[:hash]
- result = create!(attributes, &block)
- end
- result
- end
-
- # Like <tt>first_or_create</tt> but calls <tt>new</tt> instead of <tt>create</tt>.
- #
- # Expects arguments in the same format as <tt>Base.new</tt>.
- def first_or_initialize(attributes={}, &block)
- result = first
- unless result
- attributes = @options[:hash].merge(attributes) if @options[:hash]
- result = @model_class.new(attributes, &block)
- end
- result
- end
-
- # Destroys the records matching +conditions+ by instantiating each
- # record and calling its +destroy+ method. Each object's callbacks are
- # executed (including <tt>:dependent</tt> association options and
- # +before_destroy+/+after_destroy+ Observer methods). Returns the
- # collection of objects that were destroyed; each will be frozen, to
- # reflect that no changes should be made (since they can't be
- # persisted).
- #
- # Note: Instantiation, callback execution, and deletion of each
- # record can be time consuming when you're removing many records at
- # once. It generates at least one SQL +DELETE+ query per record (or
- # possibly more, to enforce your callbacks). If you want to delete many
- # rows quickly, without concern for their associations or callbacks, use
- # +delete_all+ instead.
- #
- # ==== Parameters
- #
- # * +conditions+ - A string, array, or hash that specifies which records
- # to destroy. If omitted, all records are destroyed. See the
- # Conditions section in the introduction to ActiveRecord::Base for
- # more information.
- #
- # ==== Examples
- #
- # Person.destroy_all("last_login < '2004-04-04'")
- # Person.destroy_all(status: "inactive")
- # Person.where(:age => 0..18).destroy_all
- def destroy_all(conditions=nil)
- if conditions
- where(conditions).destroy_all
- else
- to_a.each {|object| object.destroy}
- @records
- end
- end
-
- # Destroy an object (or multiple objects) that has the given id. The object is instantiated first,
- # therefore all callbacks and filters are fired off before the object is deleted. This method is
- # less efficient than ActiveRecord#delete but allows cleanup methods and other actions to be run.
- #
- # This essentially finds the object (or multiple objects) with the given id, creates a new object
- # from the attributes, and then calls destroy on it.
- #
- # ==== Parameters
- #
- # * +id+ - Can be either an Integer or an Array of Integers.
- #
- # ==== Examples
- #
- # # Destroy a single object
- # Foo.destroy(1)
- #
- # # Destroy multiple objects
- # foos = [1,2,3]
- # Foo.destroy(foos)
- def destroy(id)
- if id.is_a?(Array)
- id.map {|one_id| destroy(one_id)}
- else
- find(id).destroy
- end
- end
-
- # Deletes the records matching +conditions+ without instantiating the records
- # first, and hence not calling the +destroy+ method nor invoking callbacks. This
- # is a single SQL DELETE statement that goes straight to the database, much more
- # efficient than +destroy_all+. Be careful with relations though, in particular
- # <tt>:dependent</tt> rules defined on associations are not honored. Returns the
- # number of rows affected.
- #
- # Post.delete_all("person_id = 5 AND (category = 'Something' OR category = 'Else')")
- # Post.delete_all(["person_id = ? AND (category = ? OR category = ?)", 5, 'Something', 'Else'])
- # Post.where(:person_id => 5).where(:category => ['Something', 'Else']).delete_all
- #
- # Both calls delete the affected posts all at once with a single DELETE statement.
- # If you need to destroy dependent associations or call your <tt>before_*</tt> or
- # +after_destroy+ callbacks, use the +destroy_all+ method instead.
- #
- # If a limit scope is supplied, +delete_all+ raises an ActiveRecord error:
- #
- # Post.limit(100).delete_all
- # # => ActiveRecord::ActiveRecordError: delete_all doesn't support limit scope
- def delete_all(conditions=nil)
- raise ActiveRecordError.new("delete_all doesn't support limit scope") if self.limit_value
-
- if conditions
- where(conditions).delete_all
- else
- pluck :uuid
- response = load
- response.each {|entity| entity.delete} # todo: can this be optimized into one call?
- response.size
- end
- end
-
- # Deletes the row with a primary key matching the +id+ argument, using a
- # SQL +DELETE+ statement, and returns the number of rows deleted. Active
- # Record objects are not instantiated, so the object's callbacks are not
- # executed, including any <tt>:dependent</tt> association options or
- # Observer methods.
- #
- # You can delete multiple rows at once by passing an Array of <tt>id</tt>s.
- #
- # Note: Although it is often much faster than the alternative,
- # <tt>#destroy</tt>, skipping callbacks might bypass business logic in
- # your application that ensures referential integrity or performs other
- # essential jobs.
- #
- # ==== Examples
- #
- # # Delete a single row
- # Foo.delete(1)
- #
- # # Delete multiple rows
- # Foo.delete([2,3,4])
- def delete(id_or_array)
- if id_or_array.is_a? Array
- id_or_array.each {|id| @model_class.resource[id].delete} # todo: can this be optimized into one call?
- else
- @model_class.resource[id_or_array].delete
- end
- end
-
- # Updates all records with details given if they match a set of conditions supplied, limits and order can
- # also be supplied. This method sends a single update straight to the database. It does not instantiate
- # the involved models and it does not trigger Active Record callbacks or validations.
- #
- # ==== Parameters
- #
- # * +updates+ - hash of attribute updates
- #
- # ==== Examples
- #
- # # Update all customers with the given attributes
- # Customer.update_all wants_email: true
- #
- # # Update all books with 'Rails' in their title
- # Book.where('title LIKE ?', '%Rails%').update_all(author: 'David')
- #
- # # Update all books that match conditions, but limit it to 5 ordered by date
- # Book.where('title LIKE ?', '%Rails%').order(:created).limit(5).update_all(:author => 'David')
- def update_all(updates)
- raise ArgumentError, "Empty list of attributes to change" if updates.blank?
- raise ArgumentError, "updates must be a Hash" unless updates.is_a? Hash
- run_update(updates)
- end
-
- # Looping through a collection of records from the database
- # (using the +all+ method, for example) is very inefficient
- # since it will try to instantiate all the objects at once.
- #
- # In that case, batch processing methods allow you to work
- # with the records in batches, thereby greatly reducing memory consumption.
- #
- # The #find_each method uses #find_in_batches with a batch size of 1000 (or as
- # specified by the +:batch_size+ option).
- #
- # Person.all.find_each do |person|
- # person.do_awesome_stuff
- # end
- #
- # Person.where("age > 21").find_each do |person|
- # person.party_all_night!
- # end
- #
- # You can also pass the +:start+ option to specify
- # an offset to control the starting point.
- def find_each(options = {})
- find_in_batches(options) do |records|
- records.each { |record| yield record }
- end
- end
-
- # Yields each batch of records that was found by the find +options+ as
- # an array. The size of each batch is set by the +:batch_size+
- # option; the default is 1000.
- #
- # You can control the starting point for the batch processing by
- # supplying the +:start+ option. This is especially useful if you
- # want multiple workers dealing with the same processing queue. You can
- # make worker 1 handle all the records between id 0 and 10,000 and
- # worker 2 handle from 10,000 and beyond (by setting the +:start+
- # option on that worker).
- #
- # It's not possible to set the order. That is automatically set to
- # ascending on the primary key ("id ASC") to make the batch ordering
- # work. This also mean that this method only works with integer-based
- # primary keys. You can't set the limit either, that's used to control
- # the batch sizes.
- #
- # Person.where("age > 21").find_in_batches do |group|
- # sleep(50) # Make sure it doesn't get too crowded in there!
- # group.each { |person| person.party_all_night! }
- # end
- #
- # # Let's process the next 2000 records
- # Person.all.find_in_batches(start: 2000, batch_size: 2000) do |group|
- # group.each { |person| person.party_all_night! }
- # end
- def find_in_batches(options={})
- options.assert_valid_keys(:start, :batch_size)
-
- raise "Not yet implemented" # todo
-
- start = options.delete(:start) || 0
- batch_size = options.delete(:batch_size) || 1000
-
- while records.any?
- records_size = records.size
- primary_key_offset = records.last.id
-
- yield records
-
- break if records_size < batch_size
-
- if primary_key_offset
- records = relation.where(table[primary_key].gt(primary_key_offset)).to_a
- else
- raise "Primary key not included in the custom select clause"
- end
- end
- end
-
- # Updates an object (or multiple objects) and saves it to the database, if validations pass.
- # The resulting object is returned whether the object was saved successfully to the database or not.
- #
- # ==== Parameters
- #
- # * +id+ - This should be the id or an array of ids to be updated.
- # * +attributes+ - This should be a hash of attributes or an array of hashes.
- #
- # ==== Examples
- #
- # # Updates one record
- # Person.update(15, user_name: 'Samuel', group: 'expert')
- #
- # # Updates multiple records
- # people = { 1 => { "first_name" => "David" }, 2 => { "first_name" => "Jeremy" } }
- # Person.update(people.keys, people.values)
- def update(id, attributes)
- if id.is_a?(Array)
- id.map.with_index { |one_id, idx| update(one_id, attributes[idx]) }
- else
- object = find(id)
- object.update_attributes(attributes)
- object
- end
- end
-
- ## todo: scoping
- ## Scope all queries to the current scope.
- ##
- ## Comment.where(:post_id => 1).scoping do
- ## Comment.first # SELECT * FROM comments WHERE post_id = 1
- ## end
- ##
- ## Please check unscoped if you want to remove all previous scopes (including
- ## the default_scope) during the execution of a block.
- #def scoping
- # previous, @model_class.current_scope = @model_class.current_scope, self
- # yield
- #ensure
- # klass.current_scope = previous
- #end
-
-
- # #where accepts conditions in one of several formats.
- #
- # === string
- #
- # A single string, without additional arguments, is used in the where clause of the query.
- #
- # Client.where("orders_count = '2'")
- # # SELECT * where orders_count = '2';
- #
- # Note that building your own string from user input may expose your application
- # to injection attacks if not done properly. As an alternative, it is recommended
- # to use one of the following methods.
- #
- # === array
- #
- # If an array is passed, then the first element of the array is treated as a template, and
- # the remaining elements are inserted into the template to generate the condition.
- # Active Record takes care of building the query to avoid injection attacks, and will
- # convert from the ruby type to the database type where needed. Elements are inserted
- # into the string in the order in which they appear.
- #
- # User.where(["name = ? and email = ?", "Joe", "joe@example.com"])
- # # SELECT * WHERE name = 'Joe' AND email = 'joe@example.com';
- #
- # Alternatively, you can use named placeholders in the template, and pass a hash as the
- # second element of the array. The names in the template are replaced with the corresponding
- # values from the hash.
- #
- # User.where(["name = :name and email = :email", { name: "Joe", email: "joe@example.com" }])
- # # SELECT * WHERE name = 'Joe' AND email = 'joe@example.com';
- #
- # This can make for more readable code in complex queries.
- #
- # Lastly, you can use sprintf-style % escapes in the template. This works slightly differently
- # than the previous methods; you are responsible for ensuring that the values in the template
- # are properly quoted. The values are passed to the connector for quoting, but the caller
- # is responsible for ensuring they are enclosed in quotes in the resulting SQL. After quoting,
- # the values are inserted using the same escapes as the Ruby core method <tt>Kernel::sprintf</tt>.
- #
- # User.where(["name = '%s' and email = '%s'", "Joe", "joe@example.com"])
- # # SELECT * WHERE name = 'Joe' AND email = 'joe@example.com';
- #
- # If #where is called with multiple arguments, these are treated as if they were passed as
- # the elements of a single array.
- #
- # User.where("name = :name and email = :email", { name: "Joe", email: "joe@example.com" })
- # # SELECT * WHERE name = 'Joe' AND email = 'joe@example.com';
- #
- # When using strings to specify conditions, you can use any operator available from
- # the database. While this provides the most flexibility, you can also unintentionally introduce
- # dependencies on the underlying database. If your code is intended for general consumption,
- # test with multiple database backends.
- #
- # === hash
- #
- # #where will also accept a hash condition, in which the keys are fields and the values
- # are values to be searched for.
- #
- # Fields can be symbols or strings. Values can be single values, arrays, or ranges.
- #
- # User.where({ name: "Joe", email: "joe@example.com" })
- # # SELECT * WHERE name = 'Joe' AND email = 'joe@example.com'
- #
- # User.where({ name: ["Alice", "Bob"]})
- # # SELECT * WHERE name IN ('Alice', 'Bob')
- #
- # User.where({ created_at: (Time.now.midnight - 1.day)..Time.now.midnight })
- # # SELECT * WHERE (created_at BETWEEN '2012-06-09 07:00:00.000000' AND '2012-06-10 07:00:00.000000')
- #
- # In the case of a belongs_to relationship, an association key can be used
- # to specify the model if an ActiveRecord object is used as the value.
- #
- # author = Author.find(1)
- #
- # # The following queries will be equivalent:
- # Post.where(:author => author)
- # Post.where(:author_id => author)
- #
- # === empty condition
- #
- # If the condition returns true for blank?, then where is a no-op and returns the current relation.
- #
- def where(opts, *rest)
- return self if opts.blank?
- case opts
- when Hash
- @options[:hash] = opts # keep around for first_or_create stuff...
- opts.each do |k,v|
- # todo: can we support IN and BETWEEN syntax as documented above?
- v = "'#{v}'" if v.is_a? String
- query_conditions << "#{k} = #{v}"
- end
- when String
- query_conditions << opts
- when Array
- query = opts.shift.gsub '?', "'%s'"
- query = query % opts
- query_conditions << query
- end
- self
- end
-
-
- protected
-
-
- def limit_value
- @options[:limit]
- end
-
- def query_conditions
- @options[:conditions] ||= []
- end
-
- def loaded?
- !!@records
- end
-
- def reversed?
- !!@options[:reversed]
- end
-
- def find_one(id_or_name=nil)
- begin
- entity = @model_class.resource[id_or_name].query(nil, limit: 1).entity
- @model_class.model_name.constantize.new(entity.data) if entity
- rescue RestClient::ResourceNotFound
- nil
- end
- end
-
- def find_one!(id_or_name=nil)
- find_one(id_or_name) or raise RecordNotFound
- end
-
- # Server-side options:
- # Xql string Query in the query language
- # type string Entity type to return
- # Xreversed string Return results in reverse order
- # connection string Connection type (e.g., "likes")
- # start string First entity's UUID to return
- # cursor string Encoded representation of the query position for paging
- # Xlimit integer Number of results to return
- # permission string Permission type
- # Xfilter string Condition on which to filter
- def query_options
- # todo: support more options?
- options = {}
- options.merge!({:limit => limit_value.to_json}) if limit_value
- options.merge!({:skip => @options[:skip].to_json}) if @options[:skip]
- options.merge!({:reversed => reversed?.to_json}) if reversed?
- options.merge!({:order => @options[:order]}) if @options[:order]
- options.merge!({:cursor => @options[:cursor]}) if @options[:cursor]
- options
- end
-
- def create_query
- select = @options[:select] || '*'
- where = ('where ' + query_conditions.join(' and ')) unless query_conditions.blank?
- "select #{select} #{where}"
- end
-
- def run_query
- @model_class.resource.query(create_query, query_options)
- end
-
- def run_update(attributes)
- @model_class.resource.update_query(attributes, create_query, query_options)
- end
-
- def load
- return if loaded?
- begin
- @response = run_query
- if (!@options[:select] or @options[:select] == '*')
- @records = @response.entities.collect {|r| @model_class.model_name.constantize.new(r.data)}
- else # handle list
- selects = @options[:select].split ','
- @records = @response.entities.collect do |r|
- data = {}
- (0..selects.size).each do |i|
- data[selects[i]] = r[i]
- end
- @model_class.model_name.constantize.new(data)
- end
- end
- rescue RestClient::ResourceNotFound
- @records = []
- end
- end
- end
- end
-end
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ruby-on-rails/lib/usergrid_ironhorse/user_context.rb
----------------------------------------------------------------------
diff --git a/sdks/ruby-on-rails/lib/usergrid_ironhorse/user_context.rb b/sdks/ruby-on-rails/lib/usergrid_ironhorse/user_context.rb
deleted file mode 100644
index b7a0804..0000000
--- a/sdks/ruby-on-rails/lib/usergrid_ironhorse/user_context.rb
+++ /dev/null
@@ -1,96 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-
-module Usergrid
- module Ironhorse
- module UserContext
-
- # returns user if logged in, nil otherwise
- # if session is passed, stores user_id and auth_token in the session
- # and sets User as current_user
- def authenticate(username, password, session=nil)
- application = Usergrid::Application.new Usergrid::Ironhorse::Base.settings[:application_url]
- begin
- application.login username, password
- user = new application.current_user.data
- if session
- session[:usergrid_user_id] = user.id
- session[:usergrid_auth_token] = user.current_auth_token
- set_thread_context(session)
- Thread.current[:usergrid_current_user] = user
- end
- user
- rescue
- Rails.logger.info $!
- raise $!
- end
- end
-
- # clears auth from session and thread
- def clear_authentication(session)
- session[:usergrid_user_id] = nil
- session[:usergrid_auth_token] = nil
- clear_thread_context(session)
- end
-
- # allows admin actions to be done in a block
- def as_admin(&block)
- save_auth_token = Thread.current[:usergrid_auth_token]
- begin
- unless Base.settings[:auth_token]
- resource = RestClient::Resource.new Base.settings[:application_url]
- response = resource['token'].post grant_type: 'client_credentials', client_id: Base.settings[:client_id], client_secret: Base.settings[:client_secret]
- Base.settings[:auth_token] = MultiJson.load(response)['access_token']
- end
- Thread.current[:usergrid_auth_token] = Base.settings[:auth_token]
- yield block
- ensure
- Thread.current[:usergrid_auth_token] = save_auth_token
- end
- end
-
- # sets auth for current thread
- def set_thread_context(session)
- Thread.current[:usergrid_user_id] = session[:usergrid_user_id]
- Thread.current[:usergrid_auth_token] = session[:usergrid_auth_token]
- Thread.current[:usergrid_current_user] = nil
- end
- alias_method :set_context, :set_thread_context
-
- # clears auth from current thread
- def clear_thread_context
- Thread.current[:usergrid_user_id] = nil
- Thread.current[:usergrid_auth_token] = nil
- Thread.current[:usergrid_current_user] = nil
- end
- alias_method :clear_context, :clear_thread_context
-
- # returns the auth token for the current thread
- def current_auth_token
- Thread.current[:usergrid_auth_token]
- end
-
- # does a find and return
- def current_user
- unless Thread.current[:usergrid_current_user]
- Thread.current[:usergrid_current_user] = find(Thread.current[:usergrid_user_id]) if Thread.current[:usergrid_user_id]
- end
- Thread.current[:usergrid_current_user]
- end
-
- end
- end
-end
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ruby-on-rails/lib/usergrid_ironhorse/version.rb
----------------------------------------------------------------------
diff --git a/sdks/ruby-on-rails/lib/usergrid_ironhorse/version.rb b/sdks/ruby-on-rails/lib/usergrid_ironhorse/version.rb
deleted file mode 100644
index 990b730..0000000
--- a/sdks/ruby-on-rails/lib/usergrid_ironhorse/version.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-
-module Usergrid
- module Ironhorse
- VERSION = '0.1.2'
- end
-end
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ruby-on-rails/spec/spec_helper.rb
----------------------------------------------------------------------
diff --git a/sdks/ruby-on-rails/spec/spec_helper.rb b/sdks/ruby-on-rails/spec/spec_helper.rb
deleted file mode 100644
index 2cee2c2..0000000
--- a/sdks/ruby-on-rails/spec/spec_helper.rb
+++ /dev/null
@@ -1,93 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-require 'simplecov'
-require 'test/unit'
-require 'rspec'
-require 'yaml'
-require 'securerandom'
-require_relative '../lib/usergrid_ironhorse'
-
-ENV["RAILS_ENV"] ||= 'test'
-Dir[Pathname.new(File.dirname(__FILE__)).join("support/**/*.rb")].each { |f| require f }
-
-RSpec.configure do |config|
- config.mock_with :rspec
- config.expect_with :stdlib
- config.expect_with :rspec
-end
-
-LOG = Logger.new(STDOUT)
-RestClient.log=LOG
-
-SimpleCov.at_exit do
- SimpleCov.result.format!
- #index = File.join(SimpleCov.coverage_path, 'index.html')
- #`open #{index}` if File.exists?(index)
-end
-SimpleCov.start
-
-
-SPEC_SETTINGS = YAML::load_file(File.join File.dirname(__FILE__), 'spec_settings.yaml')
-Usergrid::Ironhorse::Base.configure! nil, nil
-
-def login_management
- management = Usergrid::Resource.new(SPEC_SETTINGS[:api_url]).management
- management.login SPEC_SETTINGS[:organization][:username], SPEC_SETTINGS[:organization][:password]
- management
-end
-
-# ensure we are correctly setup (management login & organization)
-management = login_management
-
-begin
- management.create_organization(SPEC_SETTINGS[:organization][:name],
- SPEC_SETTINGS[:organization][:username],
- SPEC_SETTINGS[:organization][:username],
- "#{SPEC_SETTINGS[:organization][:username]}@email.com",
- SPEC_SETTINGS[:organization][:password])
- LOG.info "created organization with user #{SPEC_SETTINGS[:organization][:username]}@email.com"
-rescue
- if MultiJson.load($!.response)['error'] == "duplicate_unique_property_exists"
- LOG.debug "test organization exists"
- else
- raise $!
- end
-end
-
-def create_random_application
- management = login_management
- organization = management.organization SPEC_SETTINGS[:organization][:name]
- app_name = "_test_app_#{SecureRandom.hex}"
- organization.create_application app_name
- management.application SPEC_SETTINGS[:organization][:name], app_name
-end
-
-def delete_application(application)
- management = login_management
- application.auth_token = management.auth_token
- application.delete rescue nil # not implemented on server yet
-end
-
-def create_random_user(application, login=false)
- random = SecureRandom.hex
- user_hash = {username: "username_#{random}",
- password: random,
- email: "#{random}@email.com",
- name: "#{random} name" }
- entity = application['users'].post(user_hash).entity
- application.login user_hash[:username], user_hash[:password] if login
- entity
-end
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ruby-on-rails/spec/spec_settings.yaml
----------------------------------------------------------------------
diff --git a/sdks/ruby-on-rails/spec/spec_settings.yaml b/sdks/ruby-on-rails/spec/spec_settings.yaml
deleted file mode 100644
index 815ba43..0000000
--- a/sdks/ruby-on-rails/spec/spec_settings.yaml
+++ /dev/null
@@ -1,20 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-:api_url: http://localhost:8080
-:organization:
- :name: test-organization
- :username: test
- :password: test
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ruby-on-rails/spec/support/active_model_lint.rb
----------------------------------------------------------------------
diff --git a/sdks/ruby-on-rails/spec/support/active_model_lint.rb b/sdks/ruby-on-rails/spec/support/active_model_lint.rb
deleted file mode 100644
index 267be05..0000000
--- a/sdks/ruby-on-rails/spec/support/active_model_lint.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-
-# spec/support/active_model_lint.rb
-# adapted from rspec-rails: http://github.com/rspec/rspec-rails/blob/master/spec/rspec/rails/mocks/mock_model_spec.rb
-
-shared_examples_for "ActiveModel" do
- include ActiveModel::Lint::Tests
-
- # to_s is to support ruby-1.9
- ActiveModel::Lint::Tests.public_instance_methods.map{|m| m.to_s}.grep(/^test/).each do |m|
- example m.sub('_',' ') do
- send m
- end
- end
-
- def model
- subject
- end
-end
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ruby-on-rails/spec/usergrid_ironhorse/base_spec.rb
----------------------------------------------------------------------
diff --git a/sdks/ruby-on-rails/spec/usergrid_ironhorse/base_spec.rb b/sdks/ruby-on-rails/spec/usergrid_ironhorse/base_spec.rb
deleted file mode 100644
index 4aa1da6..0000000
--- a/sdks/ruby-on-rails/spec/usergrid_ironhorse/base_spec.rb
+++ /dev/null
@@ -1,452 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-
-describe Usergrid::Ironhorse::Base do
-
- it_should_behave_like 'ActiveModel'
-
- class User < Usergrid::Ironhorse::Base
- extend Usergrid::Ironhorse::UserContext
- end
-
- before :all do
- @application = create_random_application
- Foo.configure!(@application.url, @application.auth_token)
- @user = create_random_user @application, true
- @foo = (@application.create_entity 'foos', name: 'foo42', answer: 42).entity
- end
-
- after :all do
- @foo.delete
- @user.delete
- #delete_application @application # not supported on server yet
- end
-
- class Foo < Usergrid::Ironhorse::Base; end
- Foo.validates :name, :presence => true
-
- class Bar < Usergrid::Ironhorse::Base; end
-
- describe 'subclasses should be able to' do
-
- it "do tasks as admin when requested" do
- organization = @foo.management.organization SPEC_SETTINGS[:organization][:name]
- organization.logout
-
- # should fail under current user's context
- expect {
- organization.create_application "_test_app_#{SecureRandom.hex}"
- }.to raise_error RestClient::Unauthorized
-
- # should succeed under admin context
- User.as_admin do
- organization.create_application "_test_app_#{SecureRandom.hex}"
- end
- end
-
- it "do tasks as admin if require_login is false" do
- organization = @foo.management.organization SPEC_SETTINGS[:organization][:name]
- organization.logout
-
- # should fail under current user's context
- expect {
- organization.create_application "_test_app_#{SecureRandom.hex}"
- }.to raise_error RestClient::Unauthorized
-
- # should succeed once require_login is false
- User.settings[:require_login] = false
- organization.create_application "_test_app_#{SecureRandom.hex}"
- User.settings[:require_login] = true
- end
-
- it 'be created and destroyed' do
- foo = Foo.create name: 'foo man'
- foo.persisted?.should be_true
- foo.name.should eq 'foo man'
- foo = Foo.find_by_name 'foo man'
- foo.should_not be_nil
- foo.destroy.should be_true
- foo.persisted?.should be_false
- foo = Foo.find_by_name 'foo man'
- foo.should be_nil
- end
-
- it 'be changed and saved' do
- foo = Foo.find_by_name @foo.name
- foo.answer.should eq @foo.answer
- foo.number = 43
- foo.changed?.should be_true
- foo.number.should == 43
- foo.save!
- foo = Foo.find_by_name @foo.name
- foo.number.should == 43
- end
-
- it 'be reloaded' do
- foo = Foo.find @foo.uuid
- foo.answer = 44
- foo.changed?.should be_true
- foo.answer.should == 44
- foo.reload
- foo.answer.should == 42
- end
-
- it 'be found using find_by_name' do
- foo = Foo.find_by_name @foo.name
- foo.uuid.should_not be_nil
- foo.name.should eq @foo.name
- foo.should be_a Foo
- foo.persisted?.should be_true
- end
-
- it 'be found using find_by_name!' do
- foo = Foo.find_by_name! @foo.name
- foo.uuid.should_not be_nil
- foo.name.should eq @foo.name
- foo.should be_a Foo
- foo.persisted?.should be_true
- end
-
- it 'throw a RecordNotFound when find_by_name! misses' do
- expect { Foo.find_by_name! 'name3' }.to raise_error(ActiveRecord::RecordNotFound)
- end
-
- it 'add a validation' do
- foo = Foo.new
- foo.valid?.should be_false
- foo.name = 'joe'
- foo.valid?.should be_true
- end
-
- it 'fail to save an invalid record and save the errors' do
- foo = Foo.new
- foo.save.should be_false
- foo.persisted?.should be_false
- foo.errors.count.should == 1
- foo.errors.get(:name).first.should eq "can't be blank"
- end
-
- it 'fail to create an invalid record and save the errors' do
- foo = Foo.create
- foo.persisted?.should be_false
- foo.errors.count.should == 1
- foo.errors.get(:name).first.should eq "can't be blank"
- end
-
- it 'fail to save! an invalid record' do
- expect { Foo.new.save! }.to raise_error(ActiveRecord::RecordNotSaved)
- end
-
- it 'fail to create! an invalid record' do
- expect { Foo.create! }.to raise_error(ActiveRecord::RecordNotSaved)
- end
-
- it 'retrieve first' do
- foo2 = Foo.create! name: 'foo2'
- foo = Foo.first
- foo.uuid.should eq @foo.uuid
- foo2.destroy
- end
-
- it 'retrieve last' do
- foo2 = Foo.create! name: 'foo2'
- foo = Foo.last
- foo.uuid.should eq foo2.uuid
- foo2.destroy
- end
-
- it 'take multiple' do
- foo2 = Foo.create! name: 'foo2'
- foos = Foo.take(2)
- foos.size.should == 2
- foos.first.uuid.should_not be_nil
- foo2.destroy
- end
-
- it 'find multiple by id' do
- foo2 = Foo.create name: 'foo2'
- foos = Foo.find @foo.uuid, foo2.uuid
- foos.size.should == 2
- foos.first.uuid.should eq @foo.uuid
- foos.last.uuid.should eq foo2.uuid
- foo2.destroy
- end
-
- it 'find multiple by name' do
- foo2 = Foo.create! name: 'foo2'
- foos = Foo.find @foo.name, foo2.name
- foos.size.should == 2
- foos.first.uuid.should eq @foo.uuid
- foos.last.uuid.should eq foo2.uuid
- foo2.destroy
- end
-
- it 'check exists?(string)' do
- Foo.exists?(@foo.name).should be_true
- end
-
- it 'check not exists?(string)' do
- Foo.exists?('asdfasdf').should be_false
- end
-
- it 'check exists?(Array)' do
- Foo.exists?(['name = ?', @foo.name]).should be_true
- end
-
- it 'check not exists?(Array)' do
- Foo.exists?(['name = ?', 'asdfasdf']).should be_false
- end
-
- it 'check exists?(Hash)' do
- Foo.exists?(name: @foo.name).should be_true
- end
-
- it 'check not exists?(Hash)' do
- Foo.exists?(name: 'asfasdf').should be_false
- end
-
- it 'check exists?(nil)' do
- Foo.exists?.should be_true
- end
-
- it 'check not exists?(nil)' do
- Bar.exists?.should be_false
- end
-
- it 'perform first_or_create where found' do
- foo = Foo.where(name: @foo.name).first_or_create
- foo.uuid.should eq @foo.uuid
- end
-
- it 'perform first_or_create where not found' do
- foo = Foo.where(name: 'foo2').first_or_create(number: 42)
- foo.name.should eq 'foo2'
- foo.number.should == 42
- foo.destroy
- end
-
- it 'perform first_or_create! where found' do
- foo = Foo.where(name: @foo.name).first_or_create!
- foo.uuid.should eq @foo.uuid
- end
-
- it 'perform first_or_create! where not found' do
- expect { Foo.where(nuumber: 'foo2').first_or_create! }.to raise_error(ActiveRecord::RecordNotSaved)
- end
-
- it 'perform first_or_initialize where found' do
- foo = Foo.where(name: @foo.name).first_or_initialize(xxx: 42)
- foo.uuid.should eq @foo.uuid
- foo.xxx.should be_nil
- end
-
- it 'perform first_or_initialize where not found' do
- foo = Foo.where(name: 'foo2').first_or_initialize(number: 42)
- foo.name.should eq 'foo2'
- foo.number.should == 42
- foo.persisted?.should be_false
- end
-
- it "should destroy by id" do
- foo = Foo.create! name: 'foo'
- Foo.destroy(foo.id)
- foo = Foo.find_by_name 'foo'
- foo.should be_nil
- end
-
- it "should destroy by ids" do
- foo = Foo.create! name: 'foo'
- foo2 = Foo.create! name: 'foo2'
- Foo.destroy([foo.id, foo2.id])
- Foo.find_by_name('foo').should be_nil
- Foo.find_by_name('foo2').should be_nil
- end
-
- it "should destroy_all" do
- foo = Foo.create! name: 'foo', number: 42
- foo2 = Foo.create! name: 'foo2', number: 42
- Foo.destroy_all(number: 42)
- Foo.find_by_name('foo').should be_nil
- Foo.find_by_name('foo2').should be_nil
- end
-
- it "should delete by id" do
- foo = Foo.create! name: 'foo'
- Foo.delete(foo.id)
- foo = Foo.find_by_name 'foo'
- foo.should be_nil
- end
-
- it "should delete by ids" do
- foo = Foo.create! name: 'foo'
- foo2 = Foo.create! name: 'foo2'
- Foo.delete([foo.id, foo2.id])
- Foo.find_by_name('foo').should be_nil
- Foo.find_by_name('foo2').should be_nil
- end
-
- it "should delete_all" do
- foo = Foo.create! name: 'foo', number: 42
- foo2 = Foo.create! name: 'foo2', number: 42
- Foo.delete_all(number: 42)
- Foo.find_by_name('foo').should be_nil
- Foo.find_by_name('foo2').should be_nil
- end
-
- it "should update one" do
- foo = Foo.create! name: 'foo', number: 42
- Foo.update foo.uuid, { number: 43 }
- foo.reload.number.should == 43
- foo.destroy
- end
-
- it "should update multiple" do
- foo = Foo.create! name: 'foo', number: 42
- foo2 = Foo.create! name: 'foo2', number: 42
- updates = { foo.uuid => {number: 43}, foo2.uuid => {number: 44}}
- Foo.update(updates.keys, updates.values)
- foo.reload.number.should == 43
- foo2.reload.number.should == 44
- foo.destroy
- foo2.destroy
- end
-
- it "should update_all" do
- foo = Foo.create! name: 'foo', number: 43
- Foo.where(number: 43).update_all({number: 44})
- Foo.find_by_number(44).should_not be_nil
- foo.destroy
- end
-
- it "should fail on unaccessible mass assignment" do
- Foo.attr_accessible :name
- foo = Foo.create! name: 'foo', number: 43
- foo.number.should_not eq 43
- foo.update_attributes number: 44, foo: 'bar'
- foo.number.should_not eq 44
- foo.destroy
- Foo._accessible_attributes = nil
- end
-
- it "should fail on protected mass assignment" do
- Foo.attr_protected :number
- foo = Foo.create! name: 'foo', number: 43
- foo.number.should_not eq 43
- foo.update_attributes number: 44, foo: 'bar'
- foo.number.should_not eq 44
- foo.destroy
- Foo._protected_attributes = nil
- end
-
- it "should be able to page through results" do
- bars = (1..15).collect do |i|
- Bar.create! name: "name_#{i}", value: "value_#{i+1}"
- end
- query = Bar.all
- page = query.to_a # first page
- page.count.should eq 10
- page = query.next_page # second page
- count = 10
- page.each do |bar|
- bars[count].name.should eq bar.name
- count += 1
- end
- count.should eq bars.count
- bars.each {|bar| bar.delete}
- end
-
- it "should iterate past page boundaries" do
- bars = (1..15).collect do |i|
- Bar.create! name: "name_#{i}", value: "value_#{i+1}"
- end
- count = 0
- Bar.all.each do |bar|
- bars[count].name.should eq bar.name
- count += 1
- end
- count.should eq bars.count
- bars.each {|bar| bar.delete}
- end
-
- it "should honor limit" do
- bars = (1..15).collect do |i|
- Bar.create! name: "name_#{i}", value: "value_#{i+1}"
- end
- count = 0
- Bar.limit(13).each do |bar|
- bars[count].name.should eq bar.name
- count += 1
- end
- count.should eq 13
- bars.each {|bar| bar.delete}
- end
-
- it "perform as admin only when requested if require_login is true" do
-
- organization = @foo.management.organization SPEC_SETTINGS[:organization][:name]
-
- creds = nil
- User.as_admin do
- creds = organization.credentials
- end
-
- Usergrid::Ironhorse::Base.settings[:client_id] = creds.data.credentials.client_id
- Usergrid::Ironhorse::Base.settings[:client_secret] = creds.data.credentials.client_secret
- Usergrid::Ironhorse::Base.settings[:auth_token] = nil
- User.clear_thread_context
- organization.logout
- User.settings[:require_login] = true
-
- # should fail (login is required)
- expect {
- organization.create_application "_test_app_#{SecureRandom.hex}"
- }.to raise_error RestClient::Unauthorized
-
- # should succeed under admin context
- User.as_admin do
- organization.create_application "_test_app_#{SecureRandom.hex}"
- end
-
- Usergrid::Ironhorse::Base.settings[:client_id] = nil
- Usergrid::Ironhorse::Base.settings[:client_secret] = nil
- end
-
- it "perform as admin if require_login is false" do
-
- organization = @foo.management.organization SPEC_SETTINGS[:organization][:name]
- organization.logout
-
- creds = nil
- User.as_admin do
- creds = organization.credentials
- end
-
- Usergrid::Ironhorse::Base.settings[:client_id] = creds.data.credentials.client_id
- Usergrid::Ironhorse::Base.settings[:client_secret] = creds.data.credentials.client_secret
- Usergrid::Ironhorse::Base.settings[:auth_token] = nil
- User.clear_thread_context
- organization.logout
-
- User.settings[:require_login] = false
-
- # should succeed
- organization.create_application "_test_app_#{SecureRandom.hex}"
-
- Usergrid::Ironhorse::Base.settings[:client_id] = nil
- Usergrid::Ironhorse::Base.settings[:client_secret] = nil
- end
- end
-end
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ruby-on-rails/usergrid_ironhorse.gemspec
----------------------------------------------------------------------
diff --git a/sdks/ruby-on-rails/usergrid_ironhorse.gemspec b/sdks/ruby-on-rails/usergrid_ironhorse.gemspec
deleted file mode 100644
index 430c5c1..0000000
--- a/sdks/ruby-on-rails/usergrid_ironhorse.gemspec
+++ /dev/null
@@ -1,44 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# -*- encoding: utf-8 -*-
-lib = File.expand_path('../lib', __FILE__)
-$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
-require 'usergrid_ironhorse/version'
-
-Gem::Specification.new do |gem|
- gem.name = "usergrid_ironhorse"
- gem.version = Usergrid::Ironhorse::VERSION
- gem.authors = ["Scott Ganyo"]
- gem.email = ["scott@ganyo.com"]
- gem.description = %q{Rails ActiveModel gem to access Usergrid / Apigee App Services}
- gem.summary = %q{Usergrid_ironhorse enables simple ActiveModel access to Apigee's App Services
- (aka Usergrid) REST API for Rails developers.}
- gem.homepage = "https://github.com/scottganyo/usergrid_ironhorse"
-
- gem.files = `git ls-files`.split($/)
- gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
- gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
- gem.require_paths = ["lib"]
-
- gem.add_dependency 'usergrid_iron', '0.9.1'
- gem.add_dependency 'activemodel', '~> 3.2'
- gem.add_dependency 'activerecord', '~> 3.2'
- gem.add_dependency 'i18n'
-
- gem.add_development_dependency 'rake'
- gem.add_development_dependency 'rspec'
- gem.add_development_dependency 'simplecov'
-end
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ruby/.gitignore
----------------------------------------------------------------------
diff --git a/sdks/ruby/.gitignore b/sdks/ruby/.gitignore
deleted file mode 100644
index 30b994d..0000000
--- a/sdks/ruby/.gitignore
+++ /dev/null
@@ -1,18 +0,0 @@
-*.gem
-*.rbc
-.bundle
-.config
-.yardoc
-Gemfile.lock
-InstalledFiles
-_yardoc
-coverage
-doc/
-lib/bundler/man
-pkg
-rdoc
-spec/reports
-test/tmp
-test/version_tmp
-tmp
-.idea
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ruby/.rspec
----------------------------------------------------------------------
diff --git a/sdks/ruby/.rspec b/sdks/ruby/.rspec
deleted file mode 100644
index c99d2e7..0000000
--- a/sdks/ruby/.rspec
+++ /dev/null
@@ -1 +0,0 @@
---require spec_helper
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ruby/.rvmrc
----------------------------------------------------------------------
diff --git a/sdks/ruby/.rvmrc b/sdks/ruby/.rvmrc
deleted file mode 100644
index 55148ad..0000000
--- a/sdks/ruby/.rvmrc
+++ /dev/null
@@ -1,2 +0,0 @@
-rvm_gemset_create_on_use_flag=1
-rvm gemset use 'usergrid_iron'
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ruby/Gemfile
----------------------------------------------------------------------
diff --git a/sdks/ruby/Gemfile b/sdks/ruby/Gemfile
deleted file mode 100644
index 9a6d84d..0000000
--- a/sdks/ruby/Gemfile
+++ /dev/null
@@ -1,19 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-source 'https://rubygems.org'
-
-# Specify your gem's dependencies in usergrid_iron.gemspec
-gemspec
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ruby/LICENSE
----------------------------------------------------------------------
diff --git a/sdks/ruby/LICENSE b/sdks/ruby/LICENSE
deleted file mode 100644
index ae1e83e..0000000
--- a/sdks/ruby/LICENSE
+++ /dev/null
@@ -1,14 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ruby/README.md
----------------------------------------------------------------------
diff --git a/sdks/ruby/README.md b/sdks/ruby/README.md
deleted file mode 100644
index 2f6c594..0000000
--- a/sdks/ruby/README.md
+++ /dev/null
@@ -1,268 +0,0 @@
-# Ruby SDK
-
-Usergrid_iron enables simple, low-level Ruby access to Apigee's App Services (aka Usergrid)
-REST API with minimal dependencies.
-
-## Installation
-
-### Project
-Add the gem to your project's Gemfile:
-
- gem 'usergrid_iron'
-
-Then rebuild your bundle:
-
- $ bundle
-
-### Stand-alone script
-Just manually install the gem:
-
- $ gem install usergrid_iron
-
-
-## Usage
-
-### Prerequisite
-You'll want to be at least a little bit familiar with Usergrid / Apigee's App Services before you jump in here - but it easy and it's great! Start here:
-
- App Services docs: <http://apigee.com/docs/usergrid/>
- Open source stack: <https://github.com/apigee/usergrid-stack>
-
-Awesome. Let's go!
-
-### Getting started with the Usergrid_iron SDK is simple!
-
-#### Let's start with the basics.
-For this example, we'll assume you've already set up an organization, application, and user -
-just fill in your own values in the code below.
-
-```ruby
-require 'usergrid_iron'
-
-# fill in your values here!
-usergrid_api = 'http://localhost:8080'
-organization = ''
-application = ''
-username = ''
-password = ''
-
-# create the base application resource
-# (this is a RestClient.resource)
-application = Usergrid::Application.new "#{usergrid_api}/#{organization}/#{application}"
-
-# login (note: not required for sandbox)
-application.login username, password
-
-# create and store a new dog on the server
-# (the "response" is an enhanced RestClient.response)
-response = application.create_dog breed: 'Black Mouth Cur', name: 'Old Yeller'
-
-# the response has returned the entity data
-# response.entity wraps it in an easy-to-use object
-dog = response.entity
-
-# it's persistent now, so it has a unique id
-uuid = dog.uuid
-
-# we can retrieve the dog by UUID using Hash syntax and calling get()
-# (all dogs are stored in the "dogs" collection)
-response = application["dogs"][uuid].get
-same_dog = response.entity
-
-# we could also retrieve the dog by name
-# we could also use path ('/') syntax instead of nested Hash
-# and we can even skip get() - entity() will do it for us
-same_dog = application["dogs/#{dog.name}"].entity
-
-# is it our dog? well, he knows his name!
-# (and we can retrieve its values by dot or Hash)
-puts "My dog's name is: #{same_dog.name} and his breed is #{same_dog['breed']}"
-```
-
-Well that was really easy. More comments than code! :)
-
-#### Let's try something slightly more complex.
-Let's say you've registered for an organization, but you don't have an application yet
-(or want to create a new one to work on). No worries, just fill in your organization and
-superuser credentials below, and follow along!
-(Better yet: If you used the Usergrid launcher and let it initialize your database,
-you shouldn't need to do anything!)
-
-```ruby
- require 'usergrid_iron'
-
- usergrid_api = 'http://localhost:8080'
- org_name = 'test-organization'
- username = 'test'
- password = 'test'
- app_name = 'dog_sitter'
-
- ## first, let's get that setup out of the way... ##
-
- # get a management context & login the superuser
- management = Usergrid::Management.new usergrid_api
- management.login username, password
-
- # get the organization context & create a new application
- organization = management.organization org_name
- new_application = organization.create_application app_name
-
- # create an user for our application
- new_application.create_user username: 'username', password: 'password'
-
- # login to our new application as our new user
- application = organization.application app_name
- application.login 'username', 'password'
-
-
- ## now we can play with the puppies! ##
-
- # we can start with our dog again
- application.create_dog breed: 'Black Mouth Cur', name: 'Old Yeller'
-
- # but this time let's create several more dogs all at once
- application.create_dogs [
- { breed: 'Catalan sheepdog', name: 'Einstein' },
- { breed: 'Cocker Spaniel', name: 'Lady' },
- { breed: 'Mixed', name: 'Benji' }]
-
- # retrieve all the dogs (well, the first 'page' anyway) and tell them hi!
- # note: we're calling collection() instead of entity() because we have several
- dogs = application['dogs'].collection
-
- # you can iterate a collection just like an array
- dogs.each do |dog|
- puts "Hello, #{dog.name}!"
- end
-
- # Let's get Benji ("Benji, come!"), but this time we'll retrieve by query
- response = dogs.query "select * where name = 'Benji'"
-
- # we could call "response.collection.first"
- # but there's a shortcut: entity() will also return the first
- benji = response.entity
-
- # modify Benji's attributes & save to the server
- benji.location = 'home' # use attribute access
- benji['breed'] = 'American Cocker Spaniel' # or access attributes like a Hash
- benji.save
-
- # now query for the dogs that are home (should just be Benji)
- dogs = application['dogs'].query("select * where location = 'home'").collection
- if dogs.size == 1 && dogs.first.location == 'home'
- puts "Benji's home!"
- end
-
-```
-
-Whew. That's enough for now. But looking for a specific feature? Check out the [rspecs](http://github.com/scottganyo/usergrid_iron/tree/master/spec/usergrid/core),
-there are examples of nearly everything!
-
-
-## Contributing
-
-We welcome your enhancements!
-
-1. Fork it
-2. Create your feature branch (`git checkout -b my-new-feature`)
-3. Write some broken rspecs.
-4. Fix the rspecs with your new code.
-3. Commit your changes (`git commit -am 'Added some feature'`)
-4. Push your changes to the upstream branch (`git push origin my-new-feature`)
-5. Create new Pull Request
-
-We've got 100% rspec coverage and we're looking to keep it that way!
-In order to run the tests, check out the Usergrid open source project
-(https://github.com/apigee/usergrid-stack), build, and launch it locally.
-
-(Note: If you change your local Usergrid setting from the default, be sure to update
-usergrid_iron/spec/spec_settings.yaml to match.)
-
-
-## Release notes
-
-### 0.9.2
-* New features
- 1. delete_query (batch delete by query)
-
-### 0.9.1
-* New features
- 1. may now login using credentials: application.login_credentials() or organization.login_credentials()
-
-### 0.9.0
-* Backend changes
- 1. login function now uses POST instead of GET
-
-### 0.0.9
-* Backend changes
- 1. made Resource::response accessor public to support ugc
-
-### 0.0.8
-* Bug fixes
- 1. better handling of paging
-
-### 0.0.7
-* Bug fixes
- 1. multiple_entities? should check data['list']
-
-### 0.0.6
-* New features
- 1. iterators can now optionally cross page boundaries, eg. `collection.follow_cursor.each`
- 2. added facebook_login(fb_access_token) method to application
-
-### 0.0.5
-* New features
- 1. added create_* method for application
-* Backend changes
- 1. eliminated serialization of reserved attributes
-* Incompatible changes
- 1. deprecated `Application::create_user username, password, ...`, use `create_user username: 'user', password: 'password'`
-
-### 0.0.4
-* New features
- 1. empty? check for collection
- 2. update queries (batch update)
-* Backend changes
- 1. Additional data sanity checks
- 2. Additional flexibility in concat_urls
- 3. Cleanup
-
-### 0.0.3
-* New features
- 1. Support for lists returned when making parameterized queries:
- <pre>select username, email where\u2026</pre>
- or replacement queries:
- <pre>select { user:username, email:email } where\u2026
-* Incompatible changes
- 1. Application.create_user parameter change from:
- <pre>create_user(username, name, email, password, invite=false)</pre>
- to:
- <pre>create_user(username, password, email=nil, name=nil, invite=false)</pre>
-* Backend changes
- 1. Replaced json_pure dependency with multi_json
-
-
-## Notes
-
-The following features are not currently implemented on the server:
-
-* delete organization
-* delete application
-* delete user
-
-
-## License
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements. See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-the ASF licenses this file to You under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ruby/Rakefile
----------------------------------------------------------------------
diff --git a/sdks/ruby/Rakefile b/sdks/ruby/Rakefile
deleted file mode 100644
index bc86b58..0000000
--- a/sdks/ruby/Rakefile
+++ /dev/null
@@ -1,22 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-#!/usr/bin/env rake
-require "bundler/gem_tasks"
-
-require 'rspec/core/rake_task'
-RSpec::Core::RakeTask.new(:spec)
-
-RSpec::Core::RakeTask.new("spec:coverage")
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ruby/bin/autospec
----------------------------------------------------------------------
diff --git a/sdks/ruby/bin/autospec b/sdks/ruby/bin/autospec
deleted file mode 100755
index 64dcb9c..0000000
--- a/sdks/ruby/bin/autospec
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/usr/bin/env ruby
-#
-# This file was generated by Bundler.
-#
-# The application 'autospec' is installed as part of a gem, and
-# this file is here to facilitate running it.
-#
-
-require 'pathname'
-ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
- Pathname.new(__FILE__).realpath)
-
-require 'rubygems'
-require 'bundler/setup'
-
-load Gem.bin_path('rspec-core', 'autospec')
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ruby/bin/htmldiff
----------------------------------------------------------------------
diff --git a/sdks/ruby/bin/htmldiff b/sdks/ruby/bin/htmldiff
deleted file mode 100755
index c70e238..0000000
--- a/sdks/ruby/bin/htmldiff
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/usr/bin/env ruby
-#
-# This file was generated by Bundler.
-#
-# The application 'htmldiff' is installed as part of a gem, and
-# this file is here to facilitate running it.
-#
-
-require 'pathname'
-ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
- Pathname.new(__FILE__).realpath)
-
-require 'rubygems'
-require 'bundler/setup'
-
-load Gem.bin_path('diff-lcs', 'htmldiff')
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ruby/bin/ldiff
----------------------------------------------------------------------
diff --git a/sdks/ruby/bin/ldiff b/sdks/ruby/bin/ldiff
deleted file mode 100755
index 8e3524a..0000000
--- a/sdks/ruby/bin/ldiff
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/usr/bin/env ruby
-#
-# This file was generated by Bundler.
-#
-# The application 'ldiff' is installed as part of a gem, and
-# this file is here to facilitate running it.
-#
-
-require 'pathname'
-ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
- Pathname.new(__FILE__).realpath)
-
-require 'rubygems'
-require 'bundler/setup'
-
-load Gem.bin_path('diff-lcs', 'ldiff')
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ruby/bin/restclient
----------------------------------------------------------------------
diff --git a/sdks/ruby/bin/restclient b/sdks/ruby/bin/restclient
deleted file mode 100755
index 4d7bdcf..0000000
--- a/sdks/ruby/bin/restclient
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/usr/bin/env ruby
-#
-# This file was generated by Bundler.
-#
-# The application 'restclient' is installed as part of a gem, and
-# this file is here to facilitate running it.
-#
-
-require 'pathname'
-ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
- Pathname.new(__FILE__).realpath)
-
-require 'rubygems'
-require 'bundler/setup'
-
-load Gem.bin_path('rest-client', 'restclient')
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ruby/bin/rspec
----------------------------------------------------------------------
diff --git a/sdks/ruby/bin/rspec b/sdks/ruby/bin/rspec
deleted file mode 100755
index 0c86b5c..0000000
--- a/sdks/ruby/bin/rspec
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/usr/bin/env ruby
-#
-# This file was generated by Bundler.
-#
-# The application 'rspec' is installed as part of a gem, and
-# this file is here to facilitate running it.
-#
-
-require 'pathname'
-ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
- Pathname.new(__FILE__).realpath)
-
-require 'rubygems'
-require 'bundler/setup'
-
-load Gem.bin_path('rspec-core', 'rspec')
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ruby/lib/usergrid/core/application.rb
----------------------------------------------------------------------
diff --git a/sdks/ruby/lib/usergrid/core/application.rb b/sdks/ruby/lib/usergrid/core/application.rb
deleted file mode 100644
index 9cc85c4..0000000
--- a/sdks/ruby/lib/usergrid/core/application.rb
+++ /dev/null
@@ -1,84 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-module Usergrid
- class Application < Resource
-
- def initialize(url, options={})
- org_name = url.split('/')[-2]
- api_url = url[0..url.index(org_name)-2]
- super url, api_url, options
- end
-
- # note: collection_name s/b plural, but the server will change it if not
- def create_entity(collection_name, entity_data)
- self[collection_name].post entity_data
- end
- alias_method :create_entities, :create_entity
-
- # allow create_something(hash_or_array) method
- def method_missing(method, *args, &block)
- method_s = method.to_s
- if method_s.start_with? 'create_'
- entity = method_s.split('_')[1]
- return _create_user *args if entity == 'user' && args[0].is_a?(String) # backwards compatibility
- create_entity entity, *args
- elsif method_s.end_with? 's' # shortcut for retrieving collections
- self[method].query(*args)
- else
- super method, args, block
- end
- end
-
- def counter_names
- self['counters'].get.data.data
- end
-
- # other_params: 'start_time' (ms), 'end_time' (ms), 'resolution' (minutes)
- def counter(name, other_params={})
- options = other_params.merge({counter: name})
- self['counters'].get({params: options})
- end
-
- # login with Facebook token. matching user will be created in usergrid as needed.
- # usergrid auth token automatically set in auth header for future requests
- def facebook_login(access_token)
- params = { fb_access_token: access_token }
- response = self['auth/facebook'].get({ params: params })
- self.auth_token = response.data['access_token']
- user_uuid = response.data['user']['uuid']
- @current_user = self["/users/#{user_uuid}"].get.entity
- response
- end
-
- def login_credentials(client_id, client_secret)
- response = self['token'].post grant_type: 'client_credentials', client_id: client_id, client_secret: client_secret
- self.auth_token = response.data['access_token']
- end
-
- private
-
- def _create_user(username, password, email=nil, name=nil, invite=false)
- LOG.warn "create_user(username, password, ...) is deprecated"
- user_hash = { username: username,
- password: password,
- email: email,
- name: name,
- invite: invite }
- create_entity 'users', user_hash
- end
-
- end
-end