ruby-grads 1.0.0 → 1.0.7

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.
@@ -0,0 +1,217 @@
1
+ #
2
+ #
3
+ # draw_xlab_time(dummy, offset: nil, skip: nil)
4
+ #
5
+ #
6
+ #
7
+ #
8
+
9
+ class GrADS::Command
10
+
11
+ def time_skip
12
+ ans = query("dims")
13
+ t1 = subwrd(sublin(ans, 5), 11).to_i
14
+ t2 = subwrd(sublin(ans, 5), 13).to_i
15
+ d1 = Time.parse(subwrd(sublin(ans, 5), 6).sub(/Z/," "))
16
+ d2 = Time.parse(subwrd(sublin(ans, 5), 8).sub(/Z/," "))
17
+ nt = t2 - t1 + 1
18
+ nd = (d2 - d1)/86400.0
19
+ dt = ((d2-d1)/(t2-t1)).round
20
+
21
+ type = nil
22
+ skip = nil
23
+
24
+ if nd <= 1
25
+ type = "day"
26
+ elsif nd <= 3
27
+ type = "3days"
28
+ elsif nd <= 7
29
+ type = "week"
30
+ elsif nd <= 14
31
+ type = "2weeks"
32
+ elsif nd <= 31
33
+ type = "month"
34
+ elsif nd <= 120
35
+ type = "season"
36
+ elsif nd <= 360
37
+ type = "year"
38
+ else
39
+ type = "years"
40
+ end
41
+
42
+ unless skip
43
+ case type
44
+ when "day"
45
+ skip = dt.to_i/3600
46
+ when "3days"
47
+ skip = 3*dt.to_i/3600
48
+ when "week"
49
+ skip = 6*dt.to_i/3600
50
+ when "2weeks"
51
+ skip = 12*dt.to_i/3600
52
+ when "month"
53
+ skip = 24*dt.to_i/3600
54
+ when "season"
55
+ skip = 3*24*dt.to_i/3600
56
+ when "year", "years"
57
+ skip = 10*24*dt.to_i/3600
58
+ end
59
+ end
60
+
61
+ return skip
62
+ end
63
+
64
+
65
+ def axis_xtime (dummy, offset: nil, skip: nil, &block)
66
+ puts ans = query("dims")
67
+ t1 = subwrd(sublin(ans, 5), 11).to_i
68
+ t2 = subwrd(sublin(ans, 5), 13).to_i
69
+ d1 = Time.parse(subwrd(sublin(ans, 5), 6).sub(/Z/," "))
70
+ d2 = Time.parse(subwrd(sublin(ans, 5), 8).sub(/Z/," "))
71
+ nt = t2 - t1 + 1
72
+ nd = (d2 - d1)/86400.0
73
+ dt = ((d2-d1)/(t2-t1)).round
74
+ time = CArray.object(nt).seq(d1,dt)
75
+
76
+ type = nil
77
+ skip = nil
78
+
79
+ if offset
80
+ time = time + offset
81
+ end
82
+
83
+ if nd <= 1
84
+ type = "day"
85
+ elsif nd <= 3
86
+ type = "3days"
87
+ elsif nd <= 7
88
+ type = "week"
89
+ elsif nd <= 14
90
+ type = "2weeks"
91
+ elsif nd <= 31
92
+ type = "month"
93
+ elsif nd <= 120
94
+ type = "season"
95
+ elsif nd <= 360
96
+ type = "year"
97
+ else
98
+ type = "years"
99
+ end
100
+
101
+ unless skip
102
+ case type
103
+ when "day"
104
+ skip = dt.to_i/3600
105
+ when "3days"
106
+ skip = 3*dt.to_i/3600
107
+ when "week"
108
+ skip = 6*dt.to_i/3600
109
+ when "2weeks"
110
+ skip = 12*dt.to_i/3600
111
+ when "month"
112
+ skip = 24*dt.to_i/3600
113
+ when "season"
114
+ skip = 3*24*dt.to_i/3600
115
+ when "year", "years"
116
+ skip = 10*24*dt.to_i/3600
117
+ end
118
+ end
119
+
120
+ xlabs = []
121
+ xlabs2 = []
122
+ flag = false
123
+
124
+ case type
125
+ when "day", "3days", "week"
126
+ hour0 = 0
127
+ time[[nil,skip]].each do |t|
128
+ if not flag
129
+ xlabs << t.strftime("%d%b%Y").upcase
130
+ flag = true
131
+ elsif hour0 > t.hour
132
+ xlabs << t.strftime("%d%b").upcase
133
+ else
134
+ xlabs << t.strftime("")
135
+ end
136
+ hour0 = t.hour
137
+ end
138
+ time[[nil,skip]].each do |t|
139
+ if nt > 73
140
+ if t.hour % 3 == 0
141
+ xlabs2 << t.strftime("%H")
142
+ end
143
+ else
144
+ xlabs2 << t.strftime("%H")
145
+ end
146
+ end
147
+ units = ["hour", "day"]
148
+ when "2weeks"
149
+ hour0 = 0
150
+ time[[nil,skip]].each do |t|
151
+ if not flag
152
+ xlabs << t.strftime("%d%b%Y").upcase
153
+ flag = true
154
+ elsif hour0 > t.hour
155
+ xlabs << t.strftime("%d").upcase
156
+ else
157
+ xlabs << t.strftime("")
158
+ end
159
+ hour0 = t.hour
160
+ end
161
+ time[[nil,skip]].each do |t|
162
+ if nt > 73
163
+ if t.hour % 3 == 0
164
+ xlabs2 << t.strftime("%H")
165
+ end
166
+ else
167
+ xlabs2 << t.strftime("%H")
168
+ end
169
+ end
170
+ units = ["hour", "day"]
171
+ when "month","season", "year"
172
+ day0 = 1
173
+ time[[nil,skip]].each do |t|
174
+ if not flag
175
+ xlabs << t.strftime("%d%b%Y").upcase
176
+ flag = true
177
+ elsif day0 > t.day
178
+ xlabs << t.strftime("%b").upcase
179
+ else
180
+ xlabs << t.strftime("")
181
+ end
182
+ day0 = t.day
183
+ end
184
+ time[[nil,skip]].each do |t|
185
+ if nt > 73
186
+ if t.hour % 3 == 0
187
+ xlabs2 << t.strftime("%d")
188
+ end
189
+ else
190
+ xlabs2 << t.strftime("%d")
191
+ end
192
+ end
193
+ units = ["day", "month"]
194
+ end
195
+
196
+ begin
197
+ axis_off
198
+ set :xlab, :on
199
+ set :xlabs, xlabs2.join(" | ")
200
+ set :xlpos, 0, :b
201
+
202
+ display_nothing(dummy)
203
+
204
+ axis_on
205
+ set :xlab, :on
206
+ set :xlabs, xlabs.join(" | ")
207
+ set :xlpos, -0.3, :b
208
+
209
+ display_nothing(dummy, &block)
210
+ ensure
211
+ set :xlpos, 0, b
212
+ end
213
+
214
+ return units
215
+ end
216
+
217
+ end
@@ -10,12 +10,6 @@ class GrADS::Command
10
10
 
11
11
  def setcpt (file)
12
12
  io = Kernel::open(file)
13
- while line = io.gets
14
- if line =~ /COLOR_MODEL\s*=\s*\+?(HSV|RGB)/
15
- model = $1
16
- break
17
- end
18
- end
19
13
  bgrb = nil
20
14
  frgb = nil
21
15
  list = []
@@ -24,12 +18,12 @@ class GrADS::Command
24
18
  when /\A[\#N]/
25
19
  next
26
20
  when /\AB\s/
27
- brgb = line.split(/\s+/)[1..3].map{|v| v.to_f}
21
+ brgb = line.split(/[\s\/]+/)[1..3].map(&:to_f)
28
22
  when /\AF\s/
29
- frgb = line.split(/\s+/)[1..3].map{|v| v.to_f}
23
+ frgb = line.split(/[\s\/]+/)[1..3].map(&:to_f)
30
24
  else
31
- list << line.lstrip.split(/\s+/)[0..3].map{|v| v.to_f}
32
- last = line.lstrip.split(/\s+/)[4..7].map{|v| v.to_f}
25
+ list << line.split(/[\s\/]+/)[0..3].map(&:to_f)
26
+ last = line.split(/[\s\/]+/)[4..7].map(&:to_f)
33
27
  end
34
28
  end
35
29
  list << last
@@ -38,48 +32,35 @@ class GrADS::Command
38
32
  ccols = []
39
33
  ic = 16
40
34
  if brgb
41
- if model == "HSV"
42
- set :rgb, ic, *_hsv2rgb(*brgb)
43
- else
44
- set :rgb, ic, *brgb
45
- end
35
+ set :rgb, ic, *brgb.map(&:round)
46
36
  ccols << ic
47
37
  else
48
- ccols << 0
38
+ ccols << -1
49
39
  end
50
40
  ic += 1
51
41
  list.each_with_index do |(v,r,g,b),i|
52
- if model == "HSV"
53
- set :rgb, i+ic, *_hsv2rgb(r, g, b)
54
- else
55
- set :rgb, i+ic, r, g, b
56
- end
42
+ set :rgb, i+ic, r.round, g.round, b.round
57
43
  clevs << v
58
44
  if ! frgb and i == list.size - 1
59
- ccols << 0
45
+ ccols << -1
60
46
  else
61
47
  ccols << i+ic
62
48
  end
63
49
  end
64
50
  ic += list.size - 1
65
51
  if frgb
66
- if model == "HSV"
67
- set :rgb, ic, *_hsv2rgb(*frgb)
68
- else
69
- set :rgb, ic, *frgb
70
- end
52
+ set :rgb, ic, *frgb.map(&:round)
71
53
  end
72
54
  set_clevs *clevs
73
55
  set_ccols *ccols
56
+ return clevs, ccols
74
57
  end
75
58
 
76
59
  def makecpt (*args)
77
- io = IO::popen("makecpt #{args.join(' ')}", "r")
78
- while line = io.gets
79
- if line =~ /COLOR_MODEL\s*=\s*\+?(HSV|RGB)/
80
- model = $1
81
- break
82
- end
60
+ begin
61
+ io = IO::popen("makecpt -Fr #{args.join(' ')}", "r")
62
+ rescue Errno::ENOENT
63
+ io = IO::popen("gmt makecpt -Fr #{args.join(' ')}", "r")
83
64
  end
84
65
  bgrb = nil
85
66
  frgb = nil
@@ -89,12 +70,12 @@ class GrADS::Command
89
70
  when /\A[\#N]/
90
71
  next
91
72
  when /\AB\s/
92
- brgb = line.split(/\s+/)[1..3].map{|v| v.to_f}
73
+ brgb = line.split(/[\s\/]/)[1..3].map(&:to_f)
93
74
  when /\AF\s/
94
- frgb = line.split(/\s+/)[1..3].map{|v| v.to_f}
75
+ frgb = line.split(/[\s\/]/)[1..3].map(&:to_f)
95
76
  else
96
- list << line.split(/\s+/)[0..3].map{|v| v.to_f}
97
- last = line.split(/\s+/)[4..7].map{|v| v.to_f}
77
+ list << line.split(/[\s\/]/)[0..3].map(&:to_f)
78
+ last = line.split(/[\s\/]/)[4..7].map(&:to_f)
98
79
  end
99
80
  end
100
81
  list << last
@@ -103,39 +84,28 @@ class GrADS::Command
103
84
  ccols = []
104
85
  ic = 16
105
86
  if brgb
106
- if model == "HSV"
107
- set :rgb, ic, *_hsv2rgb(*brgb)
108
- else
109
- set :rgb, ic, *brgb
110
- end
87
+ set :rgb, ic, *brgb.map(&:round)
111
88
  ccols << ic
112
89
  else
113
- ccols << 0
90
+ ccols << -1
114
91
  end
115
92
  ic += 1
116
93
  list.each_with_index do |(v,r,g,b),i|
117
- if model == "HSV"
118
- set :rgb, i+ic, *_hsv2rgb(r, g, b)
119
- else
120
- set :rgb, i+ic, r, g, b
121
- end
94
+ set :rgb, i+ic, r.round, g.round, b.round
122
95
  clevs << v
123
96
  if ! frgb and i == list.size - 1
124
- ccols << 0
97
+ ccols << -1
125
98
  else
126
99
  ccols << i+ic
127
100
  end
128
101
  end
129
102
  ic += list.size - 1
130
103
  if frgb
131
- if model == "HSV"
132
- set :rgb, ic, *_hsv2rgb(*frgb)
133
- else
134
- set :rgb, ic, *frgb
135
- end
104
+ set :rgb, ic, *frgb.map(&:round)
136
105
  end
137
106
  set_clevs *clevs
138
107
  set_ccols *ccols
108
+ return clevs, ccols
139
109
  end
140
110
 
141
111
  def _hsv2rgb(h, s, v)
data/lib/grads.rb CHANGED
@@ -9,3 +9,4 @@ require "grads/command"
9
9
  require "grads/lib/makecpt"
10
10
  require "grads/lib/colorbar"
11
11
  require "grads/lib/save_image"
12
+ require "grads/lib/axis_xtime"
data/ruby-grads.gemspec CHANGED
@@ -1,9 +1,9 @@
1
1
 
2
2
  Gem::Specification::new do |s|
3
- version = "1.0.0"
3
+ version = "1.0.7"
4
4
 
5
5
  files = Dir.glob("**/*") - [
6
- Dir.glob("carray*.gem"),
6
+ Dir.glob("ruby-grads*.gem"),
7
7
  ].flatten
8
8
 
9
9
  s.platform = Gem::Platform::RUBY
@@ -18,6 +18,6 @@ Gem::Specification::new do |s|
18
18
  s.homepage = 'https://github.com/himotoyoshi/ruby-grads'
19
19
  s.files = files
20
20
  # s.extensions = [ "extconf.rb" ]
21
- s.has_rdoc = false
21
+ s.executables << 'ncdef2ctl'
22
22
  s.required_ruby_version = ">= 1.8.1"
23
23
  end
@@ -0,0 +1,23 @@
1
+
2
+ Gem::Specification::new do |s|
3
+ version = "1.0.5"
4
+
5
+ files = Dir.glob("**/*") - [
6
+ Dir.glob("ruby-grads*.gem"),
7
+ ].flatten
8
+
9
+ s.platform = Gem::Platform::RUBY
10
+ s.name = "ruby-grads"
11
+ s.summary = "Library for driving GrADS from Ruby"
12
+ s.description = <<-HERE
13
+ Library for driving GrADS from Ruby
14
+ HERE
15
+ s.version = version
16
+ s.author = "Hiroki Motoyoshi"
17
+ s.email = ""
18
+ s.homepage = 'https://github.com/himotoyoshi/ruby-grads'
19
+ s.files = files
20
+ # s.extensions = [ "extconf.rb" ]
21
+ s.executables << 'ncdef2ctl'
22
+ s.required_ruby_version = ">= 1.8.1"
23
+ end
metadata CHANGED
@@ -1,31 +1,37 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-grads
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hiroki Motoyoshi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-27 00:00:00.000000000 Z
11
+ date: 2021-12-09 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: " Library for driving GrADS from Ruby\n"
14
14
  email: ''
15
- executables: []
15
+ executables:
16
+ - ncdef2ctl
16
17
  extensions: []
17
18
  extra_rdoc_files: []
18
19
  files:
19
20
  - README.md
21
+ - Rakefile
22
+ - bin/ncdef2ctl
20
23
  - extconf.rb
21
24
  - lib/grads.rb
25
+ - lib/grads/binary.rb
22
26
  - lib/grads/command.rb
23
27
  - lib/grads/gridded.rb
28
+ - lib/grads/lib/axis_xtime.rb
24
29
  - lib/grads/lib/colorbar.rb
25
30
  - lib/grads/lib/makecpt.rb
26
31
  - lib/grads/lib/save_image.rb
27
32
  - lib/grads/lib/xcbar_with_ccols.rb
28
33
  - ruby-grads.gemspec
34
+ - ruby-grads.gemspec~
29
35
  - test/gradsdraw.rb
30
36
  - test/test.rb
31
37
  homepage: https://github.com/himotoyoshi/ruby-grads
@@ -46,8 +52,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
46
52
  - !ruby/object:Gem::Version
47
53
  version: '0'
48
54
  requirements: []
49
- rubyforge_project:
50
- rubygems_version: 2.7.7
55
+ rubygems_version: 3.1.2
51
56
  signing_key:
52
57
  specification_version: 4
53
58
  summary: Library for driving GrADS from Ruby