scheduled_resource 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +14 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +136 -0
- data/Rakefile +2 -0
- data/bin/schedulize +173 -0
- data/lib/assets/javascripts/blank.jpg +0 -0
- data/lib/assets/javascripts/justify_tweaks.js +186 -0
- data/lib/assets/javascripts/time_pix.js.coffee +103 -0
- data/lib/assets/javascripts/use_block.js.coffee +131 -0
- data/lib/assets/stylesheets/scheduled_resource.css.scss +250 -0
- data/lib/scheduled_resource.rb +262 -0
- data/lib/scheduled_resource/helper.rb +65 -0
- data/lib/scheduled_resource/resource_use_block.rb +33 -0
- data/lib/scheduled_resource/version.rb +3 -0
- data/lib/z_time_header.rb +20 -0
- data/lib/z_time_header_day.rb +16 -0
- data/lib/z_time_header_hour.rb +15 -0
- data/lib/z_time_label.rb +88 -0
- data/lib/z_time_label_day.rb +23 -0
- data/lib/z_time_label_hour.rb +26 -0
- data/scheduled_resource.gemspec +25 -0
- metadata +178 -0
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
#
|
3
|
+
class ZTimeLabelDay < ZTimeLabel
|
4
|
+
|
5
|
+
def self.get_timeblocks(id, t1, t2, inc)
|
6
|
+
(super).each do |b|
|
7
|
+
b.title = b.starttime.strftime "%a, %b %e"
|
8
|
+
b.css_classes = 'ZTimeHeaderDayRow '
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
def self.end_for_start( t )
|
14
|
+
(t.end_of_day + 1).beginning_of_day # 0.00001 or whatever
|
15
|
+
end
|
16
|
+
|
17
|
+
# t is a TimeWithZone or similar
|
18
|
+
def self.floor(t)
|
19
|
+
t.beginning_of_day
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
#
|
3
|
+
class ZTimeLabelHour < ZTimeLabel
|
4
|
+
|
5
|
+
def self.get_timeblocks(id, t1, t2, inc)
|
6
|
+
(super).each do |b|
|
7
|
+
t = b.starttime
|
8
|
+
b.title = t.strftime('%I:%M').sub(/^0/, '') # '%I'
|
9
|
+
b.css_classes = "ZTimeHeaderHourRow #{daylight_class(t)} "
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.daylight_class(t)
|
14
|
+
(6...18).include?(t.hour) ? 'dayTimeblock' : 'niteTimeblock'
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.end_for_start( t )
|
18
|
+
floor(t) + 15.minutes
|
19
|
+
end
|
20
|
+
|
21
|
+
# t is a TimeWithZone or similar
|
22
|
+
def self.floor(t)
|
23
|
+
t.change(min: (t.min / 15) * 15)
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'scheduled_resource/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "scheduled_resource"
|
8
|
+
spec.version = ScheduledResource::VERSION
|
9
|
+
spec.authors = ["Mike Cannon"]
|
10
|
+
spec.email = ["michael.j.cannon@gmail.com"]
|
11
|
+
spec.summary = %q{Help display how something is used over time.}
|
12
|
+
spec.description = %Q{== README.md:\n#{IO.read 'README.md'}}
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_dependency "rails"
|
22
|
+
spec.add_dependency "coffee-rails"
|
23
|
+
spec.add_development_dependency "bundler", "~> 1.7"
|
24
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
25
|
+
end
|
metadata
ADDED
@@ -0,0 +1,178 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: scheduled_resource
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Mike Cannon
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-02-18 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: coffee-rails
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.7'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.7'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '10.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '10.0'
|
69
|
+
description: "== README.md:\n#ScheduledResource\n\nThis gem is for displaying how
|
70
|
+
things are used\nover time -- a schedule for a set of resources. It\nprovides a
|
71
|
+
way to describe what is being displayed,\nalong with utilities and protocols to
|
72
|
+
connect them:\n\n - Configuration (specification and management),\n - Query interfaces
|
73
|
+
(a REST-like API and internal protocols to query the models), and\n - A basic Rails
|
74
|
+
controller implementation.\n\nSo we have a way to configure the schedule, internal\nmethods
|
75
|
+
to generate the data, and a way to retrieve\ndata from the client. But the gem
|
76
|
+
is largely\nview-framework agnostic. We could use a variety of\nclient-side packages
|
77
|
+
or even more traditional Rails\nview templates to generate HTML.\n\nIn any case,
|
78
|
+
to get a the most from a display like this\nwe need some client-side code. The
|
79
|
+
gem includes\nclient-side modules to:\n\n - Manage <b>time and display geometries</b>
|
80
|
+
with \"infinite\" scroll along the time axis.\n - <b>Format display cells</b> in
|
81
|
+
ways specific to the resource models.\n - <b>Update text justification</b> as the
|
82
|
+
display is scrolled horizontally.\n\n\n## Configuration Management\n\nA **scheduled
|
83
|
+
resource** is something that can be\nused for one thing at a time. Say \"Rocky
|
84
|
+
& Bullwinkle\"\nis on channel 3 from 10am to 11am on Saturday. Then\n'channel 3'
|
85
|
+
is the <u>resource</u> and that showing of\nthe is a <u>resource-use block</u>.
|
86
|
+
\ Resources and \nuse-blocks are typically Rails models. Each resource\nand its
|
87
|
+
use-blocks get one row in the display. That\nrow has a label to the left with some
|
88
|
+
timespan visible\non the rest of the row.\n\nThe <b>ScheduledResource</b> class
|
89
|
+
manages resource and\nuse-block class names, id's and labels for a schedule.\nA
|
90
|
+
ScheduledResource instance ties together:\n\n 1. A resource class (eg TvStation),\n
|
91
|
+
2. An id (a channel number in this example), and\n 3. Strings and other assets that
|
92
|
+
will go into the DOM.\n\nThe id is used to\n - select a resource <em>instance</em>
|
93
|
+
and\n - select instances of the <em>resource use block</em> class (eg Program instances).\n\nThe
|
94
|
+
id <em>could</em> be a database id but more\noften is something a little more suited
|
95
|
+
to human use\nin the configuration. In any case it is used by model\nclass method\n<tt>(resource_use_block_class).get_all_blocks()</tt>\nto
|
96
|
+
select the right use-blocks for the resource.\nA resource class name and id are
|
97
|
+
are joined with\na '_' to form a tag that also serves as an id for the DOM.\n\nSomething
|
98
|
+
else you would expect see in a schedule\nwould be headers and labels -- perhaps
|
99
|
+
one row with\nthe date and another row with the hour. Headers and\nlabels also
|
100
|
+
fit the model of resources and use_blocks.\nBasic timezone-aware classes (ZTime*)
|
101
|
+
for those are\nincluded in this gem.\n\n\n### Configuration File\n\nThe schedule
|
102
|
+
configuration comes from\n<tt>config/resource_schedule.yml</tt> which has\nthree
|
103
|
+
top-level sections:\n\n- ResourceKinds: A hash where the key is a Resource and
|
104
|
+
the value is a UseBlock. (Both are class names),\n- Resources: A list where each
|
105
|
+
item is a Resource Class followed by one or more resource ids, and\n- visibleTime:
|
106
|
+
\ The visible timespan of the schedule in seconds.\n\nThe example file <tt>config/resource_schedule.yml</tt>\n(installed
|
107
|
+
when you run <tt>schedulize</tt>) should be\nenough to display a two-row schedule
|
108
|
+
with just the date\nabove and the hour below. Of course you can monkey-patch\nor
|
109
|
+
subclass these classes for your own needs.\n\n\n### The schedule API\n\nThe endpoint
|
110
|
+
uses parameters <tt>t1</tt> and\n<tt>t2</tt> to specify a time interval for the
|
111
|
+
request.\nA third parameter <tt>inc</tt> allows an initial time\nwindow to be expanded
|
112
|
+
without repeating blocks that\nspan those boundaries. The time parameters _plus
|
113
|
+
the\nconfigured resources_ define the data to be returned.\n\n\n### More About Configuration
|
114
|
+
Management\n\nOnce the configuration yaml is loaded that data is\nmaintained in
|
115
|
+
the session structure. Of course having\na single configuration file limits the
|
116
|
+
application's\nusefulness. A more general approach would be to\nhave a user model
|
117
|
+
with login and configuration would\nbe associated with the user.\n\n\n\n\n\n\n##
|
118
|
+
Installation\n\nAdd this line to your application's Gemfile:\n\n```ruby\ngem 'scheduled_resource'\n```\n\nAnd
|
119
|
+
then execute:\n\n $ bundle\n\nOr install it yourself as:\n\n $ gem install
|
120
|
+
scheduled_resource\n\n## Usage\n\nTo Do: Write usage instructions here\n\n## Contributing\n\n1.
|
121
|
+
Fork it ( https://github.com/emeyekayee/scheduled_resource/fork )\n2. Create your
|
122
|
+
feature branch (`git checkout -b my-new-feature`)\n3. Commit your changes (`git
|
123
|
+
commit -am 'Add some feature'`)\n4. Push to the branch (`git push origin my-new-feature`)\n5.
|
124
|
+
Create a new Pull Request\n"
|
125
|
+
email:
|
126
|
+
- michael.j.cannon@gmail.com
|
127
|
+
executables:
|
128
|
+
- schedulize
|
129
|
+
extensions: []
|
130
|
+
extra_rdoc_files: []
|
131
|
+
files:
|
132
|
+
- ".gitignore"
|
133
|
+
- Gemfile
|
134
|
+
- LICENSE
|
135
|
+
- README.md
|
136
|
+
- Rakefile
|
137
|
+
- bin/schedulize
|
138
|
+
- lib/assets/javascripts/blank.jpg
|
139
|
+
- lib/assets/javascripts/justify_tweaks.js
|
140
|
+
- lib/assets/javascripts/time_pix.js.coffee
|
141
|
+
- lib/assets/javascripts/use_block.js.coffee
|
142
|
+
- lib/assets/stylesheets/scheduled_resource.css.scss
|
143
|
+
- lib/scheduled_resource.rb
|
144
|
+
- lib/scheduled_resource/helper.rb
|
145
|
+
- lib/scheduled_resource/resource_use_block.rb
|
146
|
+
- lib/scheduled_resource/version.rb
|
147
|
+
- lib/z_time_header.rb
|
148
|
+
- lib/z_time_header_day.rb
|
149
|
+
- lib/z_time_header_hour.rb
|
150
|
+
- lib/z_time_label.rb
|
151
|
+
- lib/z_time_label_day.rb
|
152
|
+
- lib/z_time_label_hour.rb
|
153
|
+
- scheduled_resource.gemspec
|
154
|
+
homepage: ''
|
155
|
+
licenses:
|
156
|
+
- MIT
|
157
|
+
metadata: {}
|
158
|
+
post_install_message:
|
159
|
+
rdoc_options: []
|
160
|
+
require_paths:
|
161
|
+
- lib
|
162
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
168
|
+
requirements:
|
169
|
+
- - ">="
|
170
|
+
- !ruby/object:Gem::Version
|
171
|
+
version: '0'
|
172
|
+
requirements: []
|
173
|
+
rubyforge_project:
|
174
|
+
rubygems_version: 2.2.2
|
175
|
+
signing_key:
|
176
|
+
specification_version: 4
|
177
|
+
summary: Help display how something is used over time.
|
178
|
+
test_files: []
|