pco-url 1.6.0 → 1.7.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 004aee9017d42a66e9eeeef2365c6dfc033f966b
4
- data.tar.gz: 6353fd59875302f9849ed3c6821a5607e19c78cf
3
+ metadata.gz: 8cd5c1701dc11bca36cd95692deaf7890af3d5ec
4
+ data.tar.gz: 5cd53a34ae90fcad2937255cdc6150d678fb9f3e
5
5
  SHA512:
6
- metadata.gz: dcc5a0eb716b9677104abcbf3ad42728205edbb68f661214993d7223a861d87b7a0b2093b94aa18b700f27b4d4cae7c38c961266b8bb1d024c2a107c416f6c27
7
- data.tar.gz: 7625c45373ef6139fa8dad3934615ac54b808ef9a6f0719e8c416c37bddd58815cab1f2328e803a5f6536342b166e93b53d0b7b3c3e9dbb05aaf16e4b26a770a
6
+ metadata.gz: c1e1eaa9547e8dae3ff58e8e09d7ef7b4f5e9a114283603c99830ba80152b9b68dc8ea9c193df491a9323160d31cb8741af4f3c6488a2126d8e26c5b3906a048
7
+ data.tar.gz: 6804c37316401818e169d6bddd145c12f9076289667dfb661c3a5d80d6bc5355de522c9fbd2cbae313a27c7c0505db711ac6dd41a23cead682bf53165ce09265
data/.editorconfig ADDED
@@ -0,0 +1,10 @@
1
+ # editorconfig.org
2
+
3
+ root = true
4
+
5
+ [*]
6
+ indent_style = space
7
+ indent_size = 2
8
+ charset = utf-8
9
+ insert_final_newline = true
10
+ trim_trailing_whitespace = true
data/.rubocop.yml ADDED
@@ -0,0 +1,12 @@
1
+ Style/StringLiterals:
2
+ Enabled: true
3
+ EnforcedStyle: double_quotes
4
+
5
+ Metrics/LineLength:
6
+ Max: 120
7
+
8
+ Style/Documentation:
9
+ Enabled: false
10
+
11
+ Style/SingleSpaceBeforeFirstArg:
12
+ Enabled: false
data/lib/pco/url.rb CHANGED
@@ -1,4 +1,6 @@
1
- require "pco/url/version"
1
+ require_relative "url/version"
2
+ require_relative "url/church_center"
3
+ require_relative "url/get"
2
4
  require "uri"
3
5
  require "URLcrypt"
4
6
 
@@ -10,32 +12,37 @@ module PCO
10
12
  end
11
13
 
12
14
  def parse(string)
13
- if uri = URI.parse(string)
15
+ if (uri = URI.parse(string))
14
16
  app_name = uri.host.match(/(\w+)(-staging)?/)[1]
15
17
 
16
18
  if uri.query
17
- if encrypted_part = encrypted_query_string(uri.query)
19
+ if (encrypted_part = encrypted_query_string(uri.query))
18
20
  uri.query.sub!("_e=#{encrypted_part}", decrypt_query_params(encrypted_part))
19
21
  end
20
22
  end
21
23
 
22
24
  new(app_name: app_name, path: uri.path, query: uri.query)
23
25
  else
24
- raise InvalidPCOURLString, "Unrecognized PCO::URL url string"
26
+ fail InvalidPCOURLString, "Unrecognized PCO::URL url string"
25
27
  end
26
28
  end
27
29
 
28
30
  def method_missing(method_name, *args)
29
- path = args.map { |p| p.sub(/\A\/+/, "").sub(/\/+\Z/, "") }.join("/")
30
- new(app_name: method_name, path: path).to_s
31
+ path = args.map { |p| p.sub(%r{\A/+}, "").sub(%r{/+\Z}, "") }.join("/")
32
+ case method_name
33
+ when :church_center
34
+ PCO::URL::ChurchCenter.new(path: path).to_s
35
+ when :get
36
+ PCO::URL::Get.new(path: path).to_s
37
+ else
38
+ new(app_name: method_name, path: path).to_s
39
+ end
31
40
  end
32
41
 
33
42
  private
34
43
 
35
44
  def encrypted_query_string(query_params)
36
- if query_params =~ encrypted_params_regex
37
- Regexp.last_match(:param)
38
- end
45
+ Regexp.last_match(:param) if query_params =~ encrypted_params_regex
39
46
  end
40
47
 
41
48
  def encrypted_params_regex
@@ -48,7 +55,7 @@ module PCO
48
55
  attr_reader :query
49
56
 
50
57
  def initialize(app_name:, path: nil, query: nil, encrypt_query_params: false, domain: nil)
51
- @app_name = app_name.to_s.gsub("_", "-")
58
+ @app_name = app_name.to_s.tr("_", "-")
52
59
  @path = path
53
60
  @domain = domain
54
61
 
@@ -98,7 +105,7 @@ module PCO
98
105
 
99
106
  def uri
100
107
  q = query ? "?#{query}" : nil
101
- url_string = "#{scheme}://#{hostname}/#{path}#{q}".sub(/(\/)+$/,'')
108
+ url_string = "#{scheme}://#{hostname}/#{path}#{q}".sub(%r{(/)+$}, "")
102
109
  URI(url_string)
103
110
  end
104
111
 
@@ -0,0 +1,38 @@
1
+ module PCO
2
+ class URL
3
+ class ChurchCenter < URL
4
+ def initialize(app_name: "church-center", path: nil, query: nil, encrypt_query_params: false, domain: nil, subdomain: nil)
5
+ super(
6
+ app_name: app_name,
7
+ path: path,
8
+ query: query,
9
+ encrypt_query_params: encrypt_query_params,
10
+ domain: domain
11
+ )
12
+ @subdomain = subdomain
13
+ end
14
+
15
+ def domain
16
+ return @domain if @domain
17
+ case env
18
+ when "production", "staging"
19
+ "churchcenteronline.com"
20
+ when "development"
21
+ "churchcenter.dev"
22
+ when "test"
23
+ "churchcenter.test"
24
+ end
25
+ end
26
+
27
+ def hostname
28
+ super if env_overridden_hostname
29
+ sub = "#{@subdomain}." if @subdomain
30
+ if env == "staging"
31
+ "#{sub}staging.#{domain}"
32
+ else
33
+ "#{sub}#{domain}"
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,13 @@
1
+ module PCO
2
+ class URL
3
+ class Get < URL
4
+ def initialize(app_name: "get", path: nil, query: nil, encrypt_query_params: false, domain: nil)
5
+ super
6
+ end
7
+
8
+ def scheme
9
+ "http"
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,5 +1,5 @@
1
1
  module PCO
2
2
  class URL
3
- VERSION = "1.6.0"
3
+ VERSION = "1.7.0"
4
4
  end
5
5
  end
@@ -0,0 +1,75 @@
1
+ require "spec_helper"
2
+
3
+ describe PCO::URL::ChurchCenter do
4
+ context "when the env is production" do
5
+ before do
6
+ Rails.env = "production"
7
+ end
8
+
9
+ describe "#to_s" do
10
+ context "given a subdomain" do
11
+ subject { described_class.new(subdomain: "foo") }
12
+
13
+ it "returns the proper URL" do
14
+ expect(subject.to_s).to eq("https://foo.churchcenteronline.com")
15
+ end
16
+ end
17
+
18
+ context "given no subdomain" do
19
+ subject { described_class.new }
20
+
21
+ it "returns the proper URL" do
22
+ expect(subject.to_s).to eq("https://churchcenteronline.com")
23
+ end
24
+ end
25
+ end
26
+ end
27
+
28
+ context "when the env is staging" do
29
+ before do
30
+ Rails.env = "staging"
31
+ end
32
+
33
+ describe "#to_s" do
34
+ context "given a subdomain" do
35
+ subject { described_class.new(subdomain: "foo") }
36
+
37
+ it "returns the proper URL" do
38
+ expect(subject.to_s).to eq("https://foo.staging.churchcenteronline.com")
39
+ end
40
+ end
41
+
42
+ context "given no subdomain" do
43
+ subject { described_class.new }
44
+
45
+ it "returns the proper URL" do
46
+ expect(subject.to_s).to eq("https://staging.churchcenteronline.com")
47
+ end
48
+ end
49
+ end
50
+ end
51
+
52
+ context "when the env is development" do
53
+ before do
54
+ Rails.env = "development"
55
+ end
56
+
57
+ describe "#to_s" do
58
+ context "given a subdomain" do
59
+ subject { described_class.new(subdomain: "foo") }
60
+
61
+ it "returns the proper URL" do
62
+ expect(subject.to_s).to eq("http://foo.churchcenter.dev")
63
+ end
64
+ end
65
+
66
+ context "given no subdomain" do
67
+ subject { described_class.new }
68
+
69
+ it "returns the proper URL" do
70
+ expect(subject.to_s).to eq("http://churchcenter.dev")
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
data/spec/pco_url_spec.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- Applications = [
3
+ APPLICATIONS = [
4
4
  :accounts,
5
5
  :avatars,
6
6
  :services,
@@ -8,12 +8,14 @@ Applications = [
8
8
  :people,
9
9
  :registrations,
10
10
  :resources,
11
- :giving
11
+ :giving,
12
+ :get
12
13
  ]
13
14
 
14
15
  describe PCO::URL do
15
16
  before :all do
16
- URLcrypt.key = "984e9002e680dc9b9c2556434c47f7e4782191f52063277901e4a009797652e08f28be069dfb4d4a1e3c9ab09fedab59be2c9b6486748bf44030182815ee4987"
17
+ URLcrypt.key = "984e9002e680dc9b9c2556434c47f7e4782191f52063277901e4a009797652e0" \
18
+ "8f28be069dfb4d4a1e3c9ab09fedab59be2c9b6486748bf44030182815ee4987"
17
19
  end
18
20
 
19
21
  describe "defaults" do
@@ -22,11 +24,15 @@ describe PCO::URL do
22
24
  Rails.env = "development"
23
25
  end
24
26
 
25
- Applications.map(&:to_s).each do |app|
27
+ APPLICATIONS.map(&:to_s).each do |app|
26
28
  it "has an #{app} URL" do
27
- expect(PCO::URL.send(app)).to eq("http://#{app.gsub('_','-')}.pco.dev")
29
+ expect(PCO::URL.send(app)).to eq("http://#{app.tr('_', '-')}.pco.dev")
28
30
  end
29
31
  end
32
+
33
+ it "has a church-center url" do
34
+ expect(PCO::URL.church_center).to eq("http://churchcenter.dev")
35
+ end
30
36
  end
31
37
 
32
38
  describe "staging" do
@@ -34,11 +40,20 @@ describe PCO::URL do
34
40
  Rails.env = "staging"
35
41
  end
36
42
 
37
- Applications.map(&:to_s).each do |app|
43
+ APPLICATIONS.map(&:to_s).each do |app|
44
+ next if app == "get"
38
45
  it "has an #{app} URL" do
39
- expect(PCO::URL.send(app)).to eq("https://#{app.gsub('_','-')}-staging.planningcenteronline.com")
46
+ expect(PCO::URL.send(app)).to eq("https://#{app.tr('_', '-')}-staging.planningcenteronline.com")
40
47
  end
41
48
  end
49
+
50
+ it "has an http get URL" do
51
+ expect(PCO::URL.send("get")).to eq("http://get-staging.planningcenteronline.com")
52
+ end
53
+
54
+ it "has a church-center url" do
55
+ expect(PCO::URL.church_center).to eq("https://staging.churchcenteronline.com")
56
+ end
42
57
  end
43
58
 
44
59
  describe "production" do
@@ -46,11 +61,20 @@ describe PCO::URL do
46
61
  Rails.env = "production"
47
62
  end
48
63
 
49
- Applications.map(&:to_s).each do |app|
64
+ APPLICATIONS.map(&:to_s).each do |app|
65
+ next if app == "get"
50
66
  it "has an #{app} URL" do
51
- expect(PCO::URL.send(app)).to eq("https://#{app.gsub('_','-')}.planningcenteronline.com")
67
+ expect(PCO::URL.send(app)).to eq("https://#{app.tr('_', '-')}.planningcenteronline.com")
52
68
  end
53
69
  end
70
+
71
+ it "has an http get URL" do
72
+ expect(PCO::URL.send("get")).to eq("http://get.planningcenteronline.com")
73
+ end
74
+
75
+ it "has a church-center url" do
76
+ expect(PCO::URL.church_center).to eq("https://churchcenteronline.com")
77
+ end
54
78
  end
55
79
 
56
80
  describe "test" do
@@ -58,11 +82,15 @@ describe PCO::URL do
58
82
  Rails.env = "test"
59
83
  end
60
84
 
61
- Applications.map(&:to_s).each do |app|
85
+ APPLICATIONS.map(&:to_s).each do |app|
62
86
  it "has an #{app} URL" do
63
- expect(PCO::URL.send(app)).to eq("http://#{app.gsub('_','-')}.pco.test")
87
+ expect(PCO::URL.send(app)).to eq("http://#{app.tr('_', '-')}.pco.test")
64
88
  end
65
89
  end
90
+
91
+ it "has a church-center url" do
92
+ expect(PCO::URL.church_center).to eq("http://churchcenter.test")
93
+ end
66
94
  end
67
95
  end
68
96
 
@@ -73,34 +101,33 @@ describe PCO::URL do
73
101
  end
74
102
 
75
103
  context "with path starting with /" do
76
- Applications.map(&:to_s).each do |app|
104
+ APPLICATIONS.map(&:to_s).each do |app|
77
105
  it "has an #{app} URL with path" do
78
- expect(PCO::URL.send(app, "/test")).to eq("http://#{app.gsub('_','-')}.pco.test/test")
106
+ expect(PCO::URL.send(app, "/test")).to eq("http://#{app.tr('_', '-')}.pco.test/test")
79
107
  end
80
108
  end
81
109
  end
82
110
 
83
111
  context "with path NOT starting with /" do
84
- Applications.map(&:to_s).each do |app|
112
+ APPLICATIONS.map(&:to_s).each do |app|
85
113
  it "has an #{app} URL with path" do
86
- expect(PCO::URL.send(app, "test")).to eq("http://#{app.gsub('_','-')}.pco.test/test")
114
+ expect(PCO::URL.send(app, "test")).to eq("http://#{app.tr('_', '-')}.pco.test/test")
87
115
  end
88
116
  end
89
117
  end
90
118
 
91
119
  context "with multiple path arguments" do
92
- Applications.map(&:to_s).each do |app|
120
+ APPLICATIONS.map(&:to_s).each do |app|
93
121
  it "has an #{app} URL with path" do
94
- expect(PCO::URL.send(app, "test", "test2")).to eq("http://#{app.gsub('_','-')}.pco.test/test/test2")
95
- expect(PCO::URL.send(app, "test/", "test2")).to eq("http://#{app.gsub('_','-')}.pco.test/test/test2")
96
- expect(PCO::URL.send(app, "test", "/test2")).to eq("http://#{app.gsub('_','-')}.pco.test/test/test2")
97
- expect(PCO::URL.send(app, "/test/", "test2")).to eq("http://#{app.gsub('_','-')}.pco.test/test/test2")
98
- expect(PCO::URL.send(app, "/test/test2")).to eq("http://#{app.gsub('_','-')}.pco.test/test/test2")
122
+ expect(PCO::URL.send(app, "test", "test2")).to eq("http://#{app.tr('_', '-')}.pco.test/test/test2")
123
+ expect(PCO::URL.send(app, "test/", "test2")).to eq("http://#{app.tr('_', '-')}.pco.test/test/test2")
124
+ expect(PCO::URL.send(app, "test", "/test2")).to eq("http://#{app.tr('_', '-')}.pco.test/test/test2")
125
+ expect(PCO::URL.send(app, "/test/", "test2")).to eq("http://#{app.tr('_', '-')}.pco.test/test/test2")
126
+ expect(PCO::URL.send(app, "/test/test2")).to eq("http://#{app.tr('_', '-')}.pco.test/test/test2")
99
127
  end
100
128
  end
101
129
  end
102
130
 
103
-
104
131
  describe "overrides" do
105
132
  describe "development with accounts URL override" do
106
133
  before do
@@ -145,7 +172,7 @@ describe PCO::URL do
145
172
  expect(subject.query).to_not eq("foo=bar")
146
173
  end
147
174
 
148
- it 'puts the encrypted params into the _e key' do
175
+ it "puts the encrypted params into the _e key" do
149
176
  expect(subject.query).to match(/^_e=(.*)/)
150
177
  end
151
178
 
@@ -158,52 +185,62 @@ describe PCO::URL do
158
185
  end
159
186
  end
160
187
 
161
- describe '.parse' do
188
+ describe ".parse" do
162
189
  subject { PCO::URL.parse("https://people-staging.planningcenteronline.com") }
163
190
 
164
- it 'returns a PCO::URL object' do
191
+ it "returns a PCO::URL object" do
165
192
  expect(subject.class).to eq(PCO::URL)
166
193
  end
167
194
 
168
- context 'when only a url string is passed' do
195
+ context "when only a url string is passed" do
169
196
  subject { PCO::URL.parse("http://people.pco.dev") }
170
197
 
171
- it 'sets the app_name attr' do
172
- expect(subject.app_name).to eq('people')
198
+ it "sets the app_name attr" do
199
+ expect(subject.app_name).to eq("people")
173
200
  end
174
201
 
175
- it 'strips -staging if supplied' do
176
- expect(PCO::URL.parse("https://people-staging.plannincenteronline.com").app_name).
177
- to eq('people')
202
+ it "strips -staging if supplied" do
203
+ expect(PCO::URL.parse("https://people-staging.plannincenteronline.com").app_name).to eq("people")
178
204
  end
179
205
  end
180
206
 
181
- context 'when a string and path is passed' do
207
+ context "when a string and path is passed" do
182
208
  subject { PCO::URL.parse("https://people.planningcenteronline.com/households/2.json") }
183
209
 
184
- it 'sets the app_name and path attrs' do
185
- expect(subject.app_name).to eq('people')
186
- expect(subject.path).to eq('households/2.json')
210
+ it "sets the app_name and path attrs" do
211
+ expect(subject.app_name).to eq("people")
212
+ expect(subject.path).to eq("households/2.json")
187
213
  end
188
214
  end
189
215
 
190
- context 'when a string, path and query are passed' do
191
- let(:pco_url) { PCO::URL.new(app_name: :people, path: 'households/2.html', query: 'full_access=1&total_control=1', encrypt_query_params: true) }
216
+ context "when a string, path and query are passed" do
217
+ let(:pco_url) do
218
+ PCO::URL.new(
219
+ app_name: :people,
220
+ path: "households/2.html",
221
+ query: "full_access=1&total_control=1",
222
+ encrypt_query_params: true
223
+ )
224
+ end
192
225
 
193
- subject { PCO::URL.parse("https://people.planningcenteronline.com/households/2.html?full_access=1&total_control=1") }
226
+ subject do
227
+ PCO::URL.parse(
228
+ "https://people.planningcenteronline.com/households/2.html?full_access=1&total_control=1"
229
+ )
230
+ end
194
231
 
195
- it 'sets the app_name, path, and query attrs' do
196
- expect(subject.app_name).to eq('people')
197
- expect(subject.path).to eq('households/2.html')
198
- expect(subject.query).to eq('full_access=1&total_control=1')
232
+ it "sets the app_name, path, and query attrs" do
233
+ expect(subject.app_name).to eq("people")
234
+ expect(subject.path).to eq("households/2.html")
235
+ expect(subject.query).to eq("full_access=1&total_control=1")
199
236
  end
200
237
 
201
- context 'when the query is encrypted' do
238
+ context "when the query is encrypted" do
202
239
  subject { PCO::URL.parse(pco_url.to_s) }
203
240
 
204
- it 'first decrypts the query' do
205
- expect(pco_url.query).not_to eq('full_access=1&total_control=1')
206
- expect(subject.query).to eq('full_access=1&total_control=1')
241
+ it "first decrypts the query" do
242
+ expect(pco_url.query).not_to eq("full_access=1&total_control=1")
243
+ expect(subject.query).to eq("full_access=1&total_control=1")
207
244
  end
208
245
  end
209
246
 
@@ -211,14 +248,15 @@ describe PCO::URL do
211
248
  subject { PCO::URL.parse(pco_url.to_s + "&foo=bar") }
212
249
 
213
250
  it "decrypts the encrypted portion and appends the unencrypted portion" do
214
- expect(subject.query).to eq('full_access=1&total_control=1&foo=bar')
251
+ expect(subject.query).to eq("full_access=1&total_control=1&foo=bar")
215
252
  end
216
253
 
217
254
  it "returns the full url" do
218
- expect(subject.to_s).to eq('https://people-staging.planningcenteronline.com/households/2.html?full_access=1&total_control=1&foo=bar')
255
+ expect(subject.to_s).to eq(
256
+ "https://people-staging.planningcenteronline.com/households/2.html?full_access=1&total_control=1&foo=bar"
257
+ )
219
258
  end
220
259
  end
221
260
  end
222
261
  end
223
-
224
262
  end
data/spec/spec_helper.rb CHANGED
@@ -3,6 +3,8 @@ require "pco/url"
3
3
 
4
4
  RSpec.configure do |config|
5
5
  config.color = true
6
+ config.filter_run focus: true
7
+ config.run_all_when_everything_filtered = true
6
8
  end
7
9
 
8
10
  class Rails
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pco-url
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
4
+ version: 1.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Miller
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-17 00:00:00.000000000 Z
11
+ date: 2015-11-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: urlcrypt
@@ -79,15 +79,20 @@ executables: []
79
79
  extensions: []
80
80
  extra_rdoc_files: []
81
81
  files:
82
+ - ".editorconfig"
82
83
  - ".gitignore"
84
+ - ".rubocop.yml"
83
85
  - Gemfile
84
86
  - LICENSE.txt
85
87
  - README.md
86
88
  - Rakefile
87
89
  - circle.yml
88
90
  - lib/pco/url.rb
91
+ - lib/pco/url/church_center.rb
92
+ - lib/pco/url/get.rb
89
93
  - lib/pco/url/version.rb
90
94
  - pco-url.gemspec
95
+ - spec/pco/url/church_center_spec.rb
91
96
  - spec/pco_url_spec.rb
92
97
  - spec/spec_helper.rb
93
98
  homepage: https://github.com/ministrycentered/pco-url
@@ -115,5 +120,7 @@ signing_key:
115
120
  specification_version: 4
116
121
  summary: Generate URLs for PCO apps in all environments
117
122
  test_files:
123
+ - spec/pco/url/church_center_spec.rb
118
124
  - spec/pco_url_spec.rb
119
125
  - spec/spec_helper.rb
126
+ has_rdoc: