mashery 0.0.10 → 0.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.textile CHANGED
@@ -25,3 +25,27 @@ Before you can successfully call an API method, you must set these environment v
25
25
  bc. $ export MASHERY_SITE_ID=666
26
26
  $ export MASHERY_API_KEY=cafebebedeadbeefcafebebedeadbeef
27
27
  $ export MASHERY_SHARED_SECRET=blahblahblah
28
+
29
+ h3. Querying objects
30
+
31
+ The Mashery API supports querying the following types of objects: "members":http://support.mashery.com/docs/mashery_api/member/, "applications":http://support.mashery.com/docs/mashery_api/application/, "keys":http://support.mashery.com/docs/mashery_api/key/, "services":http://support.mashery.com/docs/mashery_api/service/, and "roles":http://support.mashery.com/docs/mashery_api/role/.
32
+
33
+ To perform a query, construct a Query object for the type of object you want to query:
34
+
35
+ bc. query = Mashery::Query.new('members')
36
+ members = query.fetch_all
37
+
38
+ The @fetch_all@ method will automatically paginate through the results for you. You can also control this yourself with the @page@ parameter and @execute@:
39
+
40
+ bc. query = Mashery::Query.new('members', :page => 2)
41
+ result = query.execute
42
+ items = result['items']
43
+
44
+ (Or, use the @items@ method, which combines @execute@ and @result['items']@ -- however, this does not return result set metadata, like current page and total pages.)
45
+
46
+ The default will return all fields (e.g., @SELECT * FROM members@). To control this, specify the @:fields@ parameter.
47
+
48
+ To control which records are returned, specify the @:where@ parameter.
49
+
50
+ bc. query = Mashery::Query.new('members', :where => 'username = "Jeff"'
51
+
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.10
1
+ 0.0.11
data/lib/mashery.rb CHANGED
@@ -4,6 +4,7 @@ require 'mashery/api_object_base'
4
4
  require 'mashery/member'
5
5
  require 'mashery/key'
6
6
  require 'mashery/role'
7
+ require 'mashery/query'
7
8
 
8
9
  module Mashery
9
10
  mattr_accessor :client
@@ -0,0 +1,63 @@
1
+ module Mashery
2
+ class Query
3
+ OBJECT_TYPES = ['members', 'keys', 'services', 'roles', 'applications']
4
+ DEFAULT_QUERIES_PER_SECOND = 2
5
+
6
+ attr_reader :object_type, :fields
7
+ attr_accessor :page
8
+
9
+ def initialize(object_type, options={})
10
+ if !OBJECT_TYPES.include?(object_type)
11
+ raise "Invalid object type. '#{object_type}' must be in #{OBJECT_TYPES.inspect}"
12
+ end
13
+
14
+ @object_type = object_type
15
+
16
+ if options[:fields]
17
+ @fields = options[:fields]
18
+ else
19
+ @fields = "*"
20
+ end
21
+
22
+ @where = options[:where]
23
+ @page = options[:page]
24
+ end
25
+
26
+ def page_clause
27
+ "PAGE #{@page}" if @page
28
+ end
29
+
30
+ def where_clause
31
+ "WHERE #{@where}" if @where
32
+ end
33
+
34
+ def query_string
35
+ "SELECT #{fields} FROM #{object_type} #{where_clause} #{page_clause}"
36
+ end
37
+
38
+ def execute
39
+ Mashery.client.call_remote('object.query', query_string)
40
+ end
41
+
42
+ def items
43
+ execute['items']
44
+ end
45
+
46
+ # Page through the results. Due heavy use of the API, this method
47
+ # takes a qps parameter to control how often the API is called.
48
+ def fetch_all(qps=DEFAULT_QUERIES_PER_SECOND)
49
+ response = execute
50
+ items = response['items']
51
+
52
+ while response['current_page'] < response['total_pages']
53
+ self.page = response['current_page'] + 1
54
+ response = execute
55
+ items = items + response['items']
56
+
57
+ sleep(1.0/DEFAULT_QUERIES_PER_SECOND)
58
+ end
59
+
60
+ return items
61
+ end
62
+ end
63
+ end
data/mashery.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{mashery}
8
- s.version = "0.0.10"
8
+ s.version = "0.0.11"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Brian Moseley"]
12
- s.date = %q{2010-08-13}
12
+ s.date = %q{2010-08-26}
13
13
  s.email = %q{brian@outside.in}
14
14
  s.extra_rdoc_files = [
15
15
  "LICENSE.txt",
@@ -28,6 +28,7 @@ Gem::Specification.new do |s|
28
28
  "lib/mashery/exceptions.rb",
29
29
  "lib/mashery/key.rb",
30
30
  "lib/mashery/member.rb",
31
+ "lib/mashery/query.rb",
31
32
  "lib/mashery/role.rb",
32
33
  "mashery.gemspec",
33
34
  "tasks/mashery.thor"
@@ -35,14 +36,14 @@ Gem::Specification.new do |s|
35
36
  s.homepage = %q{http://github.com/outsidein/mashery-rb}
36
37
  s.rdoc_options = ["--charset=UTF-8"]
37
38
  s.require_paths = ["lib"]
38
- s.rubygems_version = %q{1.3.6}
39
+ s.rubygems_version = %q{1.3.7}
39
40
  s.summary = %q{A Ruby library for the Mashery API}
40
41
 
41
42
  if s.respond_to? :specification_version then
42
43
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
43
44
  s.specification_version = 3
44
45
 
45
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
46
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
46
47
  else
47
48
  end
48
49
  else
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mashery
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 9
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
7
8
  - 0
8
- - 10
9
- version: 0.0.10
9
+ - 11
10
+ version: 0.0.11
10
11
  platform: ruby
11
12
  authors:
12
13
  - Brian Moseley
@@ -14,7 +15,7 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-08-13 00:00:00 -04:00
18
+ date: 2010-08-26 00:00:00 -04:00
18
19
  default_executable:
19
20
  dependencies: []
20
21
 
@@ -40,6 +41,7 @@ files:
40
41
  - lib/mashery/exceptions.rb
41
42
  - lib/mashery/key.rb
42
43
  - lib/mashery/member.rb
44
+ - lib/mashery/query.rb
43
45
  - lib/mashery/role.rb
44
46
  - mashery.gemspec
45
47
  - tasks/mashery.thor
@@ -53,23 +55,27 @@ rdoc_options:
53
55
  require_paths:
54
56
  - lib
55
57
  required_ruby_version: !ruby/object:Gem::Requirement
58
+ none: false
56
59
  requirements:
57
60
  - - ">="
58
61
  - !ruby/object:Gem::Version
62
+ hash: 3
59
63
  segments:
60
64
  - 0
61
65
  version: "0"
62
66
  required_rubygems_version: !ruby/object:Gem::Requirement
67
+ none: false
63
68
  requirements:
64
69
  - - ">="
65
70
  - !ruby/object:Gem::Version
71
+ hash: 3
66
72
  segments:
67
73
  - 0
68
74
  version: "0"
69
75
  requirements: []
70
76
 
71
77
  rubyforge_project:
72
- rubygems_version: 1.3.6
78
+ rubygems_version: 1.3.7
73
79
  signing_key:
74
80
  specification_version: 3
75
81
  summary: A Ruby library for the Mashery API