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:59 UTC
[14/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/other/ruby/lib/usergrid/core/collection.rb
----------------------------------------------------------------------
diff --git a/sdks/other/ruby/lib/usergrid/core/collection.rb b/sdks/other/ruby/lib/usergrid/core/collection.rb
new file mode 100644
index 0000000..02ac9fd
--- /dev/null
+++ b/sdks/other/ruby/lib/usergrid/core/collection.rb
@@ -0,0 +1,121 @@
+# 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 Collection < Entity
+ include Enumerable
+
+ attr_accessor :iterator_follows_cursor
+
+ def initialize(url, api_url, options={}, response=nil)
+ super url, api_url, options, response
+ @iterator_follows_cursor = false
+ end
+
+ def collection
+ self
+ end
+
+ def entities
+ get unless response
+ response.entities
+ end
+
+ def [](k)
+ entities[k]
+ end
+
+ def []=(k,v)
+ raise "unsupported operation"
+ end
+
+ # does not save entities! just fields (eg. 'name')
+ def save
+ super save
+ end
+
+ def each(&block)
+ entities.each &block
+ while cursor
+ next_page
+ entities.each &block
+ end if iterator_follows_cursor
+ end
+
+ # use in conjunction with each() like: collection.follow_cursor.each {|e| }
+ def follow_cursor
+ my_clone = self.clone
+ my_clone.iterator_follows_cursor = true
+ my_clone
+ end
+
+ def create_entity(data)
+ self.post data
+ end
+ alias_method :create_entities, :create_entity
+
+ # options: 'reversed', 'start', 'cursor', 'limit', 'permission'
+ def update_query(updates, query=nil, options={})
+ options = options.symbolize_keys
+ query_params = query ? options.merge({ql: query}) : options
+ self.put(updates, {params: query_params })
+ self
+ end
+
+ # options: 'reversed', 'start', 'cursor', 'limit', 'permission'
+ def delete_query(query=nil, options={})
+ options = options.symbolize_keys
+ query_params = query ? options.merge({ql: query}) : options
+ self.delete({params: query_params })
+ self
+ end
+
+ # options: 'reversed', 'start', 'cursor', 'limit', 'permission'
+ def query(query=nil, options={})
+ options = options.symbolize_keys
+ query_params = query ? options.merge({ql: query}) : options
+ self.get({params: query_params })
+ self
+ end
+
+ def size
+ entities.size
+ end
+
+ def empty?
+ entities.empty?
+ end
+
+ def cursor
+ response.data['cursor']
+ end
+
+ def next_page
+ query(nil, query_params.merge({cursor: cursor}))
+ end
+
+ protected
+
+ def query_params
+ params = {}
+ if response.data['params']
+ response.data['params'].each do |k,v|
+ params[k] = v[0]
+ end
+ end
+ params
+ end
+ end
+end
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/other/ruby/lib/usergrid/core/entity.rb
----------------------------------------------------------------------
diff --git a/sdks/other/ruby/lib/usergrid/core/entity.rb b/sdks/other/ruby/lib/usergrid/core/entity.rb
new file mode 100644
index 0000000..1539b58
--- /dev/null
+++ b/sdks/other/ruby/lib/usergrid/core/entity.rb
@@ -0,0 +1,80 @@
+# 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.
+
+# also allows hash or dot notation for entity properties
+module Usergrid
+ class Entity < Resource
+
+ def initialize(url, api_url, options={}, response=nil, index=nil)
+ super url, api_url, options, response
+ @index = index
+ end
+
+ def data
+ get unless response
+ @index ? response.entities_data[@index] : response.entity_data
+ end
+
+ def data?
+ !!response
+ end
+
+ def resource
+ Resource.new url, api_url, options
+ end
+
+ def [](k)
+ data[k]
+ end
+
+ def []=(k,v)
+ data[k] = v
+ end
+
+ def collection
+ Collection.new url[0..url[0..-2].rindex('/')-1], api_url, options
+ end
+
+ def save
+ self.put data
+ end
+
+ def to_s
+ "resource: #{url}\ndata: #{data}"
+ end
+
+ def to_json(*args)
+ data.except(RESERVED).to_json *args
+ end
+ alias :encode :to_json
+ alias :dump :to_json
+
+ private
+
+ def method_missing(method, *args, &block)
+ if data.respond_to?(method)
+ data.send(method, *args, &block)
+ elsif method[-1] == '=' && args.size == 1
+ data[method[0..-2]] = args[0]
+ else
+ super method, args, block
+ end
+ end
+
+ def respond_to?(method)
+ super.respond_to?(method) || data.respond_to?(method)
+ end
+ end
+end
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/other/ruby/lib/usergrid/core/management.rb
----------------------------------------------------------------------
diff --git a/sdks/other/ruby/lib/usergrid/core/management.rb b/sdks/other/ruby/lib/usergrid/core/management.rb
new file mode 100644
index 0000000..b8f3e06
--- /dev/null
+++ b/sdks/other/ruby/lib/usergrid/core/management.rb
@@ -0,0 +1,57 @@
+# 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 Management < Resource
+
+ def initialize(url, options={})
+ management = url.split('/')[-1]
+ if management == 'management'
+ api_url = url[0..url.index(management)-2]
+ else
+ api_url = url
+ url = concat_urls(api_url, 'management')
+ end
+ super url, api_url, options
+ end
+
+ def create_organization(organization, username, name, email, password)
+ data = { organization: organization,
+ username: username,
+ name: name,
+ email: email,
+ password: password }
+ self['organizations'].post data
+ end
+
+ def organizations
+ self[__method__].get
+ end
+
+ def organization(organization)
+ url = self["organizations/#{organization}"].url
+ Organization.new url, options
+ end
+
+ def users
+ self['users'].get
+ end
+
+ def user(name_or_uuid)
+ self["users/#{name_or_uuid}"].get
+ end
+
+ end
+end
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/other/ruby/lib/usergrid/core/organization.rb
----------------------------------------------------------------------
diff --git a/sdks/other/ruby/lib/usergrid/core/organization.rb b/sdks/other/ruby/lib/usergrid/core/organization.rb
new file mode 100644
index 0000000..9df485a
--- /dev/null
+++ b/sdks/other/ruby/lib/usergrid/core/organization.rb
@@ -0,0 +1,74 @@
+# 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 'uri'
+module Usergrid
+ class Organization < Resource
+
+ def initialize(url, options={})
+ org_name = url.split('/')[-1]
+ api_url = url[0..url.index('management')-2]
+ super url, api_url, options
+ end
+
+ def name
+ URI(url).path.split('/').last
+ end
+
+ def create_application(name)
+ self['applications'].post({ name: name })
+ application name
+ end
+
+ def applications(query=nil)
+ resource = self[__method__]
+ response = query ? resource.query(query) : resource.get
+ response.data['data'].collect do |k|
+ application concat_urls(api_url, k)
+ end
+ end
+
+ def application(name_or_uuid)
+ Usergrid::Application.new concat_urls(api_url, "#{name}/#{name_or_uuid}"), options
+ end
+
+ def users(query=nil)
+ self[__method__].query(query)
+ end
+
+ def user(user)
+ management.user(user)
+ end
+
+ def feed(query=nil)
+ self[__method__].query(query)
+ end
+
+ def credentials
+ self[__method__].get
+ end
+
+ def generate_credentials
+ self['credentials'].post nil
+ end
+
+ def login_credentials(client_id, client_secret)
+ resource = api_resource 'management'
+ response = resource['token'].post grant_type: 'client_credentials', client_id: client_id, client_secret: client_secret
+ self.auth_token = response.data['access_token']
+ end
+
+ end
+end
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/other/ruby/lib/usergrid/core/resource.rb
----------------------------------------------------------------------
diff --git a/sdks/other/ruby/lib/usergrid/core/resource.rb b/sdks/other/ruby/lib/usergrid/core/resource.rb
new file mode 100644
index 0000000..1f96f90
--- /dev/null
+++ b/sdks/other/ruby/lib/usergrid/core/resource.rb
@@ -0,0 +1,157 @@
+# 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 'rest_client'
+
+module Usergrid
+ class Resource < RestClient::Resource
+
+ RESERVED = %w( created modified metadata uri )
+ DEFAULT_API_URL = 'https://api.usergrid.com'
+ TYPE_HEADERS = { content_type: :json, accept: :json }
+
+ attr_reader :current_user, :api_url, :response
+
+ def initialize(resource_url=DEFAULT_API_URL, api_url=nil, options={}, response=nil)
+ options[:headers] = TYPE_HEADERS.merge options[:headers] || {}
+ @api_url = api_url || resource_url
+ self.response = response
+ super resource_url, options, &method(:handle_response)
+ end
+
+ # gets user token and automatically set auth header for future requests
+ # precondition: resource must already be set to the correct context (application or management)
+ def login(username, password)
+ response = self['token'].post grant_type: 'password', username: username, password: password
+ self.auth_token = response.data['access_token']
+ user_uuid = response.data['user']['uuid']
+ @current_user = self["/users/#{user_uuid}"].get.entity
+ response
+ end
+
+ # remove auth header for future requests
+ # only affects self and derivative resources
+ def logout
+ self.auth_token = nil
+ @current_user = nil
+ end
+
+ def logged_in?
+ !!auth_token
+ end
+
+ def management
+ Usergrid::Management.new api_url, options
+ end
+
+ # application defaults to sandbox if none provided
+ def application(organization, application='sandbox')
+ Usergrid::Application.new concat_urls(api_url, "#{organization}/#{application}"), options
+ end
+
+ # options: 'reversed', 'start', 'cursor', 'limit', 'permission'
+ def query(query=nil, options={})
+ options = options.merge({ql: query}) if query
+ get({params: options})
+ end
+
+ # options: 'reversed', 'start', 'cursor', 'limit', 'permission'
+ def update_query(updates, query=nil, options={})
+ options = options.merge({ql: query}) if query
+ put(updates, {params: options})
+ end
+
+ # options: 'reversed', 'start', 'cursor', 'limit', 'permission'
+ def delete_query(query=nil, options={})
+ options = options.merge({ql: query}) if query
+ delete({params: options})
+ end
+
+ def entity
+ get unless response
+ response.entity
+ end
+
+ def entities
+ get unless response
+ response.entities
+ end
+
+ def collection
+ get unless response
+ Collection.new url, api_url, options, response
+ end
+
+ # overridden to ensure sub resources are instances of this class
+ def [](suburl, &new_block)
+ case
+ when block_given? then Resource.new(concat_urls(url, suburl), api_url, options, &new_block)
+ when block then Resource.new(concat_urls(url, suburl), api_url, options, &block)
+ else
+ Resource.new(concat_urls(url, suburl), api_url, options)
+ end
+ end
+
+ def api_resource(suburl)
+ Resource.new(concat_urls(api_url, suburl), api_url, options)
+ end
+
+ def get(additional_headers={}, &block)
+ self.response = super additional_headers, &block
+ end
+
+ def post(payload, additional_headers={}, &block)
+ payload = MultiJson.dump(payload) unless payload.is_a? String
+ self.response = super payload, additional_headers, &block
+ end
+
+ def put(payload, additional_headers={}, &block)
+ payload = MultiJson.dump(payload) unless payload.is_a? String
+ self.response = super payload, additional_headers, &block
+ end
+
+ def auth_token=(auth_token)
+ if auth_token
+ @options[:headers].merge!({ Authorization: "Bearer #{auth_token}" })
+ else
+ @options[:headers].delete :Authorization if @options
+ end
+ end
+
+ def auth_token
+ begin
+ @options[:headers][:Authorization].gsub 'Bearer ', ''
+ rescue
+ nil
+ end
+ end
+
+ protected
+
+ def response=(response)
+ @response = response
+ end
+
+ # add verbose debugging of response body
+ def handle_response(response, request, result, &block)
+ LOG.debug "response.body = #{response}"
+ response = response.return!(request, result, &block)
+ response.resource = self
+ self.response = response
+ response
+ end
+
+ end
+end
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/other/ruby/lib/usergrid/extensions/hash.rb
----------------------------------------------------------------------
diff --git a/sdks/other/ruby/lib/usergrid/extensions/hash.rb b/sdks/other/ruby/lib/usergrid/extensions/hash.rb
new file mode 100644
index 0000000..5a1cd30
--- /dev/null
+++ b/sdks/other/ruby/lib/usergrid/extensions/hash.rb
@@ -0,0 +1,45 @@
+# 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.
+
+class Hash
+
+ # not recursive
+ def symbolize_keys
+ inject({}) do |options, (key, value)|
+ options[(key.to_sym rescue key) || key] = value
+ options
+ end
+ end
+
+ def except(*keys)
+ dup.except! *keys
+ end
+
+ def except!(*keys)
+ keys.each { |key| key.is_a?(Array) ? except!(*key) : delete(key) }
+ self
+ end
+
+ # recursive
+ def add_dot_notation!(_hash=self)
+ _hash.each do |k,v|
+ getter = k.to_sym; setter = "#{k}=".to_sym
+ _hash.define_singleton_method getter, lambda { _hash[k] } unless _hash.respond_to? getter
+ _hash.define_singleton_method setter, lambda { |v| _hash[k] = v } unless _hash.respond_to? setter
+ add_dot_notation!(v) if v.is_a? Hash
+ v.each { |e| add_dot_notation!(e) if e.is_a? Hash } if v.is_a? Array
+ end
+ end
+end
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/other/ruby/lib/usergrid/extensions/response.rb
----------------------------------------------------------------------
diff --git a/sdks/other/ruby/lib/usergrid/extensions/response.rb b/sdks/other/ruby/lib/usergrid/extensions/response.rb
new file mode 100644
index 0000000..ee2ffbf
--- /dev/null
+++ b/sdks/other/ruby/lib/usergrid/extensions/response.rb
@@ -0,0 +1,96 @@
+# 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 RestClient
+ module Response
+
+ def resource=(resource)
+ @resource = resource
+ end
+
+ def resource
+ @resource
+ end
+
+ def data
+ @data = MultiJson.load(self).add_dot_notation! unless @data
+ @data
+ end
+
+ def collection
+ resource.collection
+ end
+
+ def multiple_entities?
+ entities_data = data['entities'] || data['data'] || data['messages'] || data['list']
+ entities_data.is_a? Array
+ end
+
+ def entities_data
+ return @entities_data if @entities_data
+ entities_data = data['entities'] || data['data'] || data['messages'] || data['list']
+ raise "unable to determine entities from: #{data}" unless entities_data.is_a?(Array)
+ entities_data.each do |e|
+ e['uri'] = concat_urls(data['uri'], e['uuid']) if e.is_a?(Hash) && e['uuid']
+ end
+ @entities_data = entities_data
+ end
+
+ def entities
+ return @entities if @entities
+ index = -1
+ @entities = entities_data.collect do |e|
+ if e.is_a? Array
+ e
+ else
+ Usergrid::Entity.new e['uri'], resource.api_url, resource.options, self, index+=1
+ end
+ end
+ end
+
+ def entity_data
+ if multiple_entities?
+ entities_data.first
+ elsif data['data']
+ d = data['data']
+ d['uri'] = @resource.url
+ d
+ elsif data['organization']
+ d = data['organization']
+ d['uri'] = @resource.url
+ d
+ else
+ entities_data.first
+ end
+ end
+
+ def entity
+ Usergrid::Entity.new(entity_data['uri'], resource.api_url, resource.options, self) if entity_data
+ end
+
+ protected
+
+ def concat_urls(url, suburl) # :nodoc:
+ url = url.to_s
+ suburl = suburl.to_s
+ if url.slice(-1, 1) == '/' or suburl.slice(0, 1) == '/'
+ url + suburl
+ else
+ "#{url}/#{suburl}"
+ end
+ end
+
+ end
+end
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/other/ruby/lib/usergrid/version.rb
----------------------------------------------------------------------
diff --git a/sdks/other/ruby/lib/usergrid/version.rb b/sdks/other/ruby/lib/usergrid/version.rb
new file mode 100644
index 0000000..951b017
--- /dev/null
+++ b/sdks/other/ruby/lib/usergrid/version.rb
@@ -0,0 +1,18 @@
+# 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
+ VERSION = '0.9.2'
+end
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/other/ruby/lib/usergrid_iron.rb
----------------------------------------------------------------------
diff --git a/sdks/other/ruby/lib/usergrid_iron.rb b/sdks/other/ruby/lib/usergrid_iron.rb
new file mode 100644
index 0000000..7bd209c
--- /dev/null
+++ b/sdks/other/ruby/lib/usergrid_iron.rb
@@ -0,0 +1,43 @@
+# 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 'logger'
+require 'multi_json'
+
+
+module Usergrid
+
+ LOG = Logger.new(STDOUT)
+
+ USERGRID_PATH = File.join File.dirname(__FILE__), 'usergrid'
+
+ def self.usergrid_path *path
+ File.join USERGRID_PATH, *path
+ end
+
+ require usergrid_path('version')
+
+ require usergrid_path('extensions', 'hash')
+ require usergrid_path('extensions', 'response')
+
+ require usergrid_path('core', 'resource')
+ require usergrid_path('core', 'management')
+ require usergrid_path('core', 'organization')
+ require usergrid_path('core', 'application')
+ require usergrid_path('core', 'entity')
+ require usergrid_path('core', 'collection')
+
+ #autoload :Management, usergrid_path('core', 'management')
+end
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/other/ruby/spec/spec_helper.rb
----------------------------------------------------------------------
diff --git a/sdks/other/ruby/spec/spec_helper.rb b/sdks/other/ruby/spec/spec_helper.rb
new file mode 100644
index 0000000..88f5b43
--- /dev/null
+++ b/sdks/other/ruby/spec/spec_helper.rb
@@ -0,0 +1,89 @@
+# 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 'rspec'
+require 'yaml'
+require 'securerandom'
+require_relative '../lib/usergrid_iron'
+
+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')
+
+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
+
+RSpec.configure do |config|
+ config.filter_run focus: true
+ config.run_all_when_everything_filtered = true
+ config.treat_symbols_as_metadata_keys_with_true_values = true
+end
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/other/ruby/spec/spec_settings.yaml
----------------------------------------------------------------------
diff --git a/sdks/other/ruby/spec/spec_settings.yaml b/sdks/other/ruby/spec/spec_settings.yaml
new file mode 100644
index 0000000..7f82f40
--- /dev/null
+++ b/sdks/other/ruby/spec/spec_settings.yaml
@@ -0,0 +1,27 @@
+# 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
+:management:
+ :username: test
+ :password: test
+:organization:
+ :name: test-organization
+ :username: test
+ :password: test
+:application:
+ :name: test-app
+ :username: test-app-user
+ :password: test
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/other/ruby/spec/usergrid/core/application_spec.rb
----------------------------------------------------------------------
diff --git a/sdks/other/ruby/spec/usergrid/core/application_spec.rb b/sdks/other/ruby/spec/usergrid/core/application_spec.rb
new file mode 100644
index 0000000..f2b479e
--- /dev/null
+++ b/sdks/other/ruby/spec/usergrid/core/application_spec.rb
@@ -0,0 +1,342 @@
+# 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::Application do
+
+ before :all do
+ @application = create_random_application
+ @user = create_random_user @application, true
+ end
+
+ after :all do
+ @user.delete
+ delete_application @application
+ end
+
+ it "should be able to create a user using deprecated syntax" do
+ random = SecureRandom.hex
+ response = @application.create_user "username_#{random}", 'password'
+ response.entity.uuid.should_not be_nil
+ end
+
+ it "should be able to create, login, and delete a user" do
+ random = SecureRandom.hex
+ application = Usergrid::Application.new @application.url # create application resource that's not logged in
+ response = application.create_user username: "username_#{random}", password: 'password'
+ entity = response.entity
+ application.login "username_#{random}", 'password'
+ begin
+ response.code.should eq 200
+ response.entities.size.should eq 1
+ entity.uuid.should_not be_nil
+ response = application["users/#{entity.uuid}"].get
+ response.code.should eq 200
+ ensure
+ entity.delete
+ # deleted user shouldn't be able to access anything now
+ expect { application["users/#{entity.uuid}"].get }.to raise_error(RestClient::Unauthorized)
+ # use original application - logged in under existing user
+ expect { @application["users/#{entity.uuid}"].get }.to raise_error(RestClient::ResourceNotFound)
+ end
+ end
+
+ it "should be able to retrieve users" do
+ entity1 = create_random_user @application
+ entity2 = create_random_user @application
+ begin
+ response = @application.users
+ response.entities.size.should be >= 2
+ match1 = match2 = false
+ response.entities.each do |e|
+ match1 ||= e.username == entity1.username
+ match2 ||= e.username == entity2.username
+ end
+ match1.should be_true
+ match2.should be_true
+ ensure
+ entity1.delete
+ entity2.delete
+ end
+ response = @application.users
+ response.code.should eq 200
+ response.entities.should be_an Array
+ end
+
+ it "should be able to query users" do
+ entity1 = create_random_user @application
+ entity2 = create_random_user @application
+ begin
+ response = @application.users "select * where username = \'#{entity1.username}\'"
+ response.entities.size.should eq 1
+ response.entity.username.should eq entity1.username
+ ensure
+ entity1.delete
+ entity2.delete
+ end
+ end
+
+ it "should be able to update a user" do
+ entity = create_random_user @application
+ begin
+ updates = { email: 'testuser6@email.com', city: 'santa clarita' }
+ response = @application.put updates
+ updates.each {|k,v| response.entity[k.to_s].should eq v }
+ ensure
+ entity.delete
+ end
+ end
+
+ it "should be able to retrieve the logged in user" do
+ user = @application.current_user
+ user.uuid.should_not be_nil
+ end
+
+ it "should be able to add and retrieve activities" do
+ user = @application.current_user
+ activity = {
+ verb: "post",
+ content: "testy, testy",
+ actor: {
+ uuid: user.uuid,
+ email: user.email,
+ username: user.username,
+ displayName: user.username,
+ image: {
+ height: 80,
+ width: 80,
+ url: user.picture
+ }}}
+ response = @application['activities'].post activity
+ activity_path = response.entity['metadata']['path']
+ response.code.should eq 200
+
+ begin
+ entity = @application.activities.entity
+ activity.add_dot_notation!
+ entity.verb.should eq activity.verb
+ entity.content.should eq activity.content
+ entity.actor.uuid.should eq activity.actor.uuid
+ ensure
+ @application[activity_path].delete
+ end
+ end
+
+ it "should be able to retrieve a user's feed" do
+ response = @application.current_user.resource['feed'].get
+ response.code.should eq 200
+ response.entities.should be_an Array
+ end
+
+ it "should be able to follow a user" do
+ follower = create_random_user @application
+ begin
+ me = @application.current_user
+ @application["users/#{follower.uuid}/following/users/#{me.uuid}"].post "{}"
+
+ response = @application["users/#{follower.uuid}/following"].get
+ response.entities.size.should == 1
+ response.entity.uuid.should eq me.uuid
+
+ response = @application.current_user.resource['followers'].get
+ response.entities.size.should be > 0
+ ensure
+ follower.delete
+ end
+ end
+
+ it "should be able to create and retrieve groups" do
+ response = @application.groups
+ size = response.entities.size
+ random = SecureRandom.hex
+ @application.create_entity :groups, path: "test-#{random}"
+ response = @application.groups
+ response.entities.size.should eq size+1
+ end
+
+ it "should be able to create and retrieve devices" do
+ response = @application.devices
+ size = response.entities.size
+ random = SecureRandom.hex
+ @application.create_entity :devices, path: "test-#{random}"
+ response = @application.devices
+ response.entities.size.should eq size+1
+ end
+
+ it "should be able to create and retrieve assets" do
+ response = @application.assets
+ size = response.entities.size
+ random = SecureRandom.hex
+ @application.create_entity :assets, path: "test-#{random}", owner: @application.current_user.uuid
+ response = @application.assets
+ response.entities.size.should eq size+1
+ end
+
+ it "should be able to create and retrieve folders" do
+ response = @application.folders
+ size = response.entities.size
+ random = SecureRandom.hex
+ @application.create_entity :folders, path: "test-#{random}", owner: @application.current_user.uuid
+ response = @application.folders
+ response.entities.size.should eq size+1
+ end
+
+ # can't reliably test this - counters are batched on server
+ #it "should be able to create and retrieve events and retrieve counters" do
+ # # clear events
+ # {} while @application.events.entities.size > 0
+ #
+ # events_in = []
+ # events_in << {timestamp: 0, category: 'test', counters: { test: 1 }}
+ # events_in << {timestamp: 0, category: 'testme', counters: { testme: 1 }}
+ # events_in << {timestamp: 0, counters: { test: 1 }}
+ # events_in.each {|e| @application.create_entity :events, e }
+ #
+ # events_out = []
+ # events_out << @application.events.entity
+ # events_out << @application.events.entity
+ # events_out << @application.events.entity
+ #
+ # (0..2).each do |i|
+ # events_in[i][:category].should eq events_out[i]['category']
+ # end
+ #
+ # response = @application.events
+ # response.entities.size.should eq 0
+ #
+ # # get and test counters
+ # counter_names = @application.counter_names
+ # counter_names.should include 'test'
+ # counter_names.should include 'testme'
+ #
+ # response = @application.counter 'test'
+ # counter = response.data.counters.first
+ # counter.name.should eq 'test'
+ # counter.values.last.first.value.should be > 0
+ #end
+
+ it "should be able to create, retrieve, and delete roles" do
+ size = @application.roles.collection.size
+
+ role_name = "test-#{SecureRandom.hex}"
+ @application.create_entity :role, name: role_name, title: 'title', inactivity: 0
+ roles = @application.roles.collection
+ roles.size.should eq size+1
+ role = roles.detect {|r| r.name == role_name }
+ role.should_not be_nil
+
+ role.delete
+ @application.roles.collection.size.should eq size
+ end
+
+ it "should be able to add/remove permissions from a user" do
+ user = create_random_user @application
+ permission = 'post:/users/*'
+ user.resource['permissions'].post permission: permission
+
+ permissions = user.resource['permissions'].get.data.data
+ permissions.size.should eq 1
+ permissions.first.should eq permission
+
+ user.resource['permissions'].delete({params: { permission: permission }})
+
+ permissions = user.resource['permissions'].get.collection.entities
+ permissions.size.should eq 0
+ end
+
+ it "should be able to add/remove a user from a roles" do
+ user = create_random_user @application
+
+ roles = user.resource['roles'].get.entities
+ size = roles.size
+
+ @application["roles/admin/users/#{user.uuid}"].post nil
+
+ roles = user.resource['roles'].get.entities
+ roles.size.should == size+1
+
+ @application["roles/admin/users/#{user.uuid}"].delete
+
+ roles = user.resource['roles'].get.entities
+ roles.size.should == size
+ end
+
+ it "should be able to create a new collection and access it" do
+ entities = (1..4).collect { |i| { name: "test_#{i}" } }
+ @application.create_entities 'tests', entities
+ response = @application['tests'].get
+ collection = response.collection
+ collection.size.should eq 4
+ end
+
+ it "should be able to create a new collection via create_ method and access it" do
+ entities = (1..4).collect { |i| { name: "test_#{i}" } }
+ @application.create_moretests entities
+ response = @application['tests'].get
+ collection = response.collection
+ collection.size.should eq 4
+ end
+
+ it "should be able to access a collection without calling get" do
+ entities = (1..4).collect { |i| { name: "test_#{i}" } }
+ @application.create_entities 'tests', entities
+ collection = @application['tests'].collection
+ collection.size.should eq 4
+ end
+
+ it "should be able to access entities without calling get" do
+ entities = (1..4).collect { |i| { name: "test_#{i}" } }
+ @application.create_entities 'tests', entities
+ entities = @application['tests'].entities
+ entities.size.should eq 4
+ end
+
+ it "should be able to query using dot notation" do
+ entities = (1..4).collect { |i| { name: "test_#{i}" } }
+ @application.create_btests entities
+ entities = @application.btests("name = 'test_1'").entities
+ entities.size.should eq 1
+ end
+
+ describe "grant_type: client_credentials" do
+
+ before(:each) do
+ @app = create_random_application
+ end
+
+ context "invalid credentials" do
+ it "should not be able to get access token with invalid credentials" do
+ expect { @app.login_credentials "invalid_client_id", "invalid_client_secret" }.to raise_exception RestClient::BadRequest
+ end
+
+ it "should not be able to get access token with empty credentials" do
+ expect { @app.login_credentials "", "" }.to raise_exception RestClient::BadRequest
+ end
+ end
+
+ context "valid credentials" do
+ it "should be able to get access token with valid credentials" do
+ app_info = JSON.parse @app.get
+
+ management = login_management
+ app = management.application app_info["organization"], app_info["applicationName"]
+ app_credentials = JSON.parse app.credentials
+ app.login_credentials app_credentials["credentials"]["client_id"], app_credentials["credentials"]["client_secret"]
+
+ expect(app.auth_token).to_not be_empty
+ expect(app.auth_token).to be_instance_of String
+ end
+ end
+ end
+end
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/other/ruby/spec/usergrid/core/collection_spec.rb
----------------------------------------------------------------------
diff --git a/sdks/other/ruby/spec/usergrid/core/collection_spec.rb b/sdks/other/ruby/spec/usergrid/core/collection_spec.rb
new file mode 100644
index 0000000..9ab07c3
--- /dev/null
+++ b/sdks/other/ruby/spec/usergrid/core/collection_spec.rb
@@ -0,0 +1,125 @@
+# 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::Collection do
+
+ before :all do
+ @application = create_random_application
+ @user = create_random_user @application, true
+
+ @collection = @application['tests'].collection
+ @entity_data = (1..25).collect do |i|
+ { name: "name_#{i}", value: "value_#{i+1}" }
+ end
+ (1..3).each {|i| @entity_data[i]['three'] = 3}
+ @collection.create_entities @entity_data
+ end
+
+ after :all do
+ @user.delete
+ delete_application @application
+ end
+
+ it "should be able to do a simple query" do
+ @collection.query "select * where name = \'#{@entity_data[0][:name]}\'"
+ @collection.size.should eq 1
+ end
+
+ it "should be able to select data elements" do
+ @collection.query "select name, value where name = \'#{@entity_data[0][:name]}\'"
+ @collection.size.should eq 1
+ # note: not Usergrid::Entity objects: it is an Array for this kind of query
+ values = @collection.entities.first
+ values[0].should eq @entity_data[0][:name]
+ values[1].should eq @entity_data[0][:value]
+ end
+
+ it "should be able to select redefined data elements" do
+ @collection.query "select { test1: name, test2 : value } where name = \'#{@entity_data[0][:name]}\'"
+ @collection.size.should eq 1
+ # note: not Usergrid::Entity objects: it is a Hash for this kind of query
+ values = @collection.entities.first
+ values.test1.should eq @entity_data[0][:name]
+ values.test2.should eq @entity_data[0][:value]
+ end
+
+ it "should be able to find an entity" do
+ @collection.query
+ entity = @collection.detect { |e| e.name == @entity_data[5][:name] }
+ entity.should_not be_nil
+ entity.name.should eq @entity_data[5][:name]
+ end
+
+ it "should be able to respect query reversal and limits" do
+ @collection.query nil, reversed: true, start: 5, cursor: nil, limit: 2, permission: nil
+ @collection.size.should eq 2
+ @collection[0].name.should eq @entity_data[@entity_data.size-1][:name]
+ @collection[1].name.should eq @entity_data[@entity_data.size-2][:name]
+ end
+
+ it "should be able to select the start by uuid" do
+ @collection.query
+ uuid = @collection[4].uuid
+ @collection.query nil, reversed: false, start: uuid, cursor: nil, limit: 3, permission: nil
+ @collection.size.should eq 3
+ @collection.first.uuid.should eq uuid
+ @collection[2].name.should eq @entity_data[6][:name]
+ end
+
+ it "should be able to page forward by cursor" do
+ @collection.query 'select * where three = 3', limit: 2
+ @collection.next_page
+ @collection.size.should eq 1
+ @collection[0].name.should eq @entity_data[3][:name]
+ end
+
+ it "should be able to update based on a query" do
+ @collection.update_query({new_field: 'new_value'}, "select * where name = \'#{@entity_data[4][:name]}\'")
+ @collection.query
+ entity = @collection.detect { |e| e['new_field'] == 'new_value' }
+ entity.should_not be_nil
+ entity.name.should eq @entity_data[4][:name]
+ end
+
+ it "should be able to delete based on a query" do
+ @collection.delete_query "select * where name = \'#{@entity_data[5][:name]}\'"
+ @collection.query
+ entity = @collection.detect { |e| e['name'] == "#{@entity_data[5][:name]}" }
+ entity.should be_nil
+ @entity_data.delete @entity_data[5]
+ end
+
+ it "should be able to iterate within the page" do
+ @collection.query
+ @collection.cursor.should_not be_nil
+ count = 0
+ page_size = @collection.count
+ @collection.each {|e| count += 1 }
+ count.should eq page_size
+ end
+
+ it "should be able to iterate over pages" do
+ @collection.query
+ @collection.cursor.should_not be_nil
+ count = 0
+ seen = Set.new
+ @collection.follow_cursor.each do |e|
+ seen.add?(e.uuid).should_not be_nil
+ count += 1
+ end
+ count.should eq @entity_data.size
+ end
+
+end
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/other/ruby/spec/usergrid/core/entity_spec.rb
----------------------------------------------------------------------
diff --git a/sdks/other/ruby/spec/usergrid/core/entity_spec.rb b/sdks/other/ruby/spec/usergrid/core/entity_spec.rb
new file mode 100644
index 0000000..887fa91
--- /dev/null
+++ b/sdks/other/ruby/spec/usergrid/core/entity_spec.rb
@@ -0,0 +1,91 @@
+# 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::Entity do
+
+ before :all do
+ @application = create_random_application
+ @user = create_random_user @application, true
+ end
+
+ after :all do
+ @user.delete
+ delete_application @application
+ end
+
+ it "should be able to retrieve its collection" do
+ collection = @user.collection
+ collection.should_not be_nil
+ u = collection.detect {|u| u.uuid == @user.uuid }
+ u.uuid.should eq @user.uuid
+ end
+
+ it "should be able to reload its data" do
+ old_name = @user.name
+ @user.name = 'new name'
+ @user.name.should eq 'new name'
+ @user.get
+ @user.name.should eq old_name
+ end
+
+ it "should be able to save" do
+ @user.name = 'new name'
+ @user.save
+ @user.name.should eq 'new name'
+ end
+
+ it "should be able to print itself" do
+ p = @user.to_s
+ p.start_with?('resource').should be_true
+ end
+
+ it "should know if it has data" do
+ @user.data?.should be_true
+ empty = Usergrid::Entity.new 'url', 'url'
+ empty.data?.should be_false
+ end
+
+ it "should return nil if empty result" do
+ @application['foobars'].get.entity.should be_nil
+ end
+
+ it "should not serialize reserved attributes" do
+ dump = MultiJson.dump @user
+ hash = MultiJson.load dump
+ Usergrid::Resource::RESERVED.each { |a| hash.should_not have_key(a) }
+ end
+
+ it "should be able to delete itself" do
+ user = create_random_user @application
+ name = user.name
+ user.delete
+ u = @application['users'].entities.detect {|e| e.name == "#{name}"}
+ u.should be_nil
+ end
+
+ it "should be able to update and delete by query" do
+ dog = (@application.create_dog name: 'Vex').entity
+
+ @application['dogs'].update_query({foo: 'bar'}, "select * where name = \'#{dog.name}\'")
+ dog.get
+ dog.foo.should eq('bar')
+
+ @application['dogs'].delete_query "select * where name = \'#{dog.name}\'"
+
+ dog = @application['dogs'].entities.detect {|e| e.name == "#{dog.name}"}
+ dog.should be_nil
+ end
+
+end
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/other/ruby/spec/usergrid/core/management_spec.rb
----------------------------------------------------------------------
diff --git a/sdks/other/ruby/spec/usergrid/core/management_spec.rb b/sdks/other/ruby/spec/usergrid/core/management_spec.rb
new file mode 100644
index 0000000..f53d572
--- /dev/null
+++ b/sdks/other/ruby/spec/usergrid/core/management_spec.rb
@@ -0,0 +1,51 @@
+# 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::Management do
+
+ before :all do
+ @base_resource = Usergrid::Resource.new(SPEC_SETTINGS[:api_url])
+ @management = @base_resource.management
+ @management.login SPEC_SETTINGS[:management][:username], SPEC_SETTINGS[:management][:password]
+ end
+
+ it "should be able to create an organization" do
+ # can't delete an org or a user, so we create new random ones and leave them
+ random = SecureRandom.hex
+ org_name = "test_org_#{random}"
+ user_name = "test_admin_#{random}"
+ response = @management.create_organization("#{org_name}",
+ "#{user_name}",
+ "#{user_name}",
+ "#{user_name}@email.com",
+ "#{random}")
+ response.code.should eq 200
+ #@base_resource["users/#{user_name}"].delete
+ end
+
+ # this is broken on the server
+ #it "should be able to get organizations" do
+ # response = @management.organizations
+ #end
+
+ it "should be able to get an organization" do
+ organization = @management.organization SPEC_SETTINGS[:organization][:name]
+ organization.should be_a Usergrid::Organization
+ org_ent = organization.get.entity
+ org_ent.uuid.should_not be_nil
+ org_ent.name.should eq SPEC_SETTINGS[:organization][:name]
+ end
+
+end
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/other/ruby/spec/usergrid/core/organization_spec.rb
----------------------------------------------------------------------
diff --git a/sdks/other/ruby/spec/usergrid/core/organization_spec.rb b/sdks/other/ruby/spec/usergrid/core/organization_spec.rb
new file mode 100644
index 0000000..93092fc
--- /dev/null
+++ b/sdks/other/ruby/spec/usergrid/core/organization_spec.rb
@@ -0,0 +1,113 @@
+# 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::Organization do
+
+ before :each do
+ @management = Usergrid::Resource.new(SPEC_SETTINGS[:api_url]).management
+ @management.login SPEC_SETTINGS[:organization][:username], SPEC_SETTINGS[:organization][:password]
+ @organization = @management.organization SPEC_SETTINGS[:organization][:name]
+ end
+
+ it "should be able to create (and delete) an application" do
+ app_name = "test_app_#{SecureRandom.hex}"
+ app = @organization.create_application app_name
+ app.should be_an Usergrid::Application
+
+ response = @organization["applications/#{app_name}"].delete
+ response.code.should eq 200
+ end
+
+ it "should be able to get applications" do
+ response = @organization.applications
+ response.should be_an Array
+ if response.size > 0
+ app = response.first
+ app.should be_an Usergrid::Application
+ end
+ end
+
+ it "should be able to get users" do
+ response = @organization.users
+ response.code.should eq 200
+ response.entities.should be_an Array
+ response.entities[0].uuid.should_not be_nil
+ end
+
+ it "should be able to get a user" do
+ response = @organization.user(SPEC_SETTINGS[:organization][:username])
+ response.code.should eq 200
+ response.entity.uuid.should_not be_nil
+ end
+
+ it "should be able to get an application" do
+ app_name = "test_app_#{SecureRandom.hex}"
+ @organization.create_application app_name
+ begin
+ app = @organization.application app_name
+ app.should be_an Usergrid::Application
+ ensure
+ @organization["applications/#{app_name}"].delete
+ end
+ end
+
+ it "should be able to get feed" do
+ response = @organization.feed
+ entities = response.entities
+ entities.size.should be > 0
+ entities.first.uuid.should_not be_nil
+ end
+
+ it "should be able to get credentials" do
+ response = @organization.credentials
+ response.code.should eq 200
+ response.data.credentials.client_id.should_not be_nil
+ response.data.credentials.client_secret.should_not be_nil
+ end
+
+ it "should be able to generate credentials" do
+ response = @organization.generate_credentials
+ response.code.should eq 200
+ response.data.credentials.client_id.should_not be_nil
+ response.data.credentials.client_secret.should_not be_nil
+ end
+
+ describe "grant_type: client_credentials" do
+ context "invalid credentials" do
+ before :each do
+ @organization.logout
+ end
+
+ it "should not be able to get access token with invalid credentials" do
+ expect { @organization.login_credentials "invalid_client_id", "invalid_client_secret" }.to raise_exception RestClient::BadRequest
+ end
+
+ it "should not be able to get access token with empty credentials" do
+ expect { @organization.login_credentials "", "" }.to raise_exception RestClient::BadRequest
+ end
+ end
+
+ context "valid crendentials" do
+ it "should be able to get access token with valid credentials" do
+ org_credentials = JSON.parse @organization.credentials
+ @organization.logout
+ @organization.login_credentials org_credentials["credentials"]["client_id"], org_credentials["credentials"]["client_secret"]
+
+ expect(@organization.auth_token).to_not be_empty
+ expect(@organization.auth_token).to be_instance_of String
+ end
+ end
+ end
+end
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/other/ruby/spec/usergrid/core/resource_spec.rb
----------------------------------------------------------------------
diff --git a/sdks/other/ruby/spec/usergrid/core/resource_spec.rb b/sdks/other/ruby/spec/usergrid/core/resource_spec.rb
new file mode 100644
index 0000000..82a1ace
--- /dev/null
+++ b/sdks/other/ruby/spec/usergrid/core/resource_spec.rb
@@ -0,0 +1,63 @@
+# 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::Resource do
+
+ before :all do
+ @resource = Usergrid::Resource.new SPEC_SETTINGS[:api_url]
+ end
+
+ it "should succeed on status check" do
+ response = @resource['/status'].get
+
+ response.code.should eq 200
+ response.data.should be_a Hash
+ end
+
+ it "should fail with a 400 when no auth given" do
+ expect { @resource['management'].get }.to raise_error(RestClient::BadRequest) { |exception|
+ exception.response.code.should eq 400
+ }
+ end
+
+ it "should fail with a 401 when lacking auth" do
+ app_endpoint = "#{SPEC_SETTINGS[:organization][:name]}/#{SPEC_SETTINGS[:application][:name]}"
+ expect { @resource[app_endpoint].get }.to raise_error(RestClient::Unauthorized) { |exception|
+ exception.response.code.should eq 401
+ }
+ end
+
+ it "should be able to login" do
+ resource = @resource['management']
+ response = resource.login SPEC_SETTINGS[:management][:username], SPEC_SETTINGS[:management][:password]
+
+ response.code.should eq 200
+ resource.auth_token.should_not be_nil
+ response.data['access_token'].should eq resource.auth_token
+ resource.options[:headers][:Authorization].should eq "Bearer #{resource.auth_token}"
+ resource.logged_in?.should be_true
+ end
+
+ it "should be able to log out" do
+ resource = @resource['management']
+ resource.login SPEC_SETTINGS[:management][:username], SPEC_SETTINGS[:management][:password]
+ resource.logged_in?.should be_true
+
+ resource.logout
+ resource.options[:headers][:Authorization].should be_nil
+ resource.logged_in?.should be_false
+ end
+
+end
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/other/ruby/spec/usergrid/extensions/hash_spec.rb
----------------------------------------------------------------------
diff --git a/sdks/other/ruby/spec/usergrid/extensions/hash_spec.rb b/sdks/other/ruby/spec/usergrid/extensions/hash_spec.rb
new file mode 100644
index 0000000..9dbecdb
--- /dev/null
+++ b/sdks/other/ruby/spec/usergrid/extensions/hash_spec.rb
@@ -0,0 +1,40 @@
+# 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_relative '../../../lib/usergrid/extensions/hash'
+
+describe Hash do
+
+ it "should add dot notation recursively" do
+ h = { test1: 'test1', test2: { test2a: 'test2a' }, test3: [ { test3a: 'test3a' }] }
+ expect { h.test1 }.to raise_error
+ h.add_dot_notation!
+ h.test1.should eq 'test1'
+ h.test2.test2a.should eq 'test2a'
+ h.test3.first.test3a.should eq 'test3a'
+ h.test1 = 'testx'
+ h.test1.should eq 'testx'
+ end
+
+ it "should symbolize keys at top level" do
+ h = { 'test1' => 'test1', 'test2' => { 'test2a' => 'test2a' }, 'test3' => [ { 'test3a' => 'test3a' }] }
+ h['test1'].should eq 'test1'
+ h = h.symbolize_keys
+ h['test1'].should be_nil
+ h[:test1].should eq 'test1'
+ h[:test2][:test2a].should be_nil
+ h[:test3].first['test3a'].should eq 'test3a'
+ end
+end
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/other/ruby/usergrid_iron.gemspec
----------------------------------------------------------------------
diff --git a/sdks/other/ruby/usergrid_iron.gemspec b/sdks/other/ruby/usergrid_iron.gemspec
new file mode 100644
index 0000000..f9bc46e
--- /dev/null
+++ b/sdks/other/ruby/usergrid_iron.gemspec
@@ -0,0 +1,41 @@
+# 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 -*-
+require File.expand_path('../lib/usergrid/version', __FILE__)
+
+Gem::Specification.new do |gem|
+ gem.authors = ["Scott Ganyo"]
+ gem.email = ["scott@ganyo.com"]
+ gem.description = %q{Low-level gem to access Usergrid / Apigee App Services}
+ gem.summary = %q{Usergrid_iron enables simple, low-level Ruby access to Apigee's App Services
+ (aka Usergrid) REST API with minimal dependencies.}
+ gem.homepage = "https://github.com/scottganyo/usergrid_iron"
+
+ 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{^(spec|spec|features)/})
+ gem.name = "usergrid_iron"
+ gem.require_paths = ["lib"]
+ gem.version = Usergrid::VERSION
+
+ gem.add_dependency 'rest-client'
+ gem.add_dependency 'multi_json'
+
+ 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/perl/Build.PL
----------------------------------------------------------------------
diff --git a/sdks/perl/Build.PL b/sdks/perl/Build.PL
deleted file mode 100644
index 71bcf10..0000000
--- a/sdks/perl/Build.PL
+++ /dev/null
@@ -1,46 +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.
-
-use 5.006;
-use strict;
-use warnings FATAL => 'all';
-use Module::Build;
-
-my $builder = Module::Build->new(
- module_name => 'Usergrid::Client',
- license => 'Apache_2_0',
- abstract => 'Client API for Apache Usergrid',
- dist_author => 'Anuradha Weeraman <an...@cpan.org>',
- dist_version_from => 'lib/Usergrid/Client.pm',
- release_status => 'stable',
- configure_requires => {
- 'Module::Build' => 0,
- },
- build_requires => {
- 'Test::More' => 0,
- },
- requires => {
- 'Moose' => 0,
- 'JSON' => 0,
- 'REST::Client' => 0,
- 'URI::Template' => 0,
- 'Log::Log4perl' => 0,
- 'namespace::autoclean' => 0
- },
- add_to_cleanup => [ 'Usergrid-Client-*' ]
-);
-
-$builder->create_build_script();
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/perl/LICENSE
----------------------------------------------------------------------
diff --git a/sdks/perl/LICENSE b/sdks/perl/LICENSE
deleted file mode 100644
index e06d208..0000000
--- a/sdks/perl/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "{}"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright {yyyy} {name of copyright owner}
-
- Licensed 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/perl/MANIFEST
----------------------------------------------------------------------
diff --git a/sdks/perl/MANIFEST b/sdks/perl/MANIFEST
deleted file mode 100644
index 4169300..0000000
--- a/sdks/perl/MANIFEST
+++ /dev/null
@@ -1,23 +0,0 @@
-.travis.yml
-Build.PL
-examples/books.pl
-lib/Usergrid/Client.pm
-lib/Usergrid/Collection.pm
-lib/Usergrid/Entity.pm
-lib/Usergrid/Request.pm
-LICENSE
-Makefile.PL
-MANIFEST This list of files
-META.json
-META.yml
-README.md
-t/01_init.t
-t/02_login.t
-t/03_update.t
-t/04_collection.t
-t/05_query.t
-t/06_batch_update.t
-t/07_batch_delete.t
-t/08_connections.t
-t/09_paging.t
-t/10_auto_paging.t
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/perl/Makefile.PL
----------------------------------------------------------------------
diff --git a/sdks/perl/Makefile.PL b/sdks/perl/Makefile.PL
deleted file mode 100644
index 6ab9874..0000000
--- a/sdks/perl/Makefile.PL
+++ /dev/null
@@ -1,41 +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.
-
-use strict;
-use warnings;
-
-use 5.008;
-
-use ExtUtils::MakeMaker;
-
-WriteMakefile(
- LICENSE => 'apache',
- AUTHOR => 'Anuradha Weeraman <anuradha@cpan.org',
- ABSTRACT => 'Client API for Apache Usergrid',
- NAME => 'Usergrid::Client',
- VERSION_FROM => 'lib/Usergrid/Client.pm',
- PREREQ_PM => {
- 'Moose' => 0,
- 'JSON' => 0,
- 'REST::Client' => 0,
- 'URI::Template' => 0,
- 'Log::Log4perl' => 0,
- 'namespace::autoclean' => 0
- },
- BUILD_REQUIRES => {
- 'Test::More' => '0.98'
- }
-);