momentapp 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ spec/cassettes_library
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --debug
data/Gemfile ADDED
@@ -0,0 +1,20 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem 'faraday'
4
+ gem 'faraday-stack'
5
+ # gem 'faraday_middleware'
6
+ gem 'hashie'
7
+ gem 'activesupport'
8
+ gem 'i18n'
9
+
10
+ group :development do
11
+ gem 'webmock'
12
+ gem 'vcr'
13
+ gem 'fakeweb'
14
+ gem 'rspec'
15
+ gem 'ruby-debug', :platforms => :mri_18
16
+ gem 'ruby-debug19', :require => 'ruby-debug', :platforms => :mri_19
17
+ end
18
+
19
+ # Specify your gem's dependencies in momentapp.gemspec
20
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Millisami
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,60 @@
1
+ # Momentapp
2
+
3
+ ## Description
4
+ Momentapp is a ruby wrapper for the [Momentapp][momentapp] service.
5
+
6
+ ### Installation
7
+
8
+ gem install momentapp
9
+
10
+ ### Usage
11
+
12
+ **Configure**
13
+
14
+ Momentapp::Config.api_key = [Your api key that you can get from http://momentapp.com]
15
+
16
+ **Schedule a new job**
17
+
18
+ target_uri = "http://kasko.com"
19
+ http_method = "GET"
20
+ at = '2012-01-31T18:36:21'
21
+ params = {:var1 => true, :var2 => false, :var3 => "ok"}
22
+ options = {:limit => 3, :callback_uri => "http://callback.com/public/listener"}
23
+
24
+ job = Momentapp.create_job(target_uri, http_method, at, params, options)
25
+ job.id #=> "n9hYHhc1"
26
+ job.uri #=> "http://kasko.com:80/?var1=true&var2=false&var3=ok"
27
+ job.http_method #=> "GET"
28
+ job.at #=> '2012-02-01 08:21:21 +0545'
29
+
30
+ **Updating a existing job**
31
+
32
+ job_id = job.id
33
+ target_uri = "http://tesko.com"
34
+ http_method = "POST"
35
+ options = {}
36
+
37
+ job_update = Momentapp.update_job(job_id, target_uri, http_method, at, params, options)
38
+
39
+ **Deleting the job**
40
+
41
+ job_id = job.id
42
+
43
+ new_result = Momentapp.delete_job(job_id)
44
+ new_result.message #=> 'Job deleted'
45
+
46
+ ## Note on Patches/Pull Requests
47
+
48
+ * Fork the project.
49
+ * Make your feature addition or bug fix.
50
+ * Add tests for it. This is important so I don't break it in a
51
+ future version unintentionally.
52
+ * Commit, do not mess with Rakefile, version, or history.
53
+ (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
54
+ * Send me a pull request. Bonus points for topic branches.
55
+
56
+ ## Copyright
57
+
58
+ Copyright (c) 2011 Millisami. See LICENSE for details.
59
+
60
+ [momentapp]: http://momentapp.com
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require 'bundler/gem_tasks'
@@ -0,0 +1,26 @@
1
+ # Opening class Hash to rename_key since the Momentapp api returns a method parameter which is reserved by
2
+ # Ruby itself. So, to rename method to http_method, we're defining a rename_key method inside Hash class
3
+ # http://snippets.dzone.com/posts/show/4519
4
+ class Hash
5
+ def rename_key(old_key, new_key)
6
+ return Hash.rename_key(self.dup, old_key, new_key)
7
+ end
8
+
9
+ def rename_key!(old_key, new_key)
10
+ return Hash.rename_key(self, old_key, new_key)
11
+ end
12
+
13
+ def all_values_empty?
14
+ self.each_value do |v|
15
+ return false if v and v != ""
16
+ end
17
+
18
+ return true
19
+ end
20
+
21
+ private
22
+ def self.rename_key(hsh, old_key, new_key)
23
+ hsh[new_key.to_s] = hsh.delete(old_key.to_s)
24
+ return hsh
25
+ end
26
+ end
@@ -0,0 +1,3 @@
1
+ module Momentapp
2
+ VERSION = "0.0.1"
3
+ end
data/lib/momentapp.rb ADDED
@@ -0,0 +1,87 @@
1
+ require 'faraday'
2
+ require 'hashie/mash'
3
+
4
+ require "momentapp/version"
5
+ require 'active_support/core_ext'
6
+ require 'core_ext/hash'
7
+
8
+ module Momentapp
9
+ module Config
10
+ class << self
11
+ attr_accessor :api_key
12
+
13
+ def configure
14
+ yield self
15
+ end
16
+ end
17
+ end
18
+
19
+ module Connection
20
+ def connection
21
+ @connection ||= begin
22
+ conn = Faraday.new('https://momentapp.com', ssl: {verify: false}) do |b|
23
+
24
+ b.request :json
25
+ b.adapter Faraday.default_adapter
26
+ end
27
+
28
+ conn.headers['User-Agent'] = 'MomentApp Ruby Client'
29
+ conn
30
+ end
31
+ end
32
+ end
33
+
34
+ module ApiMethods
35
+ def create_job(target_uri, http_method, at, params={}, options={})
36
+ unless params.nil?
37
+ target_uri += "?" + params.to_query
38
+ end
39
+
40
+ job_payload = {:method => http_method.upcase, :at => at, :uri => target_uri}
41
+
42
+ unless options.nil?
43
+ valid_option_keys = [:limit, :callback_uri]
44
+ options.slice(*valid_option_keys)
45
+ job_payload.merge!({:limit => options[:limit]}) if options[:limit].present?
46
+ job_payload.merge!({:callback_uri => options[:callback_uri]}) if options[:callback_uri].present?
47
+ end
48
+
49
+ payload = {:job => job_payload}.merge!(:apikey => Momentapp::Config.api_key)
50
+ response = connection.post '/jobs.json', payload
51
+ job = Hashie::Mash.new(JSON.load(response.body)['success']['job'])
52
+ job = job.rename_key!('method', 'http_method')
53
+ job
54
+ end
55
+
56
+ def update_job(job_id, target_uri, method, at, params={}, options={})
57
+ unless params.nil?
58
+ target_uri += "?" + params.to_query
59
+ end
60
+
61
+ job_payload = {:method => method.upcase, :at => at, :uri => target_uri}
62
+
63
+ unless options.nil?
64
+ valid_option_keys = [:limit, :callback_uri]
65
+ options.slice(*valid_option_keys)
66
+ job_payload.merge!({:limit => options[:limit]}) if options[:limit].present?
67
+ job_payload.merge!({:callback_uri => options[:callback_uri]}) if options[:callback_uri].present?
68
+ end
69
+
70
+ payload = {:job => job_payload}.merge!(:apikey => Momentapp::Config.api_key)
71
+ response = connection.put "/jobs/#{job_id}.json", payload
72
+ job = Hashie::Mash.new(JSON.load(response.body)['success']['job'])
73
+ job = job.rename_key!('method', 'http_method')
74
+ job
75
+ end
76
+
77
+ def delete_job(job_id)
78
+ response = connection.delete "/jobs/#{job_id}.json?apikey=#{Momentapp::Config.api_key}"
79
+ job = Hashie::Mash.new(JSON.load(response.body)['success'])
80
+ job
81
+ end
82
+ end
83
+
84
+ extend Config
85
+ extend Connection
86
+ extend ApiMethods
87
+ end
data/momentapp.gemspec ADDED
@@ -0,0 +1,20 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "momentapp/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "momentapp"
7
+ s.version = Momentapp::VERSION
8
+ s.authors = ["millisami"]
9
+ s.email = ["millisami@gmail.com"]
10
+ s.homepage = "http://momentapp.github.com"
11
+ s.summary = %q{Moment is a ruby wrapper for the Momentapp.com service.}
12
+ s.description = %q{Moment is a ruby wrapper for the Momentapp.com service. Interaction with the Momentapp API made easy.}
13
+
14
+ s.rubyforge_project = "momentapp"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+ end
File without changes
@@ -0,0 +1,85 @@
1
+ require 'spec_helper'
2
+
3
+ describe Momentapp do
4
+ context "scheduling a new job" do
5
+ it "with no parameters" do
6
+ # WebMock.allow_net_connect!
7
+ VCR.use_cassette "new_job", :record => :new_episodes do
8
+ target_uri = "http://kasko.com"
9
+ method = "GET"
10
+ at = '2012-01-31T18:36:21'
11
+ job = Momentapp.create_job(target_uri, method, at)
12
+
13
+ job.uri.should eql("http://kasko.com:80/")
14
+ job.http_method.should eql('GET')
15
+ job.at.should eql('2012-02-01 08:21:21 +0545')
16
+ end
17
+ end
18
+
19
+ it "with parameters" do
20
+ # WebMock.allow_net_connect!
21
+ VCR.use_cassette "new_job_with_params", :record => :new_episodes do
22
+ target_uri = "http://kasko.com"
23
+ method = "GET"
24
+ at = '2012-01-31T18:36:21'
25
+ params = {:var1 => true, :var2 => false, :var3 => "ok"}
26
+ job = Momentapp.create_job(target_uri, method, at, params)
27
+
28
+ job.uri.should eql("http://kasko.com:80/?var1=true&var2=false&var3=ok")
29
+ job.http_method.should eql('GET')
30
+ job.at.should eql('2012-02-01 08:21:21 +0545')
31
+ end
32
+ end
33
+
34
+ it "with parameters and options" do
35
+ # WebMock.allow_net_connect!
36
+ VCR.use_cassette "new_job_with_params_n_options", :record => :new_episodes do
37
+ target_uri = "http://kasko.com"
38
+ http_method = "GET"
39
+ at = '2012-01-31T18:36:21'
40
+ params = {:var1 => true, :var2 => false, :var3 => "ok"}
41
+ options = {:limit => 3, :callback_uri => "http://callback.com/public/listener"}
42
+ job = Momentapp.create_job(target_uri, http_method, at, params, options)
43
+ job.uri.should eql("http://kasko.com:80/?var1=true&var2=false&var3=ok")
44
+ job.http_method.should eql('GET')
45
+ job.at.should eql('2012-02-01 08:21:21 +0545')
46
+ end
47
+ end
48
+ end
49
+
50
+ it "should update a scheduled job" do
51
+ # WebMock.allow_net_connect!
52
+ VCR.use_cassette "update_job", :record => :new_episodes do
53
+ target_uri = "http://kasko.com"
54
+ method = "GET"
55
+ at = '2012-01-31T18:36:21'
56
+ params = {:var1 => true, :var2 => false, :var3 => "ok"}
57
+ job = Momentapp.create_job(target_uri, method, at, params)
58
+
59
+ job_id = job.id
60
+ target_uri = "http://tesko.com"
61
+ method = "POST"
62
+ options = {}
63
+ job_update = Momentapp.update_job(job_id, target_uri, method, at, params, options)
64
+
65
+ job_update.uri.should eql("http://tesko.com:80/")
66
+ job_update.http_method.should eql('POST')
67
+ job_update.at.should eql('2013-02-01 08:21:21 +0545')
68
+ end
69
+ end
70
+
71
+ it "should delete a scheduled job" do
72
+ # WebMock.allow_net_connect!
73
+ VCR.use_cassette "delete_job", :record => :new_episodes do
74
+ target_uri = "http://kasko.com"
75
+ method = "GET"
76
+ at = '2012-01-31T18:36:21'
77
+ job = Momentapp.create_job(target_uri, method, at)
78
+
79
+ job_id = job.id
80
+
81
+ new_result = Momentapp.delete_job(job_id)
82
+ new_result.message.should eql('Job deleted')
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,24 @@
1
+ path = File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(path) unless $LOAD_PATH.include?(path)
3
+
4
+ require 'momentapp'
5
+ require 'vcr'
6
+ require 'webmock'
7
+
8
+ RSpec.configure do |config|
9
+ config.filter_run :focus => true
10
+ config.filter_run_excluding :broken => true
11
+ config.run_all_when_everything_filtered = true
12
+ config.extend VCR::RSpec::Macros
13
+
14
+ config.before(:all) {
15
+ Momentapp::Config.api_key = "4wV4xjaYbpWRLY_sHYYc"
16
+ }
17
+ end
18
+
19
+ VCR.config do |c|
20
+ c.cassette_library_dir = 'spec/cassettes_library'
21
+ c.stub_with :webmock
22
+ c.ignore_localhost = true
23
+ c.default_cassette_options = { :record => :none }
24
+ end
metadata ADDED
@@ -0,0 +1,64 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: momentapp
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - millisami
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-07-18 00:00:00.000000000 +05:45
13
+ default_executable:
14
+ dependencies: []
15
+ description: Moment is a ruby wrapper for the Momentapp.com service. Interaction with
16
+ the Momentapp API made easy.
17
+ email:
18
+ - millisami@gmail.com
19
+ executables: []
20
+ extensions: []
21
+ extra_rdoc_files: []
22
+ files:
23
+ - .gitignore
24
+ - .rspec
25
+ - Gemfile
26
+ - LICENSE
27
+ - README.md
28
+ - Rakefile
29
+ - lib/core_ext/hash.rb
30
+ - lib/momentapp.rb
31
+ - lib/momentapp/version.rb
32
+ - momentapp.gemspec
33
+ - spec/cassettes_library/.gitkeep
34
+ - spec/momentapp_spec.rb
35
+ - spec/spec_helper.rb
36
+ has_rdoc: true
37
+ homepage: http://momentapp.github.com
38
+ licenses: []
39
+ post_install_message:
40
+ rdoc_options: []
41
+ require_paths:
42
+ - lib
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ none: false
45
+ requirements:
46
+ - - ! '>='
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ required_rubygems_version: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ requirements: []
56
+ rubyforge_project: momentapp
57
+ rubygems_version: 1.6.2
58
+ signing_key:
59
+ specification_version: 3
60
+ summary: Moment is a ruby wrapper for the Momentapp.com service.
61
+ test_files:
62
+ - spec/cassettes_library/.gitkeep
63
+ - spec/momentapp_spec.rb
64
+ - spec/spec_helper.rb