patent_client 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 4ac8df21ba41ce277d18798a4829ec8d5c9cddb7cbc186edb355f4a187950b09
4
+ data.tar.gz: f6d8b0883378b10897aaf0abb1eb879a7cea2c5a236c3af7cfb51dd037ab58fd
5
+ SHA512:
6
+ metadata.gz: a2c64980d12f257fef9152989ec7140a4c3c1f85570df98089df441ecadf8f83c2ff385888e625336d4f28ed83dd6ba8dbff4451df8eea54b1e702609ad3ed38
7
+ data.tar.gz: 0e52a30f9f4a6ead7546cc637d797bd60f409193463b032f7504b37583c7a0f64e60d42f8b29e859c194c106e9f6d3e12898a383c9b2af875d888d22e79c9f38
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/Gemfile ADDED
@@ -0,0 +1,18 @@
1
+ source "https://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+
6
+ gem "faraday"
7
+ gem "dry-inflector"
8
+
9
+ # Add dependencies to develop your gem here.
10
+ # Include everything needed to run rake, tests, features, etc.
11
+ group :development do
12
+ gem "shoulda", ">= 0"
13
+ gem "rdoc", "~> 3.12"
14
+ gem "bundler", "~> 1.15"
15
+ gem "juwelier", "~> 2.1.0"
16
+ gem "simplecov", ">= 0"
17
+ gem "rspec"
18
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,104 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ activesupport (5.2.2)
5
+ concurrent-ruby (~> 1.0, >= 1.0.2)
6
+ i18n (>= 0.7, < 2)
7
+ minitest (~> 5.1)
8
+ tzinfo (~> 1.1)
9
+ addressable (2.6.0)
10
+ public_suffix (>= 2.0.2, < 4.0)
11
+ builder (3.2.3)
12
+ concurrent-ruby (1.1.4)
13
+ descendants_tracker (0.0.4)
14
+ thread_safe (~> 0.3, >= 0.3.1)
15
+ diff-lcs (1.3)
16
+ docile (1.3.1)
17
+ dry-inflector (0.1.2)
18
+ faraday (0.15.4)
19
+ multipart-post (>= 1.2, < 3)
20
+ git (1.5.0)
21
+ github_api (0.18.2)
22
+ addressable (~> 2.4)
23
+ descendants_tracker (~> 0.0.4)
24
+ faraday (~> 0.8)
25
+ hashie (~> 3.5, >= 3.5.2)
26
+ oauth2 (~> 1.0)
27
+ hashie (3.6.0)
28
+ highline (2.0.1)
29
+ i18n (1.6.0)
30
+ concurrent-ruby (~> 1.0)
31
+ json (1.8.6)
32
+ juwelier (2.1.3)
33
+ builder
34
+ bundler (>= 1.13)
35
+ git (>= 1.2.5)
36
+ github_api
37
+ highline (>= 1.6.15)
38
+ nokogiri (>= 1.5.10)
39
+ rake
40
+ rdoc
41
+ semver
42
+ jwt (2.1.0)
43
+ mini_portile2 (2.4.0)
44
+ minitest (5.11.3)
45
+ multi_json (1.13.1)
46
+ multi_xml (0.6.0)
47
+ multipart-post (2.0.0)
48
+ nokogiri (1.10.1)
49
+ mini_portile2 (~> 2.4.0)
50
+ oauth2 (1.4.1)
51
+ faraday (>= 0.8, < 0.16.0)
52
+ jwt (>= 1.0, < 3.0)
53
+ multi_json (~> 1.3)
54
+ multi_xml (~> 0.5)
55
+ rack (>= 1.2, < 3)
56
+ public_suffix (3.0.3)
57
+ rack (2.0.6)
58
+ rake (12.3.2)
59
+ rdoc (3.12.2)
60
+ json (~> 1.4)
61
+ rspec (3.8.0)
62
+ rspec-core (~> 3.8.0)
63
+ rspec-expectations (~> 3.8.0)
64
+ rspec-mocks (~> 3.8.0)
65
+ rspec-core (3.8.0)
66
+ rspec-support (~> 3.8.0)
67
+ rspec-expectations (3.8.2)
68
+ diff-lcs (>= 1.2.0, < 2.0)
69
+ rspec-support (~> 3.8.0)
70
+ rspec-mocks (3.8.0)
71
+ diff-lcs (>= 1.2.0, < 2.0)
72
+ rspec-support (~> 3.8.0)
73
+ rspec-support (3.8.0)
74
+ semver (1.0.1)
75
+ shoulda (3.6.0)
76
+ shoulda-context (~> 1.0, >= 1.0.1)
77
+ shoulda-matchers (~> 3.0)
78
+ shoulda-context (1.2.2)
79
+ shoulda-matchers (3.1.3)
80
+ activesupport (>= 4.0.0)
81
+ simplecov (0.16.1)
82
+ docile (~> 1.1)
83
+ json (>= 1.8, < 3)
84
+ simplecov-html (~> 0.10.0)
85
+ simplecov-html (0.10.2)
86
+ thread_safe (0.3.6)
87
+ tzinfo (1.2.5)
88
+ thread_safe (~> 0.1)
89
+
90
+ PLATFORMS
91
+ ruby
92
+
93
+ DEPENDENCIES
94
+ bundler (~> 1.15)
95
+ dry-inflector
96
+ faraday
97
+ juwelier (~> 2.1.0)
98
+ rdoc (~> 3.12)
99
+ rspec
100
+ shoulda
101
+ simplecov
102
+
103
+ BUNDLED WITH
104
+ 1.17.1
data/LICENSE.txt ADDED
@@ -0,0 +1,15 @@
1
+ Apache Software License 2.0
2
+
3
+ Copyright (c) 2019, Parker Douglas Hancock
4
+
5
+ Licensed under the Apache License, Version 2.0 (the "License");
6
+ you may not use this file except in compliance with the License.
7
+ You may obtain a copy of the License at
8
+
9
+ http://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ Unless required by applicable law or agreed to in writing, software
12
+ distributed under the License is distributed on an "AS IS" BASIS,
13
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ See the License for the specific language governing permissions and
15
+ limitations under the License.
data/README.rdoc ADDED
@@ -0,0 +1,18 @@
1
+ = patent_client_ruby
2
+
3
+ This is an experiment to learn ruby. It is currently broken - DO NOT USE
4
+
5
+ == Contributing to patent_client_ruby
6
+
7
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
8
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
9
+ * Fork the project.
10
+ * Start a feature/bugfix branch.
11
+ * Commit and push until you are happy with your contribution.
12
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
13
+ * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
14
+
15
+ == Copyright
16
+
17
+ Copyright (c) 2019 Parker Hancock. See LICENSE.txt for
18
+ further details.
data/Rakefile ADDED
@@ -0,0 +1,50 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+ require 'juwelier'
14
+ Juwelier::Tasks.new do |gem|
15
+ # gem is a Gem::Specification... see http://guides.rubygems.org/specification-reference/ for more options
16
+ gem.name = "patent_client"
17
+ gem.homepage = "http://github.com/parkerhancock/patent_client_ruby"
18
+ gem.license = "Apache 2.0"
19
+ gem.summary = %Q{TODO: one-line summary of your gem}
20
+ gem.description = %Q{TODO: longer description of your gem}
21
+ gem.email = "pypatent2018@gmail.com"
22
+ gem.authors = ["Parker Hancock"]
23
+
24
+ # dependencies defined in Gemfile
25
+ end
26
+ Juwelier::RubygemsDotOrgTasks.new
27
+ require 'rake/testtask'
28
+ Rake::TestTask.new(:test) do |test|
29
+ test.libs << 'lib' << 'test'
30
+ test.pattern = 'test/**/test_*.rb'
31
+ test.verbose = true
32
+ end
33
+
34
+ desc "Code coverage detail"
35
+ task :simplecov do
36
+ ENV['COVERAGE'] = "true"
37
+ Rake::Task['test'].execute
38
+ end
39
+
40
+ task :default => :test
41
+
42
+ require 'rdoc/task'
43
+ Rake::RDocTask.new do |rdoc|
44
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
45
+
46
+ rdoc.rdoc_dir = 'rdoc'
47
+ rdoc.title = "patent_client_ruby #{version}"
48
+ rdoc.rdoc_files.include('README*')
49
+ rdoc.rdoc_files.include('lib/**/*.rb')
50
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
data/lib/ptab.rb ADDED
@@ -0,0 +1,123 @@
1
+ require 'faraday'
2
+ require 'json'
3
+ require 'dry/inflector'
4
+
5
+ $VERBOSE = nil
6
+
7
+ require "logger"
8
+
9
+ Faraday.new do |faraday|
10
+ faraday.response :logger, Logger.new(STDOUT), bodies: true
11
+ end
12
+
13
+ =begin
14
+ Example Trial
15
+
16
+ "trialNumber": "IPR2016-00831",
17
+ "applicationNumber": "09026118",
18
+ "patentNumber": "6162705",
19
+ "petitionerPartyName": "Commissariat a l’Energie Atomique et aux Energies Alternatives",
20
+ "patentOwnerName": "Silicon Genesis Corporation",
21
+ "inventorName": "FRANCOIS HENLEY",
22
+ "prosecutionStatus": "Terminated-Settled",
23
+ "filingDate": "2016-04-01",
24
+ "accordedFilingDate": "2016-04-01",
25
+ "institutionDecisionDate": "2016-09-28",
26
+ "lastModifiedDatetime": "2017-07-06T16:06:59",
27
+ =end
28
+
29
+ module PtabManager
30
+ include Enumerable
31
+ @page_size = 25
32
+
33
+ def initialize(params=Hash.new)
34
+ @params = params
35
+ @conn = Faraday.new(
36
+ :url => "https://ptabdata.uspto.gov"
37
+ )
38
+ @pages = {}
39
+ end
40
+
41
+ def get(*args, **kwargs)
42
+ new_manager = filter(*args, **kwargs)
43
+ new_manager.first()
44
+ end
45
+
46
+ def filter(*args, **kwargs)
47
+ if args
48
+ kwargs["trialNumber"] = args[0]
49
+ end
50
+ new_params = @params.merge(kwargs)
51
+
52
+ self.class.new(new_params)
53
+ end
54
+
55
+ def get_page(page_no=0)
56
+ if not @pages.key? page_no
57
+ params = @params.merge({"page_no" => page_no+1})
58
+ url_params = Hash.new
59
+ inflector = Dry::Inflector.new
60
+ params.each_pair do |key, value|
61
+ new_key = inflector.camelize(key)
62
+ new_key = new_key[0].downcase + new_key[1..]
63
+ url_params[new_key] = value
64
+ end
65
+ response = @conn.get "ptab-api/trials", url_params
66
+ @pages[page_no] = JSON.parse(response.body)
67
+ end
68
+ @pages[page_no]
69
+ end
70
+
71
+ def length
72
+ page_one = get_page()
73
+ page_one["metadata"]["count"]
74
+ end
75
+
76
+ def each
77
+ puts "Record Class #{self.record_class_name}"
78
+ (0..(length-1)).each do |index|
79
+ position = index % 25
80
+ page_no = (index / 25).floor
81
+ yield get_page(page_no)["results"][position]
82
+ end
83
+ end
84
+ end
85
+
86
+ class PtabModel
87
+ def initialize(data)
88
+ inflector = Dry::Inflector.new
89
+ data.each {|key, value|
90
+ underscore_key = inflector.underscore(key)
91
+ instance_variable_set("@#{underscore_key}", value)
92
+ self.class.send(:attr_reader, underscore_key) # Dynamically create an accessor
93
+ }
94
+ end
95
+
96
+ def self.objects
97
+ @objects
98
+ end
99
+ end
100
+
101
+ class PtabTrialManager
102
+ include PtabManager
103
+ @path = "ptab-api/trials"
104
+ @default_filter = "trial_number"
105
+ @record_class_name = "PtabTrial"
106
+
107
+ class << self; attr_accessor :record_class_name end
108
+ end
109
+
110
+ class PtabTrial < PtabModel
111
+ @objects = PtabTrialManager.new()
112
+ end
113
+ =begin
114
+ class PtabDocumentManager < PtabManager
115
+ @path = "ptab-api/documents"
116
+ @default_filter = "trial_number"
117
+ @record_class_name = 'PtabDocument'
118
+ end
119
+
120
+ class PtabDocument < PtabModel
121
+ @objects = PtabDocumentManager.new()
122
+ end
123
+ =end
@@ -0,0 +1,30 @@
1
+ require "minitest/autorun"
2
+ require "ptab"
3
+
4
+ =begin
5
+ Example Trial
6
+
7
+ "trialNumber": "IPR2016-00831",
8
+ "applicationNumber": "09026118",
9
+ "patentNumber": "6162705",
10
+ "petitionerPartyName": "Commissariat a l’Energie Atomique et aux Energies Alternatives",
11
+ "patentOwnerName": "Silicon Genesis Corporation",
12
+ "inventorName": "FRANCOIS HENLEY",
13
+ "prosecutionStatus": "Terminated-Settled",
14
+ "filingDate": "2016-04-01",
15
+ "accordedFilingDate": "2016-04-01",
16
+ "institutionDecisionDate": "2016-09-28",
17
+ "lastModifiedDatetime": "2017-07-06T16:06:59",
18
+ =end
19
+
20
+ class TestPtabTrial < Minitest::Test
21
+ def setup
22
+ @trial = PtabTrial.objects.get("IPR2016-00831")
23
+ end
24
+
25
+ def test_data
26
+ puts(@trial)
27
+ assert_equal "IPR2016-00831", @trial.trial_number
28
+ assert_equal "Silicon Genesis Corporation", @trial.patent_owner_name
29
+ end
30
+ end
metadata ADDED
@@ -0,0 +1,165 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: patent_client
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Parker Hancock
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-03-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: faraday
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: dry-inflector
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: shoulda
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'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rdoc
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.12'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.12'
69
+ - !ruby/object:Gem::Dependency
70
+ name: bundler
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.15'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.15'
83
+ - !ruby/object:Gem::Dependency
84
+ name: juwelier
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 2.1.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 2.1.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: simplecov
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rspec
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ description: A client for accessing freely-available patent data
126
+ email: pypatent2018@gmail.com
127
+ executables: []
128
+ extensions: []
129
+ extra_rdoc_files:
130
+ - LICENSE.txt
131
+ - README.rdoc
132
+ files:
133
+ - ".document"
134
+ - Gemfile
135
+ - Gemfile.lock
136
+ - LICENSE.txt
137
+ - README.rdoc
138
+ - Rakefile
139
+ - VERSION
140
+ - lib/ptab.rb
141
+ - test/test_ptab_trial.rb
142
+ homepage: http://github.com/parkerhancock/patent_client_ruby
143
+ licenses:
144
+ - Apache-2.0
145
+ metadata: {}
146
+ post_install_message:
147
+ rdoc_options: []
148
+ require_paths:
149
+ - lib
150
+ required_ruby_version: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ version: '0'
155
+ required_rubygems_version: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ requirements: []
161
+ rubygems_version: 3.0.2
162
+ signing_key:
163
+ specification_version: 4
164
+ summary: a ruby version of python patent client
165
+ test_files: []