gxapi_rails 0.0.2

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 (68) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +20 -0
  3. data/README.md +161 -0
  4. data/Rakefile +25 -0
  5. data/app/helpers/gxapi_helper.rb +108 -0
  6. data/lib/gxapi.rb +160 -0
  7. data/lib/gxapi/base.rb +100 -0
  8. data/lib/gxapi/controller_methods.rb +41 -0
  9. data/lib/gxapi/engine.rb +14 -0
  10. data/lib/gxapi/google_analytics.rb +193 -0
  11. data/lib/gxapi/ostruct.rb +86 -0
  12. data/lib/gxapi/version.rb +3 -0
  13. data/spec/dummy/README.rdoc +261 -0
  14. data/spec/dummy/Rakefile +7 -0
  15. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  16. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  17. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  18. data/spec/dummy/app/controllers/posts_controller.rb +11 -0
  19. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  20. data/spec/dummy/app/helpers/posts_helper.rb +2 -0
  21. data/spec/dummy/app/models/post.rb +3 -0
  22. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  23. data/spec/dummy/app/views/posts/_form.html.erb +25 -0
  24. data/spec/dummy/app/views/posts/edit.html.erb +6 -0
  25. data/spec/dummy/app/views/posts/index.html.erb +36 -0
  26. data/spec/dummy/app/views/posts/new.html.erb +5 -0
  27. data/spec/dummy/app/views/posts/show.html.erb +15 -0
  28. data/spec/dummy/config.ru +4 -0
  29. data/spec/dummy/config/application.rb +70 -0
  30. data/spec/dummy/config/boot.rb +10 -0
  31. data/spec/dummy/config/database.yml +22 -0
  32. data/spec/dummy/config/database.yml.default +111 -0
  33. data/spec/dummy/config/environment.rb +5 -0
  34. data/spec/dummy/config/environments/development.rb +38 -0
  35. data/spec/dummy/config/environments/production.rb +67 -0
  36. data/spec/dummy/config/environments/test.rb +37 -0
  37. data/spec/dummy/config/gxapi.yml +17 -0
  38. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  39. data/spec/dummy/config/initializers/inflections.rb +15 -0
  40. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  41. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  42. data/spec/dummy/config/initializers/session_store.rb +8 -0
  43. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  44. data/spec/dummy/config/konfig/application.rb +16 -0
  45. data/spec/dummy/config/konfig/development.rb +10 -0
  46. data/spec/dummy/config/konfig/production.rb +3 -0
  47. data/spec/dummy/config/konfig/test.rb +3 -0
  48. data/spec/dummy/config/konfig/test_prod.rb +3 -0
  49. data/spec/dummy/config/locales/en.yml +5 -0
  50. data/spec/dummy/config/routes.rb +3 -0
  51. data/spec/dummy/config/test.p12 +0 -0
  52. data/spec/dummy/data/log/dummy/development.log +113 -0
  53. data/spec/dummy/data/log/dummy/test.log +927 -0
  54. data/spec/dummy/db/development.sqlite3 +0 -0
  55. data/spec/dummy/db/test.sqlite3 +0 -0
  56. data/spec/dummy/log/test.log +1443 -0
  57. data/spec/dummy/public/404.html +26 -0
  58. data/spec/dummy/public/422.html +26 -0
  59. data/spec/dummy/public/500.html +25 -0
  60. data/spec/dummy/public/favicon.ico +0 -0
  61. data/spec/dummy/script/rails +6 -0
  62. data/spec/features/display_variant_js_spec.rb +34 -0
  63. data/spec/helpers/gxapi_helper_spec.rb +63 -0
  64. data/spec/lib/gxapi/base_spec.rb +80 -0
  65. data/spec/lib/gxapi/google_analytics_spec.rb +70 -0
  66. data/spec/lib/gxapi_spec.rb +32 -0
  67. data/spec/spec_helper.rb +32 -0
  68. metadata +233 -0
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The page you were looking for doesn't exist (404)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/404.html -->
21
+ <div class="dialog">
22
+ <h1>The page you were looking for doesn't exist.</h1>
23
+ <p>You may have mistyped the address or the page may have moved.</p>
24
+ </div>
25
+ </body>
26
+ </html>
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/422.html -->
21
+ <div class="dialog">
22
+ <h1>The change you wanted was rejected.</h1>
23
+ <p>Maybe you tried to change something you didn't have access to.</p>
24
+ </div>
25
+ </body>
26
+ </html>
@@ -0,0 +1,25 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/500.html -->
21
+ <div class="dialog">
22
+ <h1>We're sorry, but something went wrong.</h1>
23
+ </div>
24
+ </body>
25
+ </html>
File without changes
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
5
+ require File.expand_path('../../config/boot', __FILE__)
6
+ require 'rails/commands'
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+
3
+ module Gxapi
4
+
5
+ describe 'Gxapi Integration with Rails' do
6
+
7
+ before(:all) do
8
+ Gxapi.reload_experiments
9
+ end
10
+
11
+ context 'GET /posts' do
12
+
13
+ it 'renders the google analytics data for a user' do
14
+
15
+ visit posts_path
16
+
17
+ expect(page.body).to match(/cxApi\.setChosenVariation/)
18
+
19
+ end
20
+
21
+ it 'renders the content expected when a parameter is passed in
22
+ for the variant value' do
23
+
24
+ visit posts_path(variant: 'fake_var')
25
+
26
+ expect(page.body).to have_content('Fake Var Version')
27
+
28
+ end
29
+
30
+ end
31
+
32
+ end
33
+
34
+ end
@@ -0,0 +1,63 @@
1
+ require 'spec_helper'
2
+
3
+ describe GxapiHelper do
4
+
5
+ context "#gxapi_variant_name" do
6
+
7
+ it "returns default if the variable is not set" do
8
+ helper.gxapi_variant_name.should eql "default"
9
+ end
10
+
11
+ it "returns the name of the vairant if it is set" do
12
+ assign(:variant, stub(:value => stub(:name => "x")))
13
+ helper.gxapi_variant_name.should eql("x")
14
+ end
15
+
16
+ it "handles different vairant names" do
17
+ assign(:variantx, stub(:value => stub(:name => "x")))
18
+ helper.gxapi_variant_name(:variantx).should eql("x")
19
+ end
20
+
21
+ end
22
+
23
+ context "#gxapi_experiment_js" do
24
+
25
+ context "with variant set" do
26
+
27
+ before(:each) do
28
+ assign(
29
+ :variant,
30
+ stub(
31
+ :value => stub(
32
+ :name => "x",
33
+ :experiment_id => "y",
34
+ :index => 1
35
+ )
36
+ )
37
+ )
38
+ end
39
+
40
+ it "adds the javascript src for Google analytics only once
41
+ but does the js call each time the method is called" do
42
+
43
+ ret = helper.gxapi_experiment_js + helper.gxapi_experiment_js
44
+
45
+ ret.scan(/google\-analytics\.com/).length.should eql(1)
46
+ ret.scan(/setChosenVariation/).length.should eql(2)
47
+
48
+ end
49
+
50
+ it "should add the domain if an option is passed" do
51
+ ret = helper.gxapi_experiment_js(:domain => ".example.com")
52
+ ret.should =~ /setDomainName/
53
+ end
54
+
55
+ end
56
+
57
+ it "should not do anything if the instance var is not defined" do
58
+ helper.gxapi_experiment_js.should eql("")
59
+ end
60
+
61
+ end
62
+
63
+ end
@@ -0,0 +1,80 @@
1
+ require 'spec_helper'
2
+
3
+ describe Gxapi::Base do
4
+
5
+ #We cache based on the id, so we need to get a random one.
6
+ subject do
7
+ Gxapi::Base.new(user_key)
8
+ end
9
+
10
+ let(:user_key) do
11
+ Kernel.rand(1000000000000000)
12
+ end
13
+
14
+ let(:valid_variants) do
15
+ ["original", "variant1"]
16
+ end
17
+
18
+ let(:test_experiment_name) do
19
+ "Untitled experiment"
20
+ end
21
+
22
+ context "#env" do
23
+ it "should delegate to its class" do
24
+ subject.env.should eql Gxapi.env
25
+ end
26
+ end
27
+
28
+ context "#get_variant" do
29
+
30
+ it "should make a call to myna and return a future" do
31
+ variant = subject.get_variant(test_experiment_name)
32
+ valid_variants.should include variant.value.name
33
+ [0, 1].should include variant.value.index
34
+ end
35
+
36
+ it "should set a key in the rails cache for a given
37
+ uuid/experiment combo" do
38
+
39
+ variant = subject.get_variant(test_experiment_name)
40
+ variant.value
41
+
42
+ cache_key = "#{user_key}_untitled_experiment"
43
+ Gxapi.cache.read(cache_key).should have_key("index")
44
+
45
+ end
46
+
47
+ it "should time out after 2 seconds and return the default value" do
48
+
49
+ Gxapi.cache.stubs(:fetch).yields{sleep(3)}
50
+ start_time = Time.now
51
+
52
+ variant = subject.get_variant(test_experiment_name)
53
+
54
+ # make sure we return the default value
55
+ variant.value.name.should eql("default")
56
+ (Time.now - start_time).should be < 2.5
57
+ end
58
+
59
+ it "should allow a user to override the chosen variant" do
60
+
61
+ variant = subject.get_variant(test_experiment_name, "fakeval")
62
+
63
+ variant.value.experiment_id.should be_nil
64
+ variant.value.name.should eql("fakeval")
65
+ variant.value.index.should eql -1
66
+
67
+ end
68
+
69
+
70
+ end
71
+
72
+
73
+ context "#user_key" do
74
+
75
+ it "should set up its user_key" do
76
+ subject.user_key.should eql user_key
77
+ end
78
+
79
+ end
80
+ end
@@ -0,0 +1,70 @@
1
+ require 'spec_helper'
2
+
3
+ module Gxapi
4
+
5
+ describe GoogleAnalytics do
6
+
7
+ before(:each) do
8
+ Gxapi.cache.clear
9
+ end
10
+
11
+ context "#get_experiments" do
12
+
13
+ it "gets a list of experiments" do
14
+ experiments = subject.get_experiments
15
+ experiments.first.should be_a(Gxapi::Ostruct)
16
+ end
17
+
18
+ end
19
+
20
+ context "#get_experiment" do
21
+
22
+ it "should filter by name" do
23
+ experiment = subject.get_experiments.first
24
+ subject.get_experiment(experiment.name).should eql(experiment)
25
+ end
26
+
27
+ end
28
+
29
+ context "#get_variant" do
30
+
31
+ before(:each) do
32
+ subject.stubs(
33
+ get_experiment: Ostruct.new({
34
+ id: "123",
35
+ name: "X",
36
+ traffic_coverage: 1.0,
37
+ variations: [
38
+ Ostruct.new(
39
+ name: "original",
40
+ weight: 0.5,
41
+ status: "ACTIVE"
42
+ ),
43
+ Ostruct.new(
44
+ name: "variation1",
45
+ weight: 0.5,
46
+ status: "ACTIVE"
47
+ )
48
+ ]
49
+ })
50
+ )
51
+ end
52
+
53
+ it "should return a variant determined by weight" do
54
+ variant = subject.get_variant("fakename")
55
+ ["original", "variation1"].should include variant.name
56
+ [0, 1].should include variant.index
57
+ end
58
+
59
+ it "returns the default if traffic_coverage is 0" do
60
+ subject.get_experiment.stubs(traffic_coverage: 0)
61
+ variant = subject.get_variant("fakename")
62
+ variant.name.should eql("default")
63
+ variant.index.should eql(-1)
64
+ end
65
+
66
+ end
67
+
68
+ end
69
+
70
+ end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe Gxapi do
4
+
5
+ before(:all) do
6
+ Gxapi.config_path = File.expand_path(
7
+ "../../support/config.yml", __FILE__
8
+ )
9
+ Gxapi.env = "test"
10
+ end
11
+
12
+ context ".cache" do
13
+ it "should have a cache that gets defined by default" do
14
+ Gxapi.cache.should be_kind_of(ActiveSupport::Cache::Store)
15
+ end
16
+
17
+ context "with Rails" do
18
+
19
+ it "should use the Rails cache once it is available" do
20
+ Gxapi.cache.should be Rails.cache
21
+ end
22
+
23
+ it "should still allow you to override the cache" do
24
+ my_cache = stub()
25
+ Gxapi.cache = my_cache
26
+ Gxapi.cache.should eql(my_cache)
27
+ end
28
+
29
+ end
30
+ end
31
+
32
+ end
@@ -0,0 +1,32 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+
4
+ ENV["RAILS_ENV"] ||= 'test'
5
+ require File.expand_path("../../spec/dummy/config/environment", __FILE__)
6
+
7
+ require 'gxapi'
8
+
9
+ require 'rspec/rails'
10
+ require 'capybara/rails'
11
+ require 'rails/engine'
12
+ require 'mocha/setup'
13
+
14
+ # Requires supporting files with custom matchers and macros, etc,
15
+ # in ./support/ and its subdirectories.
16
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
17
+
18
+ Mocha::Configuration.prevent(:stubbing_non_existent_method)
19
+
20
+ RSpec.configure do |config|
21
+ config.mock_with :mocha
22
+
23
+ config.treat_symbols_as_metadata_keys_with_true_values = true
24
+ config.run_all_when_everything_filtered = true
25
+
26
+ config.filter_run focus: true
27
+
28
+ config.before(:all) do
29
+ Gxapi.logger = Logger.new(STDOUT)
30
+ end
31
+
32
+ end
metadata ADDED
@@ -0,0 +1,233 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gxapi_rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Dan Langevin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-11-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: celluloid
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rest-client
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: json
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: google-api-client
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: Google Analytics and integration
84
+ email: dan.langevin@lifebooker.com
85
+ executables: []
86
+ extensions: []
87
+ extra_rdoc_files: []
88
+ files:
89
+ - app/helpers/gxapi_helper.rb
90
+ - lib/gxapi/base.rb
91
+ - lib/gxapi/controller_methods.rb
92
+ - lib/gxapi/engine.rb
93
+ - lib/gxapi/google_analytics.rb
94
+ - lib/gxapi/ostruct.rb
95
+ - lib/gxapi/version.rb
96
+ - lib/gxapi.rb
97
+ - LICENSE.txt
98
+ - Rakefile
99
+ - README.md
100
+ - spec/dummy/app/assets/javascripts/application.js
101
+ - spec/dummy/app/assets/stylesheets/application.css
102
+ - spec/dummy/app/controllers/application_controller.rb
103
+ - spec/dummy/app/controllers/posts_controller.rb
104
+ - spec/dummy/app/helpers/application_helper.rb
105
+ - spec/dummy/app/helpers/posts_helper.rb
106
+ - spec/dummy/app/models/post.rb
107
+ - spec/dummy/app/views/layouts/application.html.erb
108
+ - spec/dummy/app/views/posts/_form.html.erb
109
+ - spec/dummy/app/views/posts/edit.html.erb
110
+ - spec/dummy/app/views/posts/index.html.erb
111
+ - spec/dummy/app/views/posts/new.html.erb
112
+ - spec/dummy/app/views/posts/show.html.erb
113
+ - spec/dummy/config/application.rb
114
+ - spec/dummy/config/boot.rb
115
+ - spec/dummy/config/database.yml
116
+ - spec/dummy/config/database.yml.default
117
+ - spec/dummy/config/environment.rb
118
+ - spec/dummy/config/environments/development.rb
119
+ - spec/dummy/config/environments/production.rb
120
+ - spec/dummy/config/environments/test.rb
121
+ - spec/dummy/config/gxapi.yml
122
+ - spec/dummy/config/initializers/backtrace_silencers.rb
123
+ - spec/dummy/config/initializers/inflections.rb
124
+ - spec/dummy/config/initializers/mime_types.rb
125
+ - spec/dummy/config/initializers/secret_token.rb
126
+ - spec/dummy/config/initializers/session_store.rb
127
+ - spec/dummy/config/initializers/wrap_parameters.rb
128
+ - spec/dummy/config/konfig/application.rb
129
+ - spec/dummy/config/konfig/development.rb
130
+ - spec/dummy/config/konfig/production.rb
131
+ - spec/dummy/config/konfig/test.rb
132
+ - spec/dummy/config/konfig/test_prod.rb
133
+ - spec/dummy/config/locales/en.yml
134
+ - spec/dummy/config/routes.rb
135
+ - spec/dummy/config/test.p12
136
+ - spec/dummy/config.ru
137
+ - spec/dummy/data/log/dummy/development.log
138
+ - spec/dummy/data/log/dummy/test.log
139
+ - spec/dummy/db/development.sqlite3
140
+ - spec/dummy/db/test.sqlite3
141
+ - spec/dummy/log/test.log
142
+ - spec/dummy/public/404.html
143
+ - spec/dummy/public/422.html
144
+ - spec/dummy/public/500.html
145
+ - spec/dummy/public/favicon.ico
146
+ - spec/dummy/Rakefile
147
+ - spec/dummy/README.rdoc
148
+ - spec/dummy/script/rails
149
+ - spec/features/display_variant_js_spec.rb
150
+ - spec/helpers/gxapi_helper_spec.rb
151
+ - spec/lib/gxapi/base_spec.rb
152
+ - spec/lib/gxapi/google_analytics_spec.rb
153
+ - spec/lib/gxapi_spec.rb
154
+ - spec/spec_helper.rb
155
+ homepage: http://github.com/LifebookerInc/gxapi_rails
156
+ licenses: []
157
+ metadata: {}
158
+ post_install_message:
159
+ rdoc_options: []
160
+ require_paths:
161
+ - lib
162
+ required_ruby_version: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - '>='
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ required_rubygems_version: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - '>='
170
+ - !ruby/object:Gem::Version
171
+ version: '0'
172
+ requirements: []
173
+ rubyforge_project:
174
+ rubygems_version: 2.0.3
175
+ signing_key:
176
+ specification_version: 4
177
+ summary: Google Analytics
178
+ test_files:
179
+ - spec/dummy/app/assets/javascripts/application.js
180
+ - spec/dummy/app/assets/stylesheets/application.css
181
+ - spec/dummy/app/controllers/application_controller.rb
182
+ - spec/dummy/app/controllers/posts_controller.rb
183
+ - spec/dummy/app/helpers/application_helper.rb
184
+ - spec/dummy/app/helpers/posts_helper.rb
185
+ - spec/dummy/app/models/post.rb
186
+ - spec/dummy/app/views/layouts/application.html.erb
187
+ - spec/dummy/app/views/posts/_form.html.erb
188
+ - spec/dummy/app/views/posts/edit.html.erb
189
+ - spec/dummy/app/views/posts/index.html.erb
190
+ - spec/dummy/app/views/posts/new.html.erb
191
+ - spec/dummy/app/views/posts/show.html.erb
192
+ - spec/dummy/config/application.rb
193
+ - spec/dummy/config/boot.rb
194
+ - spec/dummy/config/database.yml
195
+ - spec/dummy/config/database.yml.default
196
+ - spec/dummy/config/environment.rb
197
+ - spec/dummy/config/environments/development.rb
198
+ - spec/dummy/config/environments/production.rb
199
+ - spec/dummy/config/environments/test.rb
200
+ - spec/dummy/config/gxapi.yml
201
+ - spec/dummy/config/initializers/backtrace_silencers.rb
202
+ - spec/dummy/config/initializers/inflections.rb
203
+ - spec/dummy/config/initializers/mime_types.rb
204
+ - spec/dummy/config/initializers/secret_token.rb
205
+ - spec/dummy/config/initializers/session_store.rb
206
+ - spec/dummy/config/initializers/wrap_parameters.rb
207
+ - spec/dummy/config/konfig/application.rb
208
+ - spec/dummy/config/konfig/development.rb
209
+ - spec/dummy/config/konfig/production.rb
210
+ - spec/dummy/config/konfig/test.rb
211
+ - spec/dummy/config/konfig/test_prod.rb
212
+ - spec/dummy/config/locales/en.yml
213
+ - spec/dummy/config/routes.rb
214
+ - spec/dummy/config/test.p12
215
+ - spec/dummy/config.ru
216
+ - spec/dummy/data/log/dummy/development.log
217
+ - spec/dummy/data/log/dummy/test.log
218
+ - spec/dummy/db/development.sqlite3
219
+ - spec/dummy/db/test.sqlite3
220
+ - spec/dummy/log/test.log
221
+ - spec/dummy/public/404.html
222
+ - spec/dummy/public/422.html
223
+ - spec/dummy/public/500.html
224
+ - spec/dummy/public/favicon.ico
225
+ - spec/dummy/Rakefile
226
+ - spec/dummy/README.rdoc
227
+ - spec/dummy/script/rails
228
+ - spec/features/display_variant_js_spec.rb
229
+ - spec/helpers/gxapi_helper_spec.rb
230
+ - spec/lib/gxapi/base_spec.rb
231
+ - spec/lib/gxapi/google_analytics_spec.rb
232
+ - spec/lib/gxapi_spec.rb
233
+ - spec/spec_helper.rb