easy-resources 0.7.5 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +60 -0
  3. data/README.md +1 -1
  4. data/lib/easy/resource.rb +10 -7
  5. data/lib/easy/resources.rb +7 -0
  6. data/lib/easy/resources/redmine/custom_field.rb +36 -0
  7. data/lib/easy/resources/redmine/easy_attendance.rb +12 -0
  8. data/lib/easy/resources/redmine/easy_contact.rb +0 -1
  9. data/lib/easy/resources/redmine/easy_crm_case.rb +0 -1
  10. data/lib/easy/resources/redmine/easy_server.rb +19 -1
  11. data/lib/easy/resources/redmine/easy_web_application.rb +14 -2
  12. data/lib/easy/resources/redmine/easy_web_application_activity.rb +0 -1
  13. data/lib/easy/resources/redmine/easy_web_hook.rb +0 -1
  14. data/lib/easy/resources/redmine/errors.rb +20 -0
  15. data/lib/easy/resources/redmine/issue.rb +0 -1
  16. data/lib/easy/resources/redmine/project.rb +0 -1
  17. data/lib/easy/resources/redmine/redmine_base.rb +13 -3
  18. data/lib/easy/resources/redmine/time_entry.rb +14 -0
  19. data/lib/easy/resources/redmine/user.rb +0 -1
  20. data/lib/easy/resources/spec_helper.rb +2 -2
  21. data/lib/easy/resources/version.rb +3 -1
  22. data/spec/easy_resources_spec.rb +0 -3
  23. data/spec/fixtures/files/custom_field/bool.xml +4 -0
  24. data/spec/fixtures/files/custom_field/date.xml +4 -0
  25. data/spec/fixtures/files/custom_field/datetime.xml +5 -0
  26. data/spec/fixtures/files/custom_field/float.xml +4 -0
  27. data/spec/fixtures/files/custom_field/int.xml +4 -0
  28. data/spec/fixtures/files/custom_field/string.xml +4 -0
  29. data/spec/fixtures/files/easy_attendance/show.xml +1 -0
  30. data/spec/fixtures/files/easy_web_application/show.xml +8 -0
  31. data/spec/fixtures/files/easy_web_hook/index.xml +26 -0
  32. data/spec/fixtures/files/easy_web_hook/show.xml +11 -0
  33. data/spec/fixtures/files/time_entry/invalid_update.xml +4 -0
  34. data/spec/fixtures/files/time_entry/show.xml +24 -0
  35. data/spec/models/easy-resources/redmine/custom_field_spec.rb +31 -0
  36. data/spec/models/easy-resources/redmine/easy_attendance_spec.rb +13 -0
  37. data/spec/models/easy-resources/redmine/easy_contact_spec.rb +0 -1
  38. data/spec/models/easy-resources/redmine/easy_crm_case_spec.rb +0 -2
  39. data/spec/models/easy-resources/redmine/easy_server_spec.rb +15 -0
  40. data/spec/models/easy-resources/redmine/easy_web_application_activity_spec.rb +0 -1
  41. data/spec/models/easy-resources/redmine/easy_web_application_spec.rb +13 -3
  42. data/spec/models/easy-resources/redmine/easy_web_hook_spec.rb +9 -0
  43. data/spec/models/easy-resources/redmine/errors_spec.rb +14 -0
  44. data/spec/models/easy-resources/redmine/issue_spec.rb +0 -2
  45. data/spec/models/easy-resources/redmine/project_spec.rb +0 -2
  46. data/spec/models/easy-resources/redmine/redmine_base_spec.rb +0 -2
  47. data/spec/models/easy-resources/redmine/time_entry_spec.rb +13 -0
  48. data/spec/models/easy-resources/redmine/user_spec.rb +0 -2
  49. data/spec/models/easy-resources/resource_spec.rb +2 -2
  50. data/spec/spec_helper.rb +4 -4
  51. data/spec/support/active_resource.rb +3 -3
  52. data/spec/support/redmine_active_resource.rb +3 -3
  53. metadata +91 -35
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5bcec7bc4db468222969c7a9b38799d9f57b708cbdd7c200944e83661eeb50b0
4
- data.tar.gz: bc31ac728c4126e1d6cdbacbc425dd260c0449d105e38042cc4603d4c764f866
3
+ metadata.gz: 92eda89013e1a2ec9408d3bdcf01887646a4873974e1e0ff5688ce588872e3d6
4
+ data.tar.gz: 8ff8f00de0fe5691eba2b604413a21592d6feb57ea7c8818233319c843369412
5
5
  SHA512:
6
- metadata.gz: ad330da90a52c3069baadd8217df2cdf7e9b10d31ad1e33c94f3253bae65f3a2710d8f9c03910b7f5642cb56dccfe8ba87db2aa4a052bb44df6b24768676b0f8
7
- data.tar.gz: db3332dc3a1c93f72272d316a4e8f7261e417076d61f16f46bdef2939e01648db88a69a8c3510de0a095206571a587e7adb3510ed12daa65f824b32b3d344731
6
+ metadata.gz: 9d6e022176f9f63387bf93f72d335e6c7cfe8fd3859d7d6fe41cbb10fcf9b650fa8342c98ce7eaf6366c4e0991fd5e24eaf10356e35477323c1bfa39ff907210
7
+ data.tar.gz: e3ca719a309508ee046b4a98aaf0a15ece961bf2c08bf0f1c1ddb5b5664f190b07f75964bd5bceea98b35d2c78a40ecf3e7af0d4f93ae50c4ba3c45c898b9c59
data/CHANGELOG.md ADDED
@@ -0,0 +1,60 @@
1
+ # Changelog
2
+ All notable changes to this project will be documented in this file.
3
+
4
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
+
7
+ ## [Unreleased]
8
+ ## [0.9.0] - 2021-06-08
9
+ ### Added
10
+ - CustomField resource
11
+ - rubocop linter
12
+ - improve gemspec metadata
13
+ ### Changed
14
+ - dummy upgrade to rails 6
15
+ - update dev dependencies
16
+
17
+ ## [0.8.2] - 2021-03-05
18
+ ### Added
19
+ - ruby 3 compatibility
20
+
21
+ ## [0.8.1] - 2020-06-08
22
+ ### Fixed
23
+ - Retrieve (Easy)Redmine total entities from response if headers missing
24
+ - Validation error messages parser from XML
25
+
26
+ ## [0.8.0] - 2020-04-28
27
+ ### Added
28
+ - TimeEntry
29
+ - EasyAttendance
30
+ ## [0.7.5] - 2020-03-06
31
+ ### Added
32
+ - EasyServer `status` alias for `server_status`
33
+ ## [0.7.5] - 2020-01-17
34
+ ### Added
35
+ - aasm_event into EasyWebApplication scheme
36
+ - notes into EasyWebApplication scheme
37
+ ## [0.7.4] - 2019-09-02
38
+ ### Added
39
+ - Easy Web Application add belongs_to Issue
40
+ ## [0.7.2] - 2019-08-29
41
+ ### Added
42
+ - Easy Web Hook model
43
+ ## [0.7.1] - 2019-07-11
44
+ ### Added
45
+ - configuration from Oauth2 token
46
+ ### Fixed
47
+ - api_key is changed to class_attribute
48
+ ## [0.6.3] - 2019-07-08
49
+ ### Fixed
50
+ - cached headers
51
+ ## [0.6.2] - 2019-05-14
52
+ ### Added
53
+ - alias url in server resource
54
+ ## [0.6.1] - 2019-04-03
55
+ ### Added
56
+ - this file
57
+ - User resource in Redmine
58
+ - 100% code coverage :)
59
+ ### Changed
60
+ - README
data/README.md CHANGED
@@ -13,7 +13,7 @@ Allow communicate via API with (Easy)Redmine applications.
13
13
  Add this line to your application's Gemfile:
14
14
 
15
15
  ```ruby
16
- gem 'easy_resources'
16
+ gem 'easy-resources'
17
17
  ```
18
18
 
19
19
  And then execute:
data/lib/easy/resource.rb CHANGED
@@ -2,26 +2,29 @@ module Easy
2
2
  class Resource < ActiveResource::Base
3
3
 
4
4
  def self.configure(conf)
5
- if conf.is_a?(::Hash)
5
+ case conf
6
+ when ::Hash
6
7
  if conf[:url].present? && conf[:token].present?
7
8
  configure_bearer(conf[:url], conf[:token])
8
9
  elsif conf[:url].present?
9
10
  self.site = conf[:url]
10
11
  end
11
- elsif conf.is_a?(::OAuth2::AccessToken)
12
+ when ::OAuth2::AccessToken
12
13
  configure_bearer(conf.client.site, conf.token)
14
+ else
15
+ # do nothing, unknown configuration
13
16
  end
14
17
  end
15
18
 
16
19
  def self.configure_bearer(url, token)
17
- self.site = url
18
- self.connection.auth_type = :bearer
19
- self.connection.bearer_token = token
20
+ self.site = url
21
+ connection.auth_type = :bearer
22
+ connection.bearer_token = token
20
23
  end
21
24
 
22
25
  def becomes(entity_class)
23
- model = entity_class.new
24
- model.attributes = self.attributes
26
+ model = entity_class.new
27
+ model.attributes = attributes
25
28
  model
26
29
  end
27
30
 
@@ -4,12 +4,17 @@ require "activeresource-response"
4
4
  require "easy/resources/railtie"
5
5
 
6
6
  module Easy
7
+
7
8
  autoload :Resource, "easy/resource"
8
9
 
9
10
  module Resources
10
11
  module Redmine
11
12
 
13
+ autoload :Errors, "easy/resources/redmine/errors"
14
+
15
+ autoload :CustomField, "easy/resources/redmine/custom_field"
12
16
  autoload :RedmineBase, "easy/resources/redmine/redmine_base"
17
+ autoload :EasyAttendance, "easy/resources/redmine/easy_attendance"
13
18
  autoload :EasyContact, "easy/resources/redmine/easy_contact"
14
19
  autoload :EasyCrmCase, "easy/resources/redmine/easy_crm_case"
15
20
  autoload :EasyServer, "easy/resources/redmine/easy_server"
@@ -19,7 +24,9 @@ module Easy
19
24
  autoload :Issue, "easy/resources/redmine/issue"
20
25
  autoload :Project, "easy/resources/redmine/project"
21
26
  autoload :User, "easy/resources/redmine/user"
27
+ autoload :TimeEntry, "easy/resources/redmine/time_entry"
22
28
 
23
29
  end
24
30
  end
31
+
25
32
  end
@@ -0,0 +1,36 @@
1
+ module Easy
2
+ module Resources
3
+ module Redmine
4
+ class CustomField < RedmineBase
5
+ self.element_name = 'custom_field'
6
+
7
+ self.schema = {
8
+ id: :integer,
9
+ name: :string,
10
+ internal_name: :string,
11
+ value: :string,
12
+ field_format: :string,
13
+ }
14
+
15
+ # @return formatted value based on **field_format**
16
+ def cast_value
17
+ case field_format
18
+ when "bool"
19
+ value.to_s =~ /1|true/i ? true : false
20
+ when "float", "amount"
21
+ value.to_f
22
+ when "int"
23
+ value.to_i
24
+ when "date"
25
+ Date.parse value
26
+ when "datetime"
27
+ DateTime.parse value
28
+ else
29
+ value
30
+ end
31
+ end
32
+
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,12 @@
1
+ module Easy
2
+ module Resources
3
+ module Redmine
4
+ class EasyAttendance < RedmineBase
5
+ self.element_name = 'easy_attendance'
6
+
7
+ belongs_to :user, class_name: 'Easy::Resources::Redmine::User'
8
+
9
+ end
10
+ end
11
+ end
12
+ end
@@ -2,7 +2,6 @@ module Easy
2
2
  module Resources
3
3
  module Redmine
4
4
  class EasyContact < RedmineBase
5
-
6
5
  self.element_name = 'easy_contact'
7
6
 
8
7
  def name
@@ -2,7 +2,6 @@ module Easy
2
2
  module Resources
3
3
  module Redmine
4
4
  class EasyCrmCase < RedmineBase
5
-
6
5
  self.element_name = 'easy_crm_case'
7
6
 
8
7
  belongs_to :project, class_name: 'Easy::Resources::Redmine::Project'
@@ -2,15 +2,33 @@ module Easy
2
2
  module Resources
3
3
  module Redmine
4
4
  class EasyServer < RedmineBase
5
-
6
5
  self.element_name = 'easy_server'
7
6
 
8
7
  has_many :easy_web_applications, class_name: 'Easy::Resources::Redmine::EasyWebApplication'
9
8
 
9
+ self.schema = {
10
+ host_name: :string,
11
+ server_type: :string,
12
+ server_status: :string
13
+ }
14
+
15
+ # Alias for +host_name+ attribute
16
+ # @return [String]
10
17
  def url
11
18
  host_name
12
19
  end
13
20
 
21
+ # Alias for +server_status+ attribute
22
+ # @return [String]
23
+ def status
24
+ server_status
25
+ end
26
+
27
+ # @param [String] name of status
28
+ def status=(name)
29
+ self.server_status = name
30
+ end
31
+
14
32
  end
15
33
  end
16
34
  end
@@ -2,7 +2,6 @@ module Easy
2
2
  module Resources
3
3
  module Redmine
4
4
  class EasyWebApplication < RedmineBase
5
-
6
5
  self.element_name = 'easy_web_application'
7
6
 
8
7
  self.schema = {
@@ -13,7 +12,7 @@ module Easy
13
12
  easy_crm_case_id: :integer,
14
13
  easy_contact_id: :integer,
15
14
  aasm_event: :string,
16
- notes: :string
15
+ notes: :string,
17
16
  }
18
17
 
19
18
  belongs_to :easy_contact, class_name: 'Easy::Resources::Redmine::EasyContact'
@@ -21,6 +20,7 @@ module Easy
21
20
  belongs_to :easy_server, class_name: 'Easy::Resources::Redmine::EasyServer'
22
21
  belongs_to :issue, class_name: 'Easy::Resources::Redmine::Issue'
23
22
 
23
+ has_many :custom_fields, class_name: 'Easy::Resources::Redmine::CustomField'
24
24
  has_many :easy_web_application_activities, class_name: 'Easy::Resources::Redmine::EasyWebApplicationActivity'
25
25
  has_one :easy_web_application_activity, class_name: 'Easy::Resources::Redmine::EasyWebApplicationActivity'
26
26
 
@@ -28,6 +28,18 @@ module Easy
28
28
  url
29
29
  end
30
30
 
31
+ # @!group ESko specific custom_fields
32
+
33
+ # @return [Boolean,nil]
34
+ def application_moves_on_request?
35
+ custom_fields.find { |cf| cf.internal_name == "application_move_on_request" }&.cast_value
36
+ end
37
+
38
+ # @return [Boolean,nil]
39
+ def application_updates_on_request?
40
+ custom_fields.find { |cf| cf.internal_name == "application_updates_on_request" }&.cast_value
41
+ end
42
+
31
43
  end
32
44
  end
33
45
  end
@@ -2,7 +2,6 @@ module Easy
2
2
  module Resources
3
3
  module Redmine
4
4
  class EasyWebApplicationActivity < RedmineBase
5
-
6
5
  self.element_name = 'easy_web_application_activity'
7
6
 
8
7
  belongs_to :easy_web_application, class_name: 'Easy::Resources::Redmine::EasyWebApplication'
@@ -2,7 +2,6 @@ module Easy
2
2
  module Resources
3
3
  module Redmine
4
4
  class EasyWebHook < RedmineBase
5
-
6
5
  self.element_name = 'easy_web_hook'
7
6
 
8
7
  end
@@ -0,0 +1,20 @@
1
+ module Easy
2
+ module Resources
3
+ module Redmine
4
+ class Errors < ::ActiveResource::Errors
5
+
6
+ # Redmine in XML responses specify type="array" on Errors
7
+ # It cause that `Hash.from_xml` already parsed errors as a Array
8
+ def from_xml(xml, save_cache = false)
9
+ array = begin
10
+ Array.wrap(Hash.from_xml(xml)["errors"])
11
+ rescue StandardError
12
+ []
13
+ end
14
+ from_array array, save_cache
15
+ end
16
+
17
+ end
18
+ end
19
+ end
20
+ end
@@ -2,7 +2,6 @@ module Easy
2
2
  module Resources
3
3
  module Redmine
4
4
  class Issue < RedmineBase
5
-
6
5
  self.element_name = 'issue'
7
6
 
8
7
  belongs_to :project, class_name: 'Easy::Resources::Redmine::Project'
@@ -2,7 +2,6 @@ module Easy
2
2
  module Resources
3
3
  module Redmine
4
4
  class Project < RedmineBase
5
-
6
5
  self.element_name = 'project'
7
6
 
8
7
  end
@@ -2,10 +2,9 @@ module Easy
2
2
  module Resources
3
3
  module Redmine
4
4
  class RedmineBase < ::Easy::Resource
5
-
6
5
  self.include_root_in_json = true
7
6
  self.format = :xml
8
- self.add_response_method :http_response
7
+ add_response_method :http_response
9
8
 
10
9
  class_attribute :api_key
11
10
 
@@ -26,10 +25,16 @@ module Easy
26
25
  h
27
26
  end
28
27
 
28
+ # Parse value of TOTAL amount of entities from headers or response
29
+ # @return [Integer]
30
+ def retrieve_total(response)
31
+ (response['Total'] || response.body[/total_count[:="]+(\d+)/] && Regexp.last_match(1)).to_i
32
+ end
33
+
29
34
  def get_all(**params, &block)
30
35
  records = results = all(params: params)
31
36
  response = results.http_response
32
- total = response['Total'].to_i
37
+ total = retrieve_total(response)
33
38
  current_page = 1
34
39
 
35
40
  while records.any?
@@ -46,6 +51,11 @@ module Easy
46
51
  end
47
52
 
48
53
  end
54
+
55
+ def errors
56
+ @errors ||= Errors.new(self)
57
+ end
58
+
49
59
  end
50
60
  end
51
61
  end
@@ -0,0 +1,14 @@
1
+ module Easy
2
+ module Resources
3
+ module Redmine
4
+ class TimeEntry < RedmineBase
5
+ self.element_name = 'time_entry'
6
+
7
+ belongs_to :project, class_name: 'Easy::Resources::Redmine::Project'
8
+ belongs_to :issue, class_name: 'Easy::Resources::Redmine::Issue'
9
+ belongs_to :user, class_name: 'Easy::Resources::Redmine::User'
10
+
11
+ end
12
+ end
13
+ end
14
+ end
@@ -2,7 +2,6 @@ module Easy
2
2
  module Resources
3
3
  module Redmine
4
4
  class User < RedmineBase
5
-
6
5
  self.element_name = 'user'
7
6
 
8
7
  def name
@@ -1,2 +1,2 @@
1
- x = File.expand_path('../../../../', __FILE__)
2
- Dir["#{x}/spec/support/**/*.rb"].sort.each { |f| require f }
1
+ gem_dir = File.expand_path('../../..', __dir__)
2
+ Dir["#{gem_dir}/spec/support/**/*.rb"].sort.each { |f| require f }
@@ -1,5 +1,7 @@
1
1
  module Easy
2
2
  module Resources
3
- VERSION = '0.7.5'
3
+
4
+ VERSION = '0.9.0'
5
+
4
6
  end
5
7
  end
@@ -6,7 +6,6 @@ RSpec.describe Easy::Resources do
6
6
  end
7
7
 
8
8
  describe '.configure' do
9
-
10
9
  context "Easy::Resources::Redmine::RedmineBase" do
11
10
  it "Easy::Resources::Redmine::RedmineBase" do
12
11
  expect(Easy::Resources::Redmine::RedmineBase).to receive(:api_key=).with("xx1")
@@ -14,7 +13,5 @@ RSpec.describe Easy::Resources do
14
13
  Easy::Resources::Redmine::RedmineBase.configure api_key: "xx1", url: "https://test.dummy"
15
14
  end
16
15
  end
17
-
18
16
  end
19
-
20
17
  end
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <custom_field id="1" name="Move on-request" internal_name="application_move_on_request" field_format="bool">
3
+ <value>1</value>
4
+ </custom_field>
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <custom_field id="1" name="Next action" field_format="date">
3
+ <value>2020-06-24</value>
4
+ </custom_field>
@@ -0,0 +1,5 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <custom_field id="1" name="Next action" field_format="datetime">
3
+ <value>2020-06-24 22:00:00</value>
4
+ <local_datetime>2020-06-25T00:00:00+02:00</local_datetime>
5
+ </custom_field>
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <custom_field id="1" name="Next action" field_format="float">
3
+ <value>24</value>
4
+ </custom_field>
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <custom_field id="1" name="Next action" field_format="int">
3
+ <value></value>
4
+ </custom_field>
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <custom_field id="1" name="Next action" field_format="text">
3
+ <value>word</value>
4
+ </custom_field>
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="UTF-8"?><easy_attendance><id>509</id><user id="17" name="Steve Helpdesk Dispatcher"/><arrival>2020-02-05T07:45:00+01:00</arrival><departure>2020-04-28T22:30:38+02:00</departure><easy_attendance_activity id="1" name="Office"/><locked>false</locked><arrival_user_ip>66.249.79.144</arrival_user_ip><departure_user_ip></departure_user_ip><range/><created_at>2020-02-05T07:32:19+01:00</created_at><updated_at>2020-02-05T07:32:19+01:00</updated_at><description/><need_approve>false</need_approve><limit_exceeded>false</limit_exceeded><hours>0.0</hours><easy_external_id/></easy_attendance>
@@ -11,6 +11,14 @@
11
11
  <author id="14" name="Anonymní"/>
12
12
  <internal_user_limit>0</internal_user_limit>
13
13
  <git_repository type="string">git@git.easy.cz:package.git</git_repository>
14
+ <custom_fields type="array">
15
+ <custom_field id="695" name="Move on-request" internal_name="application_move_on_request" field_format="bool">
16
+ <value>1</value>
17
+ </custom_field>
18
+ <custom_field id="463" name="Updates on-request" internal_name="application_updates_on_request" field_format="bool">
19
+ <value>0</value>
20
+ </custom_field>
21
+ </custom_fields>
14
22
  <created_at>2018-03-22T09:10:47Z</created_at>
15
23
  <updated_at>2018-05-24T10:55:28Z</updated_at>
16
24
  </easy_web_application>
@@ -0,0 +1,26 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <easy_web_hooks total_count="12" offset="0" limit="25" type="array">
3
+ <easy_web_hook>
4
+ <id>1</id>
5
+ <url>https://hooks.integromat.com/super-secret-hash</url>
6
+ <status>inactive</status>
7
+ <entity_type>Issue</entity_type>
8
+ <action>create</action>
9
+ <author id="1" name="Manager"/>
10
+ <api_includes>[]</api_includes>
11
+ <created_at>2017-08-18T11:56:53Z</created_at>
12
+ <updated_at>2019-08-29T07:44:16Z</updated_at>
13
+ </easy_web_hook>
14
+ <easy_web_hook>
15
+ <id>3</id>
16
+ <url>https://hooks.zapier.com/hooks/catch/hookID/hookSecret/</url>
17
+ <status>inactive</status>
18
+ <entity_type>Project</entity_type>
19
+ <action>destroy</action>
20
+ <author id="5" name="Admin"/>
21
+ <project id="7" name="Reporting"/>
22
+ <api_includes>[issue_categories]</api_includes>
23
+ <created_at>2019-06-19T11:41:22Z</created_at>
24
+ <updated_at>2019-06-19T11:41:22Z</updated_at>
25
+ </easy_web_hook>
26
+ </easy_web_hooks>
@@ -0,0 +1,11 @@
1
+ <easy_web_hook>
2
+ <id>1</id>
3
+ <url>https://hooks.integromat.com/super-secret-hash</url>
4
+ <status>inactive</status>
5
+ <entity_type>Issue</entity_type>
6
+ <action>create</action>
7
+ <author id="1" name="Manager"/>
8
+ <api_includes>[]</api_includes>
9
+ <created_at>2017-08-18T11:56:53Z</created_at>
10
+ <updated_at>2019-08-29T07:44:16Z</updated_at>
11
+ </easy_web_hook>
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <errors type="array">
3
+ <error>Projekt je neplatné</error>
4
+ </errors>
@@ -0,0 +1,24 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <time_entry>
3
+ <id>509</id>
4
+ <project id="110" name="Partner Program Implementation"/>
5
+ <user id="5" name="Manager Manager"/>
6
+ <activity id="1" name="Work"/>
7
+ <hours>4.0</hours>
8
+ <comments></comments>
9
+ <spent_on>2020-03-04</spent_on>
10
+ <easy_range_from/>
11
+ <easy_range_to/>
12
+ <easy_external_id/>
13
+ <entity_id>110</entity_id>
14
+ <entity_type>Project</entity_type>
15
+ <created_on>2020-03-04T15:03:56Z</created_on>
16
+ <updated_on>2020-03-04T15:03:56Z</updated_on>
17
+ <easy_is_billable>true</easy_is_billable>
18
+ <easy_billed>false</easy_billed>
19
+ <custom_fields type="array">
20
+ <custom_field id="105" name="test" internal_name="" field_format="list">
21
+ <value/>
22
+ </custom_field>
23
+ </custom_fields>
24
+ </time_entry>
@@ -0,0 +1,31 @@
1
+ RSpec.describe Easy::Resources::Redmine::CustomField do
2
+ include_context "redmine active resource shares" do
3
+ let(:entity_name) { 'custom_field' }
4
+ end
5
+
6
+ let(:entity) { find_entity }
7
+
8
+ describe "#cast_value" do
9
+ subject { entity.cast_value }
10
+ context "with datetime" do
11
+ let(:entity) { find_entity "datetime" }
12
+ it { is_expected.to be_a DateTime }
13
+ end
14
+ context "with date" do
15
+ let(:entity) { find_entity "date" }
16
+ it { is_expected.to be_a Date }
17
+ end
18
+ context "with int" do
19
+ let(:entity) { find_entity "int" }
20
+ it { is_expected.to eq 0 }
21
+ end
22
+ context "with float" do
23
+ let(:entity) { find_entity "float" }
24
+ it { is_expected.to eq 24.0 }
25
+ end
26
+ context "with text" do
27
+ let(:entity) { find_entity "string" }
28
+ it { is_expected.not_to be_blank }
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,13 @@
1
+ RSpec.describe Easy::Resources::Redmine::EasyAttendance do
2
+ include_context "redmine active resource shares" do
3
+ let(:entity_name) { 'easy_attendance' }
4
+ end
5
+
6
+ it 'get' do
7
+ expect(find_entity.arrival).not_to be_empty
8
+ end
9
+
10
+ it 'has user' do
11
+ expect(find_entity.user).to be_a Easy::Resources::Redmine::User
12
+ end
13
+ end
@@ -22,5 +22,4 @@ RSpec.describe Easy::Resources::Redmine::EasyContact do
22
22
  # it '#demo?' do
23
23
  # expect(find_entity.demo?).to be_falsey
24
24
  # end
25
-
26
25
  end
@@ -3,7 +3,6 @@ RSpec.describe Easy::Resources::Redmine::EasyCrmCase do
3
3
  let(:entity_name) { 'easy_crm_case' }
4
4
  end
5
5
 
6
-
7
6
  it 'get crm case' do
8
7
  expect(find_entity.name).not_to be_empty
9
8
  end
@@ -15,5 +14,4 @@ RSpec.describe Easy::Resources::Redmine::EasyCrmCase do
15
14
  it 'crm case has customer' do
16
15
  expect(find_entity.customer).to be_a Easy::Resources::Redmine::EasyContact
17
16
  end
18
-
19
17
  end
@@ -0,0 +1,15 @@
1
+ RSpec.describe Easy::Resources::Redmine::EasyServer do
2
+ include_context "redmine active resource shares" do
3
+ let(:entity_name) { 'easy_server' }
4
+ end
5
+
6
+ it "#status" do
7
+ expect(find_entity.status).to eq "running"
8
+ end
9
+
10
+ it "#status=" do
11
+ subject = find_entity
12
+ subject.status = "stopped"
13
+ expect(subject.server_status).to eq "stopped"
14
+ end
15
+ end
@@ -2,5 +2,4 @@ RSpec.describe Easy::Resources::Redmine::EasyWebApplicationActivity do
2
2
  include_context "redmine active resource shares" do
3
3
  let(:entity_name) { 'easy_web_application_activity' }
4
4
  end
5
-
6
5
  end
@@ -16,7 +16,7 @@ RSpec.describe Easy::Resources::Redmine::EasyWebApplication do
16
16
  end
17
17
 
18
18
  it 'get ewa' do
19
- expect(find_entity.attributes).to include *%w[id url git_repository version application_type created_at]
19
+ expect(find_entity.attributes).to include(*%w[id url git_repository version application_type created_at])
20
20
  expect(find_entity.git_branch).to be_nil
21
21
  expect(find_entity.name).not_to be_empty
22
22
  end
@@ -29,7 +29,6 @@ RSpec.describe Easy::Resources::Redmine::EasyWebApplication do
29
29
  include_examples "optional reference", :easy_contact
30
30
 
31
31
  describe ".get_all" do
32
-
33
32
  it "with block" do
34
33
  stub_xml(path: "easy_web_applications.xml", source_file: "index", response_headers: { 'Total' => '4' })
35
34
  stub_xml(path: "easy_web_applications.xml?page=2", source_file: "index")
@@ -53,7 +52,18 @@ RSpec.describe Easy::Resources::Redmine::EasyWebApplication do
53
52
  subject.easy_web_application_activities_attributes = { activities_count_in_day: 13 }
54
53
  subject.save
55
54
  end
56
-
57
55
  end
58
56
 
57
+ describe "application_moves_on_request?" do
58
+ subject { find_entity.application_moves_on_request? }
59
+ it "should be true" do
60
+ is_expected.to be_truthy
61
+ end
62
+ end
63
+ describe "application_updates_on_request?" do
64
+ subject { find_entity.application_updates_on_request? }
65
+ it "should be false" do
66
+ is_expected.to be_falsey
67
+ end
68
+ end
59
69
  end
@@ -0,0 +1,9 @@
1
+ RSpec.describe Easy::Resources::Redmine::EasyWebHook do
2
+ include_context "redmine active resource shares" do
3
+ let(:entity_name) { 'easy_web_hook' }
4
+ end
5
+
6
+ it "#status" do
7
+ expect(find_entity.status).to eq "inactive"
8
+ end
9
+ end
@@ -0,0 +1,14 @@
1
+ RSpec.describe Easy::Resources::Redmine::Errors do
2
+ include_context "redmine active resource shares" do
3
+ let(:entity_name) { 'time_entry' }
4
+ end
5
+
6
+ it 'invalid request' do
7
+ stub_xml source_file: "invalid_update", path: "#{entity_name.pluralize}.xml", method: :post, status: 422, request_body: { hours: 8.0, user_id: 1 }.to_xml(root: "time_entry")
8
+
9
+ time_entry = Easy::Resources::Redmine::TimeEntry.new hours: 8.0, user_id: 1
10
+ expect(time_entry.save).to eq false
11
+ expect(time_entry.errors).to be_a described_class
12
+ expect(time_entry.errors.full_messages).to eq ["Projekt je neplatné"]
13
+ end
14
+ end
@@ -3,7 +3,6 @@ RSpec.describe Easy::Resources::Redmine::Issue do
3
3
  let(:entity_name) { 'issue' }
4
4
  end
5
5
 
6
-
7
6
  it 'get issue' do
8
7
  expect(find_entity.subject).not_to be_empty
9
8
  end
@@ -11,5 +10,4 @@ RSpec.describe Easy::Resources::Redmine::Issue do
11
10
  it 'issue has project' do
12
11
  expect(find_entity.project).to be_a Easy::Resources::Redmine::Project
13
12
  end
14
-
15
13
  end
@@ -3,9 +3,7 @@ RSpec.describe Easy::Resources::Redmine::Project do
3
3
  let(:entity_name) { 'project' }
4
4
  end
5
5
 
6
-
7
6
  it 'get project' do
8
7
  expect(find_entity.name).not_to be_empty
9
8
  end
10
-
11
9
  end
@@ -1,5 +1,4 @@
1
1
  RSpec.describe Easy::Resources::Redmine::RedmineBase do
2
-
3
2
  it 'no configuration specify' do
4
3
  described_class.site = nil
5
4
  described_class.api_key = nil
@@ -15,5 +14,4 @@ RSpec.describe Easy::Resources::Redmine::RedmineBase do
15
14
  expect(described_class.headers).to include "X-Redmine-API-Key" => "xxxx"
16
15
  end
17
16
  end
18
-
19
17
  end
@@ -0,0 +1,13 @@
1
+ RSpec.describe Easy::Resources::Redmine::TimeEntry do
2
+ include_context "redmine active resource shares" do
3
+ let(:entity_name) { 'time_entry' }
4
+ end
5
+
6
+ it 'get' do
7
+ expect(find_entity.spent_on).not_to be_empty
8
+ end
9
+
10
+ it 'has project' do
11
+ expect(find_entity.project).to be_a Easy::Resources::Redmine::Project
12
+ end
13
+ end
@@ -3,7 +3,6 @@ RSpec.describe Easy::Resources::Redmine::User do
3
3
  let(:entity_name) { 'user' }
4
4
  end
5
5
 
6
-
7
6
  it 'get user' do
8
7
  expect(find_entity.mail).not_to be_empty
9
8
  end
@@ -15,5 +14,4 @@ RSpec.describe Easy::Resources::Redmine::User do
15
14
  # it 'issue has project' do
16
15
  # expect(find_entity.project).to be_a Easy::Resources::Redmine::Project
17
16
  # end
18
-
19
17
  end
@@ -1,6 +1,7 @@
1
1
  class DummyResource < Easy::Resource
2
2
  self.site = "easyredmine.com"
3
3
  self.format = :json
4
+
4
5
  end
5
6
  RSpec.describe Easy::Resource do
6
7
  subject { DummyResource.new({ id: 1 }, true) }
@@ -22,7 +23,6 @@ RSpec.describe Easy::Resource do
22
23
  expect(subject).to receive(:patch).with nil, {}, value.to_xml(root: "dummy-resource")
23
24
  subject.update_column :att, 1
24
25
  end
25
-
26
26
  end
27
27
 
28
28
  describe "#patch" do
@@ -39,4 +39,4 @@ RSpec.describe Easy::Resource do
39
39
  subject.patch "deployed"
40
40
  end
41
41
  end
42
- end
42
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,8 +1,10 @@
1
1
  ENV["RAILS_ENV"] = "test"
2
2
  require "simplecov"
3
3
  SimpleCov.start 'rails' do
4
- add_filter 'lib/easy/resources/spec_helper'
5
- add_filter 'lib/easy/resources/version'
4
+ add_filter '/bin'
5
+ add_filter '/lib/easy/resources/spec_helper'
6
+ add_filter '/lib/easy/resources/version'
7
+ add_filter '/vendor'
6
8
  end
7
9
 
8
10
  require "bundler/setup"
@@ -16,7 +18,6 @@ require "active_resource_response/http_mock"
16
18
  Dir["./spec/support/**/*.rb"].sort.each { |f| require f }
17
19
 
18
20
  RSpec.configure do |config|
19
-
20
21
  # Disable RSpec exposing methods globally on `Module` and `main`
21
22
  config.disable_monkey_patching!
22
23
 
@@ -24,4 +25,3 @@ RSpec.configure do |config|
24
25
  c.syntax = :expect
25
26
  end
26
27
  end
27
-
@@ -2,7 +2,7 @@ RSpec.shared_context "active resource shares", shared_context: :metadata do
2
2
  let(:site) { 'https://test.dummy' }
3
3
  let(:api_key) { 'secret' }
4
4
 
5
- let(:entity_name) {}
5
+ let(:entity_name) { "" }
6
6
 
7
7
  before(:each) do
8
8
  ActiveResource::HttpMock.reset!
@@ -17,13 +17,13 @@ RSpec.shared_context "active resource shares", shared_context: :metadata do
17
17
  # @param [Hash] options @see #stub_easy_resource_request
18
18
  def stub_json(**options)
19
19
  options[:format] = "json"
20
- stub_resource_request(options)
20
+ stub_resource_request(**options)
21
21
  end
22
22
 
23
23
  # @param [Hash] options @see #stub_easy_resource_request
24
24
  def stub_xml(**options)
25
25
  options[:format] = "xml"
26
- stub_resource_request(options)
26
+ stub_resource_request(**options)
27
27
  end
28
28
 
29
29
  # @param [String] format XML or JSON
@@ -9,13 +9,13 @@ RSpec.shared_context "redmine active resource shares", shared_context: :metadata
9
9
  # @param [Hash] options @see #stub_easy_resource_request
10
10
  def stub_json(**options)
11
11
  options[:format] = "json"
12
- stub_easy_resource_request(options)
12
+ stub_easy_resource_request(**options)
13
13
  end
14
14
 
15
15
  # @param [Hash] options @see #stub_easy_resource_request
16
16
  def stub_xml(**options)
17
17
  options[:format] = "xml"
18
- stub_easy_resource_request(options)
18
+ stub_easy_resource_request(**options)
19
19
  end
20
20
 
21
21
  def stub_easy_resource_request(format:, path:, **options)
@@ -25,4 +25,4 @@ RSpec.shared_context "redmine active resource shares", shared_context: :metadata
25
25
  options[:path] = path
26
26
  stub_resource_request options
27
27
  end
28
- end
28
+ end
metadata CHANGED
@@ -1,57 +1,58 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: easy-resources
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.5
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
- - petr
8
- autorequire:
7
+ - Petr
8
+ - Lukáš
9
+ autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2020-01-17 00:00:00.000000000 Z
12
+ date: 2021-06-08 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
- name: railties
15
+ name: activeresource
15
16
  requirement: !ruby/object:Gem::Requirement
16
17
  requirements:
17
- - - ">="
18
+ - - "~>"
18
19
  - !ruby/object:Gem::Version
19
- version: '0'
20
+ version: '5.1'
20
21
  type: :runtime
21
22
  prerelease: false
22
23
  version_requirements: !ruby/object:Gem::Requirement
23
24
  requirements:
24
- - - ">="
25
+ - - "~>"
25
26
  - !ruby/object:Gem::Version
26
- version: '0'
27
+ version: '5.1'
27
28
  - !ruby/object:Gem::Dependency
28
- name: activeresource
29
+ name: activeresource-response
29
30
  requirement: !ruby/object:Gem::Requirement
30
31
  requirements:
31
32
  - - "~>"
32
33
  - !ruby/object:Gem::Version
33
- version: '5.0'
34
+ version: '1.2'
34
35
  type: :runtime
35
36
  prerelease: false
36
37
  version_requirements: !ruby/object:Gem::Requirement
37
38
  requirements:
38
39
  - - "~>"
39
40
  - !ruby/object:Gem::Version
40
- version: '5.0'
41
+ version: '1.2'
41
42
  - !ruby/object:Gem::Dependency
42
- name: activeresource-response
43
+ name: railties
43
44
  requirement: !ruby/object:Gem::Requirement
44
45
  requirements:
45
- - - "~>"
46
+ - - ">="
46
47
  - !ruby/object:Gem::Version
47
- version: '1.2'
48
+ version: '0'
48
49
  type: :runtime
49
50
  prerelease: false
50
51
  version_requirements: !ruby/object:Gem::Requirement
51
52
  requirements:
52
- - - "~>"
53
+ - - ">="
53
54
  - !ruby/object:Gem::Version
54
- version: '1.2'
55
+ version: '0'
55
56
  - !ruby/object:Gem::Dependency
56
57
  name: easy-configuration
57
58
  requirement: !ruby/object:Gem::Requirement
@@ -66,88 +67,116 @@ dependencies:
66
67
  - - ">="
67
68
  - !ruby/object:Gem::Version
68
69
  version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: easy_style
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
69
84
  - !ruby/object:Gem::Dependency
70
85
  name: rails
71
86
  requirement: !ruby/object:Gem::Requirement
72
87
  requirements:
73
88
  - - "~>"
74
89
  - !ruby/object:Gem::Version
75
- version: '5.2'
90
+ version: '6.1'
76
91
  type: :development
77
92
  prerelease: false
78
93
  version_requirements: !ruby/object:Gem::Requirement
79
94
  requirements:
80
95
  - - "~>"
81
96
  - !ruby/object:Gem::Version
82
- version: '5.2'
97
+ version: '6.1'
83
98
  - !ruby/object:Gem::Dependency
84
99
  name: rspec-rails
85
100
  requirement: !ruby/object:Gem::Requirement
86
101
  requirements:
87
102
  - - "~>"
88
103
  - !ruby/object:Gem::Version
89
- version: '3.8'
104
+ version: '4.0'
90
105
  type: :development
91
106
  prerelease: false
92
107
  version_requirements: !ruby/object:Gem::Requirement
93
108
  requirements:
94
109
  - - "~>"
95
110
  - !ruby/object:Gem::Version
96
- version: '3.8'
111
+ version: '4.0'
97
112
  - !ruby/object:Gem::Dependency
98
- name: webmock
113
+ name: sqlite3
99
114
  requirement: !ruby/object:Gem::Requirement
100
115
  requirements:
101
116
  - - "~>"
102
117
  - !ruby/object:Gem::Version
103
- version: '3.4'
118
+ version: 1.4.2
104
119
  type: :development
105
120
  prerelease: false
106
121
  version_requirements: !ruby/object:Gem::Requirement
107
122
  requirements:
108
123
  - - "~>"
109
124
  - !ruby/object:Gem::Version
110
- version: '3.4'
125
+ version: 1.4.2
111
126
  - !ruby/object:Gem::Dependency
112
- name: sqlite3
127
+ name: webmock
113
128
  requirement: !ruby/object:Gem::Requirement
114
129
  requirements:
115
130
  - - "~>"
116
131
  - !ruby/object:Gem::Version
117
- version: 1.3.6
132
+ version: '3.13'
118
133
  type: :development
119
134
  prerelease: false
120
135
  version_requirements: !ruby/object:Gem::Requirement
121
136
  requirements:
122
137
  - - "~>"
123
138
  - !ruby/object:Gem::Version
124
- version: 1.3.6
125
- description: Description of Easy::Resources.
139
+ version: '3.13'
140
+ description: Define common Active::Resources for Redmine / Easy Redmine and Easy Project
141
+ entities.
126
142
  email:
127
143
  - petr@easy.cz
144
+ - lukas@easy.cz
128
145
  executables: []
129
146
  extensions: []
130
147
  extra_rdoc_files: []
131
148
  files:
149
+ - CHANGELOG.md
132
150
  - MIT-LICENSE
133
151
  - README.md
134
152
  - Rakefile
135
153
  - lib/easy/resource.rb
136
154
  - lib/easy/resources.rb
137
155
  - lib/easy/resources/railtie.rb
156
+ - lib/easy/resources/redmine/custom_field.rb
157
+ - lib/easy/resources/redmine/easy_attendance.rb
138
158
  - lib/easy/resources/redmine/easy_contact.rb
139
159
  - lib/easy/resources/redmine/easy_crm_case.rb
140
160
  - lib/easy/resources/redmine/easy_server.rb
141
161
  - lib/easy/resources/redmine/easy_web_application.rb
142
162
  - lib/easy/resources/redmine/easy_web_application_activity.rb
143
163
  - lib/easy/resources/redmine/easy_web_hook.rb
164
+ - lib/easy/resources/redmine/errors.rb
144
165
  - lib/easy/resources/redmine/issue.rb
145
166
  - lib/easy/resources/redmine/project.rb
146
167
  - lib/easy/resources/redmine/redmine_base.rb
168
+ - lib/easy/resources/redmine/time_entry.rb
147
169
  - lib/easy/resources/redmine/user.rb
148
170
  - lib/easy/resources/spec_helper.rb
149
171
  - lib/easy/resources/version.rb
150
172
  - spec/easy_resources_spec.rb
173
+ - spec/fixtures/files/custom_field/bool.xml
174
+ - spec/fixtures/files/custom_field/date.xml
175
+ - spec/fixtures/files/custom_field/datetime.xml
176
+ - spec/fixtures/files/custom_field/float.xml
177
+ - spec/fixtures/files/custom_field/int.xml
178
+ - spec/fixtures/files/custom_field/string.xml
179
+ - spec/fixtures/files/easy_attendance/show.xml
151
180
  - spec/fixtures/files/easy_contact.json
152
181
  - spec/fixtures/files/easy_contact/show.xml
153
182
  - spec/fixtures/files/easy_crm_case.json
@@ -161,64 +190,90 @@ files:
161
190
  - spec/fixtures/files/easy_web_application/with_easy_contact.xml
162
191
  - spec/fixtures/files/easy_web_application/with_easy_crm_case.xml
163
192
  - spec/fixtures/files/easy_web_application/with_ewaa.xml
193
+ - spec/fixtures/files/easy_web_hook/index.xml
194
+ - spec/fixtures/files/easy_web_hook/show.xml
164
195
  - spec/fixtures/files/issue.json
165
196
  - spec/fixtures/files/issue/show.xml
166
197
  - spec/fixtures/files/project.json
167
198
  - spec/fixtures/files/project/show.xml
199
+ - spec/fixtures/files/time_entry/invalid_update.xml
200
+ - spec/fixtures/files/time_entry/show.xml
168
201
  - spec/fixtures/files/user/show.xml
202
+ - spec/models/easy-resources/redmine/custom_field_spec.rb
203
+ - spec/models/easy-resources/redmine/easy_attendance_spec.rb
169
204
  - spec/models/easy-resources/redmine/easy_contact_spec.rb
170
205
  - spec/models/easy-resources/redmine/easy_crm_case_spec.rb
206
+ - spec/models/easy-resources/redmine/easy_server_spec.rb
171
207
  - spec/models/easy-resources/redmine/easy_web_application_activity_spec.rb
172
208
  - spec/models/easy-resources/redmine/easy_web_application_spec.rb
209
+ - spec/models/easy-resources/redmine/easy_web_hook_spec.rb
210
+ - spec/models/easy-resources/redmine/errors_spec.rb
173
211
  - spec/models/easy-resources/redmine/issue_spec.rb
174
212
  - spec/models/easy-resources/redmine/project_spec.rb
175
213
  - spec/models/easy-resources/redmine/redmine_base_spec.rb
214
+ - spec/models/easy-resources/redmine/time_entry_spec.rb
176
215
  - spec/models/easy-resources/redmine/user_spec.rb
177
216
  - spec/models/easy-resources/resource_spec.rb
178
217
  - spec/spec_helper.rb
179
218
  - spec/support/active_resource.rb
180
219
  - spec/support/fixtures.rb
181
220
  - spec/support/redmine_active_resource.rb
182
- homepage: https://www.easysoftware.com
221
+ homepage: https://git.easy.cz/easy/resources
183
222
  licenses:
184
223
  - MIT
185
224
  metadata:
186
225
  allowed_push_host: https://rubygems.org
187
- post_install_message:
226
+ post_install_message:
188
227
  rdoc_options: []
189
228
  require_paths:
190
229
  - lib
191
230
  required_ruby_version: !ruby/object:Gem::Requirement
192
231
  requirements:
193
- - - ">="
232
+ - - "~>"
194
233
  - !ruby/object:Gem::Version
195
- version: '0'
234
+ version: '2.5'
196
235
  required_rubygems_version: !ruby/object:Gem::Requirement
197
236
  requirements:
198
237
  - - ">="
199
238
  - !ruby/object:Gem::Version
200
239
  version: '0'
201
240
  requirements: []
202
- rubygems_version: 3.0.4
203
- signing_key:
241
+ rubygems_version: 3.2.16
242
+ signing_key:
204
243
  specification_version: 4
205
- summary: Summary of Easy::Resources.
244
+ summary: ActiveResources connectors for Easy Project / Easy Redmine
206
245
  test_files:
207
246
  - spec/spec_helper.rb
247
+ - spec/models/easy-resources/redmine/custom_field_spec.rb
208
248
  - spec/models/easy-resources/redmine/project_spec.rb
209
249
  - spec/models/easy-resources/redmine/easy_crm_case_spec.rb
210
250
  - spec/models/easy-resources/redmine/easy_contact_spec.rb
211
251
  - spec/models/easy-resources/redmine/issue_spec.rb
252
+ - spec/models/easy-resources/redmine/time_entry_spec.rb
212
253
  - spec/models/easy-resources/redmine/redmine_base_spec.rb
254
+ - spec/models/easy-resources/redmine/easy_web_hook_spec.rb
213
255
  - spec/models/easy-resources/redmine/easy_web_application_activity_spec.rb
214
256
  - spec/models/easy-resources/redmine/easy_web_application_spec.rb
257
+ - spec/models/easy-resources/redmine/easy_server_spec.rb
258
+ - spec/models/easy-resources/redmine/errors_spec.rb
215
259
  - spec/models/easy-resources/redmine/user_spec.rb
260
+ - spec/models/easy-resources/redmine/easy_attendance_spec.rb
216
261
  - spec/models/easy-resources/resource_spec.rb
217
262
  - spec/support/active_resource.rb
218
263
  - spec/support/fixtures.rb
219
264
  - spec/support/redmine_active_resource.rb
220
265
  - spec/easy_resources_spec.rb
266
+ - spec/fixtures/files/easy_web_hook/index.xml
267
+ - spec/fixtures/files/easy_web_hook/show.xml
221
268
  - spec/fixtures/files/easy_contact/show.xml
269
+ - spec/fixtures/files/time_entry/show.xml
270
+ - spec/fixtures/files/time_entry/invalid_update.xml
271
+ - spec/fixtures/files/custom_field/datetime.xml
272
+ - spec/fixtures/files/custom_field/bool.xml
273
+ - spec/fixtures/files/custom_field/float.xml
274
+ - spec/fixtures/files/custom_field/date.xml
275
+ - spec/fixtures/files/custom_field/int.xml
276
+ - spec/fixtures/files/custom_field/string.xml
222
277
  - spec/fixtures/files/easy_crm_case.json
223
278
  - spec/fixtures/files/easy_crm_case/show.xml
224
279
  - spec/fixtures/files/project.json
@@ -229,6 +284,7 @@ test_files:
229
284
  - spec/fixtures/files/easy_contact.json
230
285
  - spec/fixtures/files/easy_server/index.xml
231
286
  - spec/fixtures/files/easy_server/show.xml
287
+ - spec/fixtures/files/easy_attendance/show.xml
232
288
  - spec/fixtures/files/easy_web_application/index.xml
233
289
  - spec/fixtures/files/easy_web_application/with_ewaa.xml
234
290
  - spec/fixtures/files/easy_web_application/with_custom_fields.xml