Skip to content

Commit

Permalink
Merge pull request #1934 from MushroomObserver/make-api-thread-safe
Browse files Browse the repository at this point in the history
Remove class attributes from API
  • Loading branch information
pellaea committed Feb 21, 2024
2 parents 57d1467 + edfd551 commit 9f07395
Show file tree
Hide file tree
Showing 19 changed files with 445 additions and 186 deletions.
41 changes: 26 additions & 15 deletions app/classes/api2.rb
Original file line number Diff line number Diff line change
Expand Up @@ -128,36 +128,47 @@ def self.version

attr_accessor :params, :method, :action, :version, :user, :api_key, :errors

# Give other modules ability to do additional initialization.
class_attribute :initializers
self.initializers = []

### PARAMETERS ###

attr_accessor :expected_params, :ignore_params

initializers << lambda do
def initialize_parameters
self.expected_params = {}
self.ignore_params = {}
parse(:string, :action)
end

### RESULTS ###

class_attribute :model, :table, :high_detail_includes, :low_detail_includes,
:high_detail_page_length, :low_detail_page_length,
:put_page_length, :delete_page_length
def model; end

def high_detail_includes
[]
end

def low_detail_includes
[]
end

def high_detail_page_length
10
end

def low_detail_page_length
100
end

self.high_detail_includes = []
self.low_detail_includes = []
self.high_detail_page_length = 10
self.low_detail_page_length = 100
self.put_page_length = 1000
self.delete_page_length = 1000
def put_page_length
1000
end

def delete_page_length
1000
end

attr_accessor :query, :detail, :page_number

initializers << lambda do
def initialize_results
self.detail = parse(:enum, :detail, limit: [:none, :low, :high]) || :none
self.page_number = parse(:integer, :page, default: 1)
end
Expand Down
23 changes: 18 additions & 5 deletions app/classes/api2/api_key_api.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,25 @@
class API2
# API for APIKey
class APIKeyAPI < ModelAPI
self.model = APIKey
def model
APIKey
end

def high_detail_page_length
1000
end

def low_detail_page_length
1000
end

def put_page_length
1000
end

self.high_detail_page_length = 1000
self.low_detail_page_length = 1000
self.put_page_length = 1000
self.delete_page_length = 1000
def delete_page_length
1000
end

# the :user may be the mobile app. the :for_user is the user the key is for
def create_params
Expand Down
33 changes: 24 additions & 9 deletions app/classes/api2/collection_number_api.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,32 @@
class API2
# API for CollectionNumber
class CollectionNumberAPI < ModelAPI
self.model = CollectionNumber
def model
CollectionNumber
end

self.high_detail_page_length = 100
self.low_detail_page_length = 1000
self.put_page_length = 1000
self.delete_page_length = 1000
def high_detail_page_length
100
end

self.high_detail_includes = [
:observations,
:user
]
def low_detail_page_length
1000
end

def put_page_length
1000
end

def delete_page_length
1000
end

def high_detail_includes
[
:observations,
:user
]
end

def query_params
{
Expand Down
29 changes: 21 additions & 8 deletions app/classes/api2/comment_api.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,29 @@
class API2
# API for Comment
class CommentAPI < ModelAPI
self.model = Comment
def model
Comment
end

self.high_detail_page_length = 1000
self.low_detail_page_length = 1000
self.put_page_length = 1000
self.delete_page_length = 1000
def high_detail_page_length
1000
end

self.high_detail_includes = [
:user
]
def low_detail_page_length
1000
end

def put_page_length
1000
end

def delete_page_length
1000
end

def high_detail_includes
[:user]
end

def query_params
@target = parse(:object, :target, limit: Comment.all_types, help: 1)
Expand Down
3 changes: 2 additions & 1 deletion app/classes/api2/core/base.rb
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,8 @@ def initialize(params = {})
self.params = params
self.action = params[:action]
self.errors = []
initializers.each { |x| instance_exec(&x) }
initialize_parameters
initialize_results
end

def handle_version
Expand Down
33 changes: 24 additions & 9 deletions app/classes/api2/external_link_api.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,32 @@
class API2
# API for ExternalLink
class ExternalLinkAPI < ModelAPI
self.model = ExternalLink
def model
ExternalLink
end

self.high_detail_page_length = 100
self.low_detail_page_length = 1000
self.put_page_length = 1000
self.delete_page_length = 1000
def high_detail_page_length
100
end

self.high_detail_includes = [
:external_site,
:user
]
def low_detail_page_length
1000
end

def put_page_length
1000
end

def delete_page_length
1000
end

def high_detail_includes
[
:external_site,
:user
]
end

def query_params
{
Expand Down
29 changes: 21 additions & 8 deletions app/classes/api2/external_site_api.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,29 @@
class API2
# API for ExternalSite
class ExternalSiteAPI < ModelAPI
self.model = ExternalSite
def model
ExternalSite
end

self.high_detail_page_length = 1000
self.low_detail_page_length = 1000
self.put_page_length = 1000
self.delete_page_length = 1000
def high_detail_page_length
1000
end

self.high_detail_includes = [
:project
]
def low_detail_page_length
1000
end

def put_page_length
1000
end

def delete_page_length
1000
end

def high_detail_includes
[:project]
end

def query_params
{
Expand Down
33 changes: 24 additions & 9 deletions app/classes/api2/herbarium_api.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,32 @@
class API2
# API for Herbarium
class HerbariumAPI < ModelAPI
self.model = Herbarium
def model
Herbarium
end

self.high_detail_page_length = 100
self.low_detail_page_length = 1000
self.put_page_length = 1000
self.delete_page_length = 1000
def high_detail_page_length
100
end

self.high_detail_includes = [
:location,
:personal_user
]
def low_detail_page_length
1000
end

def put_page_length
1000
end

def delete_page_length
1000
end

def high_detail_includes
[
:location,
:personal_user
]
end

def query_params
{
Expand Down
39 changes: 27 additions & 12 deletions app/classes/api2/herbarium_record_api.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,33 @@
class API2
# API for HerbariumRecord
class HerbariumRecordAPI < ModelAPI
self.model = HerbariumRecord

self.high_detail_page_length = 100
self.low_detail_page_length = 1000
self.put_page_length = 1000
self.delete_page_length = 1000

self.high_detail_includes = [
:observations,
:herbarium,
:user
]
def model
HerbariumRecord
end

def high_detail_page_length
100
end

def low_detail_page_length
1000
end

def put_page_length
1000
end

def delete_page_length
1000
end

def high_detail_includes
[
:observations,
:herbarium,
:user
]
end

def query_params
{
Expand Down
Loading

0 comments on commit 9f07395

Please sign in to comment.