access 1.1.7 → 2.0.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.
Files changed (83) hide show
  1. checksums.yaml +4 -4
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +2 -0
  4. data/.travis.yml +12 -0
  5. data/Guardfile +7 -0
  6. data/README.md +159 -23
  7. data/Rakefile +13 -0
  8. data/access.gemspec +6 -1
  9. data/bin/console +14 -0
  10. data/bin/setup +7 -0
  11. data/lib/access.rb +21 -10
  12. data/lib/access/api.rb +188 -64
  13. data/lib/access/autocomplete.rb +11 -0
  14. data/lib/access/campaign.rb +24 -0
  15. data/lib/access/category.rb +16 -2
  16. data/lib/access/channel.rb +24 -0
  17. data/lib/access/city_savings.rb +16 -0
  18. data/lib/access/config.rb +8 -7
  19. data/lib/access/error.rb +8 -2
  20. data/lib/access/filter.rb +30 -2
  21. data/lib/access/info.rb +13 -0
  22. data/lib/access/link.rb +17 -0
  23. data/lib/access/location.rb +17 -2
  24. data/lib/access/member.rb +11 -0
  25. data/lib/access/oauth_application.rb +31 -0
  26. data/lib/access/offer.rb +24 -20
  27. data/lib/access/redeem.rb +11 -4
  28. data/lib/access/report.rb +10 -0
  29. data/lib/access/request.rb +25 -20
  30. data/lib/access/response.rb +127 -0
  31. data/lib/access/spot.rb +28 -0
  32. data/lib/access/store.rb +16 -2
  33. data/lib/access/token.rb +18 -0
  34. data/lib/access/verify.rb +11 -2
  35. data/lib/access/version.rb +1 -1
  36. data/test/access/autocomplete_test.rb +53 -0
  37. data/test/access/category_test.rb +64 -0
  38. data/test/access/city_savings_test.rb +5 -0
  39. data/test/access/filter_test.rb +40 -0
  40. data/test/access/location_test.rb +59 -0
  41. data/test/access/member_test.rb +5 -0
  42. data/test/access/oauth_application_test.rb +91 -0
  43. data/test/access/offer_test.rb +71 -0
  44. data/test/access/redeem_test.rb +38 -0
  45. data/test/access/report_test.rb +36 -0
  46. data/test/access/store_test.rb +65 -0
  47. data/test/access/token_test.rb +35 -0
  48. data/test/access/verify_test.rb +29 -0
  49. data/test/access/version_test.rb +9 -0
  50. data/test/fixtures/autocomplete_search.yml +207 -0
  51. data/test/fixtures/autocomplete_search_categories.yml +181 -0
  52. data/test/fixtures/autocomplete_search_locations.yml +173 -0
  53. data/test/fixtures/autocomplete_search_offers.yml +181 -0
  54. data/test/fixtures/autocomplete_search_stores.yml +185 -0
  55. data/test/fixtures/category_find.yml +303 -0
  56. data/test/fixtures/category_search.yml +683 -0
  57. data/test/fixtures/category_search_fail_member_key.yml +102 -0
  58. data/test/fixtures/filter_find.yml +70 -0
  59. data/test/fixtures/filter_search.yml +195 -0
  60. data/test/fixtures/location_find.yml +923 -0
  61. data/test/fixtures/location_search.yml +378 -0
  62. data/test/fixtures/location_search_fail_member_key.yml +367 -0
  63. data/test/fixtures/national_stores.yml +4135 -0
  64. data/test/fixtures/oauth_application_find.yml +163 -0
  65. data/test/fixtures/oauth_application_search.yml +134 -0
  66. data/test/fixtures/oauth_application_search_fail_member_key.yml +268 -0
  67. data/test/fixtures/oauth_application_token_find.yml +249 -0
  68. data/test/fixtures/oauth_application_token_search.yml +98 -0
  69. data/test/fixtures/offer_find.yml +683 -0
  70. data/test/fixtures/offer_search.yml +329 -0
  71. data/test/fixtures/offer_search_fail_member_key.yml +102 -0
  72. data/test/fixtures/redeem_offer_no_redeem_type.yml +423 -0
  73. data/test/fixtures/store_find.yml +333 -0
  74. data/test/fixtures/store_search.yml +227 -0
  75. data/test/fixtures/store_search_fail_member_key.yml +102 -0
  76. data/test/fixtures/subcategory_find.yml +283 -0
  77. data/test/fixtures/token_find.yml +245 -0
  78. data/test/fixtures/token_search.yml +301 -0
  79. data/test/fixtures/verify_filter.yml +290 -0
  80. data/test/fixtures/verify_token.yml +78 -0
  81. data/test/test_helper.rb +15 -0
  82. metadata +183 -11
  83. data/test/offers/offer_test.rb +0 -5
@@ -21,5 +21,16 @@ module Access
21
21
  Access::Api.new.autocomplete options.merge(resources: 'locations')
22
22
  end
23
23
 
24
+ def initialize(values)
25
+ self.class.class_eval {attr_reader *values.keys }
26
+ values.each do |attribute_name, attribute_value|
27
+ self.instance_variable_set("@#{attribute_name}", attribute_value)
28
+ end
29
+ @offers = Access::Offer.process_batch(@offers) if @offers
30
+ @stores = Access::Store.process_batch(@stores) if @stores
31
+ @locations = Access::Location.process_batch(@locations) if @locations
32
+ @categories = Access::Category.process_batch(@categories) if @categories
33
+ end
34
+
24
35
  end
25
36
  end
@@ -0,0 +1,24 @@
1
+ module Access
2
+ class Campaign
3
+
4
+ def self.search(options = {})
5
+ Access::api.new.search_campaigns options
6
+ end
7
+
8
+ def self.find(campaign_key, options = {})
9
+ Access::api.new.find_campaign campaign_key, options
10
+ end
11
+
12
+ def self.process_batch(chunk)
13
+ chunk.map { |campaign| new(campaign) }
14
+ end
15
+
16
+ def initialize(values)
17
+ self.class.class_eval {attr_reader *values.keys }
18
+ values.each do |attribute_name, attribute_value|
19
+ self.instance_variable_set("@#{attribute_name}", attribute_value)
20
+ end
21
+ end
22
+
23
+ end
24
+ end
@@ -5,8 +5,22 @@ module Access
5
5
  Access::Api.new.search_categories options
6
6
  end
7
7
 
8
- def self.find(key, options = {})
9
- Access::Api.new.find_category key, options
8
+ def self.find(category_key, options = {})
9
+ Access::Api.new.find_category category_key, options
10
+ end
11
+
12
+ def self.process_batch(chunk)
13
+ chunk.map { |category| new(category) }
14
+ end
15
+
16
+ def initialize(values)
17
+ self.class.class_eval {attr_reader *values.keys }
18
+ values.each do |attribute_name, attribute_value|
19
+ self.instance_variable_set("@#{attribute_name}", attribute_value)
20
+ end
21
+ @links = Access::Link.new(@links) if @links
22
+ @subcategories = Access::Category.process_batch(@subcategories) if @subcategories
23
+ @subcategory_siblings = Access::Category.process_batch(@subcategory_siblings) if @subcategory_siblings
10
24
  end
11
25
 
12
26
  end
@@ -0,0 +1,24 @@
1
+ module Access
2
+ class Channel
3
+
4
+ def self.search(options = {})
5
+ Access::Api.new.search_channels options
6
+ end
7
+
8
+ def self.find(channel_key, options = {})
9
+ Access::Api.new.find_channel channel_key, options
10
+ end
11
+
12
+ def self.process_batch(chunk)
13
+ chunk.map { |campaign| new(campaign) }
14
+ end
15
+
16
+ def initialize(values)
17
+ self.class.class_eval {attr_reader *values.keys }
18
+ values.each do |attribute_name, attribute_value|
19
+ self.instance_variable_set("@#{attribute_name}", attribute_value)
20
+ end
21
+ end
22
+
23
+ end
24
+ end
@@ -0,0 +1,16 @@
1
+ module Access
2
+ class CitySavings
3
+
4
+ def self.search(options = {})
5
+ Access::Api.new.search_city_savings options
6
+ end
7
+
8
+ def initialize(values)
9
+ self.class.class_eval {attr_reader *values.keys }
10
+ values.each do |attribute_name, attribute_value|
11
+ self.instance_variable_set("@#{attribute_name}", attribute_value)
12
+ end
13
+ end
14
+
15
+ end
16
+ end
@@ -14,23 +14,24 @@ module Access
14
14
 
15
15
  class Config
16
16
  DOMAINS = {'production' => '', 'demo' => '-demo', 'stage' => '-stage', 'staging' => '-stage' }
17
- attr_accessor :access_token, :format, :api_environment, :api_version, :hashify
17
+ attr_accessor :access_token, :api_environment, :return_json, :hashify
18
18
 
19
19
  def initialize
20
20
  @access_token = ENV['ACCESS_TOKEN']
21
- @format = ENV['ACCESS_FORMAT'] || 'json'
22
21
  # demo, stage, production
23
22
  @api_environment = ENV['ACCESS_ENVIRONMENT'] || 'demo'
24
- @api_version = ENV['ACCESS_VERSION'] || 'v1'
23
+ # @api_version = ENV['ACCESS_VERSION'] || 'v1'
24
+ @return_json = ENV['ACCESS_RETURN_JSON'] || 'false'
25
+ # only used when return_json is true
25
26
  @hashify = ENV['ACCESS_HASHIFY'] || 'false'
26
27
  end
27
28
 
28
29
  def reset
29
30
  self.access_token = ENV['ACCESS_TOKEN']
30
- self.format = 'json'
31
- self.api_environment = 'demo'
32
- self.api_version = 'v1'
33
- self.hashify = false
31
+ self.api_environment = ENV['ACCESS_ENVIRONMENT'] || 'demo'
32
+ # self.api_version = 'v1'
33
+ self.return_json = ENV['ACCESS_RETURN_JSON'] || 'false'
34
+ self.hashify = ENV['ACCESS_HASHIFY'] || 'false'
34
35
  end
35
36
  end
36
37
 
@@ -1,10 +1,16 @@
1
1
  module Access
2
- module Error
3
-
2
+ class Error
4
3
  class AuthenticationError < StandardError; end
5
4
  class NoAccessToken < AuthenticationError; end
6
5
  class InvalidResponseFormat < TypeError; end
7
6
 
7
+ attr_reader :message, :status_code, :status
8
+
9
+ def initialize(response_status, response_code, response_message = nil)
10
+ @status_code = response_code
11
+ @status = response_status
12
+ @message = response_message
13
+ end
8
14
  end
9
15
  end
10
16
 
@@ -2,12 +2,40 @@ module Access
2
2
  class Filter
3
3
 
4
4
  def self.search(options = {})
5
+ # Internal Admin only Call
5
6
  Access::Api.new.search_filters options
6
7
  end
7
8
 
8
- def self.find(application_id, options = {})
9
- Access::Api.new.find_filter application_id, options
9
+ def self.find(filter_key, options = {})
10
+ # Internal Admin only Call
11
+ Access::Api.new.find_filter filter_key, options
10
12
  end
11
13
 
14
+ def self.process_batch(chunk)
15
+ chunk.map { |filter| new(filter) }
16
+ end
17
+
18
+ def initialize(values)
19
+ self.class.class_eval { attr_reader *values.keys }
20
+ values.each do |attribute_name, attribute_value|
21
+ self.instance_variable_set("@#{attribute_name}", attribute_value)
22
+ end
23
+ end
24
+
25
+ def filter_key
26
+ @filter_id
27
+ end
28
+
29
+ def name
30
+ @filter_name
31
+ end
32
+
33
+ def json_filter
34
+ YAML::load(@filter).to_json if @filter
35
+ end
36
+
37
+ def hash_filter
38
+ YAML::load(@filter).to_hash if @filter
39
+ end
12
40
  end
13
41
  end
@@ -0,0 +1,13 @@
1
+ module Access
2
+ class Info
3
+
4
+ def initialize(values)
5
+ self.class.class_eval {attr_reader *values.keys }
6
+ values.each do |attribute_name, attribute_value|
7
+ self.instance_variable_set("@#{attribute_name}", attribute_value)
8
+ end
9
+ end
10
+
11
+ end
12
+ end
13
+
@@ -0,0 +1,17 @@
1
+ module Access
2
+ class Link
3
+
4
+ def self.process_batch(chunk)
5
+ chunk.map { |link| new(link) }
6
+ end
7
+
8
+ def initialize(values)
9
+ self.class.class_eval {attr_reader *values.keys }
10
+ values.each do |attribute_name, attribute_value|
11
+ self.instance_variable_set("@#{attribute_name}", attribute_value)
12
+ end
13
+ end
14
+
15
+ end
16
+ end
17
+
@@ -5,9 +5,24 @@ module Access
5
5
  Access::Api.new.search_locations options
6
6
  end
7
7
 
8
- def self.find(key, options = {})
9
- Access::Api.new.find_location key, options
8
+ def self.find(location_key, options = {})
9
+ Access::Api.new.find_location location_key, options
10
10
  end
11
11
 
12
+ def self.process_batch(chunk)
13
+ chunk.map { |location| new(location) }
14
+ end
15
+
16
+ def initialize(values)
17
+ self.class.class_eval {attr_reader *values.keys } if values
18
+ values.each do |attribute_name, attribute_value|
19
+ self.instance_variable_set("@#{attribute_name}", attribute_value)
20
+ end
21
+
22
+ @links = Access::Link.new(@links) if @links
23
+ @location_store = Access::Store.new(@location_store) if @location_store
24
+ @location_categories = Access::Category.process_batch(@location_categories) if @location_categories
25
+ @physical_location = Access::Location.new(@physical_location) if @physical_location
26
+ end
12
27
  end
13
28
  end
@@ -1,5 +1,16 @@
1
1
  module Access
2
2
  class Member
3
3
 
4
+ def self.process_batch(chunk)
5
+ chunk.map { |member| new(member) }
6
+ end
7
+
8
+ def initialize(values)
9
+ self.class.class_eval {attr_reader *values.keys }
10
+ values.each do |attribute_name, attribute_value|
11
+ self.instance_variable_set("@#{attribute_name}", attribute_value)
12
+ end
13
+ end
14
+
4
15
  end
5
16
  end
@@ -2,36 +2,67 @@ module Access
2
2
  class OauthApplication
3
3
 
4
4
  def self.search(options = {})
5
+ # Internal Admin only Call
5
6
  Access::Api.new.search_oauth_applications options
6
7
  end
7
8
 
8
9
  def self.find(application_id, options = {})
10
+ # Internal Admin only Call
9
11
  Access::Api.new.find_oauth_application application_id, options
10
12
  end
11
13
 
12
14
  def self.search_tokens(application_id, options = {})
15
+ # Internal Admin only Call
16
+ # Returns Token Response
13
17
  Access::Api.new.search_oauth_application_tokens application_id, options
14
18
  end
15
19
 
16
20
  def self.find_token(application_id, token_id, options = {})
21
+ # Internal Admin only Call
22
+ # Returns Token Response
17
23
  Access::Api.new.find_oauth_application_token application_id, token_id, options
18
24
  end
19
25
 
20
26
  def self.create_token(application_id, options = {})
27
+ # Internal Admin only Call
21
28
  Access::Api.new.create_oauth_application_token application_id, options
22
29
  end
23
30
 
24
31
  def self.create(options = {})
32
+ # Internal Admin only Call
25
33
  Access::Api.new.create_oauth_application options
26
34
  end
27
35
 
28
36
  def self.update(application_id, options = {})
37
+ # Internal Admin only Call
29
38
  Access::Api.new.update_oauth_application application_id, options
30
39
  end
31
40
 
32
41
  def self.delete(application_id, options = {})
42
+ # Internal Admin only Call
33
43
  Access::Api.new.delete_oauth_application application_id, options
34
44
  end
35
45
 
46
+ def self.process_batch(chunk)
47
+ chunk.map { |application| new(application) }
48
+ end
49
+
50
+ def initialize(values)
51
+ self.class.class_eval {attr_reader *values.keys }
52
+ values.each do |attribute_name, attribute_value|
53
+ self.instance_variable_set("@#{attribute_name}", attribute_value)
54
+ end
55
+ @links = Access::Link.new(@links) if @links
56
+ @filter = Access::Filter.new(@filter) if @filter
57
+ end
58
+
59
+ def has_scope?(scope)
60
+
61
+ end
62
+
63
+ def oauth_application_key
64
+ @id
65
+ end
66
+
36
67
  end
37
68
  end
@@ -1,31 +1,35 @@
1
1
  module Access
2
2
  class Offer
3
-
4
- # def self.search_options
5
- # [
6
- # { param: "query",
7
- # description: "It does searches",
8
- # documentation_link: "https://docs.accessdevelopment"
9
- # }
10
- # ]
11
- # end
12
-
13
- # def self.find_options
14
- # [
15
- # { param: "query",
16
- # description: "It does searches",
17
- # documentation_link: "https://docs.accessdevelopment/docs#asdfkjl"
18
- # }
19
- # ]
20
- # end
3
+ attr_reader :store, :location
21
4
 
22
5
  def self.search(options = {})
23
6
  Access::Api.new.search_offers options
24
7
  end
25
8
 
26
- def self.find(key, options = {})
27
- Access::Api.new.find_offer key, options
9
+ def self.find(offer_key, options = {})
10
+ Access::Api.new.find_offer offer_key, options
28
11
  end
29
12
 
13
+ def self.process_batch(chunk)
14
+ chunk.map { |offer| new(offer) }
15
+ end
16
+
17
+ def initialize(values)
18
+ self.class.class_eval { attr_reader *values.keys }
19
+ values.each do |attribute_name, attribute_value|
20
+ self.instance_variable_set("@#{attribute_name}", attribute_value)
21
+ end
22
+ @categories = Access::Category.process_batch(@categories) if @categories
23
+ @links = Access::Link.new(@links) if @links
24
+ @offer_store = Access::Store.new(@offer_store) if @offer_store
25
+ end
26
+
27
+ def location
28
+ @offer_store.physical_location
29
+ end
30
+
31
+ def store
32
+ @offer_store
33
+ end
30
34
  end
31
35
  end
@@ -1,12 +1,19 @@
1
1
  module Access
2
2
  class Redeem
3
3
 
4
- def self.redeem_offer(key, redeem_type = nil, options = {})
5
- Access::Api.new.redeem_offer key, redeem_type, options
4
+ def self.redeem_offer(offer_key, redeem_type = nil, options = {})
5
+ Access::Api.new.redeem_offer offer_key, redeem_type, options
6
6
  end
7
7
 
8
- def self.citysavings(options = {})
9
- Access::Api.new.citysavings options
8
+ def self.process_batch(chunk)
9
+ chunk.map { |redeem| new(redeem) }
10
+ end
11
+
12
+ def initialize(values)
13
+ self.class.class_eval {attr_reader *values.keys }
14
+ values.each do |attribute_name, attribute_value|
15
+ self.instance_variable_set("@#{attribute_name}", attribute_value)
16
+ end
10
17
  end
11
18
 
12
19
  end
@@ -2,16 +2,26 @@ module Access
2
2
  class Report
3
3
 
4
4
  def self.all_usage(options = {})
5
+ # Internal Admin only Call
5
6
  Access::Api.new.all_usage options
6
7
  end
7
8
 
8
9
  def self.usage(options = {})
10
+ # Internal Admin only Call
9
11
  Access::Api.new.usage options
10
12
  end
11
13
 
12
14
  def self.usage_other(key, options = {})
15
+ # Internal Admin only Call
13
16
  Access::Api.new.usage_other key, options
14
17
  end
15
18
 
19
+ def initialize(values)
20
+ self.class.class_eval {attr_reader *values.keys }
21
+ values.each do |attribute_name, attribute_value|
22
+ self.instance_variable_set("@#{attribute_name}", attribute_value)
23
+ end
24
+ end
25
+
16
26
  end
17
27
  end