mashery_rails 0.6.2 → 0.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore CHANGED
@@ -3,4 +3,5 @@ pkg
3
3
  .#*
4
4
  doc/
5
5
  coverage/
6
- measurements/
6
+ measurements/
7
+ *.gem
data/.travis.yml CHANGED
@@ -1,12 +1,4 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 1.9.3
4
- - 1.9.2
5
- - jruby-18mode
6
- - jruby-19mode
7
- - rbx-18mode
8
4
  - rbx-19mode
9
- - ruby-head
10
- - jruby-head
11
- - 1.8.7
12
- - ree
data/README.md CHANGED
@@ -1,9 +1,8 @@
1
1
  # mashery_rails
2
2
 
3
- [![Coverage Status](https://coveralls.io/repos/farleyknight/masheri/badge.png)](https://coveralls.io/r/farleyknight/masheri)
4
-
3
+ [![Coverage Status](https://coveralls.io/repos/farleyknight/mashery_rails/badge.png)](https://coveralls.io/r/farleyknight/mashery_rails)
5
4
  [![Build Status](https://travis-ci.org/farleyknight/mashery_rails.png?branch=master)](https://travis-ci.org/farleyknight/mashery_rails)
6
-
5
+ [![Code Climate](https://codeclimate.com/github/farleyknight/mashery_rails.png)](https://codeclimate.com/github/farleyknight/mashery_rails)
7
6
 
8
7
  A Rails library for the [Mashery API](http://support.mashery.com/docs/mashery_api).
9
8
 
@@ -41,23 +40,86 @@ host: "api.mashery.com"
41
40
 
42
41
  Note this doesn't distinguish between development, testing, production, etc. If you really need that functionality, open a new issue.
43
42
 
44
- ## Usage
43
+ ## JSON-RPC API
45
44
 
46
45
  The central data objects are all listed on the [RPC API documentation page](http://support.mashery.com/docs/read/mashery_api/20/API_Objects), and should be supported. However, [fetching objects](http://support.mashery.com/docs/read/mashery_api/20/Fetching_Objects) are the main & typically only supported method for each of these objects. If you feel you want to support more methods, feel free to create a pull request.
47
46
 
48
-
49
47
  ### `all`
50
48
 
51
- Fetch all objects of a particular type.
49
+ Fetch the first 100 objects of a particular type. The 100 objects constraint is caused by [Mashery](http://support.mashery.com/docs/read/mashery_api/20/Query_Language):
50
+
51
+ > Query results are always paginated. There is a limit of fetching 100 records at one time. By default, only the first 100 records are returned.
52
52
 
53
53
  ```ruby
54
54
  Mashery::Member.all #=>
55
55
  ```
56
56
 
57
+ ### `find_each`
58
+
59
+ Much like `ActiveRecord::Base.find_each`, this will take a block and auto-paginate the object set, working around the 100 items per page limitation stated above.
60
+
61
+ ```ruby
62
+ Mashery::Member.find_each {|m| m.do_something! }
63
+ ```
64
+
57
65
  ### `first`
58
66
 
59
- Fetch the first object of a particular type.
67
+ Fetch the first object of a particular type. This is effectively setting "ITEMS 1" and reifying that object.
60
68
 
61
69
  ```ruby
62
70
  Mashery::Member.first #=>
63
71
  ```
72
+
73
+ ### `count`
74
+
75
+ The total number of objects.
76
+
77
+ ```ruby
78
+ Mashery::Member.count #=>
79
+ ```
80
+
81
+ ## Query Language
82
+
83
+ Mashery has a basic SQL-like Query Language. This library provides basic AREL-like functionality to build those queries. One small, but important difference is lack of lazy loading. These methods produce queries, but you have to call `all` in order to retrieve the objects.
84
+
85
+ ### `select`
86
+
87
+ Change the SELECT fragment of the query.
88
+
89
+ ```ruby
90
+ Mashery::Member.select("name") #=>
91
+ ```
92
+
93
+ ### `where`
94
+
95
+ Change the WHERE fragment of the query.
96
+
97
+ ```ruby
98
+ Mashery::Member.where(name: "User Name")
99
+
100
+ #=> SELECT * FROM members WHERE name = 'User Name' ITEMS 100
101
+ ```
102
+
103
+ ### `items`
104
+
105
+ Change the ITEMS fragment of the query.
106
+
107
+ ```ruby
108
+ Mashery::Member.items(10)
109
+
110
+ #=> => SELECT * FROM members ITEMS 10
111
+ ```
112
+
113
+ ### `page`
114
+
115
+ Change the PAGE fragment of the query.
116
+
117
+ ```ruby
118
+ Mashery::Member.page(10)
119
+
120
+ #=> SELECT * FROM members PAGE 10 ITEMS 100
121
+ ```
122
+
123
+ ## REST API
124
+
125
+ Mashery's REST API are mostly calls based on service objects.
data/Rakefile CHANGED
@@ -1,9 +1,12 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
1
4
  # Added by devtools
2
5
  require 'devtools'
3
6
  Devtools.init_rake_tasks
4
7
 
5
8
  Bundler::GemHelper.install_tasks
6
9
 
7
- task :build_gem do
8
- system "gem build --directory=pkg/"
9
- end
10
+ require 'rspec/core/rake_task'
11
+ task :default => :spec
12
+ RSpec::Core::RakeTask.new
@@ -21,7 +21,7 @@ module Mashery
21
21
 
22
22
  class ParamMissing < Exception
23
23
  def initialize(param)
24
- super "Couldn't determine Mashery #{param.inspect}! Please check your config/masheri.yml"
24
+ super "Couldn't determine Mashery #{param.inspect}! Please check your config/mashery.yml"
25
25
  end
26
26
  end
27
27
 
@@ -0,0 +1,10 @@
1
+ require 'rails/generators'
2
+
3
+ module Mashery
4
+ class InstallGenerator < Rails::Generators::Base
5
+ def create_initializer_file
6
+ config = %Q{---\nsite_id: '123'\nkey: "abc"\nsecret: "xyz"\nhost: "api.mashery.com"}
7
+ create_file "config/mashery.yml", config
8
+ end
9
+ end
10
+ end
data/lib/mashery/rails.rb CHANGED
@@ -3,7 +3,7 @@ module Mashery
3
3
  if File.exists? rails_config
4
4
  load_config! rails_config
5
5
  else
6
- raise MissingConfig.new
6
+ # raise MissingConfig.new
7
7
  end
8
8
  end
9
9
 
@@ -12,7 +12,7 @@ module Mashery
12
12
  end
13
13
 
14
14
  class Engine < ::Rails::Engine
15
- initializer "load_masheri_config" do
15
+ initializer "load_mashery_config" do
16
16
  Mashery.load_rails_config!
17
17
  end
18
18
  end
@@ -15,6 +15,10 @@ module Mashery
15
15
  default_query.all
16
16
  end
17
17
 
18
+ def self.select(argument)
19
+ default_query.select(argument)
20
+ end
21
+
18
22
  def self.items(argument)
19
23
  default_query.items(argument)
20
24
  end
@@ -31,6 +35,12 @@ module Mashery
31
35
  default_query.find_each(&block)
32
36
  end
33
37
 
38
+ def self.first
39
+ new(standard_query.items(1).all.items[0])
40
+ end
41
+
42
+ protected
43
+
34
44
  def self.standard_query
35
45
  Mashery.rpc.query_builder(self).from(object_type).items(100)
36
46
  end
@@ -39,10 +49,6 @@ module Mashery
39
49
  standard_query
40
50
  end
41
51
 
42
- def self.first
43
- new(standard_query.items(1).all.items[0])
44
- end
45
-
46
52
  def self.object_type
47
53
  self.name.underscore.split('/').last.pluralize
48
54
  end
@@ -0,0 +1,3 @@
1
+ module Mashery
2
+ VERSION = "0.6.3"
3
+ end
data/lib/mashery.rb CHANGED
@@ -16,11 +16,13 @@ require 'mashery/rest_client'
16
16
  require 'mashery/query_builder'
17
17
  require 'mashery/rest_client/query'
18
18
 
19
-
20
19
  require 'mashery/member'
21
20
  require 'mashery/key'
22
21
  require 'mashery/service'
23
22
 
23
+ require 'mashery/rails'
24
+ require 'mashery/generator'
25
+
24
26
  module Mashery
25
27
  @@config = nil
26
28
 
@@ -49,7 +51,3 @@ module Mashery
49
51
  Mashery.rest.activity(activity_type, service_id, options)
50
52
  end
51
53
  end
52
-
53
- if defined?(Rails)
54
- require 'mashery/rails'
55
- end
@@ -1,6 +1,8 @@
1
+ require File.expand_path("../lib/mashery/version", __FILE__)
2
+
1
3
  Gem::Specification.new do |s|
2
4
  s.name = "mashery_rails"
3
- s.version = File.read("VERSION")
5
+ s.version = Mashery::VERSION
4
6
 
5
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
6
8
  s.authors = ["Farley Knight"]
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  site_id: "12345"
3
3
  secret: "super_secret"
4
- host: "masheri.example.com"
4
+ host: "mashery.example.com"
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  site_id: "12345"
3
3
  key: "abcde"
4
- host: "masheri.example.com"
4
+ host: "mashery.example.com"
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  key: "abcde"
3
3
  secret: "super_secret"
4
- host: "masheri.example.com"
4
+ host: "mashery.example.com"
@@ -2,4 +2,4 @@
2
2
  site_id: "12345"
3
3
  secret: "super_secret"
4
4
  key: "abcde"
5
- host: "masheri.example.com"
5
+ host: "mashery.example.com"
data/spec/spec_helper.rb CHANGED
@@ -38,7 +38,7 @@ RSpec.configure do |config|
38
38
  key: key,
39
39
  secret: secret,
40
40
  signature: signature,
41
- host: "masheri.example.com",
41
+ host: "mashery.example.com",
42
42
  })
43
43
 
44
44
  Mashery.config = config
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mashery_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.2
4
+ version: 0.6.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -79,7 +79,6 @@ files:
79
79
  - LICENSE.txt
80
80
  - README.md
81
81
  - Rakefile
82
- - VERSION
83
82
  - config/devtools.yml
84
83
  - config/flay.yml
85
84
  - config/flog.yml
@@ -90,6 +89,7 @@ files:
90
89
  - lib/mashery.rb
91
90
  - lib/mashery/config.rb
92
91
  - lib/mashery/exceptions.rb
92
+ - lib/mashery/generator.rb
93
93
  - lib/mashery/key.rb
94
94
  - lib/mashery/local.rb
95
95
  - lib/mashery/member.rb
@@ -101,7 +101,7 @@ files:
101
101
  - lib/mashery/rpc_client/base.rb
102
102
  - lib/mashery/rpc_client/response.rb
103
103
  - lib/mashery/service.rb
104
- - masheri.gemspec
104
+ - lib/mashery/version.rb
105
105
  - mashery_rails.gemspec
106
106
  - spec/fixtures/config.no_host.yml
107
107
  - spec/fixtures/config.no_key.yml
@@ -117,7 +117,6 @@ files:
117
117
  - spec/mashery/service_spec.rb
118
118
  - spec/mashery_spec.rb
119
119
  - spec/spec_helper.rb
120
- - tasks/mashery.thor
121
120
  homepage: http://github.com/farleyknight/mashery_rails
122
121
  licenses:
123
122
  - MIT
@@ -131,6 +130,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
131
130
  - - ! '>='
132
131
  - !ruby/object:Gem::Version
133
132
  version: '0'
133
+ segments:
134
+ - 0
135
+ hash: 967152834943881282
134
136
  required_rubygems_version: !ruby/object:Gem::Requirement
135
137
  none: false
136
138
  requirements:
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.6.2
data/masheri.gemspec DELETED
@@ -1,26 +0,0 @@
1
- Gem::Specification.new do |s|
2
- s.name = "masheri"
3
- s.version = File.read("VERSION")
4
-
5
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
6
- s.authors = ["Farley Knight"]
7
- s.date = "2013-09-23"
8
- s.email = "farleyknight@gmail.com"
9
- s.extra_rdoc_files = [
10
- "LICENSE.txt",
11
- "README.md",
12
- "README.textile"
13
- ]
14
-
15
- s.files = `git ls-files`.split("\n")
16
-
17
- s.homepage = "http://github.com/farleyknight/masheri"
18
- s.licenses = ["MIT"]
19
- s.require_paths = ["lib"]
20
- s.rubygems_version = "1.8.25"
21
- s.summary = "Rails gem for Mashery. Clean config and includes tests with decent test coverage"
22
-
23
- s.add_dependency(%q<activesupport>, [">= 3.1.0"])
24
- s.add_dependency(%q<rest-client>, [">= 0"])
25
- s.add_dependency(%q<json>, [">= 0"])
26
- end
data/tasks/mashery.thor DELETED
@@ -1,200 +0,0 @@
1
- require 'rubygems'
2
- require 'bundler'
3
- Bundler.setup
4
-
5
- # XXX: only do this when the task has not been installed
6
- $: << 'lib'
7
-
8
- require 'mashery'
9
-
10
- module Mashery
11
- class CLI < Thor
12
- namespace :mashery
13
-
14
- desc "echo VALUE", "Echo the provided value (tests connectivity and authentication)"
15
- def echo(value)
16
- run { ok(::Mashery.client.echo(value)) }
17
- end
18
-
19
- protected
20
- def run(&block)
21
- site_id = ENV['MASHERY_SITE_ID'] or
22
- raise Exception, "Please set the MASHERY_SITE_ID environment variable."
23
- key = ENV['MASHERY_API_KEY'] or
24
- raise Exception, "Please set the MASHERY_API_KEY environment variable."
25
- secret = ENV['MASHERY_SHARED_SECRET'] or
26
- raise Exception, "Please set the MASHERY_SHARED_SECRET environment variable."
27
- ::Mashery.test_mode = ENV['MASHERY_PRODUCTION_MODE'].blank?
28
- ::Mashery.logger.level = Logger::DEBUG
29
- ::Mashery.client = ::Mashery::Client.new(site_id, key, secret)
30
- begin
31
- yield
32
- rescue ::Mashery::HttpException => e
33
- error("HTTP error: #{e.message}")
34
- rescue ::Mashery::JsonRpcException => e
35
- error(e.message)
36
- rescue ::Mashery::ValidationException => e
37
- e.errors.each {|err| warn("#{err['field']}: #{err['message']}")}
38
- error("Unable to execute method due to validation errors")
39
- end
40
- end
41
-
42
- def warn(msg)
43
- say_status :WARN, msg, :yellow
44
- end
45
-
46
- def ok(msg)
47
- say_status :OK, msg
48
- end
49
-
50
- def error(msg)
51
- say_status :ERROR, msg, :red
52
- end
53
-
54
- def debug(msg)
55
- say_status :DEBUG, msg, :cyan
56
- end
57
- end
58
-
59
- class MemberCLI < CLI
60
- namespace 'mashery:member'
61
-
62
- desc "create USERNAME DISPLAY_NAME EMAIL [--fields ...]", "Create a member"
63
- method_option :fields, :type => :hash
64
- def create(username, display_name, email)
65
- run do
66
- begin
67
- member = ::Mashery::Member.create(username, display_name, email, options[:fields])
68
- ok("Member #{member.username} created")
69
- rescue ::Mashery::DuplicateObjectException
70
- error("The username #{username} has already been claimed")
71
- end
72
- end
73
- end
74
-
75
- desc "fetch USERNAME", "Fetch a member"
76
- def fetch(username)
77
- run do
78
- member = ::Mashery::Member.fetch(username)
79
- if member
80
- ok("Member #{username} found")
81
- say(member.to_yaml)
82
- else
83
- warn("Member #{username} not found")
84
- end
85
- end
86
- end
87
-
88
- desc "addrole USERNAME ROLE_ID", "Assign a role to a member"
89
- def addrole(username, role_id)
90
- run do
91
- member = ::Mashery::Member.fetch(username)
92
- if member
93
- role = ::Mashery::Role.fetch(role_id.to_i)
94
- if role
95
- member.add_role(role)
96
- ok("Role #{role.name} assigned to member #{username}")
97
- else
98
- warn("Role #{role_id} not found")
99
- end
100
- else
101
- warn("Member #{username} not found")
102
- end
103
- end
104
- end
105
-
106
- desc "rmrole USERNAME ROLE_ID", "Revoke a role from a member"
107
- def rmrole(username, role_id)
108
- run do
109
- member = ::Mashery::Member.fetch(username)
110
- if member
111
- role = ::Mashery::Role.fetch(role_id.to_i)
112
- if role
113
- member.remove_role(role)
114
- ok("Role #{role.name} revoked from member #{username}")
115
- else
116
- warn("Role #{role_id} not found")
117
- end
118
- else
119
- warn("Member #{username} not found")
120
- end
121
- end
122
- end
123
-
124
- desc "delete USERNAME", "Delete a member"
125
- def delete(username)
126
- run do
127
- ::Mashery::Member.delete(username)
128
- ok("Member #{username} deleted")
129
- end
130
- end
131
- end
132
-
133
- class KeyCLI < CLI
134
- namespace 'mashery:key'
135
-
136
- desc "create SERVICE_KEY USERNAME [--fields ...]", "Create a key"
137
- method_option :fields, :type => :hash
138
- def create(service_key, username)
139
- run do
140
- key = ::Mashery::Key.create(service_key, username, options[:fields])
141
- ok("Key #{key.id} created for member #{username} and service #{service_key}")
142
- end
143
- end
144
-
145
- desc "fetch ID", "Fetch a key"
146
- def fetch(id)
147
- run do
148
- key = ::Mashery::Key.fetch(id.to_i)
149
- if key
150
- ok("Key #{id} found")
151
- say(key.to_yaml)
152
- else
153
- warn("Key #{id} not found")
154
- end
155
- end
156
- end
157
-
158
- desc "delete ID", "Delete a key"
159
- def delete(id)
160
- run do
161
- ::Mashery::Key.delete(id.to_i)
162
- ok("Key #{id} deleted")
163
- end
164
- end
165
- end
166
-
167
- class RoleCLI < CLI
168
- namespace 'mashery:role'
169
-
170
- desc "create NAME [--fields ...]", "Create a role"
171
- method_option :fields, :type => :hash
172
- def create(name)
173
- run do
174
- role = ::Mashery::Role.create(name, options[:fields])
175
- ok("Role #{role.id} created with name #{name}")
176
- end
177
- end
178
-
179
- desc "fetch ID", "Fetch a role"
180
- def fetch(id)
181
- run do
182
- role = ::Mashery::Role.fetch(id.to_i)
183
- if role
184
- ok("Role #{id} found")
185
- say(role.to_yaml)
186
- else
187
- warn("Role #{id} not found")
188
- end
189
- end
190
- end
191
-
192
- desc "delete ID", "Delete a role"
193
- def delete(id)
194
- run do
195
- ::Mashery::Role.delete(id.to_i)
196
- ok("Role #{id} deleted")
197
- end
198
- end
199
- end
200
- end