mirror of https://github.com/captn3m0/outliner.git
Initial Commit
This commit is contained in:
commit
d12681e05c
|
@ -0,0 +1,9 @@
|
||||||
|
/.bundle/
|
||||||
|
/.yardoc
|
||||||
|
/_yardoc/
|
||||||
|
/coverage/
|
||||||
|
/doc/
|
||||||
|
/pkg/
|
||||||
|
/spec/reports/
|
||||||
|
/tmp/
|
||||||
|
/vendor/
|
|
@ -0,0 +1,74 @@
|
||||||
|
# Contributor Covenant Code of Conduct
|
||||||
|
|
||||||
|
## Our Pledge
|
||||||
|
|
||||||
|
In the interest of fostering an open and welcoming environment, we as
|
||||||
|
contributors and maintainers pledge to making participation in our project and
|
||||||
|
our community a harassment-free experience for everyone, regardless of age, body
|
||||||
|
size, disability, ethnicity, gender identity and expression, level of experience,
|
||||||
|
nationality, personal appearance, race, religion, or sexual identity and
|
||||||
|
orientation.
|
||||||
|
|
||||||
|
## Our Standards
|
||||||
|
|
||||||
|
Examples of behavior that contributes to creating a positive environment
|
||||||
|
include:
|
||||||
|
|
||||||
|
* Using welcoming and inclusive language
|
||||||
|
* Being respectful of differing viewpoints and experiences
|
||||||
|
* Gracefully accepting constructive criticism
|
||||||
|
* Focusing on what is best for the community
|
||||||
|
* Showing empathy towards other community members
|
||||||
|
|
||||||
|
Examples of unacceptable behavior by participants include:
|
||||||
|
|
||||||
|
* The use of sexualized language or imagery and unwelcome sexual attention or
|
||||||
|
advances
|
||||||
|
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||||
|
* Public or private harassment
|
||||||
|
* Publishing others' private information, such as a physical or electronic
|
||||||
|
address, without explicit permission
|
||||||
|
* Other conduct which could reasonably be considered inappropriate in a
|
||||||
|
professional setting
|
||||||
|
|
||||||
|
## Our Responsibilities
|
||||||
|
|
||||||
|
Project maintainers are responsible for clarifying the standards of acceptable
|
||||||
|
behavior and are expected to take appropriate and fair corrective action in
|
||||||
|
response to any instances of unacceptable behavior.
|
||||||
|
|
||||||
|
Project maintainers have the right and responsibility to remove, edit, or
|
||||||
|
reject comments, commits, code, wiki edits, issues, and other contributions
|
||||||
|
that are not aligned to this Code of Conduct, or to ban temporarily or
|
||||||
|
permanently any contributor for other behaviors that they deem inappropriate,
|
||||||
|
threatening, offensive, or harmful.
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
This Code of Conduct applies both within project spaces and in public spaces
|
||||||
|
when an individual is representing the project or its community. Examples of
|
||||||
|
representing a project or community include using an official project e-mail
|
||||||
|
address, posting via an official social media account, or acting as an appointed
|
||||||
|
representative at an online or offline event. Representation of a project may be
|
||||||
|
further defined and clarified by project maintainers.
|
||||||
|
|
||||||
|
## Enforcement
|
||||||
|
|
||||||
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||||
|
reported by contacting the project team at me@captnemo.in. All
|
||||||
|
complaints will be reviewed and investigated and will result in a response that
|
||||||
|
is deemed necessary and appropriate to the circumstances. The project team is
|
||||||
|
obligated to maintain confidentiality with regard to the reporter of an incident.
|
||||||
|
Further details of specific enforcement policies may be posted separately.
|
||||||
|
|
||||||
|
Project maintainers who do not follow or enforce the Code of Conduct in good
|
||||||
|
faith may face temporary or permanent repercussions as determined by other
|
||||||
|
members of the project's leadership.
|
||||||
|
|
||||||
|
## Attribution
|
||||||
|
|
||||||
|
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
||||||
|
available at [http://contributor-covenant.org/version/1/4][version]
|
||||||
|
|
||||||
|
[homepage]: http://contributor-covenant.org
|
||||||
|
[version]: http://contributor-covenant.org/version/1/4/
|
|
@ -0,0 +1,4 @@
|
||||||
|
source "https://rubygems.org"
|
||||||
|
|
||||||
|
# Specify your gem's dependencies in outliner.gemspec
|
||||||
|
gemspec
|
|
@ -0,0 +1,42 @@
|
||||||
|
PATH
|
||||||
|
remote: .
|
||||||
|
specs:
|
||||||
|
outliner (0.1.0)
|
||||||
|
httparty (~> 0.17)
|
||||||
|
|
||||||
|
GEM
|
||||||
|
remote: https://rubygems.org/
|
||||||
|
specs:
|
||||||
|
addressable (2.6.0)
|
||||||
|
public_suffix (>= 2.0.2, < 4.0)
|
||||||
|
crack (0.4.3)
|
||||||
|
safe_yaml (~> 1.0.0)
|
||||||
|
hashdiff (1.0.0)
|
||||||
|
httparty (0.17.0)
|
||||||
|
mime-types (~> 3.0)
|
||||||
|
multi_xml (>= 0.5.2)
|
||||||
|
mime-types (3.2.2)
|
||||||
|
mime-types-data (~> 3.2015)
|
||||||
|
mime-types-data (3.2019.0331)
|
||||||
|
minitest (5.8.5)
|
||||||
|
multi_xml (0.6.0)
|
||||||
|
public_suffix (3.1.1)
|
||||||
|
rake (10.5.0)
|
||||||
|
safe_yaml (1.0.5)
|
||||||
|
webmock (3.6.0)
|
||||||
|
addressable (>= 2.3.6)
|
||||||
|
crack (>= 0.3.2)
|
||||||
|
hashdiff (>= 0.4.0, < 2.0.0)
|
||||||
|
|
||||||
|
PLATFORMS
|
||||||
|
ruby
|
||||||
|
|
||||||
|
DEPENDENCIES
|
||||||
|
bundler (~> 2.0)
|
||||||
|
minitest (~> 5.8.4)
|
||||||
|
outliner!
|
||||||
|
rake (~> 10.0)
|
||||||
|
webmock (~> 3.6.0)
|
||||||
|
|
||||||
|
BUNDLED WITH
|
||||||
|
2.0.2
|
|
@ -0,0 +1,49 @@
|
||||||
|
# Outliner
|
||||||
|
|
||||||
|
A simple HTTParty based wrapper for the [Outline API](https://www.getoutline.com/developers).
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
Add this line to your application's Gemfile:
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
gem 'outliner'
|
||||||
|
```
|
||||||
|
|
||||||
|
And then execute:
|
||||||
|
|
||||||
|
$ bundle
|
||||||
|
|
||||||
|
Or install it yourself as:
|
||||||
|
|
||||||
|
$ gem install outliner
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
The API Client automatically picks up the Token from the `OUTLINE_TOKEN` environment variable. All the API calls are available with the `.` replaced with a `_` in the method name. So if you need to call the `collections.remove_user` API, use the `collections_remove_user` method.
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
require 'outliner'
|
||||||
|
|
||||||
|
client = Outliner.new('https://knowledge.example.com')
|
||||||
|
pp client.auth_info
|
||||||
|
pp client.collections_list(offset: 0, limit: 10)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Development
|
||||||
|
|
||||||
|
After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
||||||
|
|
||||||
|
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
Bug reports and pull requests are welcome on GitHub at https://github.com/captn3m0/outliner. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
||||||
|
|
||||||
|
## Code of Conduct
|
||||||
|
|
||||||
|
Everyone interacting in the Outliner project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/captn3m0/outliner/blob/master/CODE_OF_CONDUCT.md).
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
Licensed under the [MIT License](https://nemo.mit-license.org/). See LICENSE file for details.
|
|
@ -0,0 +1,14 @@
|
||||||
|
#!/usr/bin/env ruby
|
||||||
|
|
||||||
|
require "bundler/setup"
|
||||||
|
require "outliner"
|
||||||
|
|
||||||
|
# You can add fixtures and/or initialization code here to make experimenting
|
||||||
|
# with your gem easier. You can also use a different console, if you like.
|
||||||
|
|
||||||
|
# (If you use this, don't forget to add pry to your Gemfile!)
|
||||||
|
# require "pry"
|
||||||
|
# Pry.start
|
||||||
|
|
||||||
|
require "irb"
|
||||||
|
IRB.start(__FILE__)
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
IFS=$'\n\t'
|
||||||
|
set -vx
|
||||||
|
|
||||||
|
bundle install
|
||||||
|
|
||||||
|
# Do any other automated setup that you need to do here
|
|
@ -0,0 +1,5 @@
|
||||||
|
require "outliner/version"
|
||||||
|
|
||||||
|
module Outliner
|
||||||
|
class Error < StandardError; end
|
||||||
|
end
|
|
@ -0,0 +1,29 @@
|
||||||
|
require 'httparty'
|
||||||
|
require 'json'
|
||||||
|
|
||||||
|
module Outliner
|
||||||
|
class Client
|
||||||
|
include HTTParty
|
||||||
|
|
||||||
|
def initialize(base_uri)
|
||||||
|
self.class.base_uri (base_uri + "/api")
|
||||||
|
@token = ENV['OUTLINE_TOKEN']
|
||||||
|
end
|
||||||
|
|
||||||
|
def method_missing(method_name, params = {})
|
||||||
|
method_name = '/' + method_name.to_s.sub('_', '.')
|
||||||
|
body = {token: @token}.merge(params).to_json
|
||||||
|
options = {
|
||||||
|
body: body,
|
||||||
|
headers: {
|
||||||
|
'Accept'=>'application/json',
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
'User-Agent': "Outliner/#{Outliner::VERSION}"
|
||||||
|
},
|
||||||
|
format: :json
|
||||||
|
}
|
||||||
|
|
||||||
|
self.class.post(method_name, options)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,3 @@
|
||||||
|
module Outliner
|
||||||
|
VERSION = "0.1.0"
|
||||||
|
end
|
|
@ -0,0 +1,34 @@
|
||||||
|
lib = File.expand_path("lib", __dir__)
|
||||||
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
||||||
|
require "outliner/version"
|
||||||
|
require "outliner/client"
|
||||||
|
|
||||||
|
Gem::Specification.new do |spec|
|
||||||
|
spec.name = "outliner"
|
||||||
|
spec.version = Outliner::VERSION
|
||||||
|
spec.authors = ["Nemo"]
|
||||||
|
spec.email = ["rubygem.outliner@captnemo.in"]
|
||||||
|
|
||||||
|
spec.summary = "A simple HTTParty based client for outline knowledge base."
|
||||||
|
spec.homepage = "https://github.com/captn3m0/outliner"
|
||||||
|
|
||||||
|
spec.metadata["homepage_uri"] = spec.homepage
|
||||||
|
spec.metadata["source_code_uri"] = "https://github.com/captn3m0/outliner"
|
||||||
|
spec.metadata["changelog_uri"] = "https://github.com/captn3m0/outliner/blob/master/CHANGELOG.md"
|
||||||
|
|
||||||
|
# Specify which files should be added to the gem when it is released.
|
||||||
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
||||||
|
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
||||||
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
||||||
|
end
|
||||||
|
spec.bindir = "exe"
|
||||||
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
||||||
|
spec.require_paths = ["lib"]
|
||||||
|
|
||||||
|
spec.add_dependency "httparty", "~> 0.17"
|
||||||
|
|
||||||
|
spec.add_development_dependency "bundler", "~> 2.0"
|
||||||
|
spec.add_development_dependency "rake", "~> 10.0"
|
||||||
|
spec.add_development_dependency "webmock", "~> 3.6.0"
|
||||||
|
spec.add_development_dependency "minitest", "~> 5.8.4"
|
||||||
|
end
|
|
@ -0,0 +1,26 @@
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"user": {
|
||||||
|
"id": "d7a6a7c0-9dda-4e01-8dc2-9b1905c08c40",
|
||||||
|
"createdAt": "2014-01-01T12:37:07.826Z",
|
||||||
|
"name": "Test User",
|
||||||
|
"isAdmin": true,
|
||||||
|
"isSuspended": false,
|
||||||
|
"avatarUrl": "https://example.com/avatar-url.jpg",
|
||||||
|
"email": "testuser@example.com"
|
||||||
|
},
|
||||||
|
"team": {
|
||||||
|
"id": "e0809f93-c199-4472-8a70-77eee3d67986",
|
||||||
|
"name": "Test Team",
|
||||||
|
"avatarUrl": "https://example.com/favicon-url.jpg",
|
||||||
|
"slackConnected": false,
|
||||||
|
"googleConnected": true,
|
||||||
|
"sharing": false,
|
||||||
|
"documentEmbeds": true,
|
||||||
|
"subdomain": "kb",
|
||||||
|
"url": "https://kb.example.com"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"status": 200,
|
||||||
|
"ok": true
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
require 'outliner'
|
||||||
|
require 'minitest/autorun'
|
||||||
|
require 'webmock/minitest'
|
||||||
|
require 'json'
|
||||||
|
|
||||||
|
class ClientTest < Minitest::Test
|
||||||
|
TOKEN = "c4302eFAKE_TOKEN9b6e27bccb7"
|
||||||
|
BASE_URI='https://kb.example.com'
|
||||||
|
def setup
|
||||||
|
ENV['OUTLINE_TOKEN'] = TOKEN
|
||||||
|
@client = Outliner::Client.new BASE_URI
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_client_initialized
|
||||||
|
assert_kind_of Outliner::Client, @client
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_auth_info_api
|
||||||
|
mock('auth.info', 'auth.info.200')
|
||||||
|
auth_info = @client.auth_info
|
||||||
|
assert_equal "https://kb.example.com", auth_info['data']['team']['url']
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def read_fixture(file)
|
||||||
|
File.read "test/fixtures/#{file}.json"
|
||||||
|
end
|
||||||
|
|
||||||
|
def mock(method_name, fixture_file, params = {})
|
||||||
|
stub_request(:post, BASE_URI + "/api/" + method_name)
|
||||||
|
.with(
|
||||||
|
body: params.merge({token: TOKEN}).to_json,
|
||||||
|
headers: {
|
||||||
|
'Accept'=>'application/json',
|
||||||
|
'User-Agent'=>"Outliner/#{Outliner::VERSION}",
|
||||||
|
'Content-Type'=> 'application/json'
|
||||||
|
}
|
||||||
|
).to_return(body: read_fixture(fixture_file))
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue