pvoutput 0.3.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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