pvoutput 0.3.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: aabffd834f87c5ca43ed5d0c04c952fe4969b99c
4
- data.tar.gz: d52c7cb268ad9608ce3c6503dd2e3b5cb38ff244
2
+ SHA256:
3
+ metadata.gz: 12f23ce00da08b8c11d608678814059ea944ceb96690cf9472d10bc4c28cc9bf
4
+ data.tar.gz: be107b5aa1b8b11fd0a7fb728a5c8ee8cd0b71ca7b57b59a3c4330d42fd5da29
5
5
  SHA512:
6
- metadata.gz: 25b9b1b49b10ca564cb9d23233a16505a17d7703d40a01ca0c48d25f1f0cd8f5328aeff11273aa777b358d20bf453ceaf0f5b91bee36063f7ef46fb820c1d411
7
- data.tar.gz: 0a8fa6e7d7841d52a0657489d5ac5b9aedcd4b2105201f63fd5cebef3dfcc92b8664a52b19a8cc129dcf3a7213b26754c77817dfa0eca6596d6987289e814a33
6
+ metadata.gz: 9f7fb19d50a77f73aea7d86f323a8f8c6c55ebba5e02fb5c79248f6821da91e4046f94f40e3032cf682d8a5a258200ace172dad73e7bd70bae089c52c95ebba3
7
+ data.tar.gz: 4c22868b8b80f8202a8cde10ff1b131dd3e4f2de66a83ebd8c68c25ec466a3e5819021fbaa6bfd86323a1ae5dcda960c35e6e17ea342d55aa30053ee372645d8
@@ -0,0 +1,14 @@
1
+ # Set update schedule for GitHub Actions
2
+ version: 2
3
+ updates:
4
+ - package-ecosystem: "github-actions"
5
+ directory: "/"
6
+ schedule:
7
+ interval: "weekly"
8
+ day: "saturday"
9
+
10
+ - package-ecosystem: "bundler"
11
+ directory: "/"
12
+ schedule:
13
+ interval: "weekly"
14
+ day: "saturday"
@@ -0,0 +1,25 @@
1
+ name: Ruby Gem
2
+
3
+ on:
4
+ release:
5
+ types: [ published ]
6
+
7
+ jobs:
8
+ build:
9
+ name: Build + Publish
10
+ runs-on: ubuntu-latest
11
+
12
+ steps:
13
+ - uses: actions/checkout@v2
14
+ - name: Set up Ruby 2.7
15
+ uses: ruby/setup-ruby@v1
16
+ with:
17
+ ruby-version: 2.7
18
+
19
+ - name: Install dependencies
20
+ run: bundle install
21
+ - name: Publish to RubyGems
22
+ run: |
23
+ rake release
24
+ env:
25
+ GEM_HOST_API_KEY: "${{secrets.GEM_HOST_API_KEY}}"
@@ -0,0 +1,30 @@
1
+ name: Test
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ pull_request:
7
+ branches: [ master ]
8
+ schedule:
9
+ - cron: '0 1 * * SUN'
10
+
11
+ jobs:
12
+ test:
13
+ runs-on: ubuntu-latest
14
+ strategy:
15
+ matrix:
16
+ ruby-version: [ '2.5', '2.6', '2.7', '3.0', 'ruby-head' ]
17
+
18
+ steps:
19
+ - uses: actions/checkout@v2
20
+ - name: Setup ruby
21
+ uses: ruby/setup-ruby@v1
22
+ with:
23
+ ruby-version: ${{ matrix.ruby-version }}
24
+ bundler-cache: true
25
+ - name: Install dependencies
26
+ run: bundle install
27
+ - name: Lint files
28
+ run: bundle exec rubocop
29
+ - name: Run tests
30
+ run: bundle exec rake
data/.gitignore CHANGED
@@ -4,3 +4,4 @@
4
4
  /pkg/
5
5
  /spec/reports/
6
6
  /tmp/
7
+ /vendor/bundle
data/.rubocop.yml CHANGED
@@ -1,6 +1,9 @@
1
1
  require: rubocop-rspec
2
2
 
3
- HashSyntax:
3
+ AllCops:
4
+ NewCops: enable
5
+
6
+ Style/HashSyntax:
4
7
  EnforcedStyle: hash_rockets
5
8
 
6
9
  Style/Documentation:
@@ -9,17 +12,29 @@ Style/Documentation:
9
12
  Style/Lambda:
10
13
  Enabled: false
11
14
 
12
- Style/TrailingCommaInLiteral:
13
- EnforcedStyleForMultiline: comma
15
+ Style/TrailingCommaInArrayLiteral:
16
+ EnforcedStyleForMultiline: consistent_comma
17
+
18
+ Style/TrailingCommaInHashLiteral:
19
+ EnforcedStyleForMultiline: consistent_comma
14
20
 
15
21
  Metrics/MethodLength:
16
22
  Max: 20
17
23
 
18
- Metrics/LineLength:
24
+ Layout/LineLength:
19
25
  Max: 120
20
26
 
27
+ RSpec/ExampleLength:
28
+ Max: 15
29
+
21
30
  Style/ModuleFunction:
22
31
  Enabled: false
23
32
 
24
- AlignHash:
33
+ Layout/HashAlignment:
25
34
  EnforcedHashRocketStyle: table
35
+
36
+ Style/OptionalBooleanParameter:
37
+ Enabled: false
38
+
39
+ RSpec/MultipleExpectations:
40
+ Max: 2
data/CHANGELOG.md CHANGED
@@ -1,5 +1,33 @@
1
1
  # Changelog
2
2
 
3
+ # 1.1.0 (2021-07-12)
4
+
5
+ * add_batch_output is now using addoutput with a batch size of 1 in regular mode and 100 in donation mode (@jwillemsen)
6
+
7
+ # Changelog
8
+
9
+ # 1.0.0 (2021-02-14)
10
+
11
+ * Require a minimum of Ruby 2.5 (@jwillemsen)
12
+ * Clean up ruby gem publish GitHub Action (@jwillemsen)
13
+
14
+ # 0.6.0 (2021-02-06)
15
+
16
+ This test has no code changes but tests the new release process.
17
+
18
+ * Move tests from CircleCI to GitHub Actions (@johnf)
19
+ * Keep an eye on dependencies with Dependabot (@jwillemsen)
20
+ * Schedule regular tests against multiple rubys (@jwillemsen)
21
+
22
+ # 0.5.0 (2020-09-20)
23
+
24
+ * Add more detail to error messages (@jwillemsen)
25
+ * Support debugging (@johnf)
26
+
27
+ # 0.4.0 (20160911)
28
+
29
+ * Add retries to batch_output (@jwillemsen)
30
+
3
31
  # 0.3.0 (20160229)
4
32
 
5
33
  * Add donation mode (@jwillemsen)
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  gemspec
data/README.md CHANGED
@@ -1,7 +1,9 @@
1
1
  # PVOutput
2
2
 
3
- [![Circle CI](https://circleci.com/gh/johnf/pvoutput.svg?style=svg)](https://circleci.com/gh/johnf/pvoutput)
3
+ [![Actions Status](https://github.com/johnf/pvoutput/workflows/Test/badge.svg)](https://github.com/johnf/pvoutput/actions)
4
4
  [![Coverage Status](https://coveralls.io/repos/johnf/pvoutput/badge.svg?branch=master&service=github)](https://coveralls.io/github/johnf/pvoutput?branch=master)
5
+ [![Gem Version](https://badge.fury.io/rb/pvoutput.svg)](http://badge.fury.io/rb/pvoutput)
6
+
5
7
 
6
8
  Ruby library for talking to the PVOutput API.
7
9
 
@@ -147,11 +149,28 @@ client.add_output(
147
149
  )
148
150
  ```
149
151
 
152
+ ## Debugging
153
+
154
+ You can enable HTTParty debugging to see the requests by setting `PVOUTPUT_DEBUG=true`
155
+
150
156
  ## Development
151
157
 
152
158
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake rspec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
153
159
 
154
- 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).
160
+ To install this gem onto your local machine, run `bundle exec rake install`.
161
+
162
+ ## Release
163
+
164
+ To release a new version:
165
+ * Create a branch for the release
166
+ * Update the version number in `version.rb`
167
+ * Update CHANGELOG.md
168
+ * git commit -pm 'Release 1.x.x'
169
+ * git tag v1.x.x
170
+ * git push
171
+ * git push --tags
172
+ * In GitHub add the Change Log section to the release and save it
173
+ * Check everything looks OK in GitHub Actions
155
174
 
156
175
  ## Contributing
157
176
 
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler/gem_tasks'
2
4
  require 'rspec/core/rake_task'
3
5
  require 'rubocop/rake_task'
data/bin/console CHANGED
@@ -1,7 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'bundler/setup'
4
- require 'jfy'
5
+ require 'pvoutput/client'
5
6
 
6
7
  require 'pry'
7
8
  Pry.start
data/lib/pvoutput.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'pvoutput/version'
2
4
 
3
5
  module PVOutput
@@ -1,22 +1,43 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'httparty'
2
4
 
3
5
  module PVOutput
4
6
  class Client
5
7
  include HTTParty
6
8
  base_uri 'pvoutput.org'
7
- # debug_output $stdout
9
+ debug_output $stdout if ENV['PVOUTPUT_DEBUG']
8
10
 
9
11
  def initialize(system_id, api_key, donation_mode = false)
10
12
  @system_id = system_id.to_s
11
13
  @api_key = api_key.to_s
12
- # The batch operations have default limit of 30 sets of data in one request, when you
13
- # are using the donation mode the limit is 100 sets
14
- @batch_size = 30
14
+
15
+ # The add_batch_output operation has a default limit of 1 sets of data in one
16
+ # request, when you are using the donation mode the limit is 100 sets
17
+ @batch_size = 1
15
18
  @batch_size = 100 if donation_mode
16
19
 
17
20
  self.class.headers 'X-Pvoutput-Apikey' => @api_key, 'X-Pvoutput-SystemId' => @system_id
18
21
  end
19
22
 
23
+ # Helper method to post batch request to pvoutput that retries at the moment we get
24
+ # a 400 error back with body containing 'Load in progress'
25
+ def post_request(path, options = {}, &block)
26
+ loop do
27
+ response = self.class.post(path, options, &block)
28
+
29
+ if response.code == 400 && response.body =~ /Load in progress/
30
+ # We can't send data too fast, when the previous request is still loaded we
31
+ # have to wait so sleep 10 seconds and try again
32
+ sleep(10)
33
+ elsif response.code == 200
34
+ return
35
+ else
36
+ raise("Bad Post: #{response.body}")
37
+ end
38
+ end
39
+ end
40
+
20
41
  # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
21
42
  def add_status(options)
22
43
  time = options[:when] || Time.now
@@ -66,29 +87,25 @@ module PVOutput
66
87
  end
67
88
  # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
68
89
 
69
- # rubocop:disable Metrics/AbcSize
70
90
  def add_batch_output(options)
71
- keys = %i(energy_generated energy_export energy_used)
72
- keys += %i(peak_power peak_time condition min_temp)
73
- keys += %i(max_temp comments import_peak import_off_peak)
74
- keys += %i(import_shoulder)
91
+ keys = %i[energy_generated energy_export energy_used]
92
+ keys += %i[peak_power peak_time condition min_temp]
93
+ keys += %i[max_temp comments import_peak import_off_peak]
94
+ keys += %i[import_shoulder]
75
95
 
76
96
  options.to_a.each_slice(@batch_size) do |slice|
77
97
  data = ''
78
98
  slice.each do |entry|
79
99
  date, values = entry
80
- data += "#{date}," + keys.map { |key| values[key] }.join(',') + ';'
100
+ data += "#{date},#{keys.map { |key| values[key] }.join(',')};"
81
101
  end
82
102
 
83
103
  params = {
84
104
  :data => data.chop,
85
105
  }
86
106
 
87
- response = self.class.post('/service/r2/addbatchoutput.jsp', :body => params)
88
-
89
- raise('Bad Post') unless response.code == 200
107
+ post_request('/service/r2/addoutput.jsp', :body => params)
90
108
  end
91
109
  end
92
- # rubocop:enable Metrics/AbcSize
93
110
  end
94
111
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module PVOutput
2
- VERSION = '0.3.0'.freeze
4
+ VERSION = '1.1.0'
3
5
  end
data/pvoutput.gemspec CHANGED
@@ -1,5 +1,6 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'pvoutput/version'
5
6
 
@@ -18,16 +19,18 @@ Gem::Specification.new do |spec|
18
19
  spec.require_paths = ['lib']
19
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
21
 
22
+ spec.required_ruby_version = '>= 2.5'
23
+
21
24
  spec.add_dependency 'httparty'
22
25
 
23
- spec.add_development_dependency 'bundler', '~> 1.10'
24
- spec.add_development_dependency 'rake', '~> 10.0'
26
+ spec.add_development_dependency 'bundler', '>= 2.1'
27
+ spec.add_development_dependency 'coveralls'
25
28
  spec.add_development_dependency 'pry'
29
+ spec.add_development_dependency 'rake', '>= 12.3.3'
26
30
  spec.add_development_dependency 'rspec'
27
- spec.add_development_dependency 'webmock'
28
- spec.add_development_dependency 'timecop'
31
+ spec.add_development_dependency 'rspec_junit_formatter'
29
32
  spec.add_development_dependency 'rubocop'
30
33
  spec.add_development_dependency 'rubocop-rspec'
31
- spec.add_development_dependency 'rspec_junit_formatter'
32
- spec.add_development_dependency 'coveralls'
34
+ spec.add_development_dependency 'timecop'
35
+ spec.add_development_dependency 'webmock'
33
36
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pvoutput
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Ferlito
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-02-29 00:00:00.000000000 Z
11
+ date: 2021-07-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -28,30 +28,30 @@ dependencies:
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '1.10'
33
+ version: '2.1'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '1.10'
40
+ version: '2.1'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rake
42
+ name: coveralls
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '10.0'
47
+ version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '10.0'
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: pry
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -67,21 +67,21 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: rspec
70
+ name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: 12.3.3
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: '0'
82
+ version: 12.3.3
83
83
  - !ruby/object:Gem::Dependency
84
- name: webmock
84
+ name: rspec
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
@@ -95,7 +95,7 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
- name: timecop
98
+ name: rspec_junit_formatter
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - ">="
@@ -137,7 +137,7 @@ dependencies:
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
139
  - !ruby/object:Gem::Dependency
140
- name: rspec_junit_formatter
140
+ name: timecop
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
143
  - - ">="
@@ -151,7 +151,7 @@ dependencies:
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
153
  - !ruby/object:Gem::Dependency
154
- name: coveralls
154
+ name: webmock
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
157
  - - ">="
@@ -171,6 +171,9 @@ executables: []
171
171
  extensions: []
172
172
  extra_rdoc_files: []
173
173
  files:
174
+ - ".github/dependabot.yml"
175
+ - ".github/workflows/gem-push.yaml"
176
+ - ".github/workflows/ruby.yml"
174
177
  - ".gitignore"
175
178
  - ".rspec"
176
179
  - ".rubocop.yml"
@@ -182,7 +185,6 @@ files:
182
185
  - Rakefile
183
186
  - bin/console
184
187
  - bin/setup
185
- - circle.yml
186
188
  - lib/pvoutput.rb
187
189
  - lib/pvoutput/client.rb
188
190
  - lib/pvoutput/version.rb
@@ -199,15 +201,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
199
201
  requirements:
200
202
  - - ">="
201
203
  - !ruby/object:Gem::Version
202
- version: '0'
204
+ version: '2.5'
203
205
  required_rubygems_version: !ruby/object:Gem::Requirement
204
206
  requirements:
205
207
  - - ">="
206
208
  - !ruby/object:Gem::Version
207
209
  version: '0'
208
210
  requirements: []
209
- rubyforge_project:
210
- rubygems_version: 2.4.5.1
211
+ rubygems_version: 3.1.6
211
212
  signing_key:
212
213
  specification_version: 4
213
214
  summary: Library to speak to the PVOutput API
data/circle.yml DELETED
@@ -1,9 +0,0 @@
1
- test:
2
- post:
3
- - bundle exec rubocop
4
- machine:
5
- ruby:
6
- version: 2.2.3
7
- dependencies:
8
- pre:
9
- - gem install bundler --pre