the-city-admin 0.4.0 → 0.5.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.
@@ -1,6 +1,6 @@
1
1
  module CityKeys
2
2
 
3
- KEY = 'cf2903151e3213e66fd8080c7d8b65b1d6ccdd31'
4
- TOKEN = '5c88b32edda7653c'
3
+ KEY = '66c59e2ee24553e7237259e30b4c17365681b95c'
4
+ TOKEN = 'a9ae4af3c3e80102'
5
5
 
6
6
  end
@@ -0,0 +1,63 @@
1
+ # *******************************************
2
+ # This is a demo file to show usage.
3
+ #
4
+ # @package TheCity::Admin
5
+ # @authors Robbie Lieb <robbie@onthecity.org>, Wes Hays <wes@onthecity.org>
6
+ # *******************************************
7
+
8
+ TCA_ENV = 'development'
9
+ THE_CITY_ADMIN_PATH = 'http://api.devthecity.org:9292'
10
+ key = '66c59e2ee24553e7237259e30b4c17365681b95c'
11
+ token = 'a9ae4af3c3e80102'
12
+
13
+
14
+ require 'ruby-debug'
15
+ require File.dirname(__FILE__) + '/../lib/the_city_admin.rb'
16
+
17
+ require File.dirname(__FILE__) + '/city_keys.rb'
18
+ include CityKeys
19
+
20
+ TheCity::AdminApi.connect(KEY, TOKEN)
21
+
22
+
23
+ de_list = TheCity::DonationExportList.new
24
+ de_list.each do |item|
25
+ puts "DonationExport: #{item.inspect}"
26
+ end
27
+
28
+ # de_list = TheCity::DonationExportList.new
29
+ # de_list.each do |item|
30
+ # if item.delete
31
+ # puts "DonationExport #{item.id} deleted"
32
+ # else
33
+ # puts "Unable to delete donation export #{item.id}: #{item.error_messages.join(', ')}"
34
+ # end
35
+ # end
36
+
37
+ # de_list = TheCity::DonationExportList.new
38
+ # if de_list.empty?
39
+ # puts "No donation exports found"
40
+ # else
41
+ # puts "Donation exports found"
42
+ # end
43
+
44
+ # donation_export = TheCity::DonationExport.new
45
+ # if donation_export.save
46
+ # puts "Donation export created"
47
+ # else
48
+ # puts "Failed to create donation export"
49
+ # end
50
+
51
+
52
+ # de_list = TheCity::DonationExportList.new
53
+ # if de_list.empty?
54
+ # puts "No donation exports found"
55
+ # else
56
+ # puts "Donation exports found"
57
+ # end
58
+
59
+ puts "------------------------------------"
60
+
61
+ puts "####################################"
62
+
63
+
@@ -0,0 +1,38 @@
1
+ module TheCity
2
+
3
+ class DonationExport < ApiObject
4
+
5
+ tc_attr_accessor :id,
6
+ :state,
7
+ :authenticated_s3_url,
8
+ :created_at
9
+
10
+
11
+ # Loads the donation export by the specified ID.
12
+ #
13
+ # @param donation_export_id The ID of the donation export to load.
14
+ # @param options A hash of options for requesting data from the server.
15
+ # :: donation_id is required
16
+ #
17
+ # Returns a new {DonationExport} object.
18
+ def self.load_by_id(donation_export_id, options = {})
19
+ donation_reader = DonationExportReader.new(donation_export_id, options)
20
+ self.new(donation_reader.load_feed)
21
+ rescue
22
+ nil
23
+ end
24
+
25
+
26
+ # Constructor.
27
+ #
28
+ # @param json_data (optional) JSON data of the donation export.
29
+ def initialize(json_data = nil)
30
+ @writer_object = DonationExportWriter
31
+ initialize_from_json_object(json_data) unless json_data.nil?
32
+ end
33
+
34
+ end
35
+
36
+ end
37
+
38
+
@@ -0,0 +1,63 @@
1
+ module TheCity
2
+
3
+ class DonationExportList
4
+
5
+ include Enumerable
6
+
7
+ attr_reader :total_entries, :total_pages, :per_page, :current_page
8
+
9
+ # Constructor.
10
+ #
11
+ # @param options A hash of options for loading the list.
12
+ #
13
+ # Options:
14
+ # :donation_id - The ID of the donation to load the addresses for. (required)
15
+ # :page - The page number to get.
16
+ # :reader - The Reader to use to load the data.
17
+ #
18
+ #
19
+ # Examples:
20
+ # DonationExportList.new({:donation_id => 12345})
21
+ #
22
+ # DonationExportList.new({:donation_id => 12345, :page => 2})
23
+ #
24
+ def initialize(options = {})
25
+ reader = options[:reader] || TheCity::DonationExportListReader.new(options)
26
+ @json_data = reader.load_feed
27
+
28
+ @total_entries = @json_data['total_entries']
29
+ @total_pages = @json_data['total_pages']
30
+ @per_page = @json_data['per_page']
31
+ @current_page = @json_data['current_page']
32
+ end
33
+
34
+
35
+ # Get the specified note.
36
+ #
37
+ # @param index The index of the note to get.
38
+ #
39
+ # @return [DonationExport]
40
+ def [](index)
41
+ DonationExport.new( @json_data['exports'][index] ) if @json_data['exports'][index]
42
+ end
43
+
44
+
45
+ # This method is needed for Enumerable.
46
+ def each &block
47
+ @json_data['exports'].each{ |export| yield( DonationExport.new(export) )}
48
+ end
49
+
50
+
51
+ # Alias the count method
52
+ alias :size :count
53
+
54
+ # Checks if the list is empty.
55
+ #
56
+ # @return True on empty, false otherwise.
57
+ def empty?
58
+ @json_data['exports'].empty?
59
+ end
60
+
61
+ end
62
+
63
+ end
data/lib/api/fund.rb CHANGED
@@ -36,6 +36,7 @@ module TheCity
36
36
  elsif reader.is_a?(Hash)
37
37
  initialize_from_json_object(reader)
38
38
  end
39
+ @writer_object = FundWriter
39
40
  end
40
41
 
41
42
  end
data/lib/common.rb CHANGED
@@ -50,12 +50,12 @@ module TheCity
50
50
  current_time = Time.now.to_i.to_s
51
51
  string_to_sign = current_time.to_s + method_request + url
52
52
 
53
- unencoded_hmac = OpenSSL::HMAC.digest('sha256', TheCity::AdminApi::API_KEY, string_to_sign)
53
+ unencoded_hmac = OpenSSL::HMAC.digest('sha256', TheCity::AdminApi.api_key, string_to_sign)
54
54
  unescaped_hmac = Base64.encode64(unencoded_hmac).chomp
55
55
  hmac_signature = CGI.escape(unescaped_hmac)
56
56
 
57
57
  {'X-City-Sig' => hmac_signature,
58
- 'X-City-User-Token' => TheCity::AdminApi::API_TOKEN,
58
+ 'X-City-User-Token' => TheCity::AdminApi.api_token,
59
59
  'X-City-Time' => current_time,
60
60
  'Accept' => 'application/vnd.thecity.admin.v1+json',
61
61
  'Content-Type' => 'application/json',
@@ -0,0 +1,23 @@
1
+ module TheCity
2
+
3
+ class DonationExportListReader < ApiReader
4
+
5
+ # Constructor.
6
+ #
7
+ # @param options A hash of options for requesting data from the server.
8
+ # @param [CacheAdapter] cacher (optional) The cacher to be used to cache data.
9
+ def initialize(options = {}, cacher = nil)
10
+ page = options[:page] || 1
11
+ #@class_key = "groups_#{group_id}_exports"
12
+ @url_data_path = "/donations/exports"
13
+ @url_data_params = {:page => page}
14
+
15
+ # The object to store and load the cache.
16
+ @cacher = cacher unless cacher.nil?
17
+ end
18
+
19
+ end
20
+
21
+ end
22
+
23
+
@@ -0,0 +1,23 @@
1
+ module TheCity
2
+
3
+ class DonationExportReader < ApiReader
4
+
5
+ # Constructor.
6
+ #
7
+ # @param donation_export_id The ID of the donation export to load.
8
+ # @param options A hash of options for requesting data from the server.
9
+ # @param cacher (optional) The CacheAdapter cacher to be used to cache data.
10
+ def initialize(donation_export_id, options = {}, cacher = nil)
11
+ #@class_key = "donation_export_#{donation_export_id}"
12
+ @url_data_path = "/donations/exports/#{donation_export_id}"
13
+ @url_data_params = options
14
+
15
+ # The object to store and load the cache.
16
+ @cacher = cacher unless cacher.nil?
17
+ end
18
+
19
+ end
20
+
21
+ end
22
+
23
+
@@ -28,28 +28,14 @@ require File.dirname(__FILE__) + '/common.rb'
28
28
  module TheCity
29
29
 
30
30
  class AdminApi
31
-
32
- attr_reader :api_key, :api_token
33
-
34
-
35
- # Alias for calling the *new* method.
36
- def self.connect(api_key, api_token)
37
- self.new(api_key, api_token)
31
+ class << self
32
+ attr_reader :api_key, :api_token
38
33
  end
39
-
40
-
41
- # Constructor.
42
- #
43
- # @param api_key The API key for the church.
44
- # @param api_token The API token for the church.
45
- def initialize(api_key, api_token)
46
- raise TheCityExceptions::UnableToConnectToTheCity.new('Key and Token cannot be nil.') if api_key.nil? or api_token.nil?
47
-
48
- # Create a constant for the churches API key.
49
- TheCity::AdminApi::const_set(:API_KEY, api_key) unless defined?(API_KEY)
50
-
51
- # Create a constant for the churches API Token.
52
- TheCity::AdminApi::const_set(:API_TOKEN, api_token) unless defined?(API_TOKEN)
34
+
35
+ def self.connect(admin_api_key, admin_api_token)
36
+ raise TheCityExceptions::UnableToConnectToTheCity.new('Key and Token cannot be nil.') if admin_api_key.nil? or admin_api_token.nil?
37
+ @api_key = admin_api_key
38
+ @api_token = admin_api_token
53
39
  end
54
40
 
55
41
  end
@@ -0,0 +1,25 @@
1
+ module TheCity
2
+
3
+ class DonationExportWriter < ApiWriter
4
+
5
+ # Constructor.
6
+ #
7
+ # @param data The json data to save.
8
+ def initialize(data)
9
+ if data[:id]
10
+ @url_action = :put
11
+ @url_data_path = nil # not implemented
12
+ else
13
+ @url_action = :post
14
+ @url_data_path = '/donations/exports'
15
+ end
16
+ @url_data_delete_path = "/donations/exports/#{data[:id]}"
17
+
18
+ @url_data_params = data
19
+ end
20
+
21
+ end
22
+
23
+ end
24
+
25
+
@@ -0,0 +1,25 @@
1
+ module TheCity
2
+
3
+ class FundWriter < ApiWriter
4
+
5
+ # Constructor.
6
+ #
7
+ # @param data The json data to save.
8
+ def initialize(data)
9
+ if data[:id]
10
+ @url_action = :put
11
+ @url_data_path = "/funds/#{data[:id]}"
12
+ else
13
+ @url_action = :post
14
+ @url_data_path = "/funds"
15
+ end
16
+ @url_data_delete_path = "/funds/#{data[:id]}"
17
+
18
+ @url_data_params = data
19
+ end
20
+
21
+ end
22
+
23
+ end
24
+
25
+
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  PROJECT_GEM = 'the-city-admin'
3
- PROJECT_GEM_VERSION = '0.4.0'
3
+ PROJECT_GEM_VERSION = '0.5.0'
4
4
 
5
5
  s.name = PROJECT_GEM
6
6
  s.version = PROJECT_GEM_VERSION
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: the-city-admin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-17 00:00:00.000000000 Z
12
+ date: 2013-01-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: typhoeus
@@ -49,6 +49,7 @@ files:
49
49
  - examples/addresses.rb
50
50
  - examples/barcodes_checkins.rb
51
51
  - examples/city_keys.rb
52
+ - examples/donation_export.rb
52
53
  - examples/familes.rb
53
54
  - examples/groups.rb
54
55
  - examples/metrics.rb
@@ -66,6 +67,8 @@ files:
66
67
  - lib/api/checkin.rb
67
68
  - lib/api/checkin_list.rb
68
69
  - lib/api/donation.rb
70
+ - lib/api/donation_export.rb
71
+ - lib/api/donation_export_list.rb
69
72
  - lib/api/donation_list.rb
70
73
  - lib/api/family.rb
71
74
  - lib/api/family_member.rb
@@ -140,6 +143,8 @@ files:
140
143
  - lib/readers/api_reader.rb
141
144
  - lib/readers/checkin_list_reader.rb
142
145
  - lib/readers/checkin_reader.rb
146
+ - lib/readers/donation_export_list_reader.rb
147
+ - lib/readers/donation_export_reader.rb
143
148
  - lib/readers/donation_list_reader.rb
144
149
  - lib/readers/donation_reader.rb
145
150
  - lib/readers/family_reader.rb
@@ -187,7 +192,9 @@ files:
187
192
  - lib/readers/web_hook_list_reader.rb
188
193
  - lib/the_city_admin.rb
189
194
  - lib/writers/api_writer.rb
195
+ - lib/writers/donation_export_writer.rb
190
196
  - lib/writers/family_writer.rb
197
+ - lib/writers/fund_writer.rb
191
198
  - lib/writers/group_address_writer.rb
192
199
  - lib/writers/group_export_writer.rb
193
200
  - lib/writers/group_writer.rb