ngannotate-rails 0.15.4.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 803c3f028160ddb16f237bde0767253166634f9d
4
- data.tar.gz: 39f5bff0e5db3f5ee4b28938411c8dba6da5e4b5
3
+ metadata.gz: eac5144784fb8fa889cb253acee99066f1f1d5a6
4
+ data.tar.gz: 67c565e93929dbdd1610e1cd8d8a2703a9c64e0d
5
5
  SHA512:
6
- metadata.gz: ce2eea9455191842a3d04f6653d4711b0972336a00cfa24c1f637d936b560bd44a4b5b71eb257ce57f9feec9e7f29da9de8518a8b67a9c874c65082b5fb7889a
7
- data.tar.gz: 350ee5ef46ae826c1158bb469fdff542cf9062b742de27e1ec443c79d9d19ed65d59ef9721b8f1ec5fc17b93164023eb15687dc223cab87fec768f1e2e071e7e
6
+ metadata.gz: 85a5293de6c2b712eb1867156f57b3838196659a6f5cd94797363aa13dd11cb7cde5b295b5257b68abc27a5df467f7548edad1a34c3ea1542075f21dddf143da
7
+ data.tar.gz: 98d464f59d5b05ac2db869491166a36cc2ed369a8da6dccfc16aa685836497e4eb265be8f8c67768ef0723c3203b94d19641fbfa710c70d303fac3ac77263303
data/README.md CHANGED
@@ -21,31 +21,69 @@ Usage
21
21
 
22
22
  By default ng-annotate processing is disabled in development and test environments. Processing, however, can be enforced by specifying NG_FORCE=true option.
23
23
 
24
+ ### Environment options
24
25
 
25
- Options available as environment variables:
26
+ - NG_REGEXP
27
+ * regexp passed to ng-annoate
28
+ * see ng-annotate documentation
29
+ - NG_OPT
30
+ * comma separate list of "opt=value" key pairs passed as options to ng-annotate
31
+ * see ng-annotate documentation
32
+ - NG_FORCE
33
+ * force ng-annoate processing in development/test environment
26
34
 
27
- NG_REGEXP - regexp passed to ng-annoate
28
- see ng-annotate documentation
29
- NG_OPT - comma separate list of "opt=value" key pairs passed as options to ng-annotate
30
- see ng-annotate documentation
31
- NG_FORCE=true - force ng-annoate processing in development/test environment
35
+ For example,
32
36
 
33
- You can also define when ng-annotate should process with the `process` option to the environment configuration
37
+ # Test assets compile in rails development environment
38
+ # (assuming config/environments/development.rb is adjusted approriately)
39
+
40
+ # with rails 3.2
41
+ NG_FORCE=true RAILS_ENV=development bundle exec rake assets:clean assets:precompile
42
+
43
+ # with rails 4.1
44
+ NG_FORCE=true RAILS_ENV=development bundle exec rake assets:clobber assets:precompile
45
+
46
+
47
+ ### Rails configuration options
48
+
49
+ Defined in "config.ng_annotate"
50
+
51
+ - process
52
+ * Is annotation processing done for current environment (NG_FORCE=true takes precedence over this)
53
+ * default: true for production, false for development and test
54
+ - options
55
+ * Options for ngannotate (NG_OPT and NG_REGEXP env variables take precedence over this)
56
+ * default: {}
57
+ - paths
58
+ * Asset paths, which are handled. Paths in ignore_paths override this setting
59
+ Values can be [String | Regexp | Proc] instances
60
+ * default: [/.*/]
61
+ - ignore_paths
62
+ * List of asset paths, which are ignored from ngannotate processing.
63
+ Values can be [String | Regexp | Proc] instances
64
+ * default: ['/vendor/']
65
+
66
+ For example,
34
67
 
35
68
  config/environments/development.rb
36
69
 
37
70
  Rails.application.configure do
38
71
  ...
39
72
  config.ng_annotate.process = true
73
+ config.ng_annotate.options = {
74
+ key1: 'value',
75
+ regexp: '...',
76
+ }
77
+ config.ng_annotate.paths = [
78
+ Rails.root.to_s,
79
+ ]
80
+ config.ng_annotate.ignore_paths = [
81
+ '/vendor/',
82
+ '/some/path/'
83
+ ]
40
84
  ...
41
85
  end
42
86
 
43
- Examples,
44
-
45
- # Test assets compile in rails development environment
46
- # (assuming config/environments/development.rb is adjusted approriately)
47
- NG_FORCE=true RAILS_ENV=development bundle exec rake assets:clean assets:precompile
48
-
49
87
 
50
88
  Testing assets locally
51
89
  ----------------------
@@ -76,18 +114,23 @@ precompile & start server
76
114
  Versioning
77
115
  ----------
78
116
 
79
- The ngannotate-rails version number mirrors the version number for the version of ng-annotate that is bundled with it.
80
- For minor patch releases, when ng-annotate version is not changing, 4th digit is used (For example, "0.9.6.1").
81
- Every released version is tagged with tag "v[VERSION]".
117
+ Originally version numbering of this gem followed ng-annoate. However, in order to improve
118
+ handling of possibly compatibility breaking fixes and improvements, version schema is now
119
+ separated from ng-annotate. Instead of matching versions, changelog in
120
+ [wiki](https://github.com/kikonen/ngannotate-rails/wiki) will indicate which is currently matching
121
+ ng-annotate version.
122
+
123
+ Every released version is tagged with tag "vX.Y.Z".
82
124
 
83
125
  Release Process
84
126
  ---------------
85
127
 
86
- For ngannotate update:
128
+ For ngannotate update (or any other improvements/fixes):
87
129
 
88
130
  ```bash
89
131
  git checkout master
90
132
  git pull
133
+ # if ngannotate update
91
134
  rake ngannotate:build
92
135
  git citool
93
136
  # check that result makes sense and if so,
@@ -99,11 +142,6 @@ gem build ngannotate-rails.gemspec
99
142
  gem push ngannotate-rails-X.Y.Z.gems
100
143
  ```
101
144
 
102
- For internal fixes:
103
-
104
- Similar except no ngannotate:build and new version is previous plus fourth digit for patch level (see Versioning).
105
-
106
-
107
145
  Help
108
146
  ----
109
147
 
@@ -1,57 +1,17 @@
1
1
  require 'execjs'
2
2
  require 'sprockets/processor'
3
+ require_relative 'processor_common'
3
4
 
4
5
  module Ngannotate
5
6
  class Processor < Sprockets::Processor
6
- def self.name
7
- 'Ngannotate::Processor'
8
- end
9
-
10
- def prepare
11
- return if skip
12
- ngannotate_source = File.open(File.join(File.dirname(__FILE__), '../../vendor/ngannotate.js')).read
13
- @context = ExecJS.compile "window = {};" + ngannotate_source
14
- end
15
-
16
- #
17
- # To allow testing assets compile in development environment
18
- #
19
- # To explicitly force assets compile in development environment
20
- # NG_FORCE=true RAILS_ENV=development bundle exec rake assets:clean assets:precompile
21
- # or add to environments/development.rb
22
- # config.ng_annotate.process = true
23
- #
24
- def force
25
- ENV['NG_FORCE'] == 'true'
26
- end
27
-
28
- #
29
- # Skip processing in environments where it does not make sense.
30
- # Override by NG_FORCE=true env variable
31
- #
32
- def skip
33
- !force && !::Rails.configuration.ng_annotate.process
34
- end
7
+ include ProcessorCommon
35
8
 
36
9
  def evaluate(context, locals)
37
- return data if skip
38
-
39
- opt = { add: true }.merge!(parse_opt)
40
- r = @context.call 'window.annotate', data, opt
41
- r['src']
42
- end
43
-
44
- def parse_opt
45
- opt = {}
46
- opt_str = ENV['NG_OPT']
47
- if opt_str
48
- opt = Hash[opt_str.split(',').map { |e| e.split('=') }]
49
- opt.symbolize_keys!
50
- end
51
- if ENV['NG_REGEXP']
52
- opt[:regexp] = ENV['NG_REGEXP']
53
- end
54
- opt
10
+ input = {
11
+ filename: @file,
12
+ data: data,
13
+ }
14
+ process_data(input)
55
15
  end
56
16
  end
57
17
  end
@@ -1,65 +1,20 @@
1
1
  require 'execjs'
2
+ require_relative 'processor_common'
2
3
 
3
4
  module Ngannotate
4
5
  class Processor
6
+ include ProcessorCommon
7
+
5
8
  def self.instance
6
9
  @instance ||= new
7
10
  end
8
11
 
9
- def self.name
10
- 'Ngannotate::Processor'
11
- end
12
-
13
12
  def self.call(input)
14
13
  instance.call(input)
15
14
  end
16
15
 
17
16
  def call(input)
18
- data = input[:data]
19
- return data if skip
20
- prepare
21
- opt = { add: true }.merge!(parse_opt)
22
- r = @context.call 'window.annotate', data, opt
23
- r['src']
24
- end
25
-
26
- def prepare
27
- return if skip
28
- ngannotate_source = File.open(File.join(File.dirname(__FILE__), '../../vendor/ngannotate.js')).read
29
- @context = ExecJS.compile "window = {};" + ngannotate_source
30
- end
31
-
32
- #
33
- # To allow testing assets compile in development environment
34
- #
35
- # To explicitly force assets compile in development environment
36
- # NG_FORCE=true RAILS_ENV=development bundle exec rake assets:clean assets:precompile
37
- # or add to environments/development.rb
38
- # config.ng_annotate.process = true
39
- #
40
- def force
41
- ENV['NG_FORCE'] == 'true'
42
- end
43
-
44
- #
45
- # Skip processing in environments where it does not make sense.
46
- # Override by NG_FORCE=true env variable
47
- #
48
- def skip
49
- !force && !::Rails.configuration.ng_annotate.process
50
- end
51
-
52
- def parse_opt
53
- opt = {}
54
- opt_str = ENV['NG_OPT']
55
- if opt_str
56
- opt = Hash[opt_str.split(',').map { |e| e.split('=') }]
57
- opt.symbolize_keys!
58
- end
59
- if ENV['NG_REGEXP']
60
- opt[:regexp] = ENV['NG_REGEXP']
61
- end
62
- opt
17
+ process_data(input)
63
18
  end
64
19
  end
65
20
  end
@@ -0,0 +1,113 @@
1
+ module Ngannotate
2
+ module ProcessorCommon
3
+ def self.included(base)
4
+ base.extend ClassMethods
5
+ end
6
+
7
+ module ClassMethods
8
+ def name
9
+ 'Ngannotate::Processor'
10
+ end
11
+
12
+ def shared_exec_context
13
+ @shared_exec_context ||=
14
+ begin
15
+ ::Rails.logger.info "ng-prepare"
16
+ ngannotate_source = File.open(File.expand_path('../../../vendor/ngannotate.js', __FILE__)).read
17
+ ExecJS.compile "window = {};" + ngannotate_source
18
+ end
19
+ end
20
+ end
21
+
22
+ def logger
23
+ ::Rails.logger
24
+ end
25
+
26
+ def process_data(input)
27
+ data = input[:data]
28
+ file = input[:filename]
29
+
30
+ handle = need_process?(input)
31
+ state = handle ? :process : (ignore_file?(input) ? :ignore : :skip)
32
+ logger.info "ng-#{state}: #{file}"
33
+ return data unless handle
34
+
35
+ opt = { add: true }.merge!(parse_ngannotate_options)
36
+ r = exec_context.call 'window.annotate', data, opt
37
+ r['src']
38
+ end
39
+
40
+ def exec_context
41
+ @exec_context ||= self.class.shared_exec_context
42
+ end
43
+
44
+ def config
45
+ ::Rails.configuration.ng_annotate
46
+ end
47
+
48
+ #
49
+ # Is processing done for current file. This is determined by 4 checks
50
+ #
51
+ # - config.paths
52
+ # - config.ignore_paths
53
+ # - config.process
54
+ # - NG_FORCE=true env option
55
+ #
56
+ def need_process?(input)
57
+ force_process = ENV['NG_FORCE'] == 'true'
58
+ process_file?(input) && (force_process || config.process)
59
+ end
60
+
61
+ #
62
+ # @return true if current file should be processed
63
+ #
64
+ def process_file?(input)
65
+ !ignore_file?(input) && match_input(config.paths, input)
66
+ end
67
+
68
+ #
69
+ # @return true if current file is ignored
70
+ #
71
+ def ignore_file?(input)
72
+ match_input(config.ignore_paths, input)
73
+ end
74
+
75
+ #
76
+ # @return truthy value if input matches any of paths
77
+ #
78
+ def match_input(paths, input)
79
+ file = input[:filename]
80
+ paths.any? do |p|
81
+ if p.is_a? Proc
82
+ p.call(file)
83
+ elsif p.is_a? Regexp
84
+ p.match(file)
85
+ else
86
+ file.index(p)
87
+ end
88
+ end
89
+ end
90
+
91
+ #
92
+ # Parse extra options for ngannotate
93
+ #
94
+ def parse_ngannotate_options
95
+ opt = config.options.clone
96
+
97
+ if ENV['NG_OPT']
98
+ opt_str = ENV['NG_OPT']
99
+ if opt_str
100
+ opt = Hash[opt_str.split(',').map { |e| e.split('=') }]
101
+ opt.symbolize_keys!
102
+ end
103
+ end
104
+
105
+ regexp = ENV['NG_REGEXP']
106
+ if regexp
107
+ opt[:regexp] = regexp
108
+ end
109
+
110
+ opt
111
+ end
112
+ end
113
+ end
@@ -8,11 +8,27 @@ end
8
8
  module Ngannotate
9
9
  module Rails
10
10
  class Railtie < ::Rails::Railtie
11
- config.ng_annotate = ActiveSupport::OrderedOptions.new
11
+ config.before_configuration do |app|
12
+ config.ng_annotate = ActiveSupport::OrderedOptions.new
13
+ ng = config.ng_annotate
12
14
 
13
- # Establish static configuration defaults
14
- # Disabled by default in development and test environments
15
- config.ng_annotate.process = !::Rails.env.development? && !::Rails.env.test?
15
+ # Establish static configuration defaults
16
+
17
+ # @see ngannotate
18
+ ng.options = {}
19
+
20
+ # Disabled by default in development and test environments
21
+ ng.process = !::Rails.env.development? && !::Rails.env.test?
22
+
23
+ # comma separate list of paths to only handle for annotation
24
+ # - ignore_paths entries are filtered out from this
25
+ ng.paths = [/.*/]
26
+
27
+ # comma separate list of paths to ignore from annotation
28
+ ng.ignore_paths = [
29
+ '/vendor/',
30
+ ]
31
+ end
16
32
 
17
33
  initializer "ngannotate-rails.add_ngannotate_postprocessor", :group => :all do |app|
18
34
  app.assets.register_postprocessor 'application/javascript', Ngannotate::Processor
@@ -1,5 +1,5 @@
1
1
  module Ngannotate
2
2
  module Rails
3
- VERSION = "0.15.4.1"
3
+ VERSION = "1.0.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ngannotate-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.4.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kari Ikonen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-15 00:00:00.000000000 Z
11
+ date: 2015-04-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -84,6 +84,7 @@ files:
84
84
  - lib/ngannotate.rb
85
85
  - lib/ngannotate/processor.rb
86
86
  - lib/ngannotate/processor3.rb
87
+ - lib/ngannotate/processor_common.rb
87
88
  - lib/ngannotate/rails.rb
88
89
  - lib/ngannotate/rails/railtie.rb
89
90
  - lib/ngannotate/rails/version.rb