bible_gateway 0.0.12 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 936c48f6f63535b6b45f26270bd8f736b33547ee5143361a0ead5d3c9c9ab8f8
4
- data.tar.gz: 93042e59fe2c1a5987337bf63f47fbda4742c0f6a365d78e0e3845ee610eb1ab
3
+ metadata.gz: e6c2cf9ceec0c095ec1a5ec095b0b77f21cadb4715e754a8640248b60c004201
4
+ data.tar.gz: 9609fe5c68301042cae31812f0c4f8e62f363fe7d83e326d57aa89310c401bd6
5
5
  SHA512:
6
- metadata.gz: '09d00df060704129a77c21eb1e3b1ad2d3576d61d420ab2d4adc155a19b479c0be19d4a648afc4a6cbf703a9c21a97fae21650b8f4bec13ff11fe7758b8036b3'
7
- data.tar.gz: 66d98831f4cbb6243f10156ebe3c70894205351fbd50ef12dadf1c2bfc9c75ab1ff43828b25d321eadd4bd2301d17b9aee3e328365adec9e34c9d133189ddfbc
6
+ metadata.gz: c9d1980166dd51fc83cc34b9e380479e74c7e6756daf9c587565a8657dfab5b6f24a1fe8d6f841813dae0829ac6f30b760dd9203f40ae66643d01b4c428b644a
7
+ data.tar.gz: 5167444cb5ae0af6df52f6988e3d4ed5e0d59944dac009ea1734abb3b887be5fee66d20956df6a15810a46b1bcf0a6d890d4592c1368d391db53420bcf659681
@@ -0,0 +1,33 @@
1
+ # This workflow uses actions that are not certified by GitHub.
2
+ # They are provided by a third-party and are governed by
3
+ # separate terms of service, privacy policy, and support
4
+ # documentation.
5
+ # This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
6
+ # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
7
+
8
+ name: Ruby
9
+
10
+ on:
11
+ push:
12
+ branches: [ master ]
13
+ pull_request:
14
+ branches: [ master ]
15
+
16
+ jobs:
17
+ test:
18
+
19
+ runs-on: ubuntu-latest
20
+
21
+ steps:
22
+ - uses: actions/checkout@v2
23
+ - name: Set up Ruby
24
+ # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
25
+ # change this to (see https://github.com/ruby/setup-ruby#versioning):
26
+ # uses: ruby/setup-ruby@v1
27
+ uses: ruby/setup-ruby@ec106b438a1ff6ff109590de34ddc62c540232e0
28
+ with:
29
+ ruby-version: 2.6
30
+ - name: Install dependencies
31
+ run: bundle install
32
+ - name: Run tests
33
+ run: bundle exec rake
@@ -3,3 +3,4 @@ rvm:
3
3
  - 1.9.3
4
4
  - 2.0.0
5
5
  - 2.1.1
6
+
data/README.md CHANGED
@@ -22,15 +22,28 @@ Or install it yourself as:
22
22
 
23
23
  ## Usage
24
24
 
25
- BibleGateway.versions # available versions
25
+ ```
26
+ require 'bible_gateway'
26
27
 
27
- b = BibleGateway.new # defaults to :king_james_version, but can be initialized to different version
28
- b.version = :english_standard_version
29
- b.lookup('John 1:1') # => "<h4>John 1</h4>\n<h5>The Word Became Flesh</h5> <sup>1</sup> In the beginning was the Word, and the Word was with God, and the Word was God."
28
+ BibleGateway.versions # available versions
30
29
 
31
- ## Todo
30
+ BibleGateway.versions # available versions
32
31
 
33
- * Add other versions that are available
32
+ b = BibleGateway.new # defaults to :king_james_version, but can be initialized to different version
33
+
34
+ b.version = :english_standard_version
35
+ b.lookup('John 1:1') # => "<h4>John 1</h4>\n<h5>The Word Became Flesh</h5> <sup>1</sup> In the beginning was the Word, and the Word was with God, and the Word was God."
36
+ ```
37
+
38
+ ## Scraping the old site through old_lookup
39
+
40
+ ```
41
+ require 'bible_gateway'
42
+
43
+ b = BibleGateway.new # defaults to :king_james_version, but can be initialized to different version
44
+
45
+ b.old_lookup('John 1:1') # scraping the old site
46
+ ```
34
47
 
35
48
  ## Contributing
36
49
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.12
1
+ 0.1.0
@@ -7,9 +7,9 @@ Gem::Specification.new do |spec|
7
7
  spec.name = "bible_gateway"
8
8
  spec.version = BibleGateway::VERSION
9
9
  spec.authors = ["Geoffrey Dagley"]
10
- spec.email = ["gdagley@gmail.com", "bibleableproject@gmail.com"]
10
+ spec.email = ["gdagley@gmail.com", "bibleableproject@gmail.com", "ytbryan@gmail.com"]
11
11
  spec.description = %q{An unofficial 'API' for BibleGateway.com.}
12
- spec.summary = %q{An unofficial 'API' for BibleGateway.com.}
12
+ spec.summary = %q{An unofficial 'API' for BibleGateway.com and the classic BibleGateway}
13
13
  spec.homepage = "https://github.com/gdagley/bible_gateway"
14
14
  spec.license = "MIT"
15
15
 
@@ -21,7 +21,8 @@ Gem::Specification.new do |spec|
21
21
  spec.add_dependency "nokogiri"
22
22
  spec.add_dependency "typhoeus"
23
23
 
24
- spec.add_development_dependency "bundler", "~> 1.3"
24
+ spec.add_development_dependency "net-ping"
25
+ spec.add_development_dependency "bundler"
25
26
  spec.add_development_dependency "rake"
26
27
  spec.add_development_dependency "rspec"
27
28
  end
@@ -6,7 +6,8 @@ require 'uri'
6
6
  class BibleGatewayError < StandardError; end
7
7
 
8
8
  class BibleGateway
9
- GATEWAY_URL = "http://classic.biblegateway.com"
9
+ GATEWAY_URL = "http://biblegateway.com"
10
+ CLASSIC_GATEWAY_URL = "http://classic.biblegateway.com"
10
11
 
11
12
  VERSIONS = {
12
13
  :american_standard_version => "ASV",
@@ -62,15 +63,54 @@ class BibleGateway
62
63
  def lookup(passage)
63
64
  response = Typhoeus.get(passage_url(passage), followlocation: true)
64
65
  doc = Nokogiri::HTML(response.body)
65
- scrape_passage(doc)
66
+ scrape_passage(doc, @version)
67
+ end
68
+
69
+ def old_lookup(passage)
70
+ response = Typhoeus.get(old_passage_url(passage), followlocation: true)
71
+ doc = Nokogiri::HTML(response.body)
72
+ old_way_scrape_passage(doc)
66
73
  end
67
74
 
68
75
  private
69
76
  def passage_url(passage)
70
- URI.escape "#{GATEWAY_URL}/passage/?search=#{passage}&version=#{VERSIONS[version]}"
77
+ "#{GATEWAY_URL}/passage/?search=#{URI.encode_www_form_component(passage)}&version=#{URI.encode_www_form_component(VERSIONS[version])}"
78
+ end
79
+
80
+ def old_passage_url(passage)
81
+ "#{CLASSIC_GATEWAY_URL}/passage/?search=#{URI.encode_www_form_component(passage)}&version=#{URI.encode_www_form_component(VERSIONS[version])}"
82
+ end
83
+
84
+ def scrape_passage(doc, version)
85
+ container = doc.css('div.passage-text')
86
+ title = container.css("div.version-#{VERSIONS[version]}.result-text-style-normal.text-html h1 span")[0].content.strip if container.css("div.version-#{VERSIONS[version]}.result-text-style-normal.text-html h1")[0] != nil
87
+ segment = doc.at('div.passage-text')
88
+
89
+ segment.search('sup.crossreference').remove # remove cross reference links
90
+ segment.search('sup.footnote').remove # remove footnote links
91
+ segment.search("div.crossrefs").remove # remove cross references
92
+ segment.search("div.footnotes").remove # remove footnotes
93
+
94
+ text = ""
95
+ segment.search("span.text").each do |span|
96
+ text += span.inner_text
97
+ end
98
+
99
+ segment.search("span.text").each do |span|
100
+ html_content = span.inner_html
101
+ span.swap html_content
102
+ end
103
+
104
+ segment.search('sup.versenum').each do |sup|
105
+ html_content = sup.content
106
+ sup.swap "<sup>#{html_content}</sup>"
107
+ end
108
+
109
+ content = segment.inner_html.gsub('<p></p>', '').gsub(/<!--.*?-->/, '').strip
110
+ {:title => title, :content => content, :text => text }
71
111
  end
72
112
 
73
- def scrape_passage(doc)
113
+ def old_way_scrape_passage(doc)
74
114
  container = doc.css('div.container')
75
115
  title = container.css('div.passage-details h1')[0].content.strip
76
116
  segment = doc.at('div.passage-wrap')
@@ -79,29 +119,23 @@ class BibleGateway
79
119
  segment.search("div.crossrefs").remove # remove cross references
80
120
  segment.search("div.footnotes").remove # remove footnotes
81
121
 
82
- #scripture_text should be text
122
+ # extract text only from scripture
83
123
  text = ""
84
124
  segment.search("span.text").each do |span|
85
125
  text += span.inner_text
86
126
  end
87
127
 
88
- # text should be html so that text can be used above.
89
128
  segment.search("span.text").each do |span|
90
129
  html_content = span.inner_html
91
130
  span.swap html_content
92
131
  end
93
132
 
94
- # text should be html so that text can be used above.
95
133
  segment.search('sup.versenum').each do |sup|
96
134
  html_content = sup.content
97
135
  sup.swap "<sup>#{html_content}</sup>"
98
136
  end
99
137
 
100
138
  content = segment.inner_html.gsub('<p></p>', '').gsub(/<!--.*?-->/, '').strip
101
-
102
- #scripture_text should be text
103
- {:title => title,
104
- :content => content,
105
- :text => text }
139
+ {:title => title, :content => content, :text => text }
106
140
  end
107
141
  end
@@ -1,3 +1,3 @@
1
1
  class BibleGateway
2
- VERSION = "0.0.12"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -1,5 +1,6 @@
1
1
  # coding: utf-8
2
2
  require "spec_helper"
3
+ require 'net/ping'
3
4
 
4
5
  describe BibleGateway do
5
6
  it "should have a list of versions" do
@@ -39,7 +40,35 @@ describe BibleGateway do
39
40
 
40
41
  end
41
42
 
43
+ describe "reachability" do
44
+ context "biblegateway.com" do
45
+ it "should reach biblegateway.com" do
46
+ check = Net::Ping::External.new(BibleGateway::GATEWAY_URL)
47
+ check.ping?
48
+ end
49
+ end
50
+
51
+ context "classic biblegateway.com" do
52
+ it "should reach classic biblegateway.com" do
53
+ check = Net::Ping::External.new(BibleGateway::CLASSIC_GATEWAY_URL)
54
+ check.ping?
55
+ end
56
+ end
57
+ end
58
+
42
59
  describe "lookup" do
60
+ context "text only" do
61
+ it "should find the scripture text" do
62
+ text = BibleGateway.new(:english_standard_version).lookup("John 1:1")[:text]
63
+ expect(text).to eq("The Word Became Flesh1 In the beginning was the Word, and the Word was with God, and the Word was God.")
64
+ end
65
+
66
+ it "should find the scripture text via old_lookup" do
67
+ text = BibleGateway.new(:english_standard_version).old_lookup("John 1:1")[:text]
68
+ expect(text).to eq("The Word Became Flesh1 In the beginning was the Word, and the Word was with God, and the Word was God.")
69
+ end
70
+ end
71
+
43
72
  context "verse" do
44
73
  it "should find the passage title" do
45
74
  title = BibleGateway.new(:english_standard_version).lookup("John 1:1")[:title]
@@ -56,6 +85,17 @@ describe BibleGateway do
56
85
  expect(content).to include("<h3>The Word Became Flesh</h3>")
57
86
  expect(content).to include("In the beginning was the Word, and the Word was with God, and the Word was God.")
58
87
  end
88
+
89
+ it "should find the passage title via old_lookup" do
90
+ title = BibleGateway.new(:english_standard_version).old_lookup("John 1:1")[:title]
91
+ expect(title).to eq("John 1:1")
92
+ end
93
+
94
+ it "should find and clean the passage content via old_lookup" do
95
+ content = BibleGateway.new(:english_standard_version).old_lookup("John 1:1")[:content]
96
+ expect(content).to include("<h3>The Word Became Flesh</h3>")
97
+ expect(content).to include("In the beginning was the Word, and the Word was with God, and the Word was God.")
98
+ end
59
99
  end
60
100
 
61
101
  context "chapter" do
@@ -75,6 +115,18 @@ describe BibleGateway do
75
115
  expect(content).to include("<h3>For God So Loved the World</h3>")
76
116
  expect(content).to include("For God so loved the world, that he gave his only Son, that whoever believes in him should not perish but have eternal life.")
77
117
  end
118
+
119
+ it "should find the passage title via old_lookup" do
120
+ title = BibleGateway.new(:english_standard_version).old_lookup("John 3")[:title]
121
+ expect(title).to eq("John 3")
122
+ end
123
+
124
+ it "should find and clean the passage content via old_lookup" do
125
+ content = BibleGateway.new(:english_standard_version).old_lookup("John 3")[:content]
126
+ expect(content).to include("<h3>You Must Be Born Again</h3>")
127
+ expect(content).to include("<h3>For God So Loved the World</h3>")
128
+ expect(content).to include("For God so loved the world, that he gave his only Son, that whoever believes in him should not perish but have eternal life.")
129
+ end
78
130
  end
79
131
 
80
132
  context "multiple chapters" do
@@ -91,7 +143,20 @@ describe BibleGateway do
91
143
  expect(content).to include("<span class=\"chapternum\">1 </span>")
92
144
  expect(content).to include("For you are not a God who delights in wickedness;")
93
145
  end
146
+
147
+ it "should find the passage title via old_lookup" do
148
+ title = BibleGateway.new(:english_standard_version).old_lookup("Psalm 1-5")[:title]
149
+ expect(title).to eq("Psalm 1-5")
150
+ end
151
+
152
+ it "should find and clean the passage content via old_lookup" do
153
+ content = BibleGateway.new(:english_standard_version).old_lookup("Psalm 1-5")[:content]
154
+ expect(content).to include("<h3>The Way of the Righteous and the Wicked</h3>")
155
+ expect(content).to include("<span class=\"chapternum\">1 </span>")
156
+ expect(content).to include("<h3>Save Me, O My God</h3>")
157
+ expect(content).to include("<span class=\"chapternum\">1 </span>")
158
+ expect(content).to include("For you are not a God who delights in wickedness;")
159
+ end
94
160
  end
95
161
  end
96
-
97
162
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bible_gateway
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.12
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Geoffrey Dagley
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-06 00:00:00.000000000 Z
11
+ date: 2020-07-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -38,20 +38,34 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: net-ping
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: bundler
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - "~>"
59
+ - - ">="
46
60
  - !ruby/object:Gem::Version
47
- version: '1.3'
61
+ version: '0'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - "~>"
66
+ - - ">="
53
67
  - !ruby/object:Gem::Version
54
- version: '1.3'
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rake
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -84,11 +98,13 @@ description: An unofficial 'API' for BibleGateway.com.
84
98
  email:
85
99
  - gdagley@gmail.com
86
100
  - bibleableproject@gmail.com
101
+ - ytbryan@gmail.com
87
102
  executables: []
88
103
  extensions: []
89
104
  extra_rdoc_files: []
90
105
  files:
91
106
  - ".document"
107
+ - ".github/workflows/ruby.yml"
92
108
  - ".gitignore"
93
109
  - ".rspec"
94
110
  - ".travis.yml"
@@ -124,7 +140,7 @@ requirements: []
124
140
  rubygems_version: 3.0.3
125
141
  signing_key:
126
142
  specification_version: 4
127
- summary: An unofficial 'API' for BibleGateway.com.
143
+ summary: An unofficial 'API' for BibleGateway.com and the classic BibleGateway
128
144
  test_files:
129
145
  - spec/bible_gateway_spec.rb
130
146
  - spec/spec_helper.rb