Security News
38% of CISOs Fear They’re Not Moving Fast Enough on AI
CISOs are racing to adopt AI for cybersecurity, but hurdles in budgets and governance may leave some falling behind in the fight against cyber threats.
This plugin is for Rails APIs that supports multiple mobile applications and want to force an update to those applications.
Read the link below to get some insight.
Add this line to your application's Gemfile:
gem 'forced'
And then execute:
$ bundle
Or install it yourself as:
$ gem install forced
And then, run:
# this will create a migration file.
$ bundle exec rails g forced:install
# this will migrate it.
$ bundle exec rails db:migrate
After all these are done, add the line below to your routes file.
mount Forced::Engine => "/forced"
You endpoint and tables are set!
If you want a parent for your Forced::Client
records, you can add is_versionable
to the desired parent model. Beware that both Forced::Client
to Forced::Version
relation and is_versionable
to Forced::Client
relation are set to dependent: :destroy
.
The Forced::Client
's polymorphic relation is optional as well. So, you can use the gem without setting a parent class relation. It'll work exactly the same.
For example, imagine you have a Brand
model to identify each application. Adding the line below to your model, will hold a relation for has_many :clients
class Brand < ApplicationRecord
# ...
# If you haven't read the above paragraph, please do.
# This is optional.
is_versionable
# ...
end
Then, you can call your clients with;
Brand.find(:id).clients
# => #<ActiveRecord::Associations::CollectionProxy [...]>
Brand.find(:id).clients.to_sql
# => "SELECT "forced_clients".* FROM "forced_clients" WHERE "forced_clients"."owner_id" = :id AND "forced_clients"."owner_type" = 'Brand'"
The Forced module needs to get the coming request to prepare the response. As long as request headers contains X-Platform
and X-Client-Version
, you are good to go.
X-Platform
will need to match with Forced::Client identifier:string
attribute in order to search the available versions.X-Client-Version
should contain a semantic version number, e.g. 1.0.0
Then send a GET
request to {{url}}/forced/status
. This will return the below JSON. (/forced
is where you mounted the engine!)
{
"update": "force_update",
"latest_version": "1.0.0",
"current_time": "2018-07-13T16:28:22.829Z"
}
If you want to return some version of this hash, you can access the response by calling the Response.call(request)
method. See below.
response = Forced::Response.call(request)
To change the default response from the mounted endpoint, create a StatusController
like below.
# In order this to work,
# you need to create this file in the correct path,
# that is;
#
# app/controllers/forced/status_controller.rb
module Forced
class StatusController < ::ApplicationController
def index
response = Forced::Response.call(request)
# Do what you want to do with the response hash.
end
end
end
To create a record, you can use your Rails console. Forced::Client
is polymorphic and keeps foreign_key
and foreign_type
columns as owner_#
. So, when you are creating a Forced::Client
instance, use owner:
for your reference column, e.g. Forced::Client.create(owner: Brand.first)
Forced::Client.new
# => #<Forced::Client id: nil, owner_type: nil, owner_id: nil, identifier: nil, deleted_at: nil, created_at: nil, updated_at: nil>
Forced::Version.new
# => #<Forced::Version id: nil, client_id: nil, version: nil, force_update: false, changelog: nil, deleted_at: nil, created_at: nil, updated_at: nil>
All available under Forced::MESSAGES
hash table. You can override the values as you wish. Also checkout the check_update_status
private method in base.rb
to understand the cases.
New migrations and tables have a different name, so, unless you are using custom calls, you can optionally and gradually create a migration for old table and move your records into the new table.
If you had some trouble or found something that wasn't suppose to be there, feel free to open an issue.
The gem is available as open source under the terms of the MIT License.
FAQs
Unknown package
We found that forced demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
CISOs are racing to adopt AI for cybersecurity, but hurdles in budgets and governance may leave some falling behind in the fight against cyber threats.
Research
Security News
Socket researchers uncovered a backdoored typosquat of BoltDB in the Go ecosystem, exploiting Go Module Proxy caching to persist undetected for years.
Security News
Company News
Socket is joining TC54 to help develop standards for software supply chain security, contributing to the evolution of SBOMs, CycloneDX, and Package URL specifications.