halation 0.2.1 → 0.3.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.
@@ -9,8 +9,12 @@ module Halation
9
9
  attr_reader :artist
10
10
  # Copyright for the roll of film.
11
11
  attr_reader :copyright
12
- # Default date for all frames in ISO 8601 format (optional).
13
- attr_reader :date
12
+ # Default date a frame was captured for all frames,
13
+ # in ISO 8601 format (optional).
14
+ attr_reader :date_captured
15
+ # Default date a frame was scanned (digitized) for all frames,
16
+ # in ISO 8601 format (optional).
17
+ attr_reader :date_scanned
14
18
  # Tag of the cameara used.
15
19
  attr_reader :camera
16
20
  # Tag of the default lens used (optional).
@@ -28,7 +32,8 @@ module Halation
28
32
  def reset
29
33
  @artist = nil
30
34
  @copyright = nil
31
- @date = nil
35
+ @date_captured = nil
36
+ @date_scanned = nil
32
37
  @camera = nil
33
38
  @lens = nil
34
39
  @iso = nil
@@ -42,7 +47,8 @@ module Halation
42
47
  YAML.load_file(file_path).tap do |roll|
43
48
  @artist = Coerce.string(roll["artist"])
44
49
  @copyright = Coerce.string(roll["copyright"])
45
- @date = Coerce.date(roll["date"])
50
+ @date_captured = Coerce.date(roll["date_captured"])
51
+ @date_scanned = Coerce.date(roll["date_scanned"])
46
52
  @camera = Coerce.string(roll["camera"])
47
53
  @lens = Coerce.string(roll["lens"])
48
54
  @iso = Coerce.integer(roll["iso"])
@@ -6,8 +6,10 @@ module Halation
6
6
  class Frame
7
7
  # Frame number.
8
8
  attr_reader :number
9
- # Date the frame was captured in ISO 8601 format.
10
- attr_reader :date
9
+ # Date the frame was captured, in ISO 8601 format.
10
+ attr_reader :date_captured
11
+ # Date the frame was scanned (digitized), in ISO 8601 format.
12
+ attr_reader :date_scanned
11
13
  # Tag of the lens used.
12
14
  attr_reader :lens
13
15
  # Focal length of the lens, if not specified by the lens profile
@@ -33,7 +35,8 @@ module Halation
33
35
 
34
36
  def initialize(yaml)
35
37
  @number = Coerce.integer(yaml["number"])
36
- @date = Coerce.date(yaml["date"])
38
+ @date_captured = Coerce.date(yaml["date_captured"])
39
+ @date_scanned = Coerce.date(yaml["date_scanned"])
37
40
  @lens = Coerce.string(yaml["lens"])
38
41
  @focal_length = Coerce.integer(yaml["focal_length"])
39
42
  @shutter = Coerce.string(yaml["shutter"])
@@ -21,73 +21,78 @@ module Halation
21
21
 
22
22
  options = {}
23
23
 
24
- OptionParser.new { |opts|
25
- opts.banner = "Usage: halation [options]"
24
+ OptionParser.new { |op|
25
+ op.banner = "Usage: halation [options]"
26
26
 
27
- opts.on("-c", "--config=PATH", String, "Config file path") do |config_path|
27
+ op.on("-c", "--config=PATH", String, "Config file path") do |config_path|
28
28
  options[:config_path] = config_path
29
29
  end
30
30
 
31
- opts.on("--dry", "Dry run") do
31
+ op.on("--dry", "Dry run") do
32
32
  options[:dry_run] = true
33
33
  # TODO: Implement
34
34
  raise NotImplementedError, "Dry run option is not yet implemented."
35
35
  end
36
36
 
37
- opts.on("-h", "--help", "Print this help") do
38
- output_stream.puts opts
37
+ op.on("-h", "--help", "Print this help") do
38
+ output_stream.puts op
39
39
  run_engine = false
40
40
  exit unless skip_exit
41
41
  end
42
42
 
43
- opts.on("--new-config", "Generate a new config file") do |path|
43
+ op.on("--new-config", "Generate a new config file") do |path|
44
44
  # TODO: Implement
45
45
  raise NotImplementedError, "Generate config option is not yet implemented."
46
46
  run_engine = false
47
47
  exit unless skip_exit
48
48
  end
49
49
 
50
- opts.on("--new-roll", "Generate a new roll.yml file") do
51
- generate_new_roll
50
+ op.on("--new-roll", "Generate a new roll.yml file") do
51
+ generate_new_roll(opts)
52
52
  run_engine = false
53
53
  exit unless skip_exit
54
54
  end
55
55
 
56
- opts.on("-p", "--print-config", "Print the configuration settings") do
56
+ op.on("-p", "--print-config", "Print the configuration settings") do
57
57
  # TODO: Implement
58
58
  raise NotImplementedError, "Print config option is not yet implemented."
59
59
  run_engine = false
60
60
  exit unless skip_exit
61
61
  end
62
62
 
63
- opts.on("-r", "--recursive", "Traverse into subdirectories") do
63
+ op.on("-r", "--recursive", "Traverse into subdirectories") do
64
64
  # TODO: Implement
65
65
  raise NotImplementedError, "Recursive option is not yet implemented."
66
66
  end
67
67
 
68
- opts.on("--silent", "Suppress messages to stdout.") do
68
+ op.on("--silent", "Suppress messages to stdout.") do
69
69
  options[:silent] = true
70
70
  end
71
71
 
72
- opts.on("-v", "--version", "Print the version information") do
72
+ op.on("-v", "--version", "Print the version information") do
73
73
  output_stream.puts "halation #{Halation::VERSION}"
74
74
  run_engine = false
75
75
  exit unless skip_exit
76
76
  end
77
77
  }.parse!(args)
78
-
78
+
79
79
  Halation::Engine.run(options) if run_engine
80
80
  end
81
81
 
82
82
  # Generate a new roll.yml file.
83
83
  # Copies "~/.halation/templates/roll.yml" if it exists, otherwise it uses
84
84
  # a default template.
85
- def self.generate_new_roll
85
+ #
86
+ # @option opts [Boolean] :skip_exit (false)
87
+ # Don't exit the program after calling a handler that would normally exit.
88
+ # Used for unit testing.
89
+ def self.generate_new_roll(opts = {})
90
+ skip_exit = !!opts[:skip_exit]
86
91
  roll_path = "roll.yml"
87
92
 
88
93
  if File.exists?(roll_path)
89
- output_stream.puts "A roll.yml file already exists in this directory."
90
- return
94
+ STDERR.puts "A roll.yml file already exists in this directory."
95
+ exit 1 unless skip_exit
91
96
  end
92
97
 
93
98
  # TODO: Make this configurable from config.yml
@@ -106,9 +111,11 @@ module Halation
106
111
 
107
112
  # @return [String] roll.yml default content
108
113
  def self.new_roll_content
114
+ today = Time.now.strftime("%Y-%m-%d")
109
115
  output = <<YAML
110
116
  ---
111
- date: "2016-01-01"
117
+ date_captured: "#{today}"
118
+ date_scanned: "#{today}"
112
119
  camera: "rz67"
113
120
  lens: 110
114
121
  iso: 100
@@ -1,4 +1,4 @@
1
1
  module Halation
2
2
  # Current version of Halation.
3
- VERSION = "0.2.1"
3
+ VERSION = "0.3.0"
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: halation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex McLain
@@ -92,28 +92,28 @@ dependencies:
92
92
  requirements:
93
93
  - - "~>"
94
94
  - !ruby/object:Gem::Version
95
- version: '3.4'
95
+ version: '3.9'
96
96
  type: :development
97
97
  prerelease: false
98
98
  version_requirements: !ruby/object:Gem::Requirement
99
99
  requirements:
100
100
  - - "~>"
101
101
  - !ruby/object:Gem::Version
102
- version: '3.4'
102
+ version: '3.9'
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: rspec-its
105
105
  requirement: !ruby/object:Gem::Requirement
106
106
  requirements:
107
107
  - - "~>"
108
108
  - !ruby/object:Gem::Version
109
- version: '1.2'
109
+ version: '1.3'
110
110
  type: :development
111
111
  prerelease: false
112
112
  version_requirements: !ruby/object:Gem::Requirement
113
113
  requirements:
114
114
  - - "~>"
115
115
  - !ruby/object:Gem::Version
116
- version: '1.2'
116
+ version: '1.3'
117
117
  - !ruby/object:Gem::Dependency
118
118
  name: fivemat
119
119
  requirement: !ruby/object:Gem::Requirement