shelby-arena-api 0.1.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.
- checksums.yaml +7 -0
- data/.gitignore +10 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +15 -0
- data/Gemfile.lock +79 -0
- data/README.rdoc +42 -0
- data/Rakefile +32 -0
- data/docs/ArenaAPI.pdf +0 -0
- data/lib/api/address.rb +28 -0
- data/lib/api/api_object.rb +32 -0
- data/lib/api/contribution.rb +42 -0
- data/lib/api/contribution_list.rb +49 -0
- data/lib/api/family.rb +49 -0
- data/lib/api/fund.rb +37 -0
- data/lib/api/fund_list.rb +49 -0
- data/lib/api/person.rb +79 -0
- data/lib/api/person_list.rb +53 -0
- data/lib/api/shelby_session.rb +17 -0
- data/lib/auto_load.rb +17 -0
- data/lib/common.rb +75 -0
- data/lib/exceptions.rb +5 -0
- data/lib/readers/api_reader.rb +26 -0
- data/lib/readers/contribution_list_reader.rb +28 -0
- data/lib/readers/contribution_reader.rb +19 -0
- data/lib/readers/family_reader.rb +21 -0
- data/lib/readers/fund_list_reader.rb +28 -0
- data/lib/readers/fund_reader.rb +19 -0
- data/lib/readers/person_list_reader.rb +45 -0
- data/lib/readers/person_reader.rb +21 -0
- data/lib/shelby_arena.rb +37 -0
- data/lib/writers/api_writer.rb +76 -0
- data/lib/writers/person_writer.rb +64 -0
- data/shelby_arena_api.gemspec +25 -0
- data/spec/functional/shelby_arena_spec.rb +17 -0
- data/spec/readers/api_reader_spec.rb +7 -0
- data/spec/spec_helper.rb +31 -0
- data/spec/vcr_helper.rb +5 -0
- data/spec/writers/api_writer_spec.rb +7 -0
- metadata +115 -0
@@ -0,0 +1,45 @@
|
|
1
|
+
module ShelbyArena
|
2
|
+
|
3
|
+
class PersonListReader < ApiReader
|
4
|
+
|
5
|
+
# Constructor.
|
6
|
+
def initialize(options = {})
|
7
|
+
# page = options[:page] || 1
|
8
|
+
# per_page = options[:per_page] || 100
|
9
|
+
|
10
|
+
@url_data_params = {}
|
11
|
+
valid_fields.each { |field| @url_data_params[field] = options[ShelbyArena::attr_underscore(field).to_sym] unless options[ShelbyArena::attr_underscore(field).to_sym].nil? }
|
12
|
+
@url_data_path = 'person/list'
|
13
|
+
end
|
14
|
+
|
15
|
+
def valid_fields
|
16
|
+
%W(Address
|
17
|
+
altID
|
18
|
+
areaId
|
19
|
+
birthdate
|
20
|
+
email
|
21
|
+
giftID
|
22
|
+
loginID
|
23
|
+
firstName
|
24
|
+
lastName
|
25
|
+
personID
|
26
|
+
phone
|
27
|
+
profileID
|
28
|
+
onlyConnected
|
29
|
+
searchDistance
|
30
|
+
latitude
|
31
|
+
longitude
|
32
|
+
campusID
|
33
|
+
includeInactive
|
34
|
+
memberStatus
|
35
|
+
attributeID
|
36
|
+
attributeIntValue
|
37
|
+
attributeVarcharValue
|
38
|
+
attributeDateTimeValue
|
39
|
+
attributeDecimalValue
|
40
|
+
name).sort
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module ShelbyArena
|
2
|
+
|
3
|
+
class PersonReader < ApiReader
|
4
|
+
|
5
|
+
# Constructor.
|
6
|
+
#
|
7
|
+
# @param person_id (optional) The ID of the person to load.
|
8
|
+
def initialize(person_id = nil)
|
9
|
+
if person_id.nil?
|
10
|
+
raise 'The create endpoint is not known yet.'
|
11
|
+
@url_new_data_path = nil # Not sure yet
|
12
|
+
else
|
13
|
+
@url_data_path = "person/#{person_id}"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
|
data/lib/shelby_arena.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'typhoeus'
|
2
|
+
require 'json'
|
3
|
+
require 'xmlsimple'
|
4
|
+
|
5
|
+
# The path to the lib directory.
|
6
|
+
SHELBY_ARENA_LIB_DIR = File.dirname(__FILE__)
|
7
|
+
|
8
|
+
require File.dirname(__FILE__) + '/auto_load.rb'
|
9
|
+
|
10
|
+
require File.dirname(__FILE__) + '/common.rb'
|
11
|
+
|
12
|
+
module ShelbyArena
|
13
|
+
|
14
|
+
class Api
|
15
|
+
|
16
|
+
class << self
|
17
|
+
attr_reader :username, :password, :api_key, :api_secret, :service_url, :session_key
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.request_session(username, password, api_key, service_url)
|
21
|
+
@username = username
|
22
|
+
@password = password
|
23
|
+
@api_key = api_key
|
24
|
+
@service_url = service_url
|
25
|
+
ShelbySession.new(ShelbyArena.request_session)
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.connect(session_key, api_secret, service_url)
|
29
|
+
@session_key = session_key
|
30
|
+
@api_secret = api_secret
|
31
|
+
@service_url = service_url
|
32
|
+
true
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
module ShelbyArena
|
2
|
+
|
3
|
+
# This class is the base class for all ShelbyArena objects and is meant to be inherited.
|
4
|
+
#
|
5
|
+
class ApiWriter
|
6
|
+
attr_reader :error_messages, :response_code
|
7
|
+
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
# module FellowshipOne
|
14
|
+
|
15
|
+
# # This adapter is the standard for all saving objects.
|
16
|
+
# class ApiWriter
|
17
|
+
# attr_reader :error_messages, :response_code
|
18
|
+
|
19
|
+
# # Saves this object.
|
20
|
+
# #
|
21
|
+
# # @return True or ID on success, otherwise false.
|
22
|
+
# def save_object
|
23
|
+
# @url_data_params ||= {}
|
24
|
+
# success = true
|
25
|
+
|
26
|
+
# if @url_data_path.nil?
|
27
|
+
# @error_messages = ["#{@url_action.to_s.upcase} not implemented for #{self.class.to_s}"]
|
28
|
+
# return false
|
29
|
+
# end
|
30
|
+
|
31
|
+
# if @updatable_fields and !@updatable_fields.empty?
|
32
|
+
# # fields_to_remove = @url_data_params.keys - @updatable_fields
|
33
|
+
# # fields_to_remove.each { |ftr| @url_data_params.delete(ftr) }
|
34
|
+
# end
|
35
|
+
|
36
|
+
# begin
|
37
|
+
# response = FellowshipOne::api_request(@url_action, @url_data_path, [], @url_data_params.to_json)
|
38
|
+
# @response_code = response.code
|
39
|
+
# # No content but is a success
|
40
|
+
# success = response.code == 204 ? {'success' => true} : JSON.parse(response.body)
|
41
|
+
# rescue Exception => e
|
42
|
+
# @error_messages = e.message.split(',')
|
43
|
+
# success = false
|
44
|
+
# end
|
45
|
+
|
46
|
+
# return success
|
47
|
+
# end
|
48
|
+
|
49
|
+
|
50
|
+
# # Deletes this object.
|
51
|
+
# #
|
52
|
+
# # @return True or ID on success, otherwise false.
|
53
|
+
# def delete_object
|
54
|
+
# success = true
|
55
|
+
|
56
|
+
# if @url_data_delete_path.nil?
|
57
|
+
# @error_messages = ["DELETE not implemented for #{self.class.to_s}"]
|
58
|
+
# return false
|
59
|
+
# end
|
60
|
+
|
61
|
+
# begin
|
62
|
+
# # @url_data_path should be the same as :put if this object is already
|
63
|
+
# # setup and mapped to an object that exists
|
64
|
+
# response = FellowshipOne::api_request(:delete, @url_data_delete_path)
|
65
|
+
# success = response.code == 204 ? true : false # No content but is a success
|
66
|
+
# rescue Exception => e
|
67
|
+
# @error_messages = e.message.split(',')
|
68
|
+
# success = false
|
69
|
+
# end
|
70
|
+
|
71
|
+
# return success
|
72
|
+
# end
|
73
|
+
|
74
|
+
# end
|
75
|
+
|
76
|
+
# end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module ShelbyArena
|
2
|
+
|
3
|
+
class PersonWriter < ApiWriter
|
4
|
+
|
5
|
+
# Constructor.
|
6
|
+
#
|
7
|
+
# @param data The json object data to save.
|
8
|
+
def initialize(data)
|
9
|
+
if data[:id]
|
10
|
+
@url_action = :put
|
11
|
+
@url_data_path = "/v1/People/#{data[:id]}"
|
12
|
+
else
|
13
|
+
@url_action = :post
|
14
|
+
@url_data_path = "/v1/People"
|
15
|
+
end
|
16
|
+
@url_data_delete_path = "/v1/People/#{data[:id]}"
|
17
|
+
|
18
|
+
@url_data_params = {'person' => data}
|
19
|
+
|
20
|
+
@updatable_fields = [:title,
|
21
|
+
:salutation,
|
22
|
+
:prefix,
|
23
|
+
:first_name,
|
24
|
+
:last_name, #required
|
25
|
+
:suffix,
|
26
|
+
:middle_name,
|
27
|
+
:goes_by_name,
|
28
|
+
:former_name,
|
29
|
+
:gender,
|
30
|
+
:date_of_birth,
|
31
|
+
:marital_status,
|
32
|
+
:household_member_type, #required
|
33
|
+
:is_authorized,
|
34
|
+
:status, #required
|
35
|
+
:occupation,
|
36
|
+
:employer,
|
37
|
+
:school,
|
38
|
+
:denomination,
|
39
|
+
:former_church,
|
40
|
+
:bar_code,
|
41
|
+
:member_envelope_code,
|
42
|
+
:default_tag_comment,
|
43
|
+
:weblink,
|
44
|
+
:solicit,
|
45
|
+
:thank,
|
46
|
+
:first_record,
|
47
|
+
:last_match_date,
|
48
|
+
:created_date,
|
49
|
+
:last_updated_date,
|
50
|
+
:id,
|
51
|
+
:uri,
|
52
|
+
:image_uri,
|
53
|
+
:old_id,
|
54
|
+
:i_code,
|
55
|
+
:household_id, #required
|
56
|
+
:old_household_id,
|
57
|
+
:attributes,
|
58
|
+
:addresses,
|
59
|
+
:communications]
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
PROJECT_GEM = 'shelby-arena-api'
|
3
|
+
PROJECT_GEM_VERSION = '0.1.0'
|
4
|
+
|
5
|
+
s.name = PROJECT_GEM
|
6
|
+
s.version = PROJECT_GEM_VERSION
|
7
|
+
s.platform = Gem::Platform::RUBY
|
8
|
+
|
9
|
+
s.homepage = 'https://github.com/weshays/shelby-arena-api-ruby'
|
10
|
+
s.rubyforge_project = 'Project on www.github.com'
|
11
|
+
s.authors = ['Wes Hays']
|
12
|
+
s.email = ['weshays@gbdev.com']
|
13
|
+
|
14
|
+
s.summary = 'Ruby gem/plugin to interact with the Shelby Arena API'
|
15
|
+
s.description = 'Ruby gem/plugin to interact with the Shelby Arena API. Checkout the project on github for more detail.'
|
16
|
+
|
17
|
+
s.add_dependency('typhoeus', '0.6.6')
|
18
|
+
s.add_dependency('virtus', '1.0.2')
|
19
|
+
|
20
|
+
|
21
|
+
s.files = `git ls-files`.split("\n").delete_if { |f| !(f =~ /^examples/).nil? }
|
22
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
23
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
24
|
+
s.require_paths = ["lib"]
|
25
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
require File.expand_path( File.dirname(__FILE__) + '/../example/shelby_arena_keys.rb')
|
2
|
+
require File.expand_path( File.dirname(__FILE__) + '/../lib/shelby_arena.rb')
|
3
|
+
|
4
|
+
require 'debugger'
|
5
|
+
|
6
|
+
require 'vcr'
|
7
|
+
require 'vcr_setup'
|
8
|
+
require 'webmock/rspec'
|
9
|
+
|
10
|
+
Dir.glob(File.dirname(__FILE__) + "/factories/*").each { |f| require f }
|
11
|
+
|
12
|
+
RSpec.configure do |config|
|
13
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
14
|
+
config.run_all_when_everything_filtered = true
|
15
|
+
config.filter_run :focus
|
16
|
+
|
17
|
+
# Run specs in random order to surface order dependencies. If you find an
|
18
|
+
# order dependency and want to debug it, you can fix the order by providing
|
19
|
+
# the seed, which is printed after each run.
|
20
|
+
# --seed 1234
|
21
|
+
config.order = 'random'
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
def simulate_connection_to_server
|
26
|
+
ShelbyArena::Api.connect(ShelbyArenaKeys::USERNAME,
|
27
|
+
ShelbyArenaKeys::PASSWORD,
|
28
|
+
ShelbyArenaKeys::API_KEY,
|
29
|
+
ShelbyArenaKeys::API_SECRET,
|
30
|
+
ShelbyArenaKeys::SHELBY_ARENA_SERVICE_URL)
|
31
|
+
end
|
data/spec/vcr_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,115 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: shelby-arena-api
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Wes Hays
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-04-24 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: typhoeus
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.6.6
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.6.6
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: virtus
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.0.2
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.0.2
|
41
|
+
description: Ruby gem/plugin to interact with the Shelby Arena API. Checkout the project
|
42
|
+
on github for more detail.
|
43
|
+
email:
|
44
|
+
- weshays@gbdev.com
|
45
|
+
executables: []
|
46
|
+
extensions: []
|
47
|
+
extra_rdoc_files: []
|
48
|
+
files:
|
49
|
+
- .gitignore
|
50
|
+
- .ruby-gemset
|
51
|
+
- .ruby-version
|
52
|
+
- Gemfile
|
53
|
+
- Gemfile.lock
|
54
|
+
- README.rdoc
|
55
|
+
- Rakefile
|
56
|
+
- docs/ArenaAPI.pdf
|
57
|
+
- lib/api/address.rb
|
58
|
+
- lib/api/api_object.rb
|
59
|
+
- lib/api/contribution.rb
|
60
|
+
- lib/api/contribution_list.rb
|
61
|
+
- lib/api/family.rb
|
62
|
+
- lib/api/fund.rb
|
63
|
+
- lib/api/fund_list.rb
|
64
|
+
- lib/api/person.rb
|
65
|
+
- lib/api/person_list.rb
|
66
|
+
- lib/api/shelby_session.rb
|
67
|
+
- lib/auto_load.rb
|
68
|
+
- lib/common.rb
|
69
|
+
- lib/exceptions.rb
|
70
|
+
- lib/readers/api_reader.rb
|
71
|
+
- lib/readers/contribution_list_reader.rb
|
72
|
+
- lib/readers/contribution_reader.rb
|
73
|
+
- lib/readers/family_reader.rb
|
74
|
+
- lib/readers/fund_list_reader.rb
|
75
|
+
- lib/readers/fund_reader.rb
|
76
|
+
- lib/readers/person_list_reader.rb
|
77
|
+
- lib/readers/person_reader.rb
|
78
|
+
- lib/shelby_arena.rb
|
79
|
+
- lib/writers/api_writer.rb
|
80
|
+
- lib/writers/person_writer.rb
|
81
|
+
- shelby_arena_api.gemspec
|
82
|
+
- spec/functional/shelby_arena_spec.rb
|
83
|
+
- spec/readers/api_reader_spec.rb
|
84
|
+
- spec/spec_helper.rb
|
85
|
+
- spec/vcr_helper.rb
|
86
|
+
- spec/writers/api_writer_spec.rb
|
87
|
+
homepage: https://github.com/weshays/shelby-arena-api-ruby
|
88
|
+
licenses: []
|
89
|
+
metadata: {}
|
90
|
+
post_install_message:
|
91
|
+
rdoc_options: []
|
92
|
+
require_paths:
|
93
|
+
- lib
|
94
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
requirements: []
|
105
|
+
rubyforge_project: Project on www.github.com
|
106
|
+
rubygems_version: 2.1.11
|
107
|
+
signing_key:
|
108
|
+
specification_version: 4
|
109
|
+
summary: Ruby gem/plugin to interact with the Shelby Arena API
|
110
|
+
test_files:
|
111
|
+
- spec/functional/shelby_arena_spec.rb
|
112
|
+
- spec/readers/api_reader_spec.rb
|
113
|
+
- spec/spec_helper.rb
|
114
|
+
- spec/vcr_helper.rb
|
115
|
+
- spec/writers/api_writer_spec.rb
|