jirafe 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.
Files changed (148) hide show
  1. data/.autotest +5 -0
  2. data/.gitignore +23 -0
  3. data/.rbenv-version +1 -0
  4. data/.rspec +2 -0
  5. data/.travis.yml +11 -0
  6. data/Gemfile +8 -0
  7. data/LICENSE +13 -0
  8. data/README.md +104 -0
  9. data/Rakefile +27 -0
  10. data/fixtures/responses/application_get_with_cloud_token.yml +40 -0
  11. data/fixtures/responses/application_get_with_invalid_token.yml +41 -0
  12. data/fixtures/responses/application_get_with_master_token.yml +784 -0
  13. data/fixtures/responses/application_get_with_reporting_token.yml +38 -0
  14. data/fixtures/responses/application_post_with_app_token.yml +38 -0
  15. data/fixtures/responses/application_post_with_cloud_token.yml +76 -0
  16. data/fixtures/responses/application_post_with_invalid_token.yml +79 -0
  17. data/fixtures/responses/application_post_with_master_token.yml +784 -0
  18. data/fixtures/responses/application_post_with_master_token_blank_name.yml +79 -0
  19. data/fixtures/responses/application_post_with_master_token_dupe_name.yml +76 -0
  20. data/fixtures/responses/application_post_with_master_token_no_name.yml +79 -0
  21. data/fixtures/responses/application_post_with_reporting_token.yml +76 -0
  22. data/fixtures/responses/application_put_with_cloud_token.yml +68 -0
  23. data/fixtures/responses/application_put_with_invalid_token.yml +145 -0
  24. data/fixtures/responses/application_put_with_master_token.yml +68 -0
  25. data/fixtures/responses/application_put_with_reporting_token.yml +68 -0
  26. data/fixtures/responses/application_sites_get_with_master_token.yml +38 -0
  27. data/fixtures/responses/callback_event_post_event.yml +2000 -0
  28. data/fixtures/responses/callback_event_post_event_fetch_token.yml +1473 -0
  29. data/fixtures/responses/jirafe_resource_get_status_url.yml +38 -0
  30. data/fixtures/responses/jirafe_resource_get_status_url_with_query_param.yml +38 -0
  31. data/fixtures/responses/site_abandon_rate_get_with_master_token.yml +49 -0
  32. data/fixtures/responses/site_abandoned_average_ordervalue_get_with_master_token.yml +49 -0
  33. data/fixtures/responses/site_abandoned_carts_get_with_master_token.yml +49 -0
  34. data/fixtures/responses/site_abandoned_revenue_get_with_master_token.yml +49 -0
  35. data/fixtures/responses/site_average_order_value_get_with_master_token.yml +49 -0
  36. data/fixtures/responses/site_bounces_rate_get_with_master_token.yml +49 -0
  37. data/fixtures/responses/site_cart_segmentation_get_with_master_token.yml +38 -0
  38. data/fixtures/responses/site_conversion_rate_get_with_master_token.yml +49 -0
  39. data/fixtures/responses/site_conversions_get_with_master_token.yml +49 -0
  40. data/fixtures/responses/site_customers_get_with_master_token.yml +49 -0
  41. data/fixtures/responses/site_dashboard_get_with_master_token.yml +60 -0
  42. data/fixtures/responses/site_get_with_master_token.yml +73 -0
  43. data/fixtures/responses/site_keywords_get_with_master_token.yml +38 -0
  44. data/fixtures/responses/site_orders_status_get_with_master_token.yml +38 -0
  45. data/fixtures/responses/site_origins_get_with_master_token.yml +38 -0
  46. data/fixtures/responses/site_period_data_get_with_master_token.yml +38 -0
  47. data/fixtures/responses/site_post_with_app_token.yml +727 -0
  48. data/fixtures/responses/site_post_with_master_token.yml +1569 -0
  49. data/fixtures/responses/site_products_get_with_master_token.yml +38 -0
  50. data/fixtures/responses/site_referers_get_with_master_token.yml +38 -0
  51. data/fixtures/responses/site_revenues_average_get_with_master_token.yml +49 -0
  52. data/fixtures/responses/site_revenues_get_with_master_token.yml +49 -0
  53. data/fixtures/responses/site_segments_carts_get_with_admin_token.yml +108 -0
  54. data/fixtures/responses/site_segments_sales_get_with_admin_token.yml +143 -0
  55. data/fixtures/responses/site_total_carts_get_with_master_token.yml +49 -0
  56. data/fixtures/responses/site_translations__get_with_master_token.yml +155 -0
  57. data/fixtures/responses/site_translations_de_get_with_master_token.yml +156 -0
  58. data/fixtures/responses/site_translations_es_get_with_master_token.yml +155 -0
  59. data/fixtures/responses/site_translations_fr_get_with_master_token.yml +178 -0
  60. data/fixtures/responses/site_translations_german_get_with_master_token.yml +156 -0
  61. data/fixtures/responses/site_translations_get_with_master_token.yml +865 -0
  62. data/fixtures/responses/site_translations_xx_get_with_master_token.yml +155 -0
  63. data/fixtures/responses/site_visits_get_with_master_token.yml +49 -0
  64. data/fixtures/responses/status_get.yml +38 -0
  65. data/fixtures/responses/status_get_500.yml +31 -0
  66. data/fixtures/responses/test.yml +7364 -0
  67. data/fixtures/responses/version_get.yml +38 -0
  68. data/jirafe.gemspec +29 -0
  69. data/lib/jirafe.rb +64 -0
  70. data/lib/jirafe/callback/event.rb +57 -0
  71. data/lib/jirafe/callback/events/order.rb +48 -0
  72. data/lib/jirafe/callback/events/refund.rb +32 -0
  73. data/lib/jirafe/callback/jirafe_callback.rb +50 -0
  74. data/lib/jirafe/configuration.rb +47 -0
  75. data/lib/jirafe/error.rb +57 -0
  76. data/lib/jirafe/resource/application.rb +18 -0
  77. data/lib/jirafe/resource/jirafe_resource.rb +188 -0
  78. data/lib/jirafe/resource/site.rb +21 -0
  79. data/lib/jirafe/resource/sites/abandon_rate.rb +16 -0
  80. data/lib/jirafe/resource/sites/abandoned_average_order_value.rb +17 -0
  81. data/lib/jirafe/resource/sites/abandoned_carts.rb +16 -0
  82. data/lib/jirafe/resource/sites/abandoned_revenue.rb +16 -0
  83. data/lib/jirafe/resource/sites/average_order_value.rb +16 -0
  84. data/lib/jirafe/resource/sites/bounces_rate.rb +16 -0
  85. data/lib/jirafe/resource/sites/cart_segmentation.rb +11 -0
  86. data/lib/jirafe/resource/sites/conversion_rate.rb +16 -0
  87. data/lib/jirafe/resource/sites/conversions.rb +17 -0
  88. data/lib/jirafe/resource/sites/customers.rb +16 -0
  89. data/lib/jirafe/resource/sites/dashboard.rb +27 -0
  90. data/lib/jirafe/resource/sites/keywords.rb +11 -0
  91. data/lib/jirafe/resource/sites/orders_status.rb +15 -0
  92. data/lib/jirafe/resource/sites/origins.rb +11 -0
  93. data/lib/jirafe/resource/sites/period_data.rb +16 -0
  94. data/lib/jirafe/resource/sites/products.rb +12 -0
  95. data/lib/jirafe/resource/sites/referers.rb +12 -0
  96. data/lib/jirafe/resource/sites/revenues.rb +16 -0
  97. data/lib/jirafe/resource/sites/revenues_average.rb +16 -0
  98. data/lib/jirafe/resource/sites/segments_carts.rb +14 -0
  99. data/lib/jirafe/resource/sites/segments_sales.rb +14 -0
  100. data/lib/jirafe/resource/sites/total_carts.rb +16 -0
  101. data/lib/jirafe/resource/sites/translations.rb +18 -0
  102. data/lib/jirafe/resource/sites/visitors_interest.rb +14 -0
  103. data/lib/jirafe/resource/sites/visits.rb +16 -0
  104. data/lib/jirafe/resource/status.rb +19 -0
  105. data/lib/jirafe/resource/sync_service.rb +1 -0
  106. data/lib/jirafe/resource/time_series.rb +29 -0
  107. data/lib/jirafe/resource/user.rb +32 -0
  108. data/lib/jirafe/resource/version.rb +9 -0
  109. data/spec/jirafe/callback/event_spec.rb +85 -0
  110. data/spec/jirafe/configuration_spec.rb +150 -0
  111. data/spec/jirafe/jirafe_spec.rb +23 -0
  112. data/spec/jirafe/resource/application_spec.rb +220 -0
  113. data/spec/jirafe/resource/jirafe_resource_spec.rb +188 -0
  114. data/spec/jirafe/resource/site_spec.rb +61 -0
  115. data/spec/jirafe/resource/sites/abandon_rate_spec.rb +11 -0
  116. data/spec/jirafe/resource/sites/abandoned_average_order_value_spec.rb +11 -0
  117. data/spec/jirafe/resource/sites/abandoned_carts_spec.rb +11 -0
  118. data/spec/jirafe/resource/sites/abandoned_revenue_spec.rb +11 -0
  119. data/spec/jirafe/resource/sites/average_order_value_spec.rb +11 -0
  120. data/spec/jirafe/resource/sites/bounces_rate_spec.rb +11 -0
  121. data/spec/jirafe/resource/sites/cart_segmentation_spec.rb +11 -0
  122. data/spec/jirafe/resource/sites/conversion_rate_spec.rb +11 -0
  123. data/spec/jirafe/resource/sites/conversions_spec.rb +11 -0
  124. data/spec/jirafe/resource/sites/customers_spec.rb +11 -0
  125. data/spec/jirafe/resource/sites/dashboard_spec.rb +29 -0
  126. data/spec/jirafe/resource/sites/keywords_spec.rb +11 -0
  127. data/spec/jirafe/resource/sites/orders_status_spec.rb +34 -0
  128. data/spec/jirafe/resource/sites/origins_spec.rb +11 -0
  129. data/spec/jirafe/resource/sites/period_data_spec.rb +22 -0
  130. data/spec/jirafe/resource/sites/products_spec.rb +11 -0
  131. data/spec/jirafe/resource/sites/referers_spec.rb +11 -0
  132. data/spec/jirafe/resource/sites/revenues_average_spec.rb +11 -0
  133. data/spec/jirafe/resource/sites/revenues_spec.rb +11 -0
  134. data/spec/jirafe/resource/sites/segments_carts_spec.rb +29 -0
  135. data/spec/jirafe/resource/sites/segments_sales_spec.rb +29 -0
  136. data/spec/jirafe/resource/sites/total_carts_spec.rb +11 -0
  137. data/spec/jirafe/resource/sites/translations_spec.rb +76 -0
  138. data/spec/jirafe/resource/sites/visitors_interest_spec.rb +8 -0
  139. data/spec/jirafe/resource/sites/visits_spec.rb +11 -0
  140. data/spec/jirafe/resource/status_spec.rb +31 -0
  141. data/spec/jirafe/resource/version_spec.rb +15 -0
  142. data/spec/spec_helper.rb +58 -0
  143. data/spec/support/callback_server.rb +11 -0
  144. data/spec/support/response_helper.rb +31 -0
  145. data/spec/support/shared_examples/empty_resource.rb +17 -0
  146. data/spec/support/shared_examples/time_series.rb +31 -0
  147. data/spec/test_configuration.rb +15 -0
  148. metadata +360 -0
@@ -0,0 +1,16 @@
1
+ module Jirafe
2
+ module Resource
3
+ module Sites
4
+ class PeriodData < JirafeResource
5
+ path "period/data"
6
+ parent Site
7
+ attributes({
8
+ :observe => {
9
+ :visits => [],
10
+ :carts => [],
11
+ :sales => []
12
+ }})
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,12 @@
1
+ module Jirafe
2
+ module Resource
3
+ module Sites
4
+ class Products < JirafeResource
5
+ path "products"
6
+ parent Site
7
+ attributes({})
8
+ end
9
+ end
10
+ end
11
+ end
12
+
@@ -0,0 +1,12 @@
1
+ module Jirafe
2
+ module Resource
3
+ module Sites
4
+ class Referers < JirafeResource
5
+ path "referers"
6
+ parent Site
7
+ attributes({})
8
+ end
9
+ end
10
+ end
11
+ end
12
+
@@ -0,0 +1,16 @@
1
+ module Jirafe
2
+ module Resource
3
+ module Sites
4
+ class Revenues < JirafeResource
5
+ include Jirafe::Resource::TimeSeries
6
+ count_keys "revenue"
7
+
8
+ path "revenues"
9
+ parent Site
10
+ attributes({
11
+ :observe => []
12
+ })
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ module Jirafe
2
+ module Resource
3
+ module Sites
4
+ class RevenuesAverage < JirafeResource
5
+ include Jirafe::Resource::TimeSeries
6
+ count_keys "rpv"
7
+
8
+ path "revenues/average"
9
+ parent Site
10
+ attributes({
11
+ :observe => []
12
+ })
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,14 @@
1
+ module Jirafe
2
+ module Resource
3
+ module Sites
4
+ class SegmentsCarts < JirafeResource
5
+ path "segments/carts"
6
+ parent Site
7
+ attributes({
8
+ :observe => [],
9
+ :highlights => []
10
+ })
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module Jirafe
2
+ module Resource
3
+ module Sites
4
+ class SegmentsSales < JirafeResource
5
+ path "segments/sales"
6
+ parent Site
7
+ attributes({
8
+ :observe => [:origin, :search_query, :referrer_name, :product, :category],
9
+ :highlights => [:increase, :decrease]
10
+ })
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,16 @@
1
+ module Jirafe
2
+ module Resource
3
+ module Sites
4
+ class TotalCarts < JirafeResource
5
+ include Jirafe::Resource::TimeSeries
6
+ count_keys "tot_carts"
7
+
8
+ path "total/carts"
9
+ parent Site
10
+ attributes({
11
+ :observe => []
12
+ })
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,18 @@
1
+ module Jirafe
2
+ module Resource
3
+ module Sites
4
+ class Translations < JirafeResource
5
+ path "sites/translations"
6
+ parent Application
7
+ attributes({
8
+ :sites => [],
9
+ :translations => []
10
+ })
11
+
12
+ def self.locale(application_id, locale = "en")
13
+ retrieve(nil, application_id, {:locale => locale})
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,14 @@
1
+ module Jirafe
2
+ module Resource
3
+ module Sites
4
+ class VisitorsInterest < JirafeResource
5
+ path "visitors/interest"
6
+ parent Site
7
+ attributes({
8
+ :observe => []
9
+ })
10
+ end
11
+ end
12
+ end
13
+ end
14
+
@@ -0,0 +1,16 @@
1
+ module Jirafe
2
+ module Resource
3
+ module Sites
4
+ class Visits < JirafeResource
5
+ include Jirafe::Resource::TimeSeries
6
+ count_keys "visits"
7
+
8
+ path "visits"
9
+ parent Site
10
+ attributes({
11
+ :observe => []
12
+ })
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,19 @@
1
+ module Jirafe
2
+ module Resource
3
+ class Status < JirafeResource
4
+ path "status"
5
+ attributes({ :status => [] })
6
+
7
+ class << self
8
+ def ok?
9
+ retrieve.status == "ok"
10
+ rescue => exception
11
+ logger.error(exception.to_s)
12
+ false
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+
19
+
@@ -0,0 +1,29 @@
1
+ module Jirafe
2
+ module Resource
3
+ module TimeSeries
4
+ def self.included(base)
5
+ base.extend(ClassMethods)
6
+ end
7
+
8
+ module ClassMethods
9
+ def count_keys(*keys)
10
+ @count_keys ||= if keys.respond_to?(:to_ary)
11
+ keys.to_ary || [keys]
12
+ else
13
+ [keys]
14
+ end
15
+ end
16
+ end
17
+
18
+ def observation_totals
19
+ self.class.count_keys.inject({}) do |hash, key|
20
+ hash[key] = observe.inject(0) do |sum, observation|
21
+ sum += observation[key]
22
+ end
23
+ hash
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+
@@ -0,0 +1,32 @@
1
+ # post_users_authenticate POST /v1/users/{email}/authenticate.{_format}
2
+ # post_users_register POST /v1/users/{email}/register.{_format}
3
+ # post_users POST /v1/users.{_format}
4
+ module Jirafe
5
+ module Resource
6
+ class Site < JirafeResource
7
+ path "users"
8
+ attributes({
9
+ :site_id => [:identifier],
10
+ :description => [:create, :update],
11
+ })
12
+
13
+ end
14
+ end
15
+ end
16
+
17
+
18
+ # CREATE TABLE users (
19
+ # user_id SERIAL NOT NULL PRIMARY KEY,
20
+ # email varchar(255) NOT NULL,
21
+ # name varchar(64) NOT NULL,
22
+ # surname varchar(64),
23
+ # password varchar(88),
24
+ # salt varchar(32),
25
+ # confirmation_token varchar(64),
26
+ # is_hosted_user boolean NOT NULL DEFAULT 'f',
27
+ # is_confirmed boolean NOT NULL DEFAULT 'f',
28
+ # created_t_stamp timestamptz NOT NULL DEFAULT NOW(),
29
+ # updated_t_stamp timestamptz NOT NULL DEFAULT NOW(),
30
+ # UNIQUE (email),
31
+ # CONSTRAINT lowercase_emails CHECK (email !~ '[A-Z]')
32
+ # );
@@ -0,0 +1,9 @@
1
+ module Jirafe
2
+ module Resource
3
+ class Version < JirafeResource
4
+ path "version"
5
+ attributes({ :jirafe => [], :api => [] })
6
+ end
7
+ end
8
+ end
9
+
@@ -0,0 +1,85 @@
1
+ require "spec_helper"
2
+
3
+ describe Jirafe::Callback::Event do
4
+ let(:callback_class) { Jirafe::Callback::Event }
5
+ let(:site_id) { 1 }
6
+ let(:resource_prefix) { "callback_event" }
7
+
8
+ let(:cassette) { "#{resource_prefix}_post_event" }
9
+
10
+ before do
11
+ use_master_token
12
+ @query_capture = ENV['CALLTHROUGH'] ? [] : ["confirmToken=#{'a' * 16}"]
13
+ @server = CallbackServer.run(@query_capture, 3333)
14
+ end
15
+
16
+ after do
17
+ @server.shutdown
18
+ end
19
+
20
+ describe ".send" do
21
+ before do
22
+ make_request("#{cassette}_fetch_token") do
23
+ use_master_token
24
+ app = Jirafe::Resource::Application.new(:name => "test app cmb")
25
+ app.create
26
+ @site = Jirafe::Resource::Site.new(:app_id => app.identifier,
27
+ :description => "test site cmb",
28
+ :url => "http://testsitecmb.example.com",
29
+ :store_api_url =>"http://127.0.0.1:3333") # SF2 validator doesn't like 'localhost'
30
+ @site.parent = app
31
+
32
+ use_app_token(app)
33
+ @site.create
34
+ Jirafe::Callback::Event.establish(@site.identifier)
35
+ while @query_capture.empty?
36
+ sleep 0.1
37
+ end
38
+ @token = @query_capture.last.split("&").detect {|param| param.match(/confirmToken/) }.split("=").last
39
+ end
40
+ end
41
+ let(:version) { 1 }
42
+
43
+ let(:newly_created_order) do
44
+ Jirafe::Callback::Events::Order.new(:version => version,
45
+ :action => :create,
46
+ :identifier => 1,
47
+ :grand_total => 100.00,
48
+ :sub_total => 80.00,
49
+ :tax_amount => 20.00,
50
+ :discount_amount => 0.00,
51
+ :status => :pending)
52
+ end
53
+
54
+ let(:completed_order) do
55
+ Jirafe::Callback::Events::Order.new(:version => version + 1,
56
+ :action => :update,
57
+ :identifier => 1,
58
+ :grand_total => 100.00,
59
+ :sub_total => 80.00,
60
+ :tax_amount => 20.00,
61
+ :discount_amount => 10.00,
62
+ :status => :complete)
63
+ end
64
+
65
+ let(:refund) do
66
+ Jirafe::Callback::Events::Refund.new(:version => version + 2,
67
+ :action => :create,
68
+ :identifier => 1,
69
+ :order_identifier => 1,
70
+ :grand_total => 100.00,
71
+ :sub_total => 80.00,
72
+ :tax_amount => 20.00,
73
+ :discount_amount => 10.00)
74
+ end
75
+
76
+ it "sends events for processing" do
77
+ events = [newly_created_order, completed_order]
78
+ make_request(cassette) do
79
+ Jirafe::Callback::Event.send(@site.identifier, @token, events)
80
+ end
81
+ end
82
+ end
83
+ end
84
+
85
+
@@ -0,0 +1,150 @@
1
+ require "spec_helper"
2
+
3
+ describe Jirafe::Configuration do
4
+ let(:instance) { Jirafe::Configuration.instance }
5
+
6
+ it "cannot be initialized again" do
7
+ expect {
8
+ Jirafe::Configuration.new
9
+ }.to raise_error(NoMethodError)
10
+ end
11
+
12
+ describe "#test" do
13
+ subject { instance.test }
14
+ after { instance.reset! }
15
+
16
+ context "the default for the test suite" do
17
+ it { should be_true }
18
+ end
19
+
20
+ context "when it is set to true" do
21
+ before do
22
+ instance.reset!
23
+ instance.test = true
24
+ end
25
+
26
+ it "should use the test url" do
27
+ instance.test.should be_true
28
+ instance.url.should == "https://test-api.jirafe.com/v1"
29
+ instance.callback_url.should == "https://test-data.jirafe.com"
30
+ end
31
+ end
32
+
33
+ context "when it is set to false" do
34
+ before do
35
+ instance.reset!
36
+ instance.test = false
37
+ end
38
+
39
+ it "should not change the url" do
40
+ instance.test.should be_false
41
+ instance.url.should == "https://api.jirafe.com/v1"
42
+ instance.callback_url.should == "https://data.jirafe.com"
43
+ end
44
+ end
45
+ end
46
+
47
+ describe "#content_type" do
48
+ subject { instance.content_type }
49
+
50
+ context "the default" do
51
+ it { should == "application/json" }
52
+ end
53
+ end
54
+
55
+ describe "#url" do
56
+ subject { instance.url }
57
+ before { instance.reset! }
58
+
59
+ it { should == "https://api.jirafe.com/v1"}
60
+
61
+ context "overriding the url" do
62
+ before { instance.url = "http://myurl" }
63
+ after { instance.reset! }
64
+
65
+ it { should == "http://myurl"}
66
+ end
67
+ end
68
+
69
+ describe "#callback_url" do
70
+ subject { instance.callback_url }
71
+ before { instance.reset! }
72
+
73
+ it { should == "https://data.jirafe.com"}
74
+
75
+ context "overriding the url" do
76
+ before { instance.callback_url = "http://myurl" }
77
+ after { instance.reset! }
78
+
79
+ it { should == "http://myurl"}
80
+ end
81
+ end
82
+
83
+ describe "#token" do
84
+ subject { instance.token }
85
+
86
+ context "when it is not set" do
87
+ before { instance.reset! }
88
+
89
+ it "should raise an error" do
90
+ expect {
91
+ subject
92
+ }.to raise_error(Jirafe::Error::MissingToken)
93
+ end
94
+ end
95
+
96
+ context "when it is set" do
97
+ before { instance.token = "mytoken" }
98
+ after { instance.reset! }
99
+ it { should == "mytoken" }
100
+ end
101
+ end
102
+
103
+ describe "#logger" do
104
+ subject { instance.logger }
105
+
106
+ context "when it is not set" do
107
+ it { should be_instance_of(Logger) }
108
+
109
+ context "but Rails is loaded" do
110
+ before do
111
+ class MyLogger
112
+ def self.logger
113
+ :something_constant
114
+ end
115
+ end
116
+ Object.const_set :Rails, MyLogger
117
+ instance.reset!
118
+ end
119
+
120
+ after do
121
+ Object.send :remove_const, :Rails
122
+ end
123
+
124
+ it { should == Rails.logger }
125
+ end
126
+ end
127
+
128
+ context "when it is set" do
129
+ before { instance.logger = :my_logger }
130
+
131
+ it { should == :my_logger }
132
+ end
133
+ end
134
+
135
+ describe "#reset!" do
136
+ before do
137
+ instance.url = "http://myurl"
138
+ instance.callback_url = "http://myurl"
139
+ instance.token = "123abc"
140
+ end
141
+
142
+ it "restores the url back the default setting" do
143
+ instance.reset!
144
+ instance.url.should == "https://api.jirafe.com/v1"
145
+ instance.callback_url.should == "https://data.jirafe.com"
146
+ expect { instance.token }.to raise_error(Jirafe::Error::MissingToken)
147
+ end
148
+ end
149
+ end
150
+