hashrocket-mousetrap 0.1.1 → 0.2.0
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/Rakefile +5 -3
- data/VERSION +1 -1
- data/lib/mousetrap.rb +8 -4
- data/lib/mousetrap/customer.rb +92 -5
- data/lib/mousetrap/plan.rb +27 -0
- data/lib/mousetrap/resource.rb +106 -3
- data/lib/mousetrap/subscription.rb +81 -0
- data/mousetrap.gemspec +28 -10
- data/spec/factories.rb +22 -0
- data/spec/integration/settings.example.yml +4 -2
- data/spec/integration/smoke_test.rb +77 -36
- data/spec/integration/spike.rb +93 -0
- data/spec/mousetrap/customer_spec.rb +118 -11
- data/spec/mousetrap/plan_spec.rb +19 -0
- data/spec/mousetrap/resource_spec.rb +87 -2
- data/spec/mousetrap/subscription_spec.rb +12 -0
- data/spec/spec_helper.rb +14 -18
- data/spec/support/random_data.rb +21 -0
- metadata +41 -8
data/Rakefile
CHANGED
@@ -8,10 +8,12 @@ begin
|
|
8
8
|
gem.summary = %Q{CheddarGetter API Client in Ruby}
|
9
9
|
gem.description = %Q{CheddarGetter API Client in Ruby}
|
10
10
|
gem.email = "jonlarkowski@gmail.com"
|
11
|
-
gem.homepage = "http://github.com/
|
12
|
-
gem.authors = ["Jon Larkowski", "Sandro Turriate"]
|
13
|
-
gem.add_development_dependency "rspec", '>= 1.2.8'
|
11
|
+
gem.homepage = "http://github.com/hashrocket/mousetrap"
|
12
|
+
gem.authors = ["Jon Larkowski", "Sandro Turriate", "Wolfram Arnold", "Corey Grusden"]
|
14
13
|
gem.add_dependency 'httparty', '>= 0.4.4'
|
14
|
+
gem.add_development_dependency "activesupport", '>= 2.3.3'
|
15
|
+
gem.add_development_dependency "rspec", '>= 1.2.8'
|
16
|
+
gem.add_development_dependency 'thoughtbot-factory_girl', '>= 1.2.2'
|
15
17
|
end
|
16
18
|
rescue LoadError
|
17
19
|
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/lib/mousetrap.rb
CHANGED
@@ -4,12 +4,16 @@ begin; require 'rubygems'; rescue LoadError; end
|
|
4
4
|
require 'httparty'
|
5
5
|
|
6
6
|
module Mousetrap
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
NO_BUSINESS_NEED = "No business need at this time."
|
8
|
+
|
9
|
+
autoload :Customer, 'mousetrap/customer'
|
10
|
+
autoload :Plan, 'mousetrap/plan'
|
11
|
+
autoload :Resource, 'mousetrap/resource'
|
12
|
+
autoload :Subscription, 'mousetrap/subscription'
|
13
|
+
|
10
14
|
class << self
|
11
15
|
attr_accessor :product_code
|
12
|
-
|
16
|
+
|
13
17
|
def authenticate(user, password)
|
14
18
|
Resource.basic_auth user, password
|
15
19
|
end
|
data/lib/mousetrap/customer.rb
CHANGED
@@ -1,11 +1,98 @@
|
|
1
1
|
module Mousetrap
|
2
2
|
class Customer < Resource
|
3
|
-
|
4
|
-
|
3
|
+
attr_accessor \
|
4
|
+
:id,
|
5
|
+
:code,
|
6
|
+
:email,
|
7
|
+
:first_name,
|
8
|
+
:last_name,
|
9
|
+
:subscription
|
10
|
+
|
11
|
+
def subscription_attributes=(attributes)
|
12
|
+
self.subscription = Subscription.new attributes
|
5
13
|
end
|
6
|
-
|
7
|
-
def
|
8
|
-
|
14
|
+
|
15
|
+
def attributes
|
16
|
+
{
|
17
|
+
:id => id,
|
18
|
+
:code => code,
|
19
|
+
:email => email,
|
20
|
+
:first_name => first_name,
|
21
|
+
:last_name => last_name,
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
def attributes_for_api
|
26
|
+
a = self.class.attributes_for_api(attributes, new_record?)
|
27
|
+
|
28
|
+
if subscription
|
29
|
+
a[:subscription] = subscription.attributes_for_api
|
30
|
+
end
|
31
|
+
|
32
|
+
a
|
33
|
+
end
|
34
|
+
|
35
|
+
def destroy
|
36
|
+
self.class.delete_resource('customers', code) unless new_record?
|
37
|
+
end
|
38
|
+
|
39
|
+
def save
|
40
|
+
new? ? create : update
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.create(attributes)
|
44
|
+
object = new(attributes)
|
45
|
+
response = object.save
|
46
|
+
returned_customer = build_resource_from response
|
47
|
+
object.id = returned_customer.id
|
48
|
+
# TODO: what other attrs to copy over?
|
49
|
+
object
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.new_from_api(attributes)
|
53
|
+
customer = new(attributes_from_api(attributes))
|
54
|
+
customer.subscription = Subscription.new_from_api(
|
55
|
+
attributes['subscriptions']['subscription'])
|
56
|
+
customer
|
57
|
+
end
|
58
|
+
|
59
|
+
|
60
|
+
protected
|
61
|
+
|
62
|
+
def self.plural_resource_name
|
63
|
+
'customers'
|
64
|
+
end
|
65
|
+
|
66
|
+
def self.singular_resource_name
|
67
|
+
'customer'
|
68
|
+
end
|
69
|
+
|
70
|
+
def self.attributes_for_api(attributes, new_record = true)
|
71
|
+
mutated_hash = {
|
72
|
+
:email => attributes[:email],
|
73
|
+
:firstName => attributes[:first_name],
|
74
|
+
:lastName => attributes[:last_name],
|
75
|
+
}
|
76
|
+
mutated_hash.merge!(:code => attributes[:code]) if new_record
|
77
|
+
mutated_hash
|
78
|
+
end
|
79
|
+
|
80
|
+
def self.attributes_from_api(attributes)
|
81
|
+
{
|
82
|
+
:id => attributes['id'],
|
83
|
+
:code => attributes['code'],
|
84
|
+
:first_name => attributes['firstName'],
|
85
|
+
:last_name => attributes['lastName'],
|
86
|
+
:email => attributes['email']
|
87
|
+
}
|
88
|
+
end
|
89
|
+
|
90
|
+
def create
|
91
|
+
self.class.post_resource 'customers', 'new', attributes_for_api
|
92
|
+
end
|
93
|
+
|
94
|
+
def update
|
95
|
+
self.class.put_resource 'customers', 'edit-customer', code, attributes_for_api
|
9
96
|
end
|
10
97
|
end
|
11
98
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Mousetrap
|
2
|
+
class Plan < Resource
|
3
|
+
attr_accessor \
|
4
|
+
:id,
|
5
|
+
:code,
|
6
|
+
:name
|
7
|
+
|
8
|
+
|
9
|
+
protected
|
10
|
+
|
11
|
+
def self.plural_resource_name
|
12
|
+
'plans'
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.singular_resource_name
|
16
|
+
'plan'
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.attributes_from_api(attributes)
|
20
|
+
{
|
21
|
+
:id => attributes['id'],
|
22
|
+
:code => attributes['code'],
|
23
|
+
:name => attributes['name'],
|
24
|
+
}
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/mousetrap/resource.rb
CHANGED
@@ -4,12 +4,115 @@ module Mousetrap
|
|
4
4
|
headers 'User-Agent' => 'Mousetrap Ruby Client'
|
5
5
|
base_uri 'https://cheddargetter.com'
|
6
6
|
|
7
|
+
def initialize(hash={})
|
8
|
+
hash.each do |key, value|
|
9
|
+
self.send("#{key}=", value)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.[](code)
|
14
|
+
response = get_resource plural_resource_name, code
|
15
|
+
build_resource_from response
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.all
|
19
|
+
response = get_resources plural_resource_name
|
20
|
+
build_resources_from response
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.create(attributes = {})
|
24
|
+
raise NotImplementedError, NO_BUSINESS_NEED
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.delete(code)
|
28
|
+
raise NotImplementedError, NO_BUSINESS_NEED
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.exists?(code)
|
32
|
+
raise NotImplementedError, NO_BUSINESS_NEED
|
33
|
+
end
|
34
|
+
|
35
|
+
def destroy
|
36
|
+
raise NotImplementedError, NO_BUSINESS_NEED
|
37
|
+
end
|
38
|
+
|
39
|
+
def exists?(code)
|
40
|
+
raise NotImplementedError, NO_BUSINESS_NEED
|
41
|
+
end
|
42
|
+
|
43
|
+
def new?
|
44
|
+
id.nil?
|
45
|
+
end
|
46
|
+
|
47
|
+
alias new_record? new?
|
48
|
+
|
49
|
+
def self.new_from_api(attributes)
|
50
|
+
new(attributes_from_api(attributes))
|
51
|
+
end
|
52
|
+
|
53
|
+
def save
|
54
|
+
raise NotImplementedError, NO_BUSINESS_NEED
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
protected
|
59
|
+
|
60
|
+
def self.delete_resource(resource, code)
|
61
|
+
path = "/xml/#{resource}/delete/productCode/#{Mousetrap.product_code}/code/#{code}"
|
62
|
+
post path
|
63
|
+
end
|
64
|
+
|
65
|
+
def self.get_resource(resource, code)
|
66
|
+
path = "/xml/#{resource}/get/productCode/#{Mousetrap.product_code}/code/#{code}"
|
67
|
+
get path
|
68
|
+
end
|
69
|
+
|
7
70
|
def self.get_resources(resource)
|
8
|
-
|
71
|
+
path = "/xml/#{resource}/get/productCode/#{Mousetrap.product_code}"
|
72
|
+
get path
|
73
|
+
end
|
74
|
+
|
75
|
+
def self.post_resource(resource, action, attributes)
|
76
|
+
path = "/xml/#{resource}/#{action}/productCode/#{Mousetrap.product_code}"
|
77
|
+
post path, :body => attributes
|
78
|
+
end
|
79
|
+
|
80
|
+
def self.put_resource(resource, action, resource_code, attributes)
|
81
|
+
path = "/xml/#{resource}/#{action}/productCode/#{Mousetrap.product_code}/code/#{resource_code}"
|
82
|
+
post path, :body => attributes
|
83
|
+
end
|
84
|
+
|
85
|
+
def self.plural_resource_name
|
86
|
+
raise 'You must implement self.plural_resource_name in your subclass.'
|
87
|
+
end
|
88
|
+
|
89
|
+
def self.singular_resource_name
|
90
|
+
raise 'You must implement self.singular_resource_name in your subclass.'
|
91
|
+
end
|
92
|
+
|
93
|
+
def self.build_resource_from(response)
|
94
|
+
resource_attributes = extract_resources(response)
|
95
|
+
new_from_api(resource_attributes)
|
96
|
+
end
|
97
|
+
|
98
|
+
def self.build_resources_from(response)
|
99
|
+
resources = []
|
100
|
+
|
101
|
+
response_resources = extract_resources(response)
|
102
|
+
|
103
|
+
if response_resources.is_a?(Array)
|
104
|
+
extract_resources(response).each do |resource_attributes|
|
105
|
+
resources << new_from_api(resource_attributes)
|
106
|
+
end
|
107
|
+
else
|
108
|
+
resources << new_from_api(response_resources)
|
109
|
+
end
|
110
|
+
|
111
|
+
resources
|
9
112
|
end
|
10
113
|
|
11
|
-
def self.
|
12
|
-
|
114
|
+
def self.extract_resources(response)
|
115
|
+
response[plural_resource_name][singular_resource_name]
|
13
116
|
end
|
14
117
|
end
|
15
118
|
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
module Mousetrap
|
2
|
+
class Subscription < Resource
|
3
|
+
# Attributes we send _to_ the API.
|
4
|
+
attr_accessor \
|
5
|
+
:plan_code,
|
6
|
+
:billing_first_name,
|
7
|
+
:billing_last_name,
|
8
|
+
:credit_card_number,
|
9
|
+
:credit_card_expiration_month,
|
10
|
+
:credit_card_expiration_year,
|
11
|
+
:billing_zip_code,
|
12
|
+
|
13
|
+
:customer_code, # belongs to customer
|
14
|
+
|
15
|
+
# Attributes that come _from_ the API.
|
16
|
+
:id,
|
17
|
+
:canceled_at,
|
18
|
+
:created_at,
|
19
|
+
:credit_card_expiration_date,
|
20
|
+
:credit_card_last_four_digits,
|
21
|
+
:credit_card_type
|
22
|
+
|
23
|
+
# TODO: not sure if .all or .[] will work
|
24
|
+
|
25
|
+
def attributes
|
26
|
+
{
|
27
|
+
:id => id,
|
28
|
+
:plan_code => plan_code,
|
29
|
+
:billing_first_name => billing_first_name,
|
30
|
+
:billing_last_name => billing_last_name,
|
31
|
+
:credit_card_number => credit_card_number,
|
32
|
+
:credit_card_expiration_month => credit_card_expiration_month,
|
33
|
+
:credit_card_expiration_year => credit_card_expiration_year,
|
34
|
+
:billing_zip_code => billing_zip_code,
|
35
|
+
}
|
36
|
+
end
|
37
|
+
|
38
|
+
def attributes_for_api
|
39
|
+
self.class.attributes_for_api(attributes)
|
40
|
+
end
|
41
|
+
|
42
|
+
def save
|
43
|
+
mutated_attributes = attributes_for_api(attributes)
|
44
|
+
self.class.put_resource('customers', 'edit-subscription', customer_code, mutated_attributes)
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
protected
|
49
|
+
|
50
|
+
def self.plural_resource_name
|
51
|
+
'subscriptions'
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.singular_resource_name
|
55
|
+
'subscription'
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.attributes_for_api(attributes)
|
59
|
+
{
|
60
|
+
:planCode => attributes[:plan_code],
|
61
|
+
:ccFirstName => attributes[:billing_first_name],
|
62
|
+
:ccLastName => attributes[:billing_last_name],
|
63
|
+
:ccNumber => attributes[:credit_card_number],
|
64
|
+
:ccExpMonth => attributes[:credit_card_expiration_month],
|
65
|
+
:ccExpYear => attributes[:credit_card_expiration_year],
|
66
|
+
:ccZip => attributes[:billing_zip_code],
|
67
|
+
}
|
68
|
+
end
|
69
|
+
|
70
|
+
def self.attributes_from_api(attributes)
|
71
|
+
{
|
72
|
+
:id => attributes['id'],
|
73
|
+
:canceled_at => attributes['canceledDatetime'],
|
74
|
+
:created_at => attributes['createdDatetime'],
|
75
|
+
:credit_card_expiration_date => attributes['ccExpirationDate'],
|
76
|
+
:credit_card_last_four_digits => attributes['ccLastFour'],
|
77
|
+
:credit_card_type => attributes['ccType'],
|
78
|
+
}
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
data/mousetrap.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{mousetrap}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ["Jon Larkowski", "Sandro Turriate"]
|
12
|
-
s.date = %q{2009-
|
11
|
+
s.authors = ["Jon Larkowski", "Sandro Turriate", "Wolfram Arnold", "Corey Grusden"]
|
12
|
+
s.date = %q{2009-09-01}
|
13
13
|
s.description = %q{CheddarGetter API Client in Ruby}
|
14
14
|
s.email = %q{jonlarkowski@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -24,27 +24,39 @@ Gem::Specification.new do |s|
|
|
24
24
|
"VERSION",
|
25
25
|
"lib/mousetrap.rb",
|
26
26
|
"lib/mousetrap/customer.rb",
|
27
|
+
"lib/mousetrap/plan.rb",
|
27
28
|
"lib/mousetrap/resource.rb",
|
29
|
+
"lib/mousetrap/subscription.rb",
|
28
30
|
"mousetrap.gemspec",
|
31
|
+
"spec/factories.rb",
|
29
32
|
"spec/integration/settings.example.yml",
|
30
33
|
"spec/integration/smoke_test.rb",
|
34
|
+
"spec/integration/spike.rb",
|
31
35
|
"spec/mousetrap/customer_spec.rb",
|
36
|
+
"spec/mousetrap/plan_spec.rb",
|
32
37
|
"spec/mousetrap/resource_spec.rb",
|
38
|
+
"spec/mousetrap/subscription_spec.rb",
|
33
39
|
"spec/mousetrap_spec.rb",
|
34
40
|
"spec/spec.opts",
|
35
|
-
"spec/spec_helper.rb"
|
41
|
+
"spec/spec_helper.rb",
|
42
|
+
"spec/support/random_data.rb"
|
36
43
|
]
|
37
|
-
s.homepage = %q{http://github.com/
|
44
|
+
s.homepage = %q{http://github.com/hashrocket/mousetrap}
|
38
45
|
s.rdoc_options = ["--charset=UTF-8"]
|
39
46
|
s.require_paths = ["lib"]
|
40
47
|
s.rubygems_version = %q{1.3.5}
|
41
48
|
s.summary = %q{CheddarGetter API Client in Ruby}
|
42
49
|
s.test_files = [
|
43
|
-
"spec/
|
50
|
+
"spec/factories.rb",
|
51
|
+
"spec/integration/smoke_test.rb",
|
52
|
+
"spec/integration/spike.rb",
|
44
53
|
"spec/mousetrap/customer_spec.rb",
|
54
|
+
"spec/mousetrap/plan_spec.rb",
|
45
55
|
"spec/mousetrap/resource_spec.rb",
|
56
|
+
"spec/mousetrap/subscription_spec.rb",
|
46
57
|
"spec/mousetrap_spec.rb",
|
47
|
-
"spec/spec_helper.rb"
|
58
|
+
"spec/spec_helper.rb",
|
59
|
+
"spec/support/random_data.rb"
|
48
60
|
]
|
49
61
|
|
50
62
|
if s.respond_to? :specification_version then
|
@@ -52,14 +64,20 @@ Gem::Specification.new do |s|
|
|
52
64
|
s.specification_version = 3
|
53
65
|
|
54
66
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
55
|
-
s.add_development_dependency(%q<rspec>, [">= 1.2.8"])
|
56
67
|
s.add_runtime_dependency(%q<httparty>, [">= 0.4.4"])
|
68
|
+
s.add_development_dependency(%q<activesupport>, [">= 2.3.3"])
|
69
|
+
s.add_development_dependency(%q<rspec>, [">= 1.2.8"])
|
70
|
+
s.add_development_dependency(%q<thoughtbot-factory_girl>, [">= 1.2.2"])
|
57
71
|
else
|
58
|
-
s.add_dependency(%q<rspec>, [">= 1.2.8"])
|
59
72
|
s.add_dependency(%q<httparty>, [">= 0.4.4"])
|
73
|
+
s.add_dependency(%q<activesupport>, [">= 2.3.3"])
|
74
|
+
s.add_dependency(%q<rspec>, [">= 1.2.8"])
|
75
|
+
s.add_dependency(%q<thoughtbot-factory_girl>, [">= 1.2.2"])
|
60
76
|
end
|
61
77
|
else
|
62
|
-
s.add_dependency(%q<rspec>, [">= 1.2.8"])
|
63
78
|
s.add_dependency(%q<httparty>, [">= 0.4.4"])
|
79
|
+
s.add_dependency(%q<activesupport>, [">= 2.3.3"])
|
80
|
+
s.add_dependency(%q<rspec>, [">= 1.2.8"])
|
81
|
+
s.add_dependency(%q<thoughtbot-factory_girl>, [">= 1.2.2"])
|
64
82
|
end
|
65
83
|
end
|
data/spec/factories.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Factory.define :new_customer, :class => Mousetrap::Customer, :default_strategy => :stub do |f|
|
2
|
+
f.email { random_email_address }
|
3
|
+
f.first_name { random_string }
|
4
|
+
f.last_name { random_string }
|
5
|
+
f.code { |me| me.email }
|
6
|
+
f.add_attribute :id, nil
|
7
|
+
f.subscription_attributes { Factory.attributes_for :subscription }
|
8
|
+
end
|
9
|
+
|
10
|
+
Factory.define :existing_customer, :parent => :new_customer, :default_strategy => :stub do |f|
|
11
|
+
f.add_attribute :id, '2d1244e8-e338-102c-a92d-40402145ee8b'
|
12
|
+
end
|
13
|
+
|
14
|
+
Factory.define :subscription, :class => Mousetrap::Subscription, :default_strategy => :stub do |f|
|
15
|
+
f.plan_code 'TEST'
|
16
|
+
f.billing_first_name { random_string }
|
17
|
+
f.billing_last_name { random_string }
|
18
|
+
f.credit_card_number '4111111111111111'
|
19
|
+
f.credit_card_expiration_month '12'
|
20
|
+
f.credit_card_expiration_year '2012'
|
21
|
+
f.billing_zip_code '90210'
|
22
|
+
end
|
@@ -1,4 +1,6 @@
|
|
1
|
-
# Replace
|
1
|
+
# Replace user and password with your CheddarGetter credentials.
|
2
2
|
user: 'lark@example.com'
|
3
3
|
password: 'abc123'
|
4
|
-
|
4
|
+
|
5
|
+
# Go create a product in the CheddarGetter web admin interface named "mousetrap_test".
|
6
|
+
product_code: 'mousetrap_test'
|
@@ -1,36 +1,77 @@
|
|
1
|
-
require File.
|
2
|
-
require '
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
1
|
+
require File.dirname(__FILE__) + '/../../lib/mousetrap'
|
2
|
+
require 'yaml'
|
3
|
+
require 'activesupport'
|
4
|
+
|
5
|
+
# Requires supporting files with custom matchers and macros, etc,
|
6
|
+
# in ./support/ and its subdirectories.
|
7
|
+
Dir["#{File.dirname(__FILE__)}/../support/**/*.rb"].each {|f| require f}
|
8
|
+
|
9
|
+
settings = YAML.load_file(File.dirname(__FILE__) + '/settings.yml')
|
10
|
+
Mousetrap.authenticate(settings['user'], settings['password'])
|
11
|
+
Mousetrap.product_code = settings['product_code']
|
12
|
+
|
13
|
+
|
14
|
+
|
15
|
+
all_customers = Mousetrap::Customer.all
|
16
|
+
puts all_customers.inspect
|
17
|
+
puts all_customers.to_yaml
|
18
|
+
|
19
|
+
all_customers.each { |c| c.destroy }
|
20
|
+
|
21
|
+
all_customers = Mousetrap::Customer.all
|
22
|
+
puts all_customers.inspect
|
23
|
+
puts all_customers.to_yaml
|
24
|
+
|
25
|
+
__END__
|
26
|
+
|
27
|
+
code = 'maasdxgliu@example.com'
|
28
|
+
c = Mousetrap::Customer[code]
|
29
|
+
puts c.to_yaml
|
30
|
+
c.destroy
|
31
|
+
|
32
|
+
puts '-' * 80
|
33
|
+
c = Mousetrap::Customer[code]
|
34
|
+
puts c.to_yaml
|
35
|
+
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
|
40
|
+
email = random_email_address
|
41
|
+
attributes = {
|
42
|
+
'code' => email,
|
43
|
+
'firstName' => 'Example',
|
44
|
+
'lastName' => 'Customer',
|
45
|
+
'email' => email,
|
46
|
+
'subscription' => {
|
47
|
+
'planCode' => 'TEST',
|
48
|
+
'ccFirstName' => 'Jon',
|
49
|
+
'ccLastName' => 'Larkowski',
|
50
|
+
'ccNumber' => '4111111111111111',
|
51
|
+
'ccExpiration' => '12-2012',
|
52
|
+
'ccZip' => '90210'
|
53
|
+
}
|
54
|
+
}
|
55
|
+
|
56
|
+
customer = Mousetrap::Customer.create attributes
|
57
|
+
puts customer
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
|
62
|
+
puts Mousetrap::Plan.all.to_yaml
|
63
|
+
puts Mousetrap::Customer['maasdxgliu@example.com'].to_yaml
|
64
|
+
puts Mousetrap::Plan['TEST'].to_yaml
|
65
|
+
puts Mousetrap::Customer.all.to_yaml
|
66
|
+
|
67
|
+
|
68
|
+
customers_hash = Mousetrap::Customer['maasdxgliu@example.com']
|
69
|
+
customer_hash = customers_hash['customers']['customer'].slice 'firstName', 'lastName', 'email', 'code'
|
70
|
+
customer = Mousetrap::Customer.new customer_hash
|
71
|
+
|
72
|
+
customer.first_name = random_string
|
73
|
+
puts customer.save!
|
74
|
+
|
75
|
+
customer_hash = Mousetrap::Customer['maasdxgliu@example.com']
|
76
|
+
puts customer_hash.to_yaml
|
77
|
+
|
@@ -0,0 +1,93 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../lib/mousetrap'
|
2
|
+
require 'activesupport'
|
3
|
+
require 'factory_girl'
|
4
|
+
require 'ruby-debug'
|
5
|
+
require 'yaml'
|
6
|
+
|
7
|
+
Dir["#{File.dirname(__FILE__)}/../support/**/*.rb"].each {|f| require f}
|
8
|
+
|
9
|
+
settings = YAML.load_file(File.dirname(__FILE__) + '/settings.yml')
|
10
|
+
Mousetrap.authenticate(settings['user'], settings['password'])
|
11
|
+
Mousetrap.product_code = settings['product_code']
|
12
|
+
|
13
|
+
def plans
|
14
|
+
all_plans = Mousetrap::Plan.all
|
15
|
+
puts all_plans.to_yaml
|
16
|
+
|
17
|
+
test_plan = Mousetrap::Plan['TEST']
|
18
|
+
puts test_plan.to_yaml
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
def customers
|
23
|
+
all_customers = Mousetrap::Customer.all
|
24
|
+
puts all_customers.to_yaml
|
25
|
+
all_customers.each { |c| c.destroy }
|
26
|
+
|
27
|
+
customer = Factory :new_customer
|
28
|
+
customer.save
|
29
|
+
|
30
|
+
api_customer = Mousetrap::Customer[customer.code]
|
31
|
+
puts api_customer.to_yaml
|
32
|
+
|
33
|
+
all_customers = Mousetrap::Customer.all
|
34
|
+
puts all_customers.to_yaml
|
35
|
+
end
|
36
|
+
|
37
|
+
customers
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
|
42
|
+
|
43
|
+
__END__
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
+
all_customers = Mousetrap::Customer.all
|
48
|
+
puts all_customers.inspect
|
49
|
+
puts all_customers.to_yaml
|
50
|
+
|
51
|
+
|
52
|
+
code = 'maasdxgliu@example.com'
|
53
|
+
c = Mousetrap::Customer[code]
|
54
|
+
puts c.to_yaml
|
55
|
+
c.destroy
|
56
|
+
|
57
|
+
puts '-' * 80
|
58
|
+
c = Mousetrap::Customer[code]
|
59
|
+
puts c.to_yaml
|
60
|
+
|
61
|
+
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
email = random_email_address
|
66
|
+
attributes = {
|
67
|
+
'code' => email,
|
68
|
+
'firstName' => 'Example',
|
69
|
+
'lastName' => 'Customer',
|
70
|
+
'email' => email,
|
71
|
+
'subscription' => {
|
72
|
+
'planCode' => 'TEST',
|
73
|
+
'ccFirstName' => 'Jon',
|
74
|
+
'ccLastName' => 'Larkowski',
|
75
|
+
'ccNumber' => '4111111111111111',
|
76
|
+
'ccExpiration' => '12-2012',
|
77
|
+
'ccZip' => '90210'
|
78
|
+
}
|
79
|
+
}
|
80
|
+
|
81
|
+
customer = Mousetrap::Customer.create attributes
|
82
|
+
puts customer
|
83
|
+
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
customers_hash = Mousetrap::Customer['maasdxgliu@example.com']
|
88
|
+
customer_hash = customers_hash['customers']['customer'].slice 'firstName', 'lastName', 'email', 'code'
|
89
|
+
customer = Mousetrap::Customer.new customer_hash
|
90
|
+
|
91
|
+
customer.first_name = random_string
|
92
|
+
puts customer.save!
|
93
|
+
|
@@ -1,19 +1,126 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
2
|
|
3
3
|
describe Mousetrap::Customer do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
4
|
+
def customer_attributes_for_api(customer)
|
5
|
+
{
|
6
|
+
:firstName => customer.first_name,
|
7
|
+
:lastName => customer.last_name,
|
8
|
+
:email => customer.email,
|
9
|
+
:code => customer.code,
|
10
|
+
:subscription => {
|
11
|
+
:planCode => customer.subscription.plan_code,
|
12
|
+
:ccFirstName => customer.subscription.billing_first_name,
|
13
|
+
:ccLastName => customer.subscription.billing_last_name,
|
14
|
+
:ccNumber => customer.subscription.credit_card_number,
|
15
|
+
:ccExpiration => customer.subscription.credit_card_expiration,
|
16
|
+
:ccZip => customer.subscription.billing_zip_code,
|
17
|
+
}
|
18
|
+
}
|
11
19
|
end
|
12
|
-
|
20
|
+
|
13
21
|
describe '.create' do
|
14
|
-
|
15
|
-
|
16
|
-
|
22
|
+
before do
|
23
|
+
@customer_hash = Factory.attributes_for :new_customer
|
24
|
+
@customer = Mousetrap::Customer.new @customer_hash
|
25
|
+
@customer.stub(:save)
|
26
|
+
Mousetrap::Customer.stub(:new => @customer)
|
27
|
+
Mousetrap::Customer.stub(:build_resource_from => stub(:id => 0))
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'instantiates a customer with a hash of attributes' do
|
31
|
+
Mousetrap::Customer.should_receive(:new).with(@customer_hash).and_return(@customer)
|
32
|
+
Mousetrap::Customer.create(@customer_hash)
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'saves the new customer instance' do
|
36
|
+
@customer.should_receive(:save)
|
37
|
+
Mousetrap::Customer.create(@customer_hash)
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'sets the id of the newly created customer' do
|
41
|
+
Mousetrap::Customer.stub(:build_resource_from => stub(:id => 1))
|
42
|
+
@customer.should_receive(:id=).with(1)
|
43
|
+
Mousetrap::Customer.create(@customer_hash)
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'returns an instance of Mousetrap::Customer' do
|
47
|
+
Mousetrap::Customer.create(@customer_hash).should be_instance_of(Mousetrap::Customer)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe ".new" do
|
52
|
+
subject do
|
53
|
+
Mousetrap::Customer.new \
|
54
|
+
:first_name => 'Jon',
|
55
|
+
:last_name => 'Larkowski',
|
56
|
+
:email => 'lark@example.com',
|
57
|
+
:code => 'asfkhw0'
|
58
|
+
end
|
59
|
+
|
60
|
+
it { should be_instance_of(Mousetrap::Customer) }
|
61
|
+
it { should be_new_record }
|
62
|
+
|
63
|
+
describe "sets" do
|
64
|
+
it 'first_name' do
|
65
|
+
subject.first_name.should == 'Jon'
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'last_name' do
|
69
|
+
subject.last_name.should == 'Larkowski'
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'email' do
|
73
|
+
subject.email.should == 'lark@example.com'
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'code' do
|
77
|
+
subject.code.should == 'asfkhw0'
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
describe '#destroy' do
|
83
|
+
context "for existing records" do
|
84
|
+
it 'destroys' do
|
85
|
+
customer = Factory :existing_customer
|
86
|
+
Mousetrap::Customer.should_receive(:delete_resource).with('customers', customer.code)
|
87
|
+
customer.destroy
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
context "for new records" do
|
92
|
+
it "does nothing" do
|
93
|
+
customer = Factory :new_customer
|
94
|
+
Mousetrap::Customer.should_not_receive(:delete_resource)
|
95
|
+
customer.destroy
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe '#save' do
|
101
|
+
context "for existing records" do
|
102
|
+
before do
|
103
|
+
@customer = Factory :existing_customer
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'posts to edit-customer action' do
|
107
|
+
attributes_for_api = customer_attributes_for_api(@customer)
|
108
|
+
|
109
|
+
# We don't send code for existing API resources.
|
110
|
+
attributes_for_api.delete(:code)
|
111
|
+
|
112
|
+
@customer.class.should_receive(:put_resource).with(
|
113
|
+
'customers', 'edit-customer', @customer.code, attributes_for_api)
|
114
|
+
@customer.save
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
context "for new records" do
|
119
|
+
it 'calls create' do
|
120
|
+
customer = Factory :new_customer
|
121
|
+
customer.should_receive(:create)
|
122
|
+
customer.save
|
123
|
+
end
|
17
124
|
end
|
18
125
|
end
|
19
126
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe Mousetrap::Plan do
|
4
|
+
# name: Test
|
5
|
+
# billingFrequencyQuantity: "1"
|
6
|
+
# code: TEST
|
7
|
+
# recurringChargeAmount: "42.00"
|
8
|
+
# createdDatetime: "2009-08-25T04:24:34+00:00"
|
9
|
+
# id: 5fbb9a84-e27f-102c-a92d-40402145ee8b
|
10
|
+
# isActive: "1"
|
11
|
+
# billingFrequency: monthly
|
12
|
+
# description: Test
|
13
|
+
# trialDays: "0"
|
14
|
+
# setupChargeCode: TEST_SETUP
|
15
|
+
# recurringChargeCode: TEST_RECURRING
|
16
|
+
# billingFrequencyUnit: months
|
17
|
+
# setupChargeAmount: "0.00"
|
18
|
+
# billingFrequencyPer: month
|
19
|
+
end
|
@@ -1,12 +1,37 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
2
|
|
3
|
+
module Mousetrap
|
4
|
+
class Widget < Resource
|
5
|
+
attr_accessor :id
|
6
|
+
attr_accessor :code
|
7
|
+
|
8
|
+
|
9
|
+
protected
|
10
|
+
|
11
|
+
def self.attributes_from_api(attributes)
|
12
|
+
{
|
13
|
+
:id => attributes['id'],
|
14
|
+
:code => attributes['code'],
|
15
|
+
}
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.plural_resource_name
|
19
|
+
'widgets'
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.singular_resource_name
|
23
|
+
'widget'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
3
28
|
describe Mousetrap::Resource do
|
4
29
|
before do
|
5
30
|
Mousetrap.product_code = 'my_product_code'
|
6
31
|
end
|
7
|
-
|
32
|
+
|
8
33
|
subject { Mousetrap::Resource }
|
9
|
-
|
34
|
+
|
10
35
|
describe "class" do
|
11
36
|
it "sets the base URI" do
|
12
37
|
subject.default_options[:base_uri].should == 'https://cheddargetter.com'
|
@@ -17,6 +42,57 @@ describe Mousetrap::Resource do
|
|
17
42
|
end
|
18
43
|
end
|
19
44
|
|
45
|
+
describe ".[]" do
|
46
|
+
before do
|
47
|
+
customer_hash = Factory.attributes_for :existing_customer
|
48
|
+
customer_hash = HashWithIndifferentAccess.new customer_hash
|
49
|
+
@code = customer_hash[:code]
|
50
|
+
@server_response_hash = { 'widgets' => { 'widget' => customer_hash } }
|
51
|
+
Mousetrap::Widget.stub(:get_resource => @server_response_hash)
|
52
|
+
end
|
53
|
+
|
54
|
+
it "gets a resource with widget code" do
|
55
|
+
Mousetrap::Widget.should_receive(:get_resource).with('widgets', @code).and_return(@server_response_hash)
|
56
|
+
Mousetrap::Widget[@code]
|
57
|
+
end
|
58
|
+
|
59
|
+
context "returned widget instance" do
|
60
|
+
subject { Mousetrap::Widget[@code] }
|
61
|
+
it { should be_instance_of(Mousetrap::Widget) }
|
62
|
+
it { should_not be_new_record }
|
63
|
+
it { subject.code.should == @code }
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
describe '.all' do
|
68
|
+
it 'gets widgets resources' do
|
69
|
+
Mousetrap::Widget.stub(:build_resources_from)
|
70
|
+
Mousetrap::Widget.should_receive(:get_resources).with('widgets')
|
71
|
+
Mousetrap::Widget.all
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'builds widget resources' do
|
75
|
+
response = stub
|
76
|
+
Mousetrap::Widget.stub(:get_resources => response)
|
77
|
+
Mousetrap::Widget.should_receive(:build_resources_from).with(response)
|
78
|
+
Mousetrap::Widget.all
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
describe ".delete_resource" do
|
83
|
+
it "gets /xml/<resource>/delete/productCode/<my_product_code>/code/<resource_code>" do
|
84
|
+
subject.should_receive(:post).with('/xml/widgets/delete/productCode/my_product_code/code/some_resource_code')
|
85
|
+
subject.delete_resource 'widgets', 'some_resource_code'
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe ".get_resource" do
|
90
|
+
it "gets /xml/<resource>/get/productCode/<my_product_code>/code/<resource_code>" do
|
91
|
+
subject.should_receive(:get).with('/xml/widgets/get/productCode/my_product_code/code/some_resource_code')
|
92
|
+
subject.get_resource 'widgets', 'some_resource_code'
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
20
96
|
describe ".get_resources" do
|
21
97
|
it "gets /xml/<resource>/get/productCode/<my_product_code>" do
|
22
98
|
subject.should_receive(:get).with('/xml/widgets/get/productCode/my_product_code')
|
@@ -30,4 +106,13 @@ describe Mousetrap::Resource do
|
|
30
106
|
subject.post_resource 'widgets', 'some_action', 'some_hash'
|
31
107
|
end
|
32
108
|
end
|
109
|
+
|
110
|
+
describe ".put_resource" do
|
111
|
+
it "put to /xml/<resource>/<action>/productCode/<product_code>/code/<resource_code>" do
|
112
|
+
subject.should_receive(:post).with(
|
113
|
+
'/xml/widgets/some_action/productCode/my_product_code/code/some_widget_code',
|
114
|
+
:body => 'some_hash')
|
115
|
+
subject.put_resource 'widgets', 'some_action', 'some_widget_code', 'some_hash'
|
116
|
+
end
|
117
|
+
end
|
33
118
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe Mousetrap::Subscription do
|
4
|
+
# subscription:
|
5
|
+
# ccExpirationDate: "2010-01-31T00:00:00+00:00"
|
6
|
+
# gatewayToken:
|
7
|
+
# createdDatetime: "2009-08-27T15:55:51+00:00"
|
8
|
+
# ccType: visa
|
9
|
+
# id: 46ad3f1c-e472-102c-a92d-40402145ee8b
|
10
|
+
# ccLastFour: "1111"
|
11
|
+
# canceledDatetime:
|
12
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -3,25 +3,21 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
3
3
|
require 'mousetrap'
|
4
4
|
require 'spec'
|
5
5
|
require 'spec/autorun'
|
6
|
+
require 'factory_girl'
|
7
|
+
require 'active_support'
|
6
8
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
def random_string
|
12
|
-
random_alpha_string_of_length(10)
|
13
|
-
end
|
9
|
+
# Requires supporting files with custom matchers and macros, etc,
|
10
|
+
# in ./support/ and its subdirectories.
|
11
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
14
12
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
end
|
13
|
+
module Mousetrap
|
14
|
+
class Resource
|
15
|
+
def self.get(*args)
|
16
|
+
raise 'You must stub this, or should_receive at a higher level.'
|
17
|
+
end
|
21
18
|
|
22
|
-
def
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
random_string_for_uniqueness
|
19
|
+
def self.post(*args)
|
20
|
+
raise 'You must stub this, or should_receive at a higher level.'
|
21
|
+
end
|
22
|
+
end
|
27
23
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
def random_email_address
|
2
|
+
"#{random_string}@example.com"
|
3
|
+
end
|
4
|
+
|
5
|
+
def random_string
|
6
|
+
random_alpha_string_of_length(10)
|
7
|
+
end
|
8
|
+
|
9
|
+
def random_alpha_string_of_length(length)
|
10
|
+
letters = *'a'..'z'
|
11
|
+
random_string_for_uniqueness = ''
|
12
|
+
length.times { random_string_for_uniqueness += letters[rand(letters.size - 1)]}
|
13
|
+
random_string_for_uniqueness
|
14
|
+
end
|
15
|
+
|
16
|
+
def random_number_string_of_length(length)
|
17
|
+
numbers = *'0'..'9'
|
18
|
+
random_string_for_uniqueness = ''
|
19
|
+
length.times { random_string_for_uniqueness += numbers[rand(numbers.size - 1)]}
|
20
|
+
random_string_for_uniqueness
|
21
|
+
end
|
metadata
CHANGED
@@ -1,18 +1,40 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hashrocket-mousetrap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jon Larkowski
|
8
8
|
- Sandro Turriate
|
9
|
+
- Wolfram Arnold
|
10
|
+
- Corey Grusden
|
9
11
|
autorequire:
|
10
12
|
bindir: bin
|
11
13
|
cert_chain: []
|
12
14
|
|
13
|
-
date: 2009-
|
15
|
+
date: 2009-09-01 00:00:00 -07:00
|
14
16
|
default_executable:
|
15
17
|
dependencies:
|
18
|
+
- !ruby/object:Gem::Dependency
|
19
|
+
name: httparty
|
20
|
+
type: :runtime
|
21
|
+
version_requirement:
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.4.4
|
27
|
+
version:
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: activesupport
|
30
|
+
type: :development
|
31
|
+
version_requirement:
|
32
|
+
version_requirements: !ruby/object:Gem::Requirement
|
33
|
+
requirements:
|
34
|
+
- - ">="
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 2.3.3
|
37
|
+
version:
|
16
38
|
- !ruby/object:Gem::Dependency
|
17
39
|
name: rspec
|
18
40
|
type: :development
|
@@ -24,14 +46,14 @@ dependencies:
|
|
24
46
|
version: 1.2.8
|
25
47
|
version:
|
26
48
|
- !ruby/object:Gem::Dependency
|
27
|
-
name:
|
28
|
-
type: :
|
49
|
+
name: thoughtbot-factory_girl
|
50
|
+
type: :development
|
29
51
|
version_requirement:
|
30
52
|
version_requirements: !ruby/object:Gem::Requirement
|
31
53
|
requirements:
|
32
54
|
- - ">="
|
33
55
|
- !ruby/object:Gem::Version
|
34
|
-
version:
|
56
|
+
version: 1.2.2
|
35
57
|
version:
|
36
58
|
description: CheddarGetter API Client in Ruby
|
37
59
|
email: jonlarkowski@gmail.com
|
@@ -50,18 +72,24 @@ files:
|
|
50
72
|
- VERSION
|
51
73
|
- lib/mousetrap.rb
|
52
74
|
- lib/mousetrap/customer.rb
|
75
|
+
- lib/mousetrap/plan.rb
|
53
76
|
- lib/mousetrap/resource.rb
|
77
|
+
- lib/mousetrap/subscription.rb
|
54
78
|
- mousetrap.gemspec
|
79
|
+
- spec/factories.rb
|
55
80
|
- spec/integration/settings.example.yml
|
56
81
|
- spec/integration/smoke_test.rb
|
82
|
+
- spec/integration/spike.rb
|
57
83
|
- spec/mousetrap/customer_spec.rb
|
84
|
+
- spec/mousetrap/plan_spec.rb
|
58
85
|
- spec/mousetrap/resource_spec.rb
|
86
|
+
- spec/mousetrap/subscription_spec.rb
|
59
87
|
- spec/mousetrap_spec.rb
|
60
88
|
- spec/spec.opts
|
61
89
|
- spec/spec_helper.rb
|
90
|
+
- spec/support/random_data.rb
|
62
91
|
has_rdoc: false
|
63
|
-
homepage: http://github.com/
|
64
|
-
licenses:
|
92
|
+
homepage: http://github.com/hashrocket/mousetrap
|
65
93
|
post_install_message:
|
66
94
|
rdoc_options:
|
67
95
|
- --charset=UTF-8
|
@@ -82,13 +110,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
82
110
|
requirements: []
|
83
111
|
|
84
112
|
rubyforge_project:
|
85
|
-
rubygems_version: 1.
|
113
|
+
rubygems_version: 1.2.0
|
86
114
|
signing_key:
|
87
115
|
specification_version: 3
|
88
116
|
summary: CheddarGetter API Client in Ruby
|
89
117
|
test_files:
|
118
|
+
- spec/factories.rb
|
90
119
|
- spec/integration/smoke_test.rb
|
120
|
+
- spec/integration/spike.rb
|
91
121
|
- spec/mousetrap/customer_spec.rb
|
122
|
+
- spec/mousetrap/plan_spec.rb
|
92
123
|
- spec/mousetrap/resource_spec.rb
|
124
|
+
- spec/mousetrap/subscription_spec.rb
|
93
125
|
- spec/mousetrap_spec.rb
|
94
126
|
- spec/spec_helper.rb
|
127
|
+
- spec/support/random_data.rb
|