freckle_io 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.codeclimate.yml +5 -0
- data/.env.sample +3 -0
- data/.env.test.sample +3 -0
- data/.gitignore +5 -0
- data/.rubocop.yml +67 -0
- data/.travis.yml +20 -0
- data/Gemfile +8 -0
- data/README.md +95 -0
- data/Rakefile +5 -0
- data/freckle-io.gemspec +37 -0
- data/icon.svg +192 -0
- data/lib/freckle_io/authentication.rb +26 -0
- data/lib/freckle_io/client/entries.rb +53 -0
- data/lib/freckle_io/client/project_groups.rb +36 -0
- data/lib/freckle_io/client/projects.rb +42 -0
- data/lib/freckle_io/client/tags.rb +33 -0
- data/lib/freckle_io/client/users.rb +35 -0
- data/lib/freckle_io/configuration.rb +48 -0
- data/lib/freckle_io/connection.rb +80 -0
- data/lib/freckle_io/errors/configuration.rb +5 -0
- data/lib/freckle_io/errors/connection.rb +9 -0
- data/lib/freckle_io/errors/params.rb +8 -0
- data/lib/freckle_io/paginator.rb +70 -0
- data/lib/freckle_io/params.rb +46 -0
- data/lib/freckle_io/request/multiple_pages.rb +62 -0
- data/lib/freckle_io/request/single_page.rb +73 -0
- data/lib/freckle_io/validator/entry.rb +57 -0
- data/lib/freckle_io/validator/project.rb +46 -0
- data/lib/freckle_io/validator/project_group.rb +30 -0
- data/lib/freckle_io/validator/restricted_hash.rb +11 -0
- data/lib/freckle_io/validator/tag.rb +30 -0
- data/lib/freckle_io/validator/user.rb +43 -0
- data/lib/freckle_io/validator/validation.yml +14 -0
- data/lib/freckle_io.rb +35 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Entries/with_configuration/_all/result_must_be_a_Request_MultiplePages.yml +48 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Entries/with_configuration/_all/returns_a_entry_for_each_response.yml +48 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Entries/with_configuration/with_valid_params/params_should_be_valid.yml +48 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Entries/with_configuration/with_validator/call_entry_s_validator.yml +48 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Client_ProjectGroups/with_configuration/_all/result_must_be_a_Request_MultiplePages.yml +99 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Client_ProjectGroups/with_configuration/_all/returns_a_project_group_for_each_response.yml +99 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Client_ProjectGroups/with_configuration/with_valid_params/params_should_be_valid.yml +48 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Client_ProjectGroups/with_configuration/with_validator/call_project_group_s_validator.yml +99 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Projects/with_configuration/_all/result_must_be_a_Request_MultiplePages.yml +491 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Projects/with_configuration/_all/returns_a_project_for_each_response.yml +491 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Projects/with_configuration/_show/get_a_spacific_project.yml +48 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Projects/with_configuration/_show/raw_links_should_be_a_empty_array.yml +48 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Projects/with_configuration/with_valid_params/params_should_be_valid.yml +48 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Projects/with_configuration/with_validator/call_project_s_validator.yml +491 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Tags/with_configuration/_all/result_must_be_a_Request_MultiplePages.yml +48 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Tags/with_configuration/_all/returns_a_tag_for_each_response.yml +48 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Tags/with_configuration/with_valid_params/params_should_be_valid.yml +48 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Tags/with_configuration/with_validator/call_tag_s_validator.yml +48 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Users/with_configuration/_all/result_must_be_a_Request_MultiplePages.yml +99 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Users/with_configuration/_all/returns_a_user_for_each_response.yml +99 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Users/with_configuration/_show/get_a_spacific_user.yml +48 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Users/with_configuration/_show/raw_links_should_be_a_empty_array.yml +48 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Users/with_configuration/with_valid_params/params_should_be_valid.yml +48 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Users/with_configuration/with_validator/call_user_s_validator.yml +99 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Connection/with_default_configuration/with_a_valid_response/must_be_a_json_format.yml +51 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Connection/with_default_configuration/with_freckle_token_authentication/set_X-FreckleToken.yml +51 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Connection/with_default_configuration/with_header/set_user_agent.yml +51 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Connection/with_default_configuration/with_invalid_url/raises_a_resource_not_found_error_for_invalid_resource.yml +40 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Connection/with_default_configuration/with_page_param/response_must_be_success.yml +51 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Connection/with_default_configuration/with_per_page_param/response_must_have_per_page_elements.yml +51 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Request_MultiplePages/with_configuration/_get/returns_an_array_of_faraday_response.yml +99 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Request_MultiplePages/with_configuration/_get/returns_freckle_default_per_page_elements.yml +99 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Request_MultiplePages/with_per_page/_get/return_per_page_number_elements.yml +148 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Request_SinglePage/with_configuration/_first/next_page_should_be_a_SinglePage.yml +99 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Request_SinglePage/with_configuration/_first/prev_page_should_be_nil.yml +51 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Request_SinglePage/with_configuration/_first/when_get_last_page_from_the_first_page/next_should_be_nil.yml +99 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Request_SinglePage/with_configuration/_get/returns_correct_raw_links_for_the_first_page.yml +51 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Request_SinglePage/with_configuration/_last/next_page_should_be_nil.yml +99 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Request_SinglePage/with_configuration/_last/returns_correct_raw_links_for_the_last_page.yml +99 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Request_SinglePage/with_configuration/_last/when_get_prev_page_from_the_last_page/prev_should_be_nil.yml +147 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Request_SinglePage/with_configuration/_next/previous_page_is_a_SinglePage.yml +147 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Request_SinglePage/with_configuration/_next/previous_page_should_be_not_nil.yml +147 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Request_SinglePage/with_configuration/_prev/next_page_is_a_SinglePage.yml +195 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Request_SinglePage/with_configuration/_prev/when_get_prev_page_from_the_first_page/prev_should_be_nil.yml +147 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Request_SinglePage/with_configuration/_total_page/with_first_page/returns_the_range_of_pages.yml +51 -0
- data/spec/fixtures/vcr_cassettes/FreckleIO_Request_SinglePage/with_configuration/_total_page/with_next_page/returns_an_empty_array.yml +99 -0
- data/spec/freckle_io/client/entries_spec.rb +359 -0
- data/spec/freckle_io/client/project_groups_spec.rb +132 -0
- data/spec/freckle_io/client/projects_spec.rb +183 -0
- data/spec/freckle_io/client/tags_spec.rb +132 -0
- data/spec/freckle_io/client/users_spec.rb +150 -0
- data/spec/freckle_io/configuration_spec.rb +70 -0
- data/spec/freckle_io/connection_spec.rb +116 -0
- data/spec/freckle_io/paginator_spec.rb +105 -0
- data/spec/freckle_io/params_spec.rb +15 -0
- data/spec/freckle_io/request/multiple_pages_spec.rb +39 -0
- data/spec/freckle_io/request/single_page_spec.rb +107 -0
- data/spec/spec_helper.rb +69 -0
- data/spec/support/anonymize/entries.rb +60 -0
- data/spec/support/anonymize/project_groups.rb +55 -0
- data/spec/support/anonymize/projects.rb +60 -0
- data/spec/support/anonymize/tags.rb +47 -0
- data/spec/support/anonymize/users.rb +59 -0
- data/spec/support/anonymize_interaction.rb +60 -0
- data/spec/support/entry_info.rb +19 -0
- data/spec/support/project_group_info.rb +13 -0
- data/spec/support/project_info.rb +26 -0
- data/spec/support/shared/links/raw_links.rb +13 -0
- data/spec/support/tag_info.rb +11 -0
- data/spec/support/user_info.rb +21 -0
- metadata +382 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f1387e11b8c14ae067534e54d5470eae82ef5e510d5a75a830cf6dc9605d09d6
|
4
|
+
data.tar.gz: 0565a0f129768034f84d3710bc68b8095203c5de7b96c3d9f5fcc0bf5d5a4d27
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: f7176e0da91bbb2d138123af6fd79ad9fa27fc9858b6d86cd5173189f62fdad66f94339d3bee9ddb678fc46ad08b7b1c94dd1c38a8dcdfcf41bb2fe67a9faa25
|
7
|
+
data.tar.gz: fdd5edd697332843fa57c132ceec901035a13dbe5fdbbfa5cd62e97b544166fc851a37506023c538129ebd9f26a3f6e3aa8166aaca41ea085cd46d0ee6190b56
|
data/.codeclimate.yml
ADDED
data/.env.sample
ADDED
data/.env.test.sample
ADDED
data/.gitignore
ADDED
data/.rubocop.yml
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
require: rubocop-rspec
|
2
|
+
|
3
|
+
AllCops:
|
4
|
+
TargetRubyVersion: 2.3
|
5
|
+
Exclude:
|
6
|
+
- "bin/**/*"
|
7
|
+
- ".bundle/**/*"
|
8
|
+
- "bundle/**/*"
|
9
|
+
- "db/schema.rb"
|
10
|
+
- "node_modules/**/*"
|
11
|
+
- "**/*.gemspec"
|
12
|
+
|
13
|
+
Layout/AlignParameters:
|
14
|
+
EnforcedStyle: with_fixed_indentation
|
15
|
+
Layout/DotPosition:
|
16
|
+
EnforcedStyle: trailing
|
17
|
+
Layout/SpaceInsideHashLiteralBraces:
|
18
|
+
EnforcedStyle: no_space
|
19
|
+
|
20
|
+
Metrics/BlockLength:
|
21
|
+
ExcludedMethods:
|
22
|
+
- context
|
23
|
+
- describe
|
24
|
+
- feature
|
25
|
+
- it
|
26
|
+
- shared_examples
|
27
|
+
- shared_examples_for
|
28
|
+
- namespace
|
29
|
+
- draw
|
30
|
+
|
31
|
+
Style/ClassAndModuleChildren:
|
32
|
+
EnforcedStyle: compact
|
33
|
+
Style/Documentation:
|
34
|
+
Enabled: false
|
35
|
+
Style/FrozenStringLiteralComment:
|
36
|
+
Enabled: false
|
37
|
+
Style/Lambda:
|
38
|
+
EnforcedStyle: literal
|
39
|
+
Style/NegatedIf:
|
40
|
+
Enabled: false
|
41
|
+
Style/PercentLiteralDelimiters:
|
42
|
+
Enabled: false
|
43
|
+
Style/StringLiterals:
|
44
|
+
EnforcedStyle: double_quotes
|
45
|
+
Style/SymbolArray:
|
46
|
+
Enabled: false
|
47
|
+
Style/ClassAndModuleChildren:
|
48
|
+
Enabled: false
|
49
|
+
Layout/MultilineHashBraceLayout:
|
50
|
+
Enabled: false
|
51
|
+
|
52
|
+
RSpec/DescribeClass:
|
53
|
+
Exclude:
|
54
|
+
- spec/*
|
55
|
+
- spec/features/**/*
|
56
|
+
RSpec/LetSetup:
|
57
|
+
Enabled: false
|
58
|
+
RSpec/MultipleExpectations:
|
59
|
+
Exclude:
|
60
|
+
- spec/features/**/*
|
61
|
+
RSpec/NamedSubject:
|
62
|
+
Enabled: false
|
63
|
+
RSpec/NotToNot:
|
64
|
+
Enabled: false
|
65
|
+
RSpec/NestedGroups:
|
66
|
+
Enabled: true
|
67
|
+
Max: 4
|
data/.travis.yml
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
env:
|
2
|
+
global:
|
3
|
+
- CC_TEST_REPORTER_ID=d2619c7f36e46d99be646a88bdb206f69c90064f2473bc42665c2e489f9bf987
|
4
|
+
language: ruby
|
5
|
+
cache: bundler
|
6
|
+
rvm:
|
7
|
+
- 2.4
|
8
|
+
- 2.5
|
9
|
+
before_install: gem install bundler -v 1.16.2
|
10
|
+
before_script:
|
11
|
+
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
12
|
+
- chmod +x ./cc-test-reporter
|
13
|
+
- ./cc-test-reporter before-build
|
14
|
+
- cp .env.test.sample .env.test
|
15
|
+
scripts:
|
16
|
+
- bundle exec rspec spec
|
17
|
+
after_script:
|
18
|
+
- ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
|
19
|
+
notifications:
|
20
|
+
- false
|
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
# freckle-io
|
2
|
+
|
3
|
+
[![Build Status](https://travis-ci.com/sirion1987/freckle-io.svg?branch=master)](https://travis-ci.com/sirion1987/freckle-io)
|
4
|
+
[![Maintainability](https://api.codeclimate.com/v1/badges/051732f42b5e59d60a5a/maintainability)](https://codeclimate.com/github/sirion1987/Freckle-io/maintainability)
|
5
|
+
[![Test Coverage](https://api.codeclimate.com/v1/badges/051732f42b5e59d60a5a/test_coverage)](https://codeclimate.com/github/sirion1987/Freckle-io/test_coverage)
|
6
|
+
|
7
|
+
Yet another Ruby client for the Freckle API
|
8
|
+
|
9
|
+
# Usage
|
10
|
+
|
11
|
+
1. Configure `.env` file. You must define the `FRECKLE_TOKEN` environment
|
12
|
+
variable with your Freckle API token.
|
13
|
+
|
14
|
+
E.g.
|
15
|
+
|
16
|
+
```
|
17
|
+
FRECKLE_TOKEN=123921387213987132987
|
18
|
+
```
|
19
|
+
|
20
|
+
2. Configure client with:
|
21
|
+
|
22
|
+
```ruby
|
23
|
+
FreckleIO.configure do |c|
|
24
|
+
c.token = ENV["FRECKLE_TOKEN"]
|
25
|
+
c.url = ENV["FRECKLE_URL"]
|
26
|
+
c.auth_type = :freckle_token
|
27
|
+
c.per_page = 20
|
28
|
+
c.max_concurrency = 5
|
29
|
+
end
|
30
|
+
```
|
31
|
+
|
32
|
+
You can set:
|
33
|
+
|
34
|
+
1. `FRECKLE_URL`: the URL of the Freckle API. The default value
|
35
|
+
is `https://api.letsfreckle.com/v2`.
|
36
|
+
2. `auth_type`: the authentication type which will use with the server.
|
37
|
+
Currently, the only allowed values is:
|
38
|
+
* `:freckle_token`: uses your Freckle API token.
|
39
|
+
3. `per_page`: the number of items included for each page. The default
|
40
|
+
value is 30.
|
41
|
+
4. `max_concurrency`: max thread for each requests.
|
42
|
+
|
43
|
+
## Example
|
44
|
+
|
45
|
+
```ruby
|
46
|
+
require 'dotenv'
|
47
|
+
require 'freckle-io'
|
48
|
+
|
49
|
+
FreckleIO.configure do |c|
|
50
|
+
c.token = ENV["FRECKLE_TOKEN"]
|
51
|
+
c.auth_type = :freckle_token
|
52
|
+
c.max_concurrency = 5
|
53
|
+
end
|
54
|
+
|
55
|
+
client_users = FreckleIO::Client::Users.new.all
|
56
|
+
|
57
|
+
client_users.last_responses.each do |resp|
|
58
|
+
resp.body
|
59
|
+
end
|
60
|
+
```
|
61
|
+
|
62
|
+
# Testing
|
63
|
+
|
64
|
+
The test suite uses the [VCR](https://github.com/vcr/vcr) gem.
|
65
|
+
|
66
|
+
The contents of the cassettes is anonymized (see spec/spec_helper.rb).
|
67
|
+
|
68
|
+
## Regenerating the VCR cassettes
|
69
|
+
|
70
|
+
Occasionally, it is a good idea to regenerate the cassettes in order to
|
71
|
+
do an end-to-end test.
|
72
|
+
|
73
|
+
Make sure you have correctly set the `.env.test` file. Inside this file
|
74
|
+
you must specify the keys:
|
75
|
+
|
76
|
+
* `FRECKLE_TOKEN`: your Freckle API token;
|
77
|
+
* `FRECKLE_URL`: Freckle API url;
|
78
|
+
* `REAL_FRECKLE_USER_ID`: a real user id.
|
79
|
+
|
80
|
+
```shell
|
81
|
+
$ rm -rf spec/fixtures/vcr_cassettes/*
|
82
|
+
$ bundle
|
83
|
+
$ bundle exec rspec
|
84
|
+
```
|
85
|
+
|
86
|
+
# Compatibility
|
87
|
+
|
88
|
+
This client is set for work with the version 2 (v2) of the Freckle API.
|
89
|
+
|
90
|
+
# Supported Ruby Versions
|
91
|
+
|
92
|
+
This library is tested against the following Ruby implementations:
|
93
|
+
|
94
|
+
* Ruby 2.4
|
95
|
+
* Ruby 2.5
|
data/Rakefile
ADDED
data/freckle-io.gemspec
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
lib = File.expand_path("../lib", __dir__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
|
4
|
+
Gem::Specification.new do |spec|
|
5
|
+
spec.name = "freckle_io"
|
6
|
+
spec.version = "0.0.3"
|
7
|
+
spec.authors = ["Domenico Giuseppe Garofoli"]
|
8
|
+
spec.email = ["sirion1987@gmail.com"]
|
9
|
+
|
10
|
+
spec.summary = "Yet another Ruby client for the Freckle API"
|
11
|
+
spec.description = "Yet another Ruby client for the Freckle API"
|
12
|
+
spec.homepage = "https://github.com/sirion1987/freckle-io"
|
13
|
+
spec.license = "MIT"
|
14
|
+
spec.require_path = ["lib"]
|
15
|
+
|
16
|
+
spec.required_ruby_version = '>= 2.4.0'
|
17
|
+
|
18
|
+
spec.files = `git ls-files -z`.split("\x0")
|
19
|
+
spec.test_files = Dir["spec/**/*.rb"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler"
|
22
|
+
spec.add_development_dependency "coveralls"
|
23
|
+
spec.add_development_dependency "rake"
|
24
|
+
spec.add_development_dependency "rspec"
|
25
|
+
spec.add_development_dependency "rubocop"
|
26
|
+
spec.add_development_dependency "rubocop-rspec"
|
27
|
+
spec.add_development_dependency "simplecov"
|
28
|
+
spec.add_development_dependency "simplecov-console"
|
29
|
+
spec.add_development_dependency "vcr"
|
30
|
+
spec.add_development_dependency "webmock"
|
31
|
+
|
32
|
+
spec.add_runtime_dependency "dotenv"
|
33
|
+
spec.add_runtime_dependency "dry-validation"
|
34
|
+
spec.add_runtime_dependency "faraday", ">= 0.15.2"
|
35
|
+
spec.add_runtime_dependency "faraday_middleware", ">= 0.12"
|
36
|
+
spec.add_runtime_dependency "typhoeus"
|
37
|
+
end
|
data/icon.svg
ADDED
@@ -0,0 +1,192 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
2
|
+
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
3
|
+
|
4
|
+
<svg
|
5
|
+
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
6
|
+
xmlns:cc="http://creativecommons.org/ns#"
|
7
|
+
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
8
|
+
xmlns:svg="http://www.w3.org/2000/svg"
|
9
|
+
xmlns="http://www.w3.org/2000/svg"
|
10
|
+
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
11
|
+
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
12
|
+
width="210mm"
|
13
|
+
height="297mm"
|
14
|
+
viewBox="0 0 744.09448819 1052.3622047"
|
15
|
+
id="svg2"
|
16
|
+
version="1.1"
|
17
|
+
inkscape:version="0.91 r13725"
|
18
|
+
sodipodi:docname="icon .svg">
|
19
|
+
<defs
|
20
|
+
id="defs4">
|
21
|
+
<filter
|
22
|
+
inkscape:collect="always"
|
23
|
+
style="color-interpolation-filters:sRGB"
|
24
|
+
id="filter5884"
|
25
|
+
x="-0.044924623"
|
26
|
+
width="1.0898492"
|
27
|
+
y="-0.090303033"
|
28
|
+
height="1.1806061">
|
29
|
+
<feGaussianBlur
|
30
|
+
inkscape:collect="always"
|
31
|
+
stdDeviation="1.8814091"
|
32
|
+
id="feGaussianBlur5886" />
|
33
|
+
</filter>
|
34
|
+
</defs>
|
35
|
+
<sodipodi:namedview
|
36
|
+
id="base"
|
37
|
+
pagecolor="#ffffff"
|
38
|
+
bordercolor="#666666"
|
39
|
+
borderopacity="1.0"
|
40
|
+
inkscape:pageopacity="0.0"
|
41
|
+
inkscape:pageshadow="2"
|
42
|
+
inkscape:zoom="2.0788"
|
43
|
+
inkscape:cx="322.35944"
|
44
|
+
inkscape:cy="483.94209"
|
45
|
+
inkscape:document-units="px"
|
46
|
+
inkscape:current-layer="layer1"
|
47
|
+
showgrid="false"
|
48
|
+
showguides="true"
|
49
|
+
inkscape:guide-bbox="true"
|
50
|
+
inkscape:window-width="2560"
|
51
|
+
inkscape:window-height="1416"
|
52
|
+
inkscape:window-x="0"
|
53
|
+
inkscape:window-y="24"
|
54
|
+
inkscape:window-maximized="1">
|
55
|
+
<sodipodi:guide
|
56
|
+
position="138.3909,650.03318"
|
57
|
+
orientation="0,1"
|
58
|
+
id="guide4136" />
|
59
|
+
<sodipodi:guide
|
60
|
+
position="99.500027,550.02807"
|
61
|
+
orientation="0,1"
|
62
|
+
id="guide4138" />
|
63
|
+
<sodipodi:guide
|
64
|
+
position="249.50768,629.83013"
|
65
|
+
orientation="1,0"
|
66
|
+
id="guide4140" />
|
67
|
+
<sodipodi:guide
|
68
|
+
position="350.01786,625.28444"
|
69
|
+
orientation="1,0"
|
70
|
+
id="guide4142" />
|
71
|
+
<sodipodi:guide
|
72
|
+
position="300.01531,611.1423"
|
73
|
+
orientation="1,0"
|
74
|
+
id="guide4144" />
|
75
|
+
<sodipodi:guide
|
76
|
+
position="300.01531,600.03062"
|
77
|
+
orientation="0,1"
|
78
|
+
id="guide4146" />
|
79
|
+
<sodipodi:guide
|
80
|
+
position="173.74624,624.77936"
|
81
|
+
orientation="0,1"
|
82
|
+
id="guide4148" />
|
83
|
+
<sodipodi:guide
|
84
|
+
position="207.58635,574.77681"
|
85
|
+
orientation="0,1"
|
86
|
+
id="guide4150" />
|
87
|
+
<sodipodi:guide
|
88
|
+
position="274.76149,600.03062"
|
89
|
+
orientation="1,0"
|
90
|
+
id="guide5932" />
|
91
|
+
<sodipodi:guide
|
92
|
+
position="324.76405,600.03062"
|
93
|
+
orientation="1,0"
|
94
|
+
id="guide5934" />
|
95
|
+
<sodipodi:guide
|
96
|
+
position="274.76149,612.50001"
|
97
|
+
orientation="0,1"
|
98
|
+
id="guide5936" />
|
99
|
+
<sodipodi:guide
|
100
|
+
position="262.65153,612.50001"
|
101
|
+
orientation="1,0"
|
102
|
+
id="guide4158" />
|
103
|
+
<sodipodi:guide
|
104
|
+
position="274.76149,587.44152"
|
105
|
+
orientation="0,1"
|
106
|
+
id="guide4160" />
|
107
|
+
<sodipodi:guide
|
108
|
+
position="300.01531,650.03318"
|
109
|
+
orientation="-0.44721366,0.89442716"
|
110
|
+
id="guide4164" />
|
111
|
+
<sodipodi:guide
|
112
|
+
position="350.01786,624.77936"
|
113
|
+
orientation="0.44358884,-0.89623041"
|
114
|
+
id="guide4166" />
|
115
|
+
<sodipodi:guide
|
116
|
+
position="350.01786,574.77681"
|
117
|
+
orientation="0.44358884,-0.89623041"
|
118
|
+
id="guide4168" />
|
119
|
+
<sodipodi:guide
|
120
|
+
position="248.99231,574.77681"
|
121
|
+
orientation="0.43642078,0.89974269"
|
122
|
+
id="guide4170" />
|
123
|
+
<sodipodi:guide
|
124
|
+
position="249.50768,624.77936"
|
125
|
+
orientation="0.44001526,0.89799029"
|
126
|
+
id="guide4172" />
|
127
|
+
<sodipodi:guide
|
128
|
+
position="300.01531,650.03318"
|
129
|
+
orientation="0.45081658,0.89261661"
|
130
|
+
id="guide4174" />
|
131
|
+
<sodipodi:guide
|
132
|
+
position="274.76149,562.27745"
|
133
|
+
orientation="0.43642086,-0.89974265"
|
134
|
+
id="guide4180" />
|
135
|
+
</sodipodi:namedview>
|
136
|
+
<metadata
|
137
|
+
id="metadata7">
|
138
|
+
<rdf:RDF>
|
139
|
+
<cc:Work
|
140
|
+
rdf:about="">
|
141
|
+
<dc:format>image/svg+xml</dc:format>
|
142
|
+
<dc:type
|
143
|
+
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
144
|
+
</cc:Work>
|
145
|
+
</rdf:RDF>
|
146
|
+
</metadata>
|
147
|
+
<g
|
148
|
+
inkscape:label="Livello 1"
|
149
|
+
inkscape:groupmode="layer"
|
150
|
+
id="layer1">
|
151
|
+
<path
|
152
|
+
style="fill:none;fill-rule:evenodd;stroke:#ffcc00;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
153
|
+
d="m 367.12006,444.34163 -12.10996,5.87394 -25.25382,-12.24938 -4.90094,2.30944"
|
154
|
+
id="path4182-0"
|
155
|
+
inkscape:connector-curvature="0" />
|
156
|
+
<path
|
157
|
+
style="fill:none;fill-rule:evenodd;stroke:#ffaa00;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
158
|
+
d="m 367.0279,443.821 -12.10996,5.87394 -25.25382,-12.24938 -4.90094,2.30944"
|
159
|
+
id="path4182-3-6"
|
160
|
+
inkscape:connector-curvature="0" />
|
161
|
+
<path
|
162
|
+
style="fill:#806600;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;opacity:1;filter:url(#filter5884)"
|
163
|
+
d="m 249.50768,483.58541 50.50763,24.74874 50.00255,-24.74874 -50.00255,-25.25381 z"
|
164
|
+
id="path4166"
|
165
|
+
inkscape:connector-curvature="0" />
|
166
|
+
<path
|
167
|
+
style="fill:#ffd42a;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
|
168
|
+
d="m 249.50768,427.58286 50.50763,-25.25382 50.00255,25.25382 -50.00255,24.74874 z"
|
169
|
+
id="path4158"
|
170
|
+
inkscape:connector-curvature="0" />
|
171
|
+
<path
|
172
|
+
style="fill:#d4aa00;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
173
|
+
d="m 249.50768,427.58286 0,50.00255 50.50763,24.74874 0,-50.00255 -50.50763,-24.74874 z"
|
174
|
+
id="path4160"
|
175
|
+
inkscape:connector-curvature="0" />
|
176
|
+
<path
|
177
|
+
style="fill:#ffcc00;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
178
|
+
d="m 300.01531,502.33415 50.00255,-24.74874 0,-50.50763 -50.00255,25.25382 0,50.00255 z"
|
179
|
+
id="path4164"
|
180
|
+
inkscape:connector-curvature="0" />
|
181
|
+
<path
|
182
|
+
style="fill:none;fill-rule:evenodd;stroke:#ffcc00;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
183
|
+
d="m 232.49677,460.76496 12.10996,-5.87394 25.25382,12.24938 4.90094,-2.30944"
|
184
|
+
id="path4182"
|
185
|
+
inkscape:connector-curvature="0" />
|
186
|
+
<path
|
187
|
+
style="fill:none;fill-rule:evenodd;stroke:#ffaa00;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
188
|
+
d="m 232.58893,461.28559 12.10996,-5.87394 25.25382,12.24938 4.90094,-2.30944"
|
189
|
+
id="path4182-3"
|
190
|
+
inkscape:connector-curvature="0" />
|
191
|
+
</g>
|
192
|
+
</svg>
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module FreckleIO
|
2
|
+
module Authentication
|
3
|
+
AUTHENTICATION_TYPE = [
|
4
|
+
:freckle_token
|
5
|
+
].freeze
|
6
|
+
|
7
|
+
def valid_auth?(type)
|
8
|
+
AUTHENTICATION_TYPE.include? type
|
9
|
+
end
|
10
|
+
|
11
|
+
def authorize_request(request)
|
12
|
+
auth_type = FreckleIO.configuration.auth_type
|
13
|
+
|
14
|
+
case auth_type
|
15
|
+
when :freckle_token
|
16
|
+
request.headers["X-FreckleToken"] = token
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def token
|
23
|
+
FreckleIO.configuration.token
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module FreckleIO
|
2
|
+
module Client
|
3
|
+
class Entries
|
4
|
+
ENTRY_ENDPOINT = "/v2/entries".freeze
|
5
|
+
ALLOWED_KEYS = %i(
|
6
|
+
user_ids
|
7
|
+
description
|
8
|
+
project_ids
|
9
|
+
tag_ids
|
10
|
+
tag_filter_type
|
11
|
+
invoice_ids
|
12
|
+
import_ids
|
13
|
+
from
|
14
|
+
to
|
15
|
+
invoiced
|
16
|
+
invoiced_at_from
|
17
|
+
invoiced_at_to
|
18
|
+
updated_from
|
19
|
+
updated_to
|
20
|
+
billable
|
21
|
+
approved_at_from
|
22
|
+
approved_at_to
|
23
|
+
approved_by_ids
|
24
|
+
per_page
|
25
|
+
).freeze
|
26
|
+
VALIDATOR_MODULE = "FreckleIO::Validator::Entry".freeze
|
27
|
+
|
28
|
+
def all(params = {})
|
29
|
+
multiple_pages.get(ENTRY_ENDPOINT, params: entry_params(params))
|
30
|
+
end
|
31
|
+
|
32
|
+
# not implemented
|
33
|
+
#
|
34
|
+
# def show(id)
|
35
|
+
# single_page.get("#{ENTRY_ENDPOINT}/#{id}")
|
36
|
+
# end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def multiple_pages
|
41
|
+
@multiple_pages ||= Request::MultiplePages.new
|
42
|
+
end
|
43
|
+
|
44
|
+
def entry_params(params)
|
45
|
+
@entry_params = Params.new(
|
46
|
+
params,
|
47
|
+
ALLOWED_KEYS,
|
48
|
+
VALIDATOR_MODULE
|
49
|
+
).call
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module FreckleIO
|
2
|
+
module Client
|
3
|
+
class ProjectGroups
|
4
|
+
PROJECT_GROUPS_ENDPOINT = "/v2/project_groups".freeze
|
5
|
+
ALLOWED_KEYS = %i(name project_ids per_page).freeze
|
6
|
+
VALIDATOR_MODULE = "FreckleIO::Validator::ProjectGroup".freeze
|
7
|
+
|
8
|
+
def all(params = {})
|
9
|
+
multiple_pages.get(
|
10
|
+
PROJECT_GROUPS_ENDPOINT,
|
11
|
+
params: project_groups_params(params)
|
12
|
+
)
|
13
|
+
end
|
14
|
+
|
15
|
+
# not implemented
|
16
|
+
#
|
17
|
+
# def show(id)
|
18
|
+
# single_page.get("#{PROJECT_GROUPS_ENDPOINT}/#{id}")
|
19
|
+
# end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def multiple_pages
|
24
|
+
@multiple_pages ||= Request::MultiplePages.new
|
25
|
+
end
|
26
|
+
|
27
|
+
def project_groups_params(params)
|
28
|
+
@project_groups_params = Params.new(
|
29
|
+
params,
|
30
|
+
ALLOWED_KEYS,
|
31
|
+
VALIDATOR_MODULE
|
32
|
+
).call
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module FreckleIO
|
2
|
+
module Client
|
3
|
+
class Projects
|
4
|
+
PROJECT_ENDPOINT = "/v2/projects".freeze
|
5
|
+
ALLOWED_KEYS = %i(
|
6
|
+
name
|
7
|
+
project_group_ids
|
8
|
+
billing_increment
|
9
|
+
enabled
|
10
|
+
billable
|
11
|
+
per_page
|
12
|
+
).freeze
|
13
|
+
VALIDATOR_MODULE = "FreckleIO::Validator::Project".freeze
|
14
|
+
|
15
|
+
def all(params = {})
|
16
|
+
multiple_pages.get(PROJECT_ENDPOINT, params: project_params(params))
|
17
|
+
end
|
18
|
+
|
19
|
+
def show(id)
|
20
|
+
single_page.get("#{PROJECT_ENDPOINT}/#{id}")
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def multiple_pages
|
26
|
+
@multiple_pages ||= Request::MultiplePages.new
|
27
|
+
end
|
28
|
+
|
29
|
+
def single_page
|
30
|
+
@single_page ||= Request::SinglePage.new
|
31
|
+
end
|
32
|
+
|
33
|
+
def project_params(params)
|
34
|
+
@project_params = Params.new(
|
35
|
+
params,
|
36
|
+
ALLOWED_KEYS,
|
37
|
+
VALIDATOR_MODULE
|
38
|
+
).call
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module FreckleIO
|
2
|
+
module Client
|
3
|
+
class Tags
|
4
|
+
TAG_ENDPOINT = "/v2/tags".freeze
|
5
|
+
ALLOWED_KEYS = %i(name billable per_page).freeze
|
6
|
+
VALIDATOR_MODULE = "FreckleIO::Validator::Tag".freeze
|
7
|
+
|
8
|
+
def all(params = {})
|
9
|
+
multiple_pages.get(TAG_ENDPOINT, params: tag_params(params))
|
10
|
+
end
|
11
|
+
|
12
|
+
# not implemented
|
13
|
+
#
|
14
|
+
# def show(id)
|
15
|
+
# single_page.get("#{TAG_ENDPOINT}/#{id}")
|
16
|
+
# end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def multiple_pages
|
21
|
+
@multiple_pages ||= Request::MultiplePages.new
|
22
|
+
end
|
23
|
+
|
24
|
+
def tag_params(params)
|
25
|
+
@tag_params = Params.new(
|
26
|
+
params,
|
27
|
+
ALLOWED_KEYS,
|
28
|
+
VALIDATOR_MODULE
|
29
|
+
).call
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module FreckleIO
|
2
|
+
module Client
|
3
|
+
class Users
|
4
|
+
USER_ENDPOINT = "/v2/users".freeze
|
5
|
+
ALLOWED_KEYS = %i(name email role state per_page).freeze
|
6
|
+
VALIDATOR_MODULE = "FreckleIO::Validator::User".freeze
|
7
|
+
|
8
|
+
def all(params = {})
|
9
|
+
multiple_pages.get(USER_ENDPOINT, params: user_params(params))
|
10
|
+
end
|
11
|
+
|
12
|
+
def show(id)
|
13
|
+
single_page.get("#{USER_ENDPOINT}/#{id}")
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def multiple_pages
|
19
|
+
@multiple_pages ||= Request::MultiplePages.new
|
20
|
+
end
|
21
|
+
|
22
|
+
def single_page
|
23
|
+
@single_page ||= Request::SinglePage.new
|
24
|
+
end
|
25
|
+
|
26
|
+
def user_params(params)
|
27
|
+
@user_params = Params.new(
|
28
|
+
params,
|
29
|
+
ALLOWED_KEYS,
|
30
|
+
VALIDATOR_MODULE
|
31
|
+
).call
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|