lyp 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,37 @@
1
+ require 'yaml'
2
+
3
+ module Lyp::Settings
4
+ class << self
5
+ def get
6
+ YAML.load(IO.read(Lyp.settings_file)) rescue {}
7
+ end
8
+
9
+ def set(o)
10
+ File.open(Lyp.settings_file, 'w+') {|f| f << YAML.dump(o)}
11
+ end
12
+
13
+ def [](path)
14
+ h = get
15
+ while path =~ /^([^\/]+)\/(.+)$/
16
+ h = h[$1.to_sym] ||= {}
17
+ path = $2
18
+ end
19
+
20
+ h[path.to_sym]
21
+ end
22
+
23
+ def []=(path, value)
24
+ h = settings = get
25
+ while path =~ /^([^\/]+)\/(.+)$/
26
+ h = h[$1.to_sym] ||= {}
27
+ path = $2
28
+ end
29
+
30
+ h[path.to_sym] = value
31
+
32
+ set(settings)
33
+
34
+ value
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,59 @@
1
+ module Lyp
2
+ class Template
3
+ EMIT_DELIMITER = '`'.freeze
4
+ EMIT_RE = /#{EMIT_DELIMITER}(((?!#{EMIT_DELIMITER}).)*)#{EMIT_DELIMITER}/m
5
+
6
+ INTERPOLATION_START = "{{".freeze
7
+ INTERPOLATION_END = "}}".freeze
8
+ INTERPOLATION_RE = /#{INTERPOLATION_START}((?:(?!#{INTERPOLATION_END}).)*)#{INTERPOLATION_END}/m
9
+
10
+ ESCAPED_QUOTE = '\\"'.freeze
11
+ QUOTE = '"'.freeze
12
+
13
+ # From the metaid gem
14
+ def metaclass; class << self; self; end; end
15
+
16
+ def initialize(templ)
17
+ templ = templ.gsub(EMIT_RE) {|m| convert_literal($1)}
18
+ method_str = <<EOF
19
+ define_method(:render) do |_ = {}, env = {}|
20
+ __buffer__ = env[:buffer] ||= ''
21
+ __emit__ = env[:emit] ||= lambda {|s| __buffer__ << s}
22
+ __render_l__ = env[:render] ||= lambda {|n, o| Template.render(n, o, env)}
23
+ metaclass.instance_eval "define_method(:__render__) {|n, o| __render_l__[n, o]}"
24
+ begin
25
+ #{templ}
26
+ end
27
+ __buffer__
28
+ end
29
+ EOF
30
+
31
+ metaclass.instance_eval method_str
32
+ end
33
+
34
+ def convert_literal(s)
35
+ # look for interpolated values, wrap them with #{}
36
+ s = s.inspect.gsub(INTERPOLATION_RE) do
37
+ code = $1.gsub(ESCAPED_QUOTE, QUOTE)
38
+ "\#{#{code}}"
39
+ end
40
+ "__emit__[#{s}]"
41
+ end
42
+
43
+ # Global template registry
44
+ @@templates = {}
45
+
46
+ def self.load_templates(path)
47
+ Dir["#{path}/*.rb"].each {|fn| set(File.basename(fn), IO.read(fn))}
48
+ end
49
+
50
+ def self.set(name, templ)
51
+ @@templates[name.to_sym] = new(templ)
52
+ end
53
+
54
+ def self.render(name, arg = {}, env = {})
55
+ raise unless @@templates[name.to_sym]
56
+ @@templates[name.to_sym].render(arg, env)
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,58 @@
1
+ # Expect _ to be a hash of the form:
2
+ # {
3
+ # user_file: <path>
4
+ # package_paths: {
5
+ # <specifier> => <package path>
6
+ # ...
7
+ # }
8
+ # }
9
+
10
+ # define mapping of requested packages to actual file names
11
+ # package-refs is a hash table with an entry for each package reference made
12
+ # using \require, either in user files or in package files (for transitive dependencies).
13
+
14
+ `\version "2.19.31"
15
+
16
+ #(begin
17
+ (define package-refs (make-hash-table))`
18
+
19
+ _[:package_paths].each do |spec, path|
20
+ `
21
+ (hash-set! package-refs "{{spec}}" "{{path}}")`
22
+ end
23
+
24
+ # package-loaded is hash table used for tracking loaded packages, so each
25
+ # package is loaded only once.
26
+ `
27
+ (define package-loaded (make-hash-table))
28
+ )
29
+ `
30
+
31
+ # define the \require command
32
+ `
33
+ require = #(define-void-function (parser location package)(string?)
34
+ (let*
35
+ (
36
+ (path (hash-ref package-refs package))
37
+ (loaded? (hash-ref package-loaded path))
38
+ (package-dir (dirname path))
39
+ )
40
+ (if (and path (not loaded?)) (begin
41
+ (if (not (file-exists? path)) (
42
+ (ly:error "Failed to load package ~a (file not found ~a)" package path)
43
+ ))
44
+ (ly:debug "Loaded package ~a at ~a" package package-dir)
45
+ (hash-set! package-loaded path #t)
46
+ #{ \include #path #}
47
+ ))
48
+ )
49
+ )
50
+ `
51
+
52
+ # load the user's file
53
+
54
+ `
55
+ #(ly:debug "package loader is ready")
56
+ #(ly:set-option 'relative-includes #t)
57
+ \include "{{_[:user_file]}}"
58
+ `
@@ -0,0 +1,3 @@
1
+ module Lyp
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,15 @@
1
+ require 'tempfile'
2
+
3
+ module Lyp
4
+ def self.wrap(fn)
5
+ r = Lyp::Resolver.new(fn).resolve_package_dependencies
6
+
7
+ unless r[:package_paths].empty?
8
+ fn = Tempfile.new('lyp-deps-wrapper.ly').path
9
+
10
+ t = Lyp::Template.new(IO.read(File.expand_path('templates/deps_wrapper.rb', File.dirname(__FILE__))))
11
+ File.open(fn, 'w+') {|f| f << t.render(r)}
12
+ end
13
+ fn
14
+ end
15
+ end
metadata ADDED
@@ -0,0 +1,163 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lyp
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Sharon Rosner
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-01-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: highline
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.7'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.7.8
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '1.7'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.7.8
33
+ - !ruby/object:Gem::Dependency
34
+ name: ruby-progressbar
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.7'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 1.7.5
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '1.7'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 1.7.5
53
+ - !ruby/object:Gem::Dependency
54
+ name: commander
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '4.3'
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 4.3.5
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '4.3'
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 4.3.5
73
+ - !ruby/object:Gem::Dependency
74
+ name: nokogiri
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: '1.6'
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 1.6.7
83
+ type: :runtime
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.6'
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: 1.6.7
93
+ - !ruby/object:Gem::Dependency
94
+ name: httpclient
95
+ requirement: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - "~>"
98
+ - !ruby/object:Gem::Version
99
+ version: '2.7'
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: 2.7.1
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '2.7'
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: 2.7.1
113
+ description: Lyp is a tool for managing lilypond versions and lilypond packages
114
+ email: ciconia@gmail.com
115
+ executables:
116
+ - lyp
117
+ - lilypond
118
+ extensions: []
119
+ extra_rdoc_files: []
120
+ files:
121
+ - LICENSE
122
+ - README.md
123
+ - bin/lilypond
124
+ - bin/lyp
125
+ - lib/lyp.rb
126
+ - lib/lyp/cli.rb
127
+ - lib/lyp/cli/commands.rb
128
+ - lib/lyp/directories.rb
129
+ - lib/lyp/env.rb
130
+ - lib/lyp/lilypond.rb
131
+ - lib/lyp/output.rb
132
+ - lib/lyp/package.rb
133
+ - lib/lyp/resolver.rb
134
+ - lib/lyp/settings.rb
135
+ - lib/lyp/template.rb
136
+ - lib/lyp/templates/deps_wrapper.rb
137
+ - lib/lyp/version.rb
138
+ - lib/lyp/wrapper.rb
139
+ homepage: http://github.com/ciconia/lyp
140
+ licenses:
141
+ - MIT
142
+ metadata: {}
143
+ post_install_message:
144
+ rdoc_options: []
145
+ require_paths:
146
+ - lib
147
+ required_ruby_version: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ required_rubygems_version: !ruby/object:Gem::Requirement
153
+ requirements:
154
+ - - ">="
155
+ - !ruby/object:Gem::Version
156
+ version: '0'
157
+ requirements: []
158
+ rubyforge_project:
159
+ rubygems_version: 2.4.8
160
+ signing_key:
161
+ specification_version: 4
162
+ summary: Lyp is a package manager for lilypond
163
+ test_files: []