Skip to content

Commit

Permalink
first commit
Browse files Browse the repository at this point in the history
  • Loading branch information
Tom Mullen committed Jun 25, 2012
1 parent eaba4c5 commit e81c40a
Show file tree
Hide file tree
Showing 15 changed files with 219 additions and 87 deletions.
15 changes: 2 additions & 13 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -1,14 +1,3 @@
source "http://rubygems.org"
# Add dependencies required to use your gem here.
# Example:
# gem "activesupport", ">= 2.3.5"
source :rubygems

# Add dependencies to develop your gem here.
# Include everything needed to run rake, tests, features, etc.
group :development do
gem "shoulda", ">= 0"
gem "rdoc", "~> 3.12"
gem "bundler", "~> 1.0.0"
gem "jeweler", "~> 1.8.3"
gem "rcov", ">= 0"
end
gemspec
54 changes: 51 additions & 3 deletions README.rdoc
Original file line number Diff line number Diff line change
@@ -1,8 +1,56 @@
= mbsy
# mbsy

Description goes here.
Ambassador API wrapper for Ruby.

== Contributing to mbsy
This is a lightweight Ruby wrapper for the <a href="https://getambassador.com/">ambassador</a> API.

### Installation

This library can be installed as a gem. It is hosted on [Rubygems](http://rubygems.org).

You can install this library as a gem using the following command:

$ gem install mbsy

### Usage

Simply require this library before you use it:

``` ruby
require 'mbsy'
```

If you're using Rails 3.x, you could include this gem in your Gemfile.
``` ruby
gem 'mbsy'
```

Install the gem using the following command:
$ bundle install

If you're using Rails 2 you could include this gem in your configuration, i.e. in `environment.rb`

``` ruby
config.gem 'mbsy'
```
### Initialise

Make sure you include your api credentials in an initialiser.

``` ruby
Mbsy.configure do |c|
c.api_key 'MY_API_KEY'
c.user_name 'MY_USER_NAME'
end
```

The mbsy gem will give you access to classes such as:

* `Mbsy::Company`
* `Mbsy::Ambassador`
* `Mbsy::Shortcode`

### Contributing to mbsy

* Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
* Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
Expand Down
56 changes: 10 additions & 46 deletions Rakefile
Original file line number Diff line number Diff line change
@@ -1,53 +1,17 @@
# encoding: utf-8

require 'rubygems'
require 'bundler'
begin
Bundler.setup(:default, :development)
rescue Bundler::BundlerError => e
$stderr.puts e.message
$stderr.puts "Run `bundle install` to install missing gems"
exit e.status_code
end
require 'rake'

require 'jeweler'
Jeweler::Tasks.new do |gem|
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
gem.name = "mbsy"
gem.homepage = "http://github.com/temullen/mbsy"
gem.license = "MIT"
gem.summary = %Q{TODO: one-line summary of your gem}
gem.description = %Q{TODO: longer description of your gem}
gem.email = "tom@zappdrewards.com"
gem.authors = ["Tom Mullen"]
# dependencies defined in Gemfile
end
Jeweler::RubygemsDotOrgTasks.new
Bundler::GemHelper.install_tasks
require 'rspec/core/rake_task'

require 'rake/testtask'
Rake::TestTask.new(:test) do |test|
test.libs << 'lib' << 'test'
test.pattern = 'test/**/test_*.rb'
test.verbose = true
RSpec::Core::RakeTask.new(:spec) do |t|
t.pattern = FileList['spec/**/*_spec.rb'].exclude('spec/remote/**/*')
end

require 'rcov/rcovtask'
Rcov::RcovTask.new do |test|
test.libs << 'test'
test.pattern = 'test/**/test_*.rb'
test.verbose = true
test.rcov_opts << '--exclude "gems/*"'
namespace :spec do
desc "Run remote specs"
RSpec::Core::RakeTask.new(:remote) do |t|
t.pattern = FileList['spec/remote/**/*_spec.rb']
end
end

task :default => :test

require 'rdoc/task'
Rake::RDocTask.new do |rdoc|
version = File.exist?('VERSION') ? File.read('VERSION') : ""

rdoc.rdoc_dir = 'rdoc'
rdoc.title = "mbsy #{version}"
rdoc.rdoc_files.include('README*')
rdoc.rdoc_files.include('lib/**/*.rb')
end
task :default => :spec
23 changes: 23 additions & 0 deletions lib/mbsy.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
require 'mbsy/resources/base'
require 'mbsy/resources/ambassador'
require 'mbsy/resources/balance'
require 'mbsy/resources/company'
require 'mbsy/resources/event'
require 'mbsy/resources/shortcode'
require 'mbsy/resources/social'

module Mbsy
def self.log(msg)
Rails.logger.info("[Ambassador] #{msg}")
end

class << self
attr_accessor :api_key, :user_name
def configure
yield self
def self.site_uri
"https://getambassador.com/api/v2/#{user_name}/#{api_key}/json/"
end
end
end
end
Binary file added lib/mbsy/resources/.DS_Store
Binary file not shown.
19 changes: 19 additions & 0 deletions lib/mbsy/resources/ambassador.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
module Mbsy
class Ambassador < Base

def self.find(params={})
raise ArgumentError, "You must include :email" unless params[:email]
call('get', params.reverse_merge(:auto_create => '0'))
end

def self.find_or_create(params={})
raise ArgumentError, "You must include :email" unless params[:email]
call('get', params)
end

def self.search(params={})
call('all', params)
end

end
end
16 changes: 16 additions & 0 deletions lib/mbsy/resources/balance.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
module Mbsy
class Balance < Base

def self.update(mode, params={})
raise ArgumentError, "You must include :email" unless params[:email]
raise ArgumentError, "You must include :amount" unless params[:amount]
case mode
when :add
call('add', params)
when :deduct
call('deduct', params)
end
end

end
end
29 changes: 29 additions & 0 deletions lib/mbsy/resources/base.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
require 'httparty'
require 'json'
require 'cgi'

module Mbsy
class Base
include HTTParty
format :json
default_timeout 30
default_params :output => 'json'

def self.element_name
name.split(/::/).last.underscore
end

def self.call(method, params = {})
api_url = Mbsy.site_uri + self.element_name + '/' + method
Mbsy.log(api_url)

response = JSON.parse(self.get(api_url, :query => params).body)['response']

if response["code"] != '200'
raise "Error from Ambassador API: #{response["errors"]["error"]} (code #{response["code"]})"
end

response['data']
end
end
end
13 changes: 13 additions & 0 deletions lib/mbsy/resources/company.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
module Mbsy
class Company < Base

def self.get_details
call('get')
end

def self.stats
call('stats')
end

end
end
11 changes: 11 additions & 0 deletions lib/mbsy/resources/event.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
module Mbsy
class Event < Base

def self.create(params={})
raise ArgumentError, "You must include :campaign_uid" unless params[:campaign_uid]
raise ArgumentError, "You must include :email" unless params[:email]
call('record', params)
end

end
end
10 changes: 10 additions & 0 deletions lib/mbsy/resources/shortcode.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
module Mbsy
class Shortcode < Base

def self.find(params={})
raise ArgumentError, "You must include :short_code" unless params[:short_code]
call('get', params)
end

end
end
10 changes: 10 additions & 0 deletions lib/mbsy/resources/social.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
module Mbsy
class Social < Base

def self.find(params={})
raise ArgumentError, "You must include :email" unless params[:email]
call('addthis', params)
end

end
end
25 changes: 25 additions & 0 deletions mbsy.gemspec
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
Gem::Specification.new do |s|
s.name = 'mbsy'
s.version = '1.0.0'
s.date = '2012-06-10'
s.summary = 'A Ruby API wrapper for Ambassador'
s.description = ''
s.author = 'Tom Mullen'
s.email = 'tom@zappdrewards.com'
s.homepage = 'http://github.com/temullen/mbsy'

s.files = `git ls-files`.split("\n")
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
s.require_paths = ["lib"]

s.required_ruby_version = ">= 1.9.2"

s.add_development_dependency('rake', '~> 0.9.2')
s.add_development_dependency('rspec', '~> 2.7.0')
s.add_development_dependency('factory_girl', '~> 2.1.0')
s.add_development_dependency('fakeweb', '~> 1.3.0')
s.add_development_dependency('faker', '~> 1.0.1')
s.add_development_dependency('rb-fsevent', '~> 0.4.2')
s.add_development_dependency("shoulda", ">= 0")
s.add_development_dependency("bundler", "~> 1.0.0")
end
18 changes: 0 additions & 18 deletions test/helper.rb

This file was deleted.

7 changes: 0 additions & 7 deletions test/test_mbsy.rb

This file was deleted.

0 comments on commit e81c40a

Please sign in to comment.