mindbody-api 1.0.1.alpha
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.
- checksums.yaml +7 -0
- data/.gitignore +20 -0
- data/.travis.yml +5 -0
- data/CONTRIBUTING.md +16 -0
- data/Gemfile +12 -0
- data/Guardfile +6 -0
- data/LICENSE.md +22 -0
- data/README.md +79 -0
- data/Rakefile +52 -0
- data/lib/mindbody-api.rb +35 -0
- data/lib/mindbody-api/api_status.rb +109 -0
- data/lib/mindbody-api/client.rb +39 -0
- data/lib/mindbody-api/ext/savon_ext.rb +53 -0
- data/lib/mindbody-api/models.rb +34 -0
- data/lib/mindbody-api/models/appointment.rb +22 -0
- data/lib/mindbody-api/models/appointment_status.rb +13 -0
- data/lib/mindbody-api/models/availability.rb +11 -0
- data/lib/mindbody-api/models/class.rb +31 -0
- data/lib/mindbody-api/models/class_description.rb +14 -0
- data/lib/mindbody-api/models/class_schedule.rb +26 -0
- data/lib/mindbody-api/models/client.rb +32 -0
- data/lib/mindbody-api/models/client_service.rb +16 -0
- data/lib/mindbody-api/models/course.rb +16 -0
- data/lib/mindbody-api/models/level.rb +8 -0
- data/lib/mindbody-api/models/location.rb +38 -0
- data/lib/mindbody-api/models/payment.rb +11 -0
- data/lib/mindbody-api/models/program.rb +9 -0
- data/lib/mindbody-api/models/resource.rb +8 -0
- data/lib/mindbody-api/models/sale.rb +10 -0
- data/lib/mindbody-api/models/sale_item.rb +14 -0
- data/lib/mindbody-api/models/schedule_type.rb +13 -0
- data/lib/mindbody-api/models/semester.rb +9 -0
- data/lib/mindbody-api/models/service.rb +13 -0
- data/lib/mindbody-api/models/session_type.rb +8 -0
- data/lib/mindbody-api/models/site.rb +23 -0
- data/lib/mindbody-api/models/staff.rb +32 -0
- data/lib/mindbody-api/models/unavailability.rb +7 -0
- data/lib/mindbody-api/models/visit.rb +19 -0
- data/lib/mindbody-api/response.rb +119 -0
- data/lib/mindbody-api/service.rb +39 -0
- data/lib/mindbody-api/services/appointment_service.rb +15 -0
- data/lib/mindbody-api/services/class_service.rb +12 -0
- data/lib/mindbody-api/services/client_service.rb +30 -0
- data/lib/mindbody-api/services/finder_service.rb +11 -0
- data/lib/mindbody-api/services/sale_service.rb +14 -0
- data/lib/mindbody-api/services/site_service.rb +15 -0
- data/lib/mindbody-api/services/staff_service.rb +12 -0
- data/lib/mindbody-api/version.rb +4 -0
- data/mindbody-api.gemspec +29 -0
- data/spec/api_status_spec.rb +110 -0
- data/spec/client_spec.rb +51 -0
- data/spec/fixtures/wsdl/geotrust.wsdl +156 -0
- data/spec/mindbody_spec.rb +79 -0
- data/spec/model_spec.rb +7 -0
- data/spec/models/appointment_spec.rb +18 -0
- data/spec/models/appointment_status_spec.rb +17 -0
- data/spec/models/availability.rb +8 -0
- data/spec/models/class_description_spec.rb +12 -0
- data/spec/models/class_schedule_spec.rb +24 -0
- data/spec/models/class_spec.rb +39 -0
- data/spec/models/client_service_spec.rb +13 -0
- data/spec/models/client_spec.rb +33 -0
- data/spec/models/course_spec.rb +14 -0
- data/spec/models/level_spec.rb +6 -0
- data/spec/models/location_spec.rb +34 -0
- data/spec/models/payment_spec.rb +9 -0
- data/spec/models/program_spec.rb +7 -0
- data/spec/models/resource_spec.rb +6 -0
- data/spec/models/sale_item_spec.rb +12 -0
- data/spec/models/sale_spec.rb +8 -0
- data/spec/models/schedule_type_spec.rb +17 -0
- data/spec/models/semester_spec.rb +7 -0
- data/spec/models/service_spec.rb +11 -0
- data/spec/models/session_type_spec.rb +6 -0
- data/spec/models/site_spec.rb +31 -0
- data/spec/models/staff_spec.rb +29 -0
- data/spec/models/unavailability.rb +5 -0
- data/spec/models/visit_spec.rb +16 -0
- data/spec/response_spec.rb +115 -0
- data/spec/service_spec.rb +106 -0
- data/spec/services/appointment_service_spec.rb +13 -0
- data/spec/services/class_service_spec.rb +10 -0
- data/spec/services/client_service_spec.rb +27 -0
- data/spec/services/finder_service_spec.rb +9 -0
- data/spec/services/sale_service_spec.rb +12 -0
- data/spec/services/site_service_spec.rb +13 -0
- data/spec/services/staff_service_spec.rb +10 -0
- data/spec/spec_helper.rb +18 -0
- data/wsdl/AppointmentService.wsdl +1084 -0
- data/wsdl/ClassService.wsdl +1656 -0
- data/wsdl/ClientService.wsdl +2295 -0
- data/wsdl/FinderService.wsdl +1427 -0
- data/wsdl/SaleService.wsdl +1678 -0
- data/wsdl/SiteService.wsdl +915 -0
- data/wsdl/StaffService.wsdl +939 -0
- metadata +277 -0
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MindBody::Models::Course do
|
4
|
+
it { should respond_to(:id) }
|
5
|
+
it { should respond_to(:name) }
|
6
|
+
it { should respond_to(:description) }
|
7
|
+
it { should respond_to(:notes) }
|
8
|
+
it { should respond_to(:start_date) }
|
9
|
+
it { should respond_to(:end_date) }
|
10
|
+
it { should respond_to(:location) }
|
11
|
+
it { should respond_to(:organizer) }
|
12
|
+
it { should respond_to(:program) }
|
13
|
+
it { should respond_to(:image_url) }
|
14
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MindBody::Models::Location do
|
4
|
+
it { should respond_to(:id) }
|
5
|
+
it { should respond_to(:business_id) }
|
6
|
+
it { should respond_to(:site_id) }
|
7
|
+
it { should respond_to(:business_description) }
|
8
|
+
it { should respond_to(:additional_image_ur_ls) }
|
9
|
+
it { should respond_to(:facility_square_feet) }
|
10
|
+
it { should respond_to(:treatment_rooms) }
|
11
|
+
it { should respond_to(:pro_spa_finder_site) }
|
12
|
+
it { should respond_to(:has_classes) }
|
13
|
+
it { should respond_to(:phone_extension) }
|
14
|
+
it { should respond_to(:name) }
|
15
|
+
it { should respond_to(:address) }
|
16
|
+
it { should respond_to(:address2) }
|
17
|
+
it { should respond_to(:tax1) }
|
18
|
+
it { should respond_to(:tax2) }
|
19
|
+
it { should respond_to(:tax3) }
|
20
|
+
it { should respond_to(:tax4) }
|
21
|
+
it { should respond_to(:tax5) }
|
22
|
+
it { should respond_to(:phone) }
|
23
|
+
it { should respond_to(:city) }
|
24
|
+
it { should respond_to(:state_prov_code) }
|
25
|
+
it { should respond_to(:postal_code) }
|
26
|
+
it { should respond_to(:latitude) }
|
27
|
+
it { should respond_to(:longitude) }
|
28
|
+
it { should respond_to(:distance_in_miles) }
|
29
|
+
it { should respond_to(:image_url) }
|
30
|
+
it { should respond_to(:description) }
|
31
|
+
it { should respond_to(:has_site) }
|
32
|
+
it { should respond_to(:can_book) }
|
33
|
+
it { should respond_to(:additional_image_urls) }
|
34
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MindBody::Models::SaleItem do
|
4
|
+
it { should respond_to(:sale) }
|
5
|
+
it { should respond_to(:description) }
|
6
|
+
it { should respond_to(:price) }
|
7
|
+
it { should respond_to(:amount_paid) }
|
8
|
+
it { should respond_to(:discount) }
|
9
|
+
it { should respond_to(:tax) }
|
10
|
+
it { should respond_to(:returned) }
|
11
|
+
it { should respond_to(:quantity) }
|
12
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MindBody::Models::ScheduleType do
|
4
|
+
context 'when a valid type is specified' do
|
5
|
+
before { @type = MindBody::Models::ScheduleType.new('All') }
|
6
|
+
subject { @type }
|
7
|
+
|
8
|
+
its(:type) { should eql('All') }
|
9
|
+
end
|
10
|
+
|
11
|
+
context 'when an invalid type is specified' do
|
12
|
+
before { @type = MindBody::Models::ScheduleType.new('foobar') }
|
13
|
+
subject { @type }
|
14
|
+
|
15
|
+
its(:type) { should be_nil }
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MindBody::Models::Service do
|
4
|
+
it { should respond_to(:id) }
|
5
|
+
it { should respond_to(:price) }
|
6
|
+
it { should respond_to(:online_price) }
|
7
|
+
it { should respond_to(:tax_rate) }
|
8
|
+
it { should respond_to(:product_id) }
|
9
|
+
it { should respond_to(:name) }
|
10
|
+
it { should respond_to(:count) }
|
11
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MindBody::Models::Site do
|
4
|
+
before do
|
5
|
+
@site = MindBody::Models::Site.new(:page_color1 => 'red',
|
6
|
+
:page_color2 => 'green',
|
7
|
+
:page_color3 => 'blue',
|
8
|
+
:page_color4 => 'yellow')
|
9
|
+
end
|
10
|
+
|
11
|
+
subject { @site }
|
12
|
+
|
13
|
+
it { should respond_to(:id) }
|
14
|
+
it { should respond_to(:name) }
|
15
|
+
it { should respond_to(:description) }
|
16
|
+
it { should respond_to(:logo_url) }
|
17
|
+
it { should respond_to(:page_color1) }
|
18
|
+
it { should respond_to(:page_color2) }
|
19
|
+
it { should respond_to(:page_color3) }
|
20
|
+
it { should respond_to(:page_color4) }
|
21
|
+
it { should respond_to(:accepts_visa) }
|
22
|
+
it { should respond_to(:accepts_discover) }
|
23
|
+
it { should respond_to(:accepts_master_card) }
|
24
|
+
it { should respond_to(:accepts_american_express) }
|
25
|
+
it { should respond_to(:contact_email) }
|
26
|
+
it { should respond_to(:page_colors) }
|
27
|
+
|
28
|
+
it 'should return an array of page colors' do
|
29
|
+
expect(subject.page_colors).to eql(['red', 'green', 'blue', 'yellow'])
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MindBody::Models::Staff do
|
4
|
+
it { should respond_to(:id) }
|
5
|
+
it { should respond_to(:email) }
|
6
|
+
it { should respond_to(:mobile_phone) }
|
7
|
+
it { should respond_to(:home_phone) }
|
8
|
+
it { should respond_to(:work_phone) }
|
9
|
+
it { should respond_to(:address) }
|
10
|
+
it { should respond_to(:address2) }
|
11
|
+
it { should respond_to(:city) }
|
12
|
+
it { should respond_to(:state) }
|
13
|
+
it { should respond_to(:country) }
|
14
|
+
it { should respond_to(:postal_code) }
|
15
|
+
it { should respond_to(:foreign_zip) }
|
16
|
+
it { should respond_to(:login_locations) }
|
17
|
+
it { should respond_to(:name) }
|
18
|
+
it { should respond_to(:first_name) }
|
19
|
+
it { should respond_to(:last_name) }
|
20
|
+
it { should respond_to(:image_url) }
|
21
|
+
it { should respond_to(:bio) }
|
22
|
+
it { should respond_to(:is_male) }
|
23
|
+
it { should respond_to(:username) }
|
24
|
+
|
25
|
+
it 'should alias photo_url to image_url' do
|
26
|
+
subject.image_url = 'http://foobar.com/image.jpg'
|
27
|
+
expect(subject.photo_url).to eql('http://foobar.com/image.jpg')
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MindBody::Models::Visit do
|
4
|
+
it { should respond_to(:id) }
|
5
|
+
it { should respond_to(:class_id) }
|
6
|
+
it { should respond_to(:start_date_time) }
|
7
|
+
it { should respond_to(:end_date_time) }
|
8
|
+
it { should respond_to(:name) }
|
9
|
+
it { should respond_to(:staff) }
|
10
|
+
it { should respond_to(:location) }
|
11
|
+
it { should respond_to(:client) }
|
12
|
+
it { should respond_to(:web_signup) }
|
13
|
+
it { should respond_to(:signed_in) }
|
14
|
+
it { should respond_to(:make_up) }
|
15
|
+
it { should respond_to(:service) }
|
16
|
+
end
|
@@ -0,0 +1,115 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MindBody::Services::Response do
|
4
|
+
RESPONSE_HASH = {
|
5
|
+
:foo_response => {
|
6
|
+
:foo_result => {
|
7
|
+
:status => 'Success',
|
8
|
+
:clients => {
|
9
|
+
:client => [{}, {}, {}]
|
10
|
+
},
|
11
|
+
:visits => nil,
|
12
|
+
:string_list => {
|
13
|
+
:string => ['a', 'b', 'c']
|
14
|
+
},
|
15
|
+
:int_list => {
|
16
|
+
:int => [1,2,3,4,5,6]
|
17
|
+
},
|
18
|
+
:staff_members => {},
|
19
|
+
:organizer => {},
|
20
|
+
:purchases => {},
|
21
|
+
:image_url => 'http://foobar.com/image.jpg',
|
22
|
+
:mobile_image_url => 'http://foobar.com/mobile_image.jpg'
|
23
|
+
}
|
24
|
+
}
|
25
|
+
}
|
26
|
+
|
27
|
+
before :each do
|
28
|
+
resp = double('response')
|
29
|
+
resp.stub(:to_hash).and_return(RESPONSE_HASH)
|
30
|
+
@response = MindBody::Services::Response.new resp
|
31
|
+
end
|
32
|
+
|
33
|
+
subject { @response }
|
34
|
+
it { should respond_to(:response) }
|
35
|
+
it { should respond_to(:result) }
|
36
|
+
it { should respond_to(:status) }
|
37
|
+
it { should respond_to(:error_code) }
|
38
|
+
it { should respond_to(:xml_detail) }
|
39
|
+
it { should respond_to(:result_count) }
|
40
|
+
it { should respond_to(:current_page_index) }
|
41
|
+
it { should respond_to(:total_page_count) }
|
42
|
+
it { should respond_to(:remote_method) }
|
43
|
+
it { should respond_to(:message) }
|
44
|
+
it { should respond_to(:api_status) }
|
45
|
+
|
46
|
+
context 'when delegating to @response' do
|
47
|
+
before :each do
|
48
|
+
subject.response.stub(:foo).and_return('foo')
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'should respond_to methods on @response' do
|
52
|
+
expect(subject.respond_to?(:foo)).to be true
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'should dynamically define a delegate method' do
|
56
|
+
subject.should_receive(:method_missing).with(:foo).once.and_call_original
|
57
|
+
2.times { subject.foo }
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'should call through to @response' do
|
61
|
+
subject.response.should_receive(:foo).once
|
62
|
+
expect(subject.foo).to eql('foo')
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'should call super for methods @response does not respond_to' do
|
66
|
+
expect{subject.bar}.to raise_error(NoMethodError)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
context 'when normalizing a response' do
|
71
|
+
it 'should assign the normalized response to @result' do
|
72
|
+
expect(subject.result).to_not be_nil
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'should strip the *_response and *_result wrapper hashes' do
|
76
|
+
expect(subject.result.has_key?(:foo_response)).to eql(false)
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'should populate instance variables' do
|
80
|
+
expect(subject.status).to eql('Success')
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'should map :staff_members to Staff' do
|
84
|
+
expect(subject.result[:staff_members]).to be_an_instance_of(MindBody::Models::Staff)
|
85
|
+
end
|
86
|
+
|
87
|
+
it 'should map :organizer to Staff' do
|
88
|
+
expect(subject.result[:organizer]).to be_an_instance_of(MindBody::Models::Staff)
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'should map :purchases to SaleItem' do
|
92
|
+
expect(subject.result[:purchases]).to be_an_instance_of(MindBody::Models::SaleItem)
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'should map :image_url to String' do
|
96
|
+
expect(subject.result[:image_url]).to be_an_instance_of(String)
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'should map :mobile_image_url to String' do
|
100
|
+
expect(subject.result[:mobile_image_url]).to be_an_instance_of(String)
|
101
|
+
end
|
102
|
+
|
103
|
+
it 'should flatten a string list' do
|
104
|
+
expect(subject.result[:string_list].class).to be(Array)
|
105
|
+
end
|
106
|
+
|
107
|
+
it 'should flatten an int list' do
|
108
|
+
expect(subject.result[:int_list].class).to be(Array)
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'should return nil for a nil entry' do
|
112
|
+
expect(subject.result[:visits]).to be(nil)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MindBody::Services::Service do
|
4
|
+
subject { MindBody::Services::Service }
|
5
|
+
|
6
|
+
it 'should extend Savon::Model' do
|
7
|
+
should respond_to(:operations)
|
8
|
+
end
|
9
|
+
|
10
|
+
context 'with class method' do
|
11
|
+
describe '#service' do
|
12
|
+
before { subject.service(:test) }
|
13
|
+
|
14
|
+
it 'should set the wsdl for the "test" service name' do
|
15
|
+
expect(subject.instance_variable_get('@wsdl')).to match(/wsdl\/test\.wsdl/)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '#client' do
|
20
|
+
its(:client) { should be_an_instance_of(MindBody::Services::Client) }
|
21
|
+
end
|
22
|
+
|
23
|
+
describe '#operation' do
|
24
|
+
before do
|
25
|
+
MindBody::Services::Client.any_instance.stub(:call)
|
26
|
+
end
|
27
|
+
|
28
|
+
context 'with no options' do
|
29
|
+
before :all do
|
30
|
+
MindBody::Services::Service.operation :test
|
31
|
+
end
|
32
|
+
|
33
|
+
it { should respond_to(:test) }
|
34
|
+
its(:new) { should respond_to(:test) }
|
35
|
+
|
36
|
+
it 'should have optional locals' do
|
37
|
+
expect(subject.method(:test).arity).to eql(-1)
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'should delegate to the class method' do
|
41
|
+
instance = subject.new
|
42
|
+
locals = {:foo => :bar}
|
43
|
+
|
44
|
+
subject.should_receive(:test).with(locals).once
|
45
|
+
|
46
|
+
instance.test(locals)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context 'with required params' do
|
51
|
+
before :all do
|
52
|
+
MindBody::Services::Service.operation :test_required, :required => [:foo, :bar]
|
53
|
+
end
|
54
|
+
|
55
|
+
it { should respond_to(:test_required) }
|
56
|
+
its(:new) { should respond_to(:test_required) }
|
57
|
+
|
58
|
+
it 'should have two required params and optional locals' do
|
59
|
+
expect(subject.method(:test_required).arity).to eql(-3)
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'should delegate to the class method' do
|
63
|
+
instance = subject.new
|
64
|
+
locals = {:foo => :bar}
|
65
|
+
|
66
|
+
subject.should_receive(:test_required).with(:foo, :bar, locals).once
|
67
|
+
|
68
|
+
instance.test_required(:foo, :bar, locals)
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'should require two params' do
|
72
|
+
expect{subject.send(:test_required)}.to raise_error(ArgumentError)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
context 'with no locals' do
|
77
|
+
before :all do
|
78
|
+
MindBody::Services::Service.operation :test_no_locals, :required => [:foo, :bar], :locals => false
|
79
|
+
end
|
80
|
+
|
81
|
+
it { should respond_to(:test_no_locals) }
|
82
|
+
its(:new) { should respond_to(:test_no_locals) }
|
83
|
+
|
84
|
+
it 'should have two required params and optional locals' do
|
85
|
+
expect(subject.method(:test_no_locals).arity).to eql(2)
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'should delegate to the class method' do
|
89
|
+
instance = subject.new
|
90
|
+
|
91
|
+
subject.should_receive(:test_no_locals).with(:foo, :bar).once
|
92
|
+
|
93
|
+
instance.test_no_locals(:foo, :bar)
|
94
|
+
end
|
95
|
+
|
96
|
+
it 'should require two params' do
|
97
|
+
expect{subject.send(:test_no_locals)}.to raise_error(ArgumentError)
|
98
|
+
end
|
99
|
+
|
100
|
+
it 'should not allow locals' do
|
101
|
+
expect{subject.send(:test_no_locals, :foo, :bar, :foobar => 'foobar')}.to raise_error(ArgumentError)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|