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
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 931e155b3330e3297457065c53aaea47172a4875
|
4
|
+
data.tar.gz: a9dfb77ccee9f40d6dc9579988f69f20d7927fbe
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: bd8f6dc7dc5c054693b48b16a627466222bf571df86b1199d90449bdb5b6c96b9b4986c0fafc893650f079a0c2fcd9a33225b3ebbccde24d6fb457037e82a37e
|
7
|
+
data.tar.gz: c0948853eed75f02d0ed68da5ad52f5c4da3769db3a418e6e14f8302208ddccef5d05621638e346dfd570485047161feb91ba19b50f69b0cd4ab351bc1896e19
|
data/.gitignore
ADDED
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
shelby-arena-api
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby-2.0.0-p247
|
data/Gemfile
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
source 'http://rubygems.org'
|
2
|
+
|
3
|
+
gem 'typhoeus', '0.6.6'
|
4
|
+
gem 'json'
|
5
|
+
gem 'xml-simple'
|
6
|
+
gem 'virtus', '1.0.2'
|
7
|
+
|
8
|
+
group :development, :test do
|
9
|
+
gem 'rspec'
|
10
|
+
gem 'debugger'
|
11
|
+
gem 'factory_girl'
|
12
|
+
|
13
|
+
gem 'vcr'
|
14
|
+
gem 'webmock', '1.9' # Currently does not work with Typhoeus 0.4.2 - THIS SUCKS!
|
15
|
+
end
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
activesupport (4.0.4)
|
5
|
+
i18n (~> 0.6, >= 0.6.9)
|
6
|
+
minitest (~> 4.2)
|
7
|
+
multi_json (~> 1.3)
|
8
|
+
thread_safe (~> 0.1)
|
9
|
+
tzinfo (~> 0.3.37)
|
10
|
+
addressable (2.3.5)
|
11
|
+
atomic (1.1.16)
|
12
|
+
axiom-types (0.1.0)
|
13
|
+
descendants_tracker (~> 0.0.3)
|
14
|
+
ice_nine (~> 0.11.0)
|
15
|
+
thread_safe (~> 0.1.3)
|
16
|
+
coercible (1.0.0)
|
17
|
+
descendants_tracker (~> 0.0.1)
|
18
|
+
columnize (0.3.6)
|
19
|
+
crack (0.4.2)
|
20
|
+
safe_yaml (~> 1.0.0)
|
21
|
+
debugger (1.6.6)
|
22
|
+
columnize (>= 0.3.1)
|
23
|
+
debugger-linecache (~> 1.2.0)
|
24
|
+
debugger-ruby_core_source (~> 1.3.2)
|
25
|
+
debugger-linecache (1.2.0)
|
26
|
+
debugger-ruby_core_source (1.3.2)
|
27
|
+
descendants_tracker (0.0.3)
|
28
|
+
diff-lcs (1.2.5)
|
29
|
+
equalizer (0.0.9)
|
30
|
+
ethon (0.6.3)
|
31
|
+
ffi (>= 1.3.0)
|
32
|
+
mime-types (~> 1.18)
|
33
|
+
factory_girl (4.4.0)
|
34
|
+
activesupport (>= 3.0.0)
|
35
|
+
ffi (1.9.3)
|
36
|
+
i18n (0.6.9)
|
37
|
+
ice_nine (0.11.0)
|
38
|
+
json (1.8.1)
|
39
|
+
mime-types (1.25.1)
|
40
|
+
minitest (4.7.5)
|
41
|
+
multi_json (1.9.0)
|
42
|
+
rspec (2.14.1)
|
43
|
+
rspec-core (~> 2.14.0)
|
44
|
+
rspec-expectations (~> 2.14.0)
|
45
|
+
rspec-mocks (~> 2.14.0)
|
46
|
+
rspec-core (2.14.8)
|
47
|
+
rspec-expectations (2.14.5)
|
48
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
49
|
+
rspec-mocks (2.14.6)
|
50
|
+
safe_yaml (1.0.1)
|
51
|
+
thread_safe (0.1.3)
|
52
|
+
atomic
|
53
|
+
typhoeus (0.6.6)
|
54
|
+
ethon (~> 0.6.1)
|
55
|
+
tzinfo (0.3.39)
|
56
|
+
vcr (2.8.0)
|
57
|
+
virtus (1.0.2)
|
58
|
+
axiom-types (~> 0.1)
|
59
|
+
coercible (~> 1.0)
|
60
|
+
descendants_tracker (~> 0.0.3)
|
61
|
+
equalizer (~> 0.0.9)
|
62
|
+
webmock (1.9.0)
|
63
|
+
addressable (>= 2.2.7)
|
64
|
+
crack (>= 0.1.7)
|
65
|
+
xml-simple (1.1.3)
|
66
|
+
|
67
|
+
PLATFORMS
|
68
|
+
ruby
|
69
|
+
|
70
|
+
DEPENDENCIES
|
71
|
+
debugger
|
72
|
+
factory_girl
|
73
|
+
json
|
74
|
+
rspec
|
75
|
+
typhoeus (= 0.6.6)
|
76
|
+
vcr
|
77
|
+
virtus (= 1.0.2)
|
78
|
+
webmock (= 1.9)
|
79
|
+
xml-simple
|
data/README.rdoc
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
= Shelby Arena API
|
2
|
+
|
3
|
+
This Ruby project is an API wrapper for the Shelby Arena API
|
4
|
+
|
5
|
+
|
6
|
+
== Install / Setup
|
7
|
+
|
8
|
+
Installing the gem
|
9
|
+
|
10
|
+
gem install shelby-arena-api
|
11
|
+
|
12
|
+
|
13
|
+
To add it to your Gemfile
|
14
|
+
|
15
|
+
gem 'shelby-arena-api', require: 'shelby_arena'
|
16
|
+
|
17
|
+
|
18
|
+
== Example usage
|
19
|
+
|
20
|
+
Checkout the examples folder.
|
21
|
+
|
22
|
+
|
23
|
+
== Additional resources
|
24
|
+
|
25
|
+
Checkout the docs folder for the PDF.
|
26
|
+
|
27
|
+
|
28
|
+
== License
|
29
|
+
|
30
|
+
This project is released under the MIT license (see LICENSE).
|
31
|
+
|
32
|
+
This project is maintained by Wes Hays (https://github.com/weshays).
|
33
|
+
|
34
|
+
|
35
|
+
== Contributors
|
36
|
+
|
37
|
+
Wanna help? It could be you...
|
38
|
+
|
39
|
+
|
40
|
+
== Want to Contribute?
|
41
|
+
|
42
|
+
If you would like to get involved in this project, then please fork the project. Make changes, add features, write some tests, and then send a pull request.
|
data/Rakefile
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'rspec/core/rake_task'
|
2
|
+
|
3
|
+
|
4
|
+
desc 'Default: run specs.'
|
5
|
+
task :default => :spec
|
6
|
+
task :test => :spec
|
7
|
+
|
8
|
+
desc "Run specs"
|
9
|
+
RSpec::Core::RakeTask.new do |t|
|
10
|
+
t.pattern = "./spec/**/*_spec.rb" # don't need this, it's default.
|
11
|
+
# Put spec opts in a file named .rspec in root
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
desc "Generate code coverage"
|
16
|
+
RSpec::Core::RakeTask.new(:coverage) do |t|
|
17
|
+
t.pattern = "./spec/**/*_spec.rb" # don't need this, it's default.
|
18
|
+
t.rcov = true
|
19
|
+
t.rcov_opts = ['--exclude', 'spec']
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
|
24
|
+
namespace :docs do
|
25
|
+
|
26
|
+
desc 'Build the docs for the FellowshipOne API.'
|
27
|
+
task :build do
|
28
|
+
system('rm -rf doc')
|
29
|
+
system('yardoc --no-private --protected lib/**/*.rb')
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
data/docs/ArenaAPI.pdf
ADDED
Binary file
|
data/lib/api/address.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
module ShelbyArena
|
2
|
+
|
3
|
+
# This is a helper class for the person object so the data coming
|
4
|
+
# through via Virtus is a hash that has been converted to an array.
|
5
|
+
class Address < ApiObject
|
6
|
+
attribute :address_id, Integer
|
7
|
+
attribute :city, String
|
8
|
+
attribute :country, String
|
9
|
+
attribute :latitude, String
|
10
|
+
attribute :longitude, String
|
11
|
+
attribute :postal_code, String
|
12
|
+
attribute :primary, Boolean
|
13
|
+
attribute :state, String
|
14
|
+
attribute :street_line_1, String
|
15
|
+
|
16
|
+
|
17
|
+
# Constructor.
|
18
|
+
#
|
19
|
+
# @param data A hash of data
|
20
|
+
def initialize(data)
|
21
|
+
# data[0] is 'Address'
|
22
|
+
# data[1] is a Hash of address info to match the attributes above.
|
23
|
+
initialize_from_json_object(data[1])
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'virtus'
|
2
|
+
|
3
|
+
module ShelbyArena
|
4
|
+
|
5
|
+
# This class is the base class for all ShelbyArena objects and is meant to be inherited.
|
6
|
+
class ApiObject
|
7
|
+
include Virtus.model
|
8
|
+
|
9
|
+
attr_reader :error_messages, :marked_for_destruction
|
10
|
+
|
11
|
+
# Initializes the current object from the JSON data that was loaded into the Hash
|
12
|
+
#
|
13
|
+
# @param object_attributes A Hash of values to load into the current object.
|
14
|
+
def initialize_from_json_object(object_attributes)
|
15
|
+
if object_attributes.is_a?( Hash )
|
16
|
+
object_attributes.each do |key, value|
|
17
|
+
method_to_call = "#{ShelbyArena::attr_underscore(key)}="
|
18
|
+
|
19
|
+
if respond_to?(method_to_call)
|
20
|
+
self.send(method_to_call, value)
|
21
|
+
else
|
22
|
+
# debugger
|
23
|
+
# asdf=234
|
24
|
+
# puts "Missing :=> ".red + method_to_call.to_s # Show the missing methods
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module ShelbyArena
|
2
|
+
|
3
|
+
class Contribution < ApiObject
|
4
|
+
attribute :contribution_id, Integer
|
5
|
+
attribute :transaction_number, Integer
|
6
|
+
attribute :currency_amount, Float
|
7
|
+
attribute :contribution_date, Date
|
8
|
+
attribute :contribution_funds, Hash
|
9
|
+
attribute :currency_type_id, Integer
|
10
|
+
attribute :currency_type_value, String
|
11
|
+
attribute :person_id, Integer
|
12
|
+
attribute :person_information, Hash
|
13
|
+
attribute :person_link, String
|
14
|
+
attribute :batch_id, Integer
|
15
|
+
attribute :batch_link, String
|
16
|
+
attribute :refund_contribution_id, Integer
|
17
|
+
|
18
|
+
|
19
|
+
# Load the contribution by the specified ID.
|
20
|
+
#
|
21
|
+
# @param contribution_id The ID of the contribution to load.
|
22
|
+
#
|
23
|
+
# Returns a new Contribution object.
|
24
|
+
def self.load_by_id(contribution_id)
|
25
|
+
reader = ContributionReader.new(contribution_id)
|
26
|
+
self.new(reader)
|
27
|
+
end
|
28
|
+
|
29
|
+
# Constructor.
|
30
|
+
#
|
31
|
+
# @param reader (optional) The object that has the data. This can be a ContributionReader or Hash object.
|
32
|
+
def initialize(reader = nil)
|
33
|
+
if reader.is_a?(ContributionReader)
|
34
|
+
initialize_from_json_object(reader.load_data['Contribution'])
|
35
|
+
elsif reader.is_a?(Hash)
|
36
|
+
initialize_from_json_object(reader)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module ShelbyArena
|
2
|
+
|
3
|
+
class ContributionList
|
4
|
+
|
5
|
+
include Enumerable
|
6
|
+
|
7
|
+
# attr_reader :count, :page_number, :total_records, :additional_pages
|
8
|
+
|
9
|
+
|
10
|
+
# Constructor.
|
11
|
+
#
|
12
|
+
# @param options A hash of options for loading the list.
|
13
|
+
#
|
14
|
+
# Options:
|
15
|
+
# :reader - (optional) The Reader to use to load the data.
|
16
|
+
def initialize(options = {})
|
17
|
+
reader = options[:reader] || ShelbyArena::ContributionListReader.new(options)
|
18
|
+
@json_data = reader.load_data['ContributionListResult']['Contributions']['Contribution']
|
19
|
+
end
|
20
|
+
|
21
|
+
# Get the specified contribution.
|
22
|
+
#
|
23
|
+
# @param index The index of the contribution to get.
|
24
|
+
#
|
25
|
+
# @return Contribution
|
26
|
+
def [](index)
|
27
|
+
Contribution.new( @json_data[index] ) unless @json_data[index].nil?
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
# This method is needed for Enumerable.
|
32
|
+
def each &block
|
33
|
+
@json_data.each{ |contribution| yield( Contribution.new(contribution) )}
|
34
|
+
end
|
35
|
+
|
36
|
+
# Alias the count method
|
37
|
+
alias :size :count
|
38
|
+
|
39
|
+
|
40
|
+
# Checks if the list is empty.
|
41
|
+
#
|
42
|
+
# @return True on empty, false otherwise.
|
43
|
+
def empty?
|
44
|
+
self.count == 0 ? true : false
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
data/lib/api/family.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/person.rb'
|
2
|
+
|
3
|
+
module ShelbyArena
|
4
|
+
|
5
|
+
class Family < ApiObject
|
6
|
+
attribute :family_id, Integer
|
7
|
+
attribute :family_name, String
|
8
|
+
attribute :family_members, Array
|
9
|
+
|
10
|
+
# Loads the family by the specified ID.
|
11
|
+
#
|
12
|
+
# @param family The ID of the family to load.
|
13
|
+
#
|
14
|
+
# Returns a new Family object.
|
15
|
+
def self.load_by_id(family_id)
|
16
|
+
reader = FamilyReader.new(family_id)
|
17
|
+
self.new(reader)
|
18
|
+
rescue
|
19
|
+
nil
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
# Constructor.
|
24
|
+
#
|
25
|
+
# @param reader (optional) The object that has the data. This can be a PersonReader or Hash object.
|
26
|
+
# @param options (optional) Options for including more information.
|
27
|
+
def initialize(reader = nil, options = {})
|
28
|
+
#@writer_object = FamilyWriter
|
29
|
+
if reader.is_a?(FamilyReader)
|
30
|
+
initialize_from_json_object(reader.load_data['Family'])
|
31
|
+
elsif reader.is_a?(Hash)
|
32
|
+
initialize_from_json_object(reader)
|
33
|
+
else # new empty
|
34
|
+
raise 'Not sure about this one yet'
|
35
|
+
# reader = FamilyReader.new
|
36
|
+
# initialize_from_json_object(reader.load_new['family'])
|
37
|
+
end
|
38
|
+
|
39
|
+
# The data loaded from family_members is useless. It is best to just reload all the family
|
40
|
+
# members as person objects so all attributes are set.
|
41
|
+
# fm[0] is 'Person'
|
42
|
+
# fm[1] is a Hash of person info to match some, not all, of the attributes above.
|
43
|
+
method_to_call = "#{ShelbyArena::attr_underscore('family_members')}="
|
44
|
+
self.send(method_to_call, self.family_members.collect { |fm| ShelbyArena::Person.load_by_id(fm[1]['PersonID']) })
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
data/lib/api/fund.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
module ShelbyArena
|
2
|
+
|
3
|
+
class Fund < ApiObject
|
4
|
+
attribute :fund_id, Integer
|
5
|
+
attribute :fund_name, String
|
6
|
+
attribute :online_name, String
|
7
|
+
attribute :start_date, Date
|
8
|
+
attribute :end_date, Date
|
9
|
+
attribute :active, Boolean
|
10
|
+
attribute :can_pledge, Boolean
|
11
|
+
attribute :tax_deductible, Boolean
|
12
|
+
|
13
|
+
|
14
|
+
# Load the fund by the specified ID.
|
15
|
+
#
|
16
|
+
# @param fund_id The ID of the fund to load.
|
17
|
+
#
|
18
|
+
# Returns a new Fund object.
|
19
|
+
def self.load_by_id(fund_id)
|
20
|
+
reader = FundReader.new(fund_id)
|
21
|
+
self.new(reader)
|
22
|
+
end
|
23
|
+
|
24
|
+
# Constructor.
|
25
|
+
#
|
26
|
+
# @param reader (optional) The object that has the data. This can be a FundReader or Hash object.
|
27
|
+
def initialize(reader = nil)
|
28
|
+
if reader.is_a?(FundReader)
|
29
|
+
initialize_from_json_object(reader.load_data['Fund'])
|
30
|
+
elsif reader.is_a?(Hash)
|
31
|
+
initialize_from_json_object(reader)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|